[R] Estimating parameters of 2 phase Coxian using optim
Gad Abraham
g.abraham at ms.unimelb.edu.au
Thu Mar 8 23:12:48 CET 2007
Laura Hill wrote:
>
>
> On 7/3/07 00:15, "Gad Abraham" <g.abraham at ms.unimelb.edu.au> wrote:
>
>> Andy Fugard wrote:
>>> Hi There,
>>>
>>> Perhaps the problem is the line
>>>
>>> loglik<-log(p %*% expm(Q * y(i)) %*% q)
>>>
>>> You mention that y is a vector but here you're treating it as a
>>> function. Maybe try
>>>
>>> loglik<-log(p %*% expm(Q * y[i]) %*% q)
>>>
>>> ?
>>>
>>> Don't have a clue about the correctness of the contents of cox2.lik...
>>>
>>> Andy
>>>
>>>
>>> On 6 Mar 2007, at 08:54, Laura Hill wrote:
>>>
>>>> Hi,
>>>>
>>>> My name is Laura. I'm a PhD student at Queen's University Belfast
>>>> and have
>>>> just started learning R. I was wondering if somebody could help me
>>>> to see
>>>> where I am going wrong in my code for estimating the parameters
>>>> [mu1, mu2,
>>>> lambda1] of a 2-phase Coxian Distribution.
>>>>
>>>> cox2.lik<-function(theta, y){
>>>> mu1<-theta[1]
>>>>
>>>> mu2<-theta[2]
>>>>
>>>> lambda1<-theta[3]
>>>>
>>>> p<-Matrix(c(1, 0), nrow=1, ncol=2)
>>>>
>>>> Q<-Matrix(c(-(lambda1 + mu1), 0, lambda1, -mu2), nrow=2, ncol=2)
>>>>
>>>> q<-Matrix(c(mu1, mu2), nrow=2, ncol=1)
>>>>
>>>> for (i in 1:length(y)){
>>>> loglik<-log(p %*% expm(Q * y(i)) %*% q)
>>>> return(loglik)}
>>>>
>>>> sumloglik<-sum(loglik)
>>>>
>>>> return(-sumloglik)
>>>> }
>> Just to add my 2 AU cents regarding the for loop:
>>
>> You're trying to create a vector of log likelihoods to sum up later, but
>> that's not what's happening there. Instead, assign an empty vector of
>> same length as y, then assign the loglik from each iteration to a
>> different cell.
>>
>> Lastly, there's no need to return anything from a for loop, it's not a
>> function.
>>
>> HTH,
>> Gad
>
>
>
> Hi Gad,
>
> Yes that's exactly hat I am trying to do. If I gave you a simple example,
> could you perhaps tell me how I could create a vector of log likelihoods.
>
>
>
> Lets say I have 1x1 matrices:
>
> p=[1]
> Q=[0.05] i.e. [mu1]
> q=[-0.05] i.e. [-mu1]
>
> Where mu1 is the parameter that I would like to estimate and I have chosen
> the initial value mu1=0.05
>
>
> Loglik<-p %*% expm(Q*y) %*% q
>
> Where y=(5 10)
>
> I want to sum the log likelihoods that I get for y=5 and y=10 using
>
> Sumloglik<-sum(allloglik)
>
> Where allloglik = vector of log likelihoods
>
>
> Any help would be greatly appreciated.
>
> Thanks in advance
> Laura
>
Hi Laura,
Make an empty vector of required length, then assign the loglik to each
of its cells, and don't return() anything:
loglik <- rep(0, length(y))
for(i in 1:length(y)){
loglik[i] <- log(p %*% expm(Q * y[i]) %*% q)
}
Then you can sum(loglik) like you did before.
Cheers,
Gad
--
Gad Abraham
Department of Mathematics and Statistics
The University of Melbourne
Parkville 3010, Victoria, Australia
email: g.abraham at ms.unimelb.edu.au
web: http://www.ms.unimelb.edu.au/~gabraham
More information about the R-help
mailing list