Zhen Pang
2004-Sep-30 07:06 UTC
Vectorising and loop (was Re: [R] optim "alog-likelihood function")
ok. You just simulate a 200 by 3 matrix z, all positive integers. The first column is i, the second column is j, and the third column is in fact the frequency of (i,j) combination, you can set the third column to be 1 for simplification. Notice that i<j, and k=max of the second column. theta is a k dimension vector I want to maximize over. 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:200) {i<-z[m,1] j<-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 is k dimension starting value. 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. Regards, Zhen