r - mlogit :在 R 中使用不同的 mlogit 替代方案
问题描述
我正在尝试为每个人使用不同的替代方案。但是无法使其正常工作。如果我为每个人制定相同的替代方案,它就可以正常工作。如何使它变化和工作。
数据 :
> dput( df1 )
structure(list(Choice = c(1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L,
0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L,
1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L), A = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, -1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 0L, 0L, -1L, 0L, 0L, 1L, 0L, 0L, -1L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L), B = c(0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, -1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, -1L, 0L, 1L, 0L, 0L, -1L, 0L,
0L), C = c(1L, 0L, 0L, 0L, -1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, -1L, 0L, 0L, 0L,
1L, 0L, 0L, -1L, 0L, 0L, 0L, 0L, 0L, 0L), D = c(0L, 1L, 0L, 0L,
0L, -1L, 0L, 0L, 0L, 1L, 0L, 0L, -1L, 0L, 0L, 1L, 0L, 0L, -1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L), E = c(0L, 0L, 1L, 0L, 0L, 0L, -1L, 0L, 0L, 0L, 1L,
0L, 0L, -1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, -1L, 0L), F = c(0L, 0L,
0L, 1L, 0L, 0L, 0L, -1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
0L, 0L, -1L, 0L, 0L, 1L, 0L, 0L, -1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 1L, 0L, 0L, -1L), Alternative = c(1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L,
3L)), row.names = c(NA, -38L), class = "data.frame")
代码 :
model = mlogit( Choice ~ B + C + D + E + F | 0, data = df1,
alt.levels = unique( df1$Alternative ),
shape = "long")
错误
Error in dfidx::dfidx(data = data, dfa$idx, drop.index = dfa$drop.index, :
the data must be balanced in order to use the levels argument
解决方案
您需要提供mlogit
一个明确的 ID 变量来表示哪个参与者做出了选择。它无法从data.frame
您提供的信息中推断出它们。
我假设在您的可重现示例中,从 [1 - 4] 或 [1 - 3] 顺序运行的行中的备选方案代表呈现给唯一个人的选择集。如果是这样,那么您可以像这样拟合模型:
library(mlogit)
# Explicitly create an ID variable
df1$ID <- rep(1:12, times = c(rep(4, 2), rep(3, 10)))
#Convert to dfidx data
dfx1 <- mlogit.data(df1,
shape = "long",
choice = "Choice",
id.var = "ID")
# Fit a model
m0 <- mlogit(Choice ~ B + C + D + E + F | 0,
data = dfx1)
推荐阅读
- sonarqube - SonarQube Web API 不接受“c++”参数
- c++ - 如何在 MacOS 上将 gdb 设置为 C/C++ 扩展 pf VSCode 的调试器?
- swiftui - 是否可以在 iPad 应用程序中将 DatePicker 作为导航栏项?
- angular - npm i @angular/material 和 ng add @angular/material 有什么区别
- tomcat9 - org.apache.catalina.startup.ContextConfig.authenticatorConfig 无法实例化
- node.js - NodeJS在If条件下双重输出
- ruby - 您可以通过组合两个范围来创建嵌套数组吗?
- npm - 如何从命令行获取 npm 包访问权限?
- javascript - Jquery 从表数据中渲染货币
- c# - 在使用 web api post 方法的客户端中请求 postAsync 时出错