NPMLE<-function(bb,HZ,SX,Z,Delta){
nn = length(Delta)
SX2 = sort(unique(SX[Delta==1]))
indx = match(SX,SX2)
HZ = exp(HZ);
HZN = HZ[indx]; HZN[is.na(HZN)] = 1
HZsum = cumsum(HZ); HZsum = c(0,HZsum)
tmp = outer(SX,SX2,FUN = ">=")
indx = apply(tmp,1,sum)
HZsumN = HZsum[indx+1]
Zbb = as.numeric(Z%*%bb)
l = NULL
l$likelihood = mean(Zbb - Delta*log(HZN) + (1+Delta)*log(HZsumN+exp(-Zbb)))
lbb = apply(Z - matrix((1+Delta)*exp(-Zbb)/{HZsumN+exp(-Zbb)},nrow=nn,ncol=length(bb))*Z,2,mean)
lHZ = 1/nn-apply(tmp*VTM(HZ,nn)*(1+Delta)/{HZsumN+exp(-Zbb)},2,mean)
l$gradient = c(lbb,lHZ)
return(l)
}
NULL
NPMLE.est<-function(bb.init,HZ.init,SX,Z,Delta){
lHZ = length(unique(SX[Delta==1]))
SX.grid = sort(unique(SX[Delta==1]))
parinit = c(bb.init,HZ.init)
lbb = length(bb.init)
aa = optim(par = parinit,fn = function(x) NPMLE(x[1:lbb],x[-c(1:lbb)],SX,Z,Delta)$likelihood,
gr = function(x) NPMLE(x[1:lbb],x[-c(1:lbb)],SX,Z,Delta)$gradient,
method = "CG",control = list(maxit=10000))
bb = aa$par[1:lbb]
HZ = log(cumsum(exp(aa$par[-c(1:lbb)])))
HZ = cbind(SX.grid,HZ)
list(bb = bb, bbt = HZ, convergence = aa$convergence)
}
NULL
BrierScore.NPMLE2<-function(tt=NULL,bb,bbt,ST,SX,SC,Delta,Z,tseq,GX=NULL,Gt=NULL){
if(is.null(GX)&is.null(Gt)){
G_fit = survfit(Surv(SX,1-Delta)~1,type="kaplan-meier")
GX = sapply(SX,function(s){
tmp2 = G_fit$time<=s
if(sum(tmp2)==0){
1
} else{
G_fit$surv[max(which(tmp2))]
}
})
Gt = sapply(tseq,function(s){
tmp2 = G_fit$time<=s
if(sum(tmp2)==0){
1
} else{
G_fit$surv[max(which(tmp2))]
}
})
}
if(is.null(tt)) tt = tseq[Gt!=0]
tmp = sapply(tt,function(t) {SX<=t}*Delta/GX)
tmp[is.na(tmp)] = 0
wt = tmp + sapply(tt,function(t) {SX>t}/Gt[tseq==t])
tmp = stepfun(bbt[-1,1],bbt[,2])
tmp = tmp(tseq)
tmpp = apply(outer(SC,tseq,FUN=function(x,y) abs(x-y)),1,which.min)
tmpp = tmp[tmpp]
tmpp = outer(tmpp,tmp,FUN="pmin")
tmp2 = outer(ST,tseq,FUN="<=")*Delta # 1(T<= min(t,C))
aa = apply({tmp2[,tseq%in%tt]-g_fun(as.numeric(Z%*%bb)+tmpp[,tseq%in%tt])}^2*wt,2,mean)
return(cbind(tt,aa))
}
NULL
NPMLE.Pred<-function(bb,bbt,ST,SX,SC,Delta,Z,tseq,t.grid,GX,Gt,endF){
Cstat.CV = Est.Cval(cbind(SX,Delta,Z%*%bb), tau = endF,nofit = TRUE)$Dhat
## new definition
BrierS.CV = BrierScore.NPMLE2(tseq[tseq<=endF],bb,bbt,
ST,SX,SC,Delta,Z,tseq,GX,Gt)[,2]
BrierS.CV = mean(BrierS.CV)
CB = c(Cstat.CV,BrierS.CV)
names(CB) = c("Cstat","BrierSc.Adj")
return(CB)
}
NULL
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.