R mlogit模型,计算奇异

R mlogit模型,计算奇异,r,mlogit,R,Mlogit,首先,我花了整整一天的时间来处理格式化我的(在通过BondedDust的table(TM)建议发现一个bug后更新),适合于mLogit: raw <-read.csv("C:\\Users\\Andy\\Desktop\\research\\Oxford\\Prefs\\rData.csv", header=T, row.names = NULL,id="id") raw <-na.omit(raw) library(mlogit) TM <- mlogit.data(r

首先,我花了整整一天的时间来处理格式化我的(在通过BondedDust的table(TM)建议发现一个bug后更新),适合于mLogit:

raw <-read.csv("C:\\Users\\Andy\\Desktop\\research\\Oxford\\Prefs\\rData.csv", header=T, row.names = NULL,id="id")
raw <-na.omit(raw)

library(mlogit)

TM <- mlogit.data(raw, choice = "selected", shape = "long", alt.var = "dishId", chid.var = "individuals", drop.index = TRUE)

raw这与其说是一个答案,不如说是一个评论(我没有足够的评论点!)。但是,我无法复制您的代码,因为在您的
rData.csv

中没有任何
age
列,模型无法将您的dishId解释为替代索引(
alt.var
),因为您有不同的键对用于不同的选择。例如,对于.csv文件中的第一个选项,您有“TS”和“RS”作为备选索引键,但对于选项3634,您有“RR”和“RS”作为键。此外,您还没有指定备选方案的名称(
alt.levels
)。由于未填写
alt.levels
,因此,
mlogit.data
将自动尝试根据无法正确解释的备选索引检测备选方案。这基本上就是所有问题的症结所在:“食物”和“盘子”变量不被解释为替代变量,但它们被视为最终导致奇异性问题的个体特定变量

您有两个选项来解决此问题。您可以通过
alt.levels
参数将实际备选方案作为
mlogit.data
的输入:

TM <- mlogit.data(raw, choice = "selected", shape = "long", alt.levels = c("food","plate"),chid.var = "individuals",drop.index=TRUE)
model1 <- mlogit(selected ~ food + plate | sex + age +hand, data = TM)
我们验证了这两个模型确实是相同的。模型1的结果:

> summary(model1)

Call:
mlogit(formula = selected ~ food + plate | sex + age + hand, 
    data = TM, method = "nr", print.level = 0)

Frequencies of alternatives:
   food   plate 
0.42847 0.57153 

nr method
4 iterations, 0h:0m:0s 
g'(-H)^-1g = 0.00423 
successive function values within tolerance limits 

Coefficients :
                    Estimate Std. Error t-value  Pr(>|t|)    
plate:(intercept) -0.0969627  0.0764117 -1.2689 0.2044589    
foodCirc           1.0374881  0.0339559 30.5540 < 2.2e-16 ***
plateCirc         -0.0064866  0.0524547 -0.1237 0.9015835    
plate:sexmale     -0.0811157  0.0416113 -1.9494 0.0512512 .  
plate:age16-34     0.1622542  0.0469167  3.4583 0.0005435 ***
plate:age35-54     0.0312484  0.0555634  0.5624 0.5738492    
plate:age55-74     0.0556696  0.0836248  0.6657 0.5055987    
plate:age75+       0.1057646  0.2453797  0.4310 0.6664508    
plate:handright   -0.0177260  0.0539510 -0.3286 0.7424902    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log-Likelihood: -8284.6
McFadden R^2:  0.097398 
Likelihood ratio test : chisq = 1787.9 (p.value = < 2.22e-16)
>摘要(模型1)
电话:
mlogit(配方=选定食物+盘子|性别+年龄+手,
数据=TM,方法=nr,打印级别=0)
备选方案的频率:
食物盘
0.42847 0.57153 
nr法
4次迭代,0h:0m:0s
g'(-H)^-1g=0.00423
公差范围内的连续函数值
系数:
估计标准误差t值Pr(>t)
板块:(截距)-0.0969627 0.0764117-1.2689 0.2044589
foodCirc 1.0374881 0.0339559 30.5540<2.2e-16***
plateCirc-0.0064866 0.0524547-0.1237 0.9015835
车牌号:sexmale-0.0811157 0.0416113-1.9494 0.0512512。
车牌:年龄16-34 0.1622542 0.0469167 3.4583 0.0005435***
车牌:年龄35-54 0.0312484 0.0555634 0.5624 0.5738492
车牌:年龄55-74 0.0556696 0.0836248 0.6657 0.5055987
板块:年龄75+0.1057646 0.2453797 0.4310 0.6664508
车牌:右-0.0177260 0.0539510-0.3286 0.7424902
---
签名。代码:0'***'0.001'***'0.01'*'0.05'.'0.1''1
对数似然:-8284.6
麦克法登R^2:0.097398
似然比检验:chisq=1787.9(p.value=<2.22e-16)
与模型2的结果相比。请注意,已正确标识备选方案,但未将名称明确添加到模型中:

> summary(model2)

Call:
mlogit(formula = selected ~ food + plate | sex + age + hand, 
    data = TM, method = "nr", print.level = 0)

Frequencies of alternatives:
      1       2 
0.42847 0.57153 

nr method
4 iterations, 0h:0m:0s 
g'(-H)^-1g = 0.00423 
successive function values within tolerance limits 

Coefficients :
                Estimate Std. Error t-value  Pr(>|t|)    
2:(intercept) -0.0969627  0.0764117 -1.2689 0.2044589    
foodCirc       1.0374881  0.0339559 30.5540 < 2.2e-16 ***
plateCirc     -0.0064866  0.0524547 -0.1237 0.9015835    
2:sexmale     -0.0811157  0.0416113 -1.9494 0.0512512 .  
2:age16-34     0.1622542  0.0469167  3.4583 0.0005435 ***
2:age35-54     0.0312484  0.0555634  0.5624 0.5738492    
2:age55-74     0.0556696  0.0836248  0.6657 0.5055987    
2:age75+       0.1057646  0.2453797  0.4310 0.6664508    
2:handright   -0.0177260  0.0539510 -0.3286 0.7424902    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log-Likelihood: -8284.6
McFadden R^2:  0.097398 
Likelihood ratio test : chisq = 1787.9 (p.value = < 2.22e-16)
>摘要(模型2)
电话:
mlogit(配方=选定食物+盘子|性别+年龄+手,
数据=TM,方法=nr,打印级别=0)
备选方案的频率:
1       2 
0.42847 0.57153 
nr法
4次迭代,0h:0m:0s
g'(-H)^-1g=0.00423
公差范围内的连续函数值
系数:
估计标准误差t值Pr(>t)
2:(截距)-0.0969627 0.0764117-1.2689 0.2044589
foodCirc 1.0374881 0.0339559 30.5540<2.2e-16***
plateCirc-0.0064866 0.0524547-0.1237 0.9015835
2:sexmale-0.0811157 0.0416113-1.9494 0.0512512。
2:16-34岁0.1622542 0.0469167 3.4583 0.0005435***
2:年龄35-54 0.0312484 0.0555634 0.5624 0.5738492
2:年龄55-74 0.0556696 0.0836248 0.6657 0.5055987
2:年龄75+0.1057646 0.2453797 0.4310 0.6664508
2:右手-0.0177260 0.0539510-0.3286 0.7424902
---
签名。代码:0'***'0.001'***'0.01'*'0.05'.'0.1''1
对数似然:-8284.6
麦克法登R^2:0.097398
似然比检验:chisq=1787.9(p.value=<2.22e-16)

使用“表格”查看是否可以识别导致问题的线性组合。我很困惑。你对此有何反应
dishId
selected
?@RandyLai,我想知道其他因素(食物、盘子和性别[以及数据较少的其他因素])如何影响selected。我输入数据的方式很可能仍然存在错误。@BondedDust我的csv确实包含不包含数据的“单元格”,通过探索,我在我的CrazyoutPutfromthedevelopers.csv->myData程序中发现了一个bug。但是现在恐怕会出现同样的错误!在
solve()
中,使用较小的公差,如
solve(…,tol=1e-20)
。这应该没问题,因为您得到了
互惠条件编号=1.71139e-19
。更多信息请参见[帮助文件][1]和[此相关问题][2]。[1] :[2]:很抱歉。我一直在研究一个更简单的模型,以防其他变量受到指责。我增加了年龄。你看过这个帖子吗?太棒了!非常感谢!一个多星期以来,我一直在用我的脑袋来思考这个问题。@andyw,这个答案真的解决了你的问题吗?你有四种选择{RS,TS,RR,TR}对应于{Ciruclar,Angular}x{Food,Plate}的四种可能组合。我不确定多项式方法在这里是否合适,因为人们只有四种选择中的两种?特别是,在每次试验中,人们不会在“食物”和“盘子”之间做出选择!我想你可能需要尝试6种不同的二项式模型,对6个不同的选择对你的参与者提供{RS/TS,RS/RR,RS/TR,TS/RR,TS/TR,RR/Tr},或者,你可以尝试2个二项模型,分别考虑每个因素。i、 e.一个模型比较圆形食物和角形食物(组合选择集{RS/TS,RR/TR}),一个模型比较圆形板和角形板(组合选择集{RS/RR,TS/TR})。
> summary(model1)

Call:
mlogit(formula = selected ~ food + plate | sex + age + hand, 
    data = TM, method = "nr", print.level = 0)

Frequencies of alternatives:
   food   plate 
0.42847 0.57153 

nr method
4 iterations, 0h:0m:0s 
g'(-H)^-1g = 0.00423 
successive function values within tolerance limits 

Coefficients :
                    Estimate Std. Error t-value  Pr(>|t|)    
plate:(intercept) -0.0969627  0.0764117 -1.2689 0.2044589    
foodCirc           1.0374881  0.0339559 30.5540 < 2.2e-16 ***
plateCirc         -0.0064866  0.0524547 -0.1237 0.9015835    
plate:sexmale     -0.0811157  0.0416113 -1.9494 0.0512512 .  
plate:age16-34     0.1622542  0.0469167  3.4583 0.0005435 ***
plate:age35-54     0.0312484  0.0555634  0.5624 0.5738492    
plate:age55-74     0.0556696  0.0836248  0.6657 0.5055987    
plate:age75+       0.1057646  0.2453797  0.4310 0.6664508    
plate:handright   -0.0177260  0.0539510 -0.3286 0.7424902    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log-Likelihood: -8284.6
McFadden R^2:  0.097398 
Likelihood ratio test : chisq = 1787.9 (p.value = < 2.22e-16)
> summary(model2)

Call:
mlogit(formula = selected ~ food + plate | sex + age + hand, 
    data = TM, method = "nr", print.level = 0)

Frequencies of alternatives:
      1       2 
0.42847 0.57153 

nr method
4 iterations, 0h:0m:0s 
g'(-H)^-1g = 0.00423 
successive function values within tolerance limits 

Coefficients :
                Estimate Std. Error t-value  Pr(>|t|)    
2:(intercept) -0.0969627  0.0764117 -1.2689 0.2044589    
foodCirc       1.0374881  0.0339559 30.5540 < 2.2e-16 ***
plateCirc     -0.0064866  0.0524547 -0.1237 0.9015835    
2:sexmale     -0.0811157  0.0416113 -1.9494 0.0512512 .  
2:age16-34     0.1622542  0.0469167  3.4583 0.0005435 ***
2:age35-54     0.0312484  0.0555634  0.5624 0.5738492    
2:age55-74     0.0556696  0.0836248  0.6657 0.5055987    
2:age75+       0.1057646  0.2453797  0.4310 0.6664508    
2:handright   -0.0177260  0.0539510 -0.3286 0.7424902    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log-Likelihood: -8284.6
McFadden R^2:  0.097398 
Likelihood ratio test : chisq = 1787.9 (p.value = < 2.22e-16)