[R] Discrete choice model maximum likelihood estimation

Rui Barradas ruipbarradas at sapo.pt
Mon May 14 17:58:07 CEST 2012


Once again, sorry.
I had a different llfn in my R session and it messed with yours.

llfn <- function(param, a, tt) {


llfn <- sum((a==1)*lL1+(a==2)*lL2+(a==3)*lL3)  # sum of logs, it's a
log-likelihood.
return(-llfn)
}

Rui Barradas

infinitehorizon wrote
> 
> Hello again,
> 
> You are absolutely right about probabilities.. Thanks for reminding me
> about that.
> 
> I did exactly how you said but in the end I receive the error : "objective
> function in optim evaluates to length 12 not 1".
> I checked how llfn give a vector instead of scalar,  but couldn't figure
> it out.
> 
> Can you please tell me how did you obtain those estimates?
> Thanks again,
> 
> Best,
> 
> Marc
> 
> 
> Rui Barradas wrote
>> 
>> Hello, again.
>> 
>> Bug report:
>> 1. Your densities can return negative values, 1 - exp(...) < 0.
>>     Shouldn't those be 1 PLUS exp()?
>> 
>> P3 <- function(bx,b3,b,tt) {
>> 	P <- exp(bx*x+b3+b*(tt == 1))/(1+exp(bx*x+b3+b*(tt == 1)))
>> 	return(P)
>> }
>> 
>> And the same for P2 and P1?
>> 
>> 2. Include 'a' and 'tt' as llfn parameters and call like the following.
>> 
>> llfn <- function(param, a, tt) {
>> 
>>            [... etc ...]
>>            return(-llfn)
>> }
>> 
>> start.par <- rep(0, 5)
>> est <- optim(start.par, llfn, gr=NULL, a=a, tt=tt)
>> est
>> $par
>> [1]  4.1776294 -0.9952026 -0.7667640 -0.1933693  0.7325221
>> 
>> $value
>> [1] 0
>> 
>> $counts
>> function gradient 
>>       44       NA 
>> 
>> $convergence
>> [1] 0
>> 
>> $message
>> NULL
>> 
>> 
>> Note the optimum value of zero, est$value == 0
>> 
>> Rui Barradas
>> 
>> infinitehorizon wrote
>>> 
>>> By the way, in my last post I forgot to return negative of llfn, hence
>>> the llfn will be as follows:
>>> 
>>> llfn <- function(param) { 
>>> 
>>> bx <- param[1] 
>>> b1 <- param[2] 
>>> b2 <- param[3] 
>>> b3 <- param[4] 
>>> b <- param[5] 
>>> 
>>> lL1 <- log(L1(bx,b1,b2,b,tt)) 
>>> lL2 <- log(L2(bx,b1,b2,b3,b,tt)) 
>>> lL3 <- log(L3(bx,b1,b2,b3,b,tt)) 
>>> 
>>> llfn <- (a==1)*lL1+(a==2)*lL2+(a==3)*lL3 
>>> return(-llfn)
>>> } 
>>> 
>>> However, it does not fix the problem, I still receive the same error..
>>> 
>> 
> 


--
View this message in context: http://r.789695.n4.nabble.com/Discrete-choice-model-maximum-likelihood-estimation-tp4629877p4629954.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list