[R] multinomial conditional logit models
Ott Toomet
otoomet at econ.dk
Thu Jan 30 10:24:03 CET 2003
Hi,
 I've been trying to implement an MCL model in R and have been mostly
 succesful. However I'm still stuck on a few points and I'm hoping
 someone can point out how to do fix them.

 To estimate an MCL model, the data must be restructured into a
 personchoice file.

 * Each case must be duplicated "ncat" times ("ncat" is the number of
 categories of the dependent variable)
 * Each case must be identified by a strata variable (id)
 * Each duplicate must be identified by a variable indexing the
 choices (newy)
 * A dichotomous variable must indicate which duplicate corresponds
 with the respondent's choice (didep)

 I've done this as follows:

 mclgen < function (datamat, catvar) {
 ncat < nlevels(catvar)
 id < 1:length(catvar)
 datamat < cbind(id,datamat)
 perschoice <NULL
 for (i in 1:ncat) {
 perschoice<rbind(perschoice,datamat)
 }
 perschoice < perschoice[sort.list(perschoice$id),]
 perschoice$newy < gl(ncat, 1, length=nrow(perschoice))
 dep < parse(text=paste("perschoice$", substitute(catvar), sep=""))
 perschoice$depvar < as.numeric(eval(dep) == perschoice$newy)
 perschoice
 }

 This works but I wonder if it's the most efficient method. I tried
 using "rep" rather than "rbind" in a loop but that replicated the
 dataset horizontally, not vertically. Is this the best solution?
Well, in general it is not efficient to add something to a matrix in a
cycle. You should in either make the datamat in required size and
fill the required parts of it, or in this case you may consider e.g.
> datamat < matrix(1:4, 2, 2)
> matrix(t(datamat), 4, 2, byrow=T)
[,1] [,2]
[1,] 1 3
[2,] 2 4
[3,] 1 3
[4,] 2 4
 I also finally figure out how to include the argument "catvar" in a
 transformation involving another dataset but this solution seems very
 complicated (eval+parse+substitute). Is there a simpler solution?
Unfortunately, I was not able to understand quite what are you doing
here. Where is the dataset logan? I did not find it on
http://www.xs4all.nl/~jhckx. If I could get a simple example running,
I can try further.
best wishes,
Ott
More information about the Rhelp
mailing list