プログラム R で mlogit パッケージを使用しています。データを元のワイド形式からロング形式に変換しました。これは変換された data.frame のサンプルで、これを「long_perp」と呼んでいます。独立変数はすべて個人固有のものです。データセットには 4258 の一意の観測があります。
date_id act2 grp.bin pdist ship sea avgknots shore day location chid alt
4.dive 40707_004 TRUE 2 2.250 second light 14.06809 2.30805 12 Lower 4 dive
4.fly 40707_004 FALSE 2 2.250 second light 14.06809 2.30805 12 Lower 4 fly
4.none 40707_004 FALSE 2 2.250 second light 14.06809 2.30805 12 Lower 4 none
5.dive 40707_006 FALSE 2 0.000 second light 15.12650 2.53312 12 Lower 5 dive
5.fly 40707_006 TRUE 2 0.000 second light 15.12650 2.53312 12 Lower 5 fly
5.none 40707_006 FALSE 2 0.000 second light 15.12650 2.53312 12 Lower 5 none
6.dive 40707_007 FALSE 1 1.995 second light 14.02101 2.01680 12 Lower 6 dive
6.fly 40707_007 TRUE 1 1.995 second light 14.02101 2.01680 12 Lower 6 fly
6.none 40707_007 FALSE 1 1.995 second light 14.02101 2.01680 12 Lower 6 none
'act2' は従属変数で、船が接近したときに水に浮かぶ鳥が行うことができる選択で構成されます。飛ぶ、飛び込む、または何もしない。これらの確率が、data.frame の残りの独立変数、つまり船の進路に対する垂直距離 (pdist)、海の状態 (sea)、速度 (avgknots)、海岸までの距離 (shore) などとどのように関連しているかに興味があります。変数は、二分変数、因子変数、および連続変数で構成されます。
2 つの多項ロジット モデルを実行しました。1 つはすべての選択オプションを含み、もう 1 つはサブセットのみを含みます。次に、これらのモデルを hmftest() 関数と比較して、IIA の仮定をテストしました。結果は控えめに言っても混乱を招きました。2 つのモデルのコードとテスト出力を含めます (コードでモデルの指定を間違えた場合に備えて)。
# model including all choice options (fly, dive, none)
mod.1 <- mlogit(act2 ~ 1 | pdist + as.factor(grp.bin) +
as.factor(sea) + avgknots + shore + as.factor(location),long_perp ,
reflevel = 'none')
# model including only a subset of choice options (fly, dive)
mod.alt <- mlogit(act2 ~ 1 | pdist + as.factor(grp.bin) +
as.factor(sea) + avgknots + shore + as.factor(location),long_perp ,
reflevel = 'none', alt.subset = c("fly","dive"))
# IIA test
hmftest(mod.1, mod.alt)
# output
Hausman-McFadden test
data: long_perp
chisq = -968.7303, df = 7, p-value = 1
alternative hypothesis: IIA is rejected
ご覧のとおり、カイ二乗統計量は負です! 私は、1. 何か間違ったことをしている、または 2. IIA に違反していると思います。この結果は、選択サブセット (飛行、潜水) に当てはまりますが、IIA の仮定は選択サブセット (なし、潜水) で支持されますか? これは私を混乱させます。
次に、IIA の仮定を緩和する方法として、ネストされたモデルの定式化を試みました。選択肢をネスト 1 = なし、ネスト 2 = フライ、ダイブとしてネストしました。これは論理的な断絶のように思えるので、私には理にかなっています。鳥は反応するかどうかを決定し、次にどの反応を行うかを決定します。
ネストされたロジット モデルを実行する方法がわかりません (mlogit の 2 つのビネット、Croissant vignetteとTrain vignette を読んだ後でも)。
クロワッサン ビネットの例に従って分析を実行すると、次のエラーが発生します。
nested.1 <- mlogit(act2 ~ 0 | pdist + as.factor(grp.bin) + as.factor(ship) +
as.factor(sea) + avgknots + shore + as.factor(location),
long_perp , reflevel="none",nests = list(noact = "none",
react = c("dive","fly")), unscaled = TRUE)
# Error in solve.default(crossprod(attr(x, "gradi")[, !fixed])) :
Lapack routine dgesv: system is exactly singular: U[19,19] = 0
このエラー メッセージについて少し読みましたが、完全な分離が原因で発生する可能性があります。私はデータのいくつかの表を見てきましたが、4,000 以上の観測値と 2 つ以上の水準 (3 つある) を持つ因子変数が 1 つしかないため、これが起こっているとは思いません。
これらの特定の問題に関するヘルプは大歓迎ですが、質問に答えるために使用できる別の分析も受け付けています。私は主に、船の進路に対する垂直距離の関数としての飛行確率に関心があります。
ありがとう、ティム