我在r中使用mlogit
估算多项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")
答案 0 :(得分: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")
最终将运行相同的模型。