From: Sundar Dorai-Raj <[EMAIL PROTECTED]>I have a matrix of 200 by 2, namely z, the columns are i and j. K is the maximum of j.
Reply-To: [EMAIL PROTECTED]
To: Zhen Pang <[EMAIL PROTECTED]>
CC: [EMAIL PROTECTED]
Subject: Vectorising and loop (was Re: [R] optim "a log-likelihood function")
Date: Wed, 29 Sep 2004 18:21:17 -0700
Zhen Pang wrote:
I also use optim, however, for my case, can you show some light on avoiding the loop?
There are around 200 sets of (i,j,k) where i<=j<=k. 3 situations exist whether "=" hold, I list one for example,
l<-i:(k-j+i) s<-rep(0,k) s[l]<-choose(j,i)*choose((k-j),(l-i))/choose(k,l) ss<-sum(s*x0)
then sum all the log(ss) is my log-liklihood function.
One loop from 1 to 200 is inevitable. I have tried to use vector, however, I only can simply to this situation. Thanks.
Regards,
Zhen
Zhen,
Your question doesn't really have much to do with optim, so I changed the subject line.
It's difficult to see what you're trying to accomplish without a complete example. Could you post one? Also, for loops are necessarily bad.
One thing to note is that you're better off using lchoose in the above code. I.e.
log.s <- lchoose(j, i) + lchoose(k - j, l - i) - lchoose(k, l) s[l] <- exp(log.s)
--sundar
x0 is a k dimension vector.
ss<-rep(0,200)
for (m in 1:200)
{i<-z[m,1]
j<-z[m,2]
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[m]<-sum(s*x0) # ss[m] is a weighted sum of x0
}
sum(log(ss))
How to avoid the loop of m? I tried to define i<-z[,1] and j<-z[,2], but failed. Thanks.
Regards,
Zhen
______________________________________________ [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
