
# load required libraries
library(survival)
library(Design)
library(quantreg)
library(dr)



# source code
source("LST-Tobit-Func.R")



# data generation
set.seed(100)
n<-200; p<-5; cprop<-0.5; sigma<-1; censlimit<-sqrt(3)

X<-matrix(runif(n*p, min=-sqrt(3), max=sqrt(3)), nrow=n)
b.true<-c(0, 1, 2, 3, 4)/sqrt(30)
e<-rnorm(n) * sigma
b0<-qnorm(cprop) * -sigma 
bx<-as.vector(X %*% b.true)
y0<-b0 + bx + e 

censorval<-runif(n, min=-censlimit, max=censlimit)
delta<-rep(1, n); delta[y0 < censorval]<-0
y<-y0; y[y0 < censorval]<-censorval[y0 < censorval]



# tobit model fitting
out.mle <-tobit.mle(X, y, delta, intercept=T, normalize=T)
out.mle$b.est<-matrix(out.mle$b.est[-1], ncol=1); out.mle$b.se<-matrix(out.mle$b.se[-1], ncol=1)
abs(cor(X%*%b.true, X%*%out.mle$b.est))


out.bj  <-tobit.bj(X, y, delta, intercept=T, normalize=T)
out.bj$b.est<-matrix(out.bj$b.est[-1], ncol=1); out.bj$b.se<-matrix(out.bj$b.se[-1], ncol=1)
abs(cor(X%*%b.true, X%*%out.bj$b.est))


out.lav <-tobit.lav(X, y, censorval, intercept=T, normalize=T, init.given=F, init=NULL)
out.lav$b.est<-matrix(out.lav$b.est[-1], ncol=1)
abs(cor(X%*%b.true, X%*%out.lav$b.est))


out.cqr <-tobit.3stepcqr(X, y, censorval, intercept=T, normalize=T, iter=2)
out.cqr$b.est<-matrix(out.cqr$b.est[-1], ncol=1)
abs(cor(X%*%b.true, X%*%out.cqr$b.est))


out.wade<-tobit.wade(X, y, h=hopt(X,y), normalize=T)
bx<-as.vector(X %*% out.wade$b.est)
out.wade$b.est<-matrix(out.wade$b.est * sign(bicor(bx[delta==1], y[delta==1])), ncol=1)
abs(cor(X%*%b.true, X%*%out.wade$b.est))


out.sir <-tobit.sir(X, y, delta, nslices=5, d=1, test=F)
bx<-as.vector(X %*% out.sir$b.est)
out.sir$b.est<-matrix(out.sir$b.est * sign(bicor(bx[delta==1], y[delta==1])), ncol=1)
abs(cor(X%*%b.true, X%*%out.sir$b.est))
