【发布时间】:2019-02-27 10:54:32
【问题描述】:
我有一个如下所示的数据集:
Observation Outcome VariableA VariableB VariableC
1 1 1.27 0.2 0.81
2 0 0.30 0.45 0.70
3 -1 0.27 1.2 0.56
Outcome 变量可以取值 1、0、-1,并且应该是多项 logit 模型中的因变量,我将使用 mlogit 包在 R 中实现该模型。我使用以下代码转换了我的数据:
mlogitdataset <- mlogit.data(dataset, choice = "Outcome", shape="wide")
这给了我以下新数据集:
Observation Outcome VariableA VariableB VariableC alt
1 FALSE 1.27 0.2 0.81 -1
1 FALSE 1.27 0.2 0.81 0
1 TRUE 1.27 0.2 0.81 1
2 FALSE 0.20 0.45 0.70 -1
2 TRUE 0.20 0.45 0.70 0
2 FALSE 0.20 0.45 0.70 1
这基本上是我希望数据的结构方式,但是,我不想在多项 logit 回归中使用 VariableA-C 作为单独的自变量。相反,我希望自变量根据 alt 的值从变量 A、B 或 C 中取一个值。这可以用下表中的VariableD表示:
Observation Outcome VariableA VariableB VariableC alt VariableD
1 FALSE 1.27 0.20 0.81 -1 0.81
1 FALSE 1.27 0.20 0.81 0 0.20
1 TRUE 1.27 0.20 0.81 1 1.27
2 FALSE 0.20 0.45 0.70 -1 0.70
2 TRUE 0.20 0.45 0.70 0 0.45
2 FALSE 0.20 0.45 0.70 1 0.20
这将允许我运行多项 logit 回归:
mlog <- mlogit(Outcome ~ 1 | VariableD, data=mlogitdataset, reflevel = "0")
我尝试使用以下代码直接在 mlogit 对象 (mlogitdataset) 中创建 VariableD:
outcome_map <- data.frame(alt = c(1, 0, -1), var = grep('Variable[A-C]', names(mlogitdataset)))
mlogitdataset$VariableD <- mlogitdataset[cbind(seq_len(nrow(mlogitdataset)), with(outcome_map, var[match(mlogitdataset$alt, alt)]))]
但是,在尝试运行多项 logit 回归时,这给了我错误消息“提供的行名长度错误”。
我应该如何转换/格式化/构造数据,以便可以使用 mlogit 函数运行预期的回归?
谢谢!
【问题讨论】:
-
请分享用于创建
VariableD的代码和str(mlogitdataset)的输出。