z is the matrix below
2 1 3 3 1 1 3 3 1 5 2 4
k<-max(z[,1])
ll <- function(theta)
{t<-0
for (ii in 1:k)
{t<-t+exp(theta[ii])}
lll<-0
x00<-1/(1+t)
x0<-x00*exp(theta)
for (m in 1:length(z[,1]))
{j<-z[m,1]
i<-z[m,2]
a<-z[m,3]
l<-i:(k-j+i)
s<-rep(0,k)
s[l]<-choose(j,i)*choose((k-j),(l-i))/choose(k,l)
# we only define some of s to be non-zero, since dim(l) might be smaller than dim(s)
ss<-sum(s*x0) # ss is a weighted sum of x0
lll<-lll+a*log(ss)
}
-lll
# the negative sign is to find the maximum of the log-likelihood function. It can be omitted if we #use the finscale option in optim.
}
Then I need to optim(b0,ll,hessian=T), where b0<-c(0.8331934, 20.8009068, -7.0893623, 1.2109221, 18.7213273).
optim(b0,ll,hessian=T) $par [1] 0.8331934 20.8009068 -7.0893623 1.2109221 18.7213273
$value [1] 5.182791
$counts function gradient 52 NA
$convergence [1] 0
$message NULL
$hessian [,1] [,2] [,3] [,4] [,5] [1,] 1.065814e-08 -9.325873e-09 0.000000e+00 -3.330669e-10 -2.109424e-09 [2,] -9.325873e-09 8.887936e-01 -3.330669e-10 -1.620926e-08 -8.887936e-01 [3,] 0.000000e+00 -3.330669e-10 -6.661338e-10 0.000000e+00 0.000000e+00 [4,] -3.330669e-10 -1.620926e-08 0.000000e+00 7.549517e-09 7.105427e-09 [5,] -2.109424e-09 -8.887936e-01 0.000000e+00 7.105427e-09 8.887936e-01
I have tried to use eval() and modify my function, it seems to be able to remove the m loop, however, optim() can not recognize it. So my main concern is to avoid the loop and optim() can works for my function. Thanks.
______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html