3

私は最初に、 mLogit に適したデータのフォーマット (BondedDust の table(TM) 提案によるバグの発見後に更新)との戦いに費やしました。

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)

私が失敗するのは、データをモデル化しようとするときです。

model <- mlogit(selected ~ food + plate | sex + age +hand, data = TM)

solve.default(H, g[!fixed]) のエラー: システムは計算上特異です: 逆条件数 = 6.26659e-18

このトピックに関するいくつかの助けを本当に感謝します。私はそれで少しバナナに行くのではないかと心配しています。

データ自体は、何千人もの人々に食べ物のプレートのペアを決定させる実験からのものです (私たちは食べ物の見た目を変えます - 角度付きか円形か - プレートの形を変えます - 角度付きか円形か)。

ご多幸をお祈り申し上げます、アンディ。

PS Afraid 私は StackOverflow の統計 Q を持つ初心者です。

4

2 に答える 2

7

alt.var選択ごとに異なるキーペアがあるため、モデルは、dishId を代替インデックス ( ) として解釈できません。たとえば、.csv ファイルの最初の選択肢の代替インデックス キーとして "TS" と "RS" がありますが、選択肢 3634 のキーとして "RR" と "RS" があります。さらに、名前も指定していません。選択肢の ( alt.levels)。が入力されてalt.levelsいないため、 は、正しく解釈できないmlogit.data代替インデックスに基づいて代替を自動的に検出しようとします。これは基本的にすべてがうまくいかないところです:「食べ物」と「皿」

この問題を解決するには、2 つのオプションがあります。パラメータを使用しmlogit.dataて、実際の代替を入力として与えることができます。alt.levels

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.varmlogit.data代替案が何であるかを正しく推測できるようになりました:

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 の結果:

> 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)

モデル 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)
于 2015-04-29T02:25:59.893 に答える