On 16-04-2012, at 07:04, Christopher Kelvin wrote: > Hello, > When i run the code below from Weibull distribution with 30% censoring by > using optim i get an error form R, which states that > > > Error in optim(start, fn = z, data = q, hessian = T) : > objective function in optim evaluates to length 25 not 1 > > can somebody help me remove this error. Is my censoring approach correct. > > n=25;rr=1000 > p=1.5;b=1.2 > for (i in 1:rr){ > q<-c(t,cen) > t<-rweibull(25,shape=p,scale=b) > meantrue<-gamma(1+(1/p))*b > meantrue > d<-meantrue/0.30 > cen<- runif(25,min=0,max=d) > cen > s<-ifelse(t<=cen,1,0) > > z<-function(data,p){ > beta<-p[1] > eta<-p[2] > log1<-(n*cen*log(p[1])-n*cen*(p[1])*log(p[2])+cen*(p[1]-1)*sum(log(t))-n*sum((t/(p[2]))^(p[1]))) > return(-log1) > } > start <-c(0.5,0.5) > zz<-optim(start,fn=z,data=q,hessian=T) > > m1<-zz$par[2] > p<-zz$par[1] > > } > m1 > p
The example as given doesn't run. The first assignment after the start of the for loop ( q <- ...) gives an error message: object 'cen' not found. The assignment needs to moved to after the line with ifelse. In function z object 'cen' (with length 25) is used in the calculation of log1, which becomes a vector of length 25. You need to review the definition of log1 in function z. Finally: why are you assigning p[1] and p[2] to beta and eta and nor using these variables? Berend ______________________________________________ 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.