ttt.df<-data.frame(time=ttt,status=ttt.status) parameters(ttt.df)<-list(alpha=.3,gam.par=1) # - Weibull neg.-log-likelh with gradient and hessian I weib.nllh2<-function(status,t.time, alpha,gam.par) { DD<-sum(status) t.time.dead<-t.time[status==1] value<- -DD*log(alpha) -DD*log(gam.par) - (gam.par-1)*sum(log(t.time.dead)) + alpha*sum(t.time^gam.par) attr(value,"gradient") <- c( -DD/alpha + sum(t.time^gam.par), -DD/gam.par - sum(log(t.time.dead)) + alpha*sum(log(t.time)*t.time^gam.par)) attr(value,"hessian") <- rbind( c(DD/(alpha^2),sum(log(t.time)*t.time^gam.par)), c(sum(log(t.time)*t.time^gam.par), DD/(gam.par^2) + alpha*sum( (log(t.time))^2 * t.time^gam.par ))) value } w.fit2 <- ms(~weib.nllh2(status=ttt.df$status, t.time=ttt.df$time,alpha,gam.par), start=list(alpha=.1,gam.par=1.0), data=ttt.df) w.fit2 value: 16.87063 parameters: alpha gam.par 0.02871909 1.864433 w.hess<-w.fit2$hessian w.hess [,1] [,2] [1,] 7274.6137 0.00000 [2,] 381.6464 22.67202 w.hess[1,2]<-w.hess[2,1] # set up diag. element since lower diag. # returned for the hessian w.vcov<- solve(w.hess) # estimated variance-covariance matrix se.alpha<- sqrt(w.vcov[1,1]) se.gam.par<- sqrt(w.vcov[2,2]) se.alpha [1] 0.03429527 se.gam.par [1] 0.6143192