多項式混合ロジットモデルMLOGIT Rパッケージ
-
21-12-2019 - |
質問
mlogit
- package のMultiNomial Logit多項式混合ロジットモデルの推定を検索したモデル優れたビネットを読んだ後、私は私が説明された例のいずれかに私のデータを適用できなかったことを発見しました。
私は今私の問題を助けて希望を願って書いて、私の状況を説明するための最小の例を作成しました。
問題は次のとおりです。 子音がどこかにある言葉があります。現在、これらの言葉を聴くことが任務された人々と、Q、Uや他の子音が聞こえた場合は、実験が行われました。これは、音節位置や実数/非実数単語のようないくつかの要因に依存してモデル化されなければなりません。
最小の例では、4人とその答えを音節位置に合わせて作成しました。
library(mlogit)
library(nnet)
set.seed(1234)
data <- data.frame(personID = as.factor(sample(1:4, 40, replace=TRUE)),
decision = as.factor(sample(c("Q","U", "other"), 40, replace=TRUE)),
syllable = as.factor(sample(1:4, 40, replace=TRUE)))
summary(data)
personID decision syllable
1:11 other:10 1:18
2:10 Q :18 2: 9
3:10 U :12 3: 5
4: 9 4: 8
.
nnet
のmultinom
functionが混在モデルをカバーしていないわけではありません。
modNnet1 <- multinom(decision ~ syllable, data=data)
.
最初のmlogit.data
-functionを使用してファイルを再設定しました。同僚との議論の後、我々は代替物がないという結論に来ました.varifife。
dataMod <- mlogit.data(data, shape="wide", choice="decision", id.var="personID")
mod1 <- mlogit(formula = decision ~ 0|syllable,
data = dataMod,
reflevel="Q", rpar=c(personID="n"), panel=TRUE)
Error in names(sup.coef) <- names.sup.coef :
'names' attribute [1] must be the same length as the vector [0]
mod2 <- mlogit(formula = decision ~ personID|syllable,
data = dataMod,
reflevel="Q", rpar=c(personID="n"), panel=TRUE)
Error in solve.default(H, g[!fixed]) :
Lapack routine dgesv: system is exactly singular: U[3,3] = 0
.
いいえ私は何をすべきかわからないので、私はここで助けを求めます。しかし、私はこの種の問題をmlogit
で解決できると思います、そして私はまだそれを見ないでください;)
解決
rpar
引数は、代替固有の変数のみを受け入れます。モデル式で人固有のIDを指定する必要はありません。これはid.var = something
コマンドのmlogit.data
を含めることによって処理されます。たとえば、別の特定の共有acov
を使用した場合は、パネル間でacov
のランダムスロープを許可することができます。
N = 200
dat <- data.frame(personID = as.factor(sample(1:4, N, replace=TRUE)),
decision = as.factor(sample(c("Q","U", "other"), N, replace=TRUE)),
syllable = as.factor(sample(1:4, N, replace=TRUE)),
acov.Q = rnorm(N), acov.U = rnorm(N), acov.other = rnorm(N))
dataMod <- mlogit.data(dat, shape="wide", choice="decision", id.var="personID", varying = 4:6)
mlogit(formula = decision ~ acov|syllable, rpar = c(acov = "n"), panel = T, data = dataMod)
.
それは、それぞれの代替案についての人の人物特有の傍受をモデルに合わせるようにしているようです(ランダムな勾配ではありません)。残念ながら、私はあなたがmlogit
でそうできるとは思わない(しかしこのポスト
代替特有の共変動の欠如においてランダムな傍受に適合するように動作する1つの選択肢は、MCMCglmm
です。
library(MCMCglmm)
priors = list(R = list(fix = 1, V = 0.5 * diag(2), n = 2),
G = list(G1 = list(V = diag(2), n = 2)))
m <- MCMCglmm(decision ~ -1 + trait + syllable,
random = ~ idh(trait):personID,
rcov = ~ us(trait):units,
prior = priors,
nitt = 30000, thin = 20, burnin = 10000,
family = "categorical",
data = dat)
.
関連する問題は、前述の問題、マルコフチェーンの収束などです.Florian JaegerのLabのブログには MCMCglmm
のマニュアルに加えて、MCMCglmm
を介した多項式モデルに関する短いチュートリアル。