# Vectorising and loop (was Re: [R] optim "alog-likelihoodfunction")

Zhen Pang nusbj at hotmail.com
Thu Sep 30 12:10:52 CEST 2004

```Mr. Grothendieck does suggest me to paste the data here. I just show a small
one here. I must metion that I made a mistake in my former email. The first
column should be j and is greater than the second column. I have corrected
ll.

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
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.

```