Hi ,
I am trying to get some estimator based on lognormal distribution when we have 
left,interval, and right censored data. Since, there is now avalible pakage in 
R can help me in this, I had to write my own code using Newton Raphson method 
which requires first and second derivative of log likelihood but my problem 
after runing the code is the estimators were too high. with this email ,I 
provide simple example for estimation parameters for lognormal when we have 
only right censored data, and I tried to estimate the parameters using three 
methods, Surv pakage, optim function, and Newton Raphson calculation. For the 
Surv pakage and Optim function, I got similar results of estimation values to 
the true values, but for the Newton Raphson, I got problem with estimation, 
where it was  too high" overestimation". Is there any one cen help me to know 
my problem when can be or recommend me to read some good references that can be 
useful?
Best regards.
 Below is the example,  
 
cur=curd=cen=cens=array(1,100) 
Cur=RealCur=realcensoring=realcured=array(1,20)
ExpCure=Bias=RealCure=array(1,21)
##################################
Z1=c(rbinom(100,1,0.5))
Z2=c(rbinom(100,1,0.5))
dat1<-data.frame(time=rlnorm( 
100,2,0.8),Censored=rbinom(100,1,0.9),Cured=rbinom(100,1,.3))

dat2<-dat1[order(dat1[,1]),]                  # order the data #
for (i in 1:10)
{
dat2$Cured[i+90]=0         #Long term survivors/10 individuals#
dat2$Censored[i+90]=0 
dat2$time[i+90]=dat2$time[90]
}
cens<-c(dat2$Censored)     #censored status #
curd<-c(dat2$Cured)        #cured status #
tim<-c(dat2$time)          #lifetimes #
X1<-c(Z1)                  #X1 Covariate=Age #
X2<-c(Z2)                  #X2 Covariate=Type of treatment(1=chemo,0=radio) #

L1<-length(cens)           #number of censored#
for (j in 1:L1)
{
if ((cens[j]==1)&(curd[j]==0)) {(cen[j]=1)&(cur[j]=1)}

else {(cen[j]=cens[j])&(cur[j]=curd[j])}
} 
Now, the following is my data:

#######    My Data only with uncensored and right censored  ####################
data=data.frame(Ti=dat1$time,Censored=cen)

#################### Estimation using Surv pakage ############################
library(survival)
survreg(Surv(Ti, Censored)~1, data=data, dist="lognormal")
########### Seperating the data for simply using optim function and  Newton 
Raphson ####

dat2<-c(split(data[1:2],data$Censored==1))  # Split the data(cen/uncen) # 
tun<-c((dat2$'TRUE')$Ti)          # Life times data set for uncensored #
Stat.uncen<-c((dat2$'TRUE')$Censored) # uncensored Status data set #
tcen<-c((dat2$'FALSE')$Ti)           # Life times data set for censored #
Stat.cen<-c((dat2$'FALSE')$Censored)  # censoring Status data set #
##################### Estimation using optim function  ################
ml= function(par){mu=par[1]
s=par[2]
-sum(dlnorm(tun,mu,s,log=TRUE))-sum(1-plnorm(tcen,mu,s))}

Max=optim(c(0.5,0.5),ml)
param=c(Max$par)

## My Problem is when I try to estimate parameters using newton raphson  ###

########### intial values ##############
mu=1
s=1
############# Derivative for mu ##########
F1= function(par){ mu=par[1]
s=par[2]
sum((log(tun)-mu)/s^2)+ sum(((1/sqrt(2*pi))*
exp(-((log(tcen)-mu)^2)/2*s^2))/(s^2*(1-plnorm(tcen,mu,s))))  }
############## Derivative for sigma" s "  #######

F2= function(par){
mu=par[1]
s=par[2]
sum((log(tun)-mu)^2/s^3 -1/s)+ sum((log(tcen)-mu)*((1/sqrt(2*pi))*
exp(-((log(tcen)-mu)^2)/2*s^2))/(s^2*(1-plnorm(tcen,mu,s))))}
############### Total Function  ########################
F=function(par){
F=matrix(0,nrow=2)
F[1]=F1(par)
F[2]=F2(par)
F           }
################  the Jacobian matrix, a 2 x 2 matrix  ###############
d11=d12=d21=d22=array()
J=function(par){
j=matrix(0,ncol=2,nrow=2)
# The format of J is 2 by 2#
d11=0; d12=0;
d21=0;d22=0
######################## second Derivative for mu ##########
d11 = function(par){
mu=par[1]
s=par[2]
sum(-1/s^2)-sum((1/s^2)*
(((1/sqrt(2*pi))*exp(-((log(tcen)-mu)^2)/2*s^2))/s*((1-plnorm(tcen,mu,s))))*
(-(log(tcen)-mu)/s +((1/sqrt(2*pi))*exp(-((log(tcen)-mu)^2)/2*s^2))/
(s*(1-plnorm(tcen,mu,s)))))}

################ Derivative for mu/s   
##########################################
d12= function(par){
mu=par[1]
s=par[2]
-sum(2*(log(tun)-mu)/s^3)-sum((1/s^2)*(((1/sqrt(2*pi))*
exp(-((log(tcen)-mu)^2)/2*s^2))/(s*(1-plnorm(tcen,mu,s)))+((log(tcen)-mu)/s)*
((1/sqrt(2*pi))*exp(-((log(tcen)-mu)^2)/2*s^2))/(s*(1-plnorm(tcen,mu,s)))*
(((1/sqrt(2*pi))*
exp(-((log(tcen)-mu)^2)/2*s^2))/(s*(1-plnorm(tcen,mu,s)))-(log(tcen)-mu)/s)))}
d21=d12
######## second Derivative for s    ###########################
d22=function(par){
mu=par[1]
s=par[2]
sum((-3*(log(tun)-mu)^2/s^4)+1/s^2)-sum((1/s^2)*((log(tcen)-mu)/s)*(((1/sqrt(2*pi))*
exp(-((log(tcen)-mu)^2)/2*s^2))/(s*(1-plnorm(tcen,mu,s)))+((1/sqrt(2*pi))*
exp(-((log(tcen)-mu)^2)/2*s^2))/(s*(1-plnorm(tcen,mu,s)))+((log(tcen)-mu)/s)*(((1/sqrt(2*pi))*
exp(-((log(tcen)-mu)^2)/2*s^2))/(s*(1-plnorm(tcen,mu,s))))*(((1/sqrt(2*pi))*
exp(-((log(tcen)-mu)^2)/2*s^2))/(s*(1-plnorm(tcen,mu,s)))-(log(tcen)-mu)/s)))}

############  The R codes for Newton's method 
#####################################

j[1,1]=d11(par); j[1,2]=d12(par);
j[2,1]=d21(par); j[2,2]=d22(par)
j           }
out1=outs=array()
par=c(mu,s)        #### initial values #####
v=matrix(0,ncol=length(par))
for (i in 1:30)
{
v=solve(J(par),F(par))
par=par-v                             ############ here see the values are to 
high ###########
mu[i+1]=par[1]
s[i+1]=par[2]
}
out1=c(mu)                        ############ the value of parameter at each 
step , no convergence ####################
outs=c(s)
        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to