0

我正在使用mlogitr 估计多项式 logit。有没有办法在 mlogit 函数中使用变量列表,而不是枚举其中的所有变量?这是一个可重现的例子。我的问题是如何避免输入AGE + SEX函数mlogit

zz <- "Choice AGE SEX
        1  42   2
        1   8   1
        1  37   1
        1   8   2
        1   7   2
        3  50   1
        3  69   1
        3  63   2
        3  37   2
        3  37   1
        3   9   1
        3   6   2
        3  32   2
        3  42   1
        2  62   1
        2  60   1
        2  68   2
        2  69   1
        2  60   2
        2  45   1"

data <- read.table(text = zz, header = TRUE)
Model <- mlogit(Choice ~ 0 | AGE + SEX | 0  , data, shape ="wide", choice = "Choice")
4

1 回答 1

1

好的。因此,它似乎mlogit有它自己的基于Formula包的自定义公式格式,这似乎使得使用.通常可以在公式中使用的标准符号来指定“所有其他变量”变得困难。我确实找到了一种扩展这些特殊公式的混乱方法。这是辅助功能

expandFormula <- function(object, data) {
    object<-Formula(object)
    nrhs<-lapply(sapply(lapply(attr(object, "rhs"), function(x)
        eval(as.call(
            list(quote(`~`), 
            attr(object, "lhs")[[1]], 
            x)
         )))), terms, data=data, simplify=T), 
    `[[`, 3)
    attr(object, "rhs")<-nrhs
    object
}

现在,就错误检查而言,这个功能并不是很有防御性。它假设一个响应并允许多个“右手边”,并假设公式的任何部分都不是空的。我们将在您的数据上使用此功能

ff <- Choice ~ 0 | . | 0 
Model <- mlogit(expandFormula(ff, data) , data, shape ="wide", choice = "Choice")

这通常是使用公式的首选方式。但是,由于此函数不能很好地发挥作用,您也可以将公式构建为字符串。你可以做

resp <- names(data)[1]
covar <- names(data)[-1]
ff <- as.formula(paste(resp, "~", "0","|", paste(covar, collapse="+"),"|","0"))
Model <- mlogit(ff, data, shape ="wide", choice = "Choice")

最终将运行相同的模型。

于 2014-07-30T04:41:15.743 回答