mlogit“提供的行名长度错误”,R

时间:2019-02-26 19:21:09

标签: r mlogit

我正在使用R中的mlogit包来实现多项式logit模型。数据包括三个不同的“选择”和三个变量(A,B,C),其中包含独立变量的信息。我已经使用mlogit.data函数将数据转换为宽格式,使其看起来像这样:

Observation  Choice  VariableA  VariableB   VariableC
     1          1         1.27       0.2         0.81        
     1          0         1.27       0.2         0.81           
     1         -1         1.27       0.2         0.81 
     2          1         0.20       0.45        0.70
     2          0         0.20       0.45        0.70      
     2         -1         0.20       0.45        0.70

问题是我希望自变量是特定于选择的,因此在下面将其构造为变量D:

   Observation  Choice  VariableA  VariableB  VariableC  VariableD
     1          1         1.27       0.2         0.81        1.27
     1          0         1.27       0.2         0.81        0.2
     1         -1         1.27       0.2         0.81        0.81
     2          1         0.20       0.45        0.70        0.20
     2          0         0.20       0.45        0.70        0.45
     2         -1         0.20       0.45        0.70        0.70

变量D是使用以下代码构造的:

choice_map <- data.frame(choice = c(1, 0, -1), var = grep('Variable[A-C]', names(df)))

df$VariableD <- df[cbind(seq_len(nrow(df)), with(choice_map, var[match(df$Choice, choice)]))]

但是,当我尝试运行多项式logit模型时,

mlog <- mlogit(Choice ~ 1 | VariableD, data=df, reflevel = "0")

返回错误消息“所提供的行名长度错误”。当我分别使用任何其他变量A-C时,回归运行没有任何问题,因此我的问题是:为什么不能使用变量D,如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

当我在模型中输入原始数据框而不是mlogit.data创建的宽数据框时,出现此错误。 因此,请确保首先创建“宽”数据框,并将其输入到您的mlogit函数中。 (来源:Andy Field,使用R发现统计信息,第348页)