首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R mlogit模型,计算奇异

R mlogit模型,计算奇异
EN

Stack Overflow用户
提问于 2015-04-24 14:07:10
回答 2查看 6.2K关注 0票数 3

今天,我花了整整一段时间在格式化我的数据 (在通过BondedDust的table(TM)建议找到一个bug之后更新)为mLogit提供了合适的格式:

代码语言:javascript
复制
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)

我失败的地方是试图建模我的数据。

代码语言:javascript
复制
model <- mlogit(selected ~ food + plate | sex + age +hand, data = TM)

solve.default(H,g!固定)中的误差:系统是计算奇异的:倒数条件数= 6.26659e-18

我很乐意在这个题目上提供一些帮助。恐怕我要把它弄疯了。

数据本身来自一个实验,我们让1000人在两盘食物之间做出决定(我们改变食物的形状--无论是角的还是圆形的--并且改变盘子的形状--要么是角的,要么是圆形的)。

致以最美好的祝愿安迪。

我害怕我是一个在StackOverflow上有统计Q的新手。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-29 02:25:59

模型无法将您的dishId解释为可选索引(alt.var),因为您对不同的选择有不同的键盘。例如,您有"TS“和"RS”作为您的.csv文件中第一选择的替代索引键,但是选择3634的键是"RR“和"RS”。此外,您也没有指定备选方案(alt.levels)的名称。由于没有填写alt.levelsmlogit.data将根据它无法正确解释的替代索引自动尝试检测替代方案。这基本上是每件事都会出错的地方:“食物”和“盘子”变量不被解释为可供选择的变量,但它们被认为是个别的特定变量,最终导致了奇异性问题。

你有两个选择来解决这个问题。您可以通过mlogit.data参数将实际的备选方案作为输入提供给alt.levels

代码语言:javascript
复制
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)

或者,您可以选择使索引键保持一致,以便可以通过alt.var将它们作为输入提供。mlogit.data现在将能够正确地猜出您的备选方案是什么:

代码语言:javascript
复制
raw[,3] <- rep(1:2,nrow(raw)/2) # use 1 and 2 as unique alternative keys for all choices
TM <- mlogit.data(raw, choice = "selected", shape = "long", alt.var="dishId", chid.var = "individuals")
model2 <- model <- mlogit(selected ~ food + plate | sex + age +hand, data = TM)

我们验证了这两种模型确实是相同的。模式1的结果:

代码语言:javascript
复制
> 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)

请注意,正确地识别了备选方案,但没有将名称显式添加到模型中:

代码语言:javascript
复制
> 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)
票数 7
EN

Stack Overflow用户

发布于 2015-04-26 19:59:42

这与其说是一个回答,不如说是一个评论(我没有任何代表要评论!)但是,我无法再现您的代码,因为您的age中没有任何rData.csv列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29849640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档