在 MCMCglmm 中定义先验

gri*_*o06 5 r bayesian mcmc glm

我发现到处都发布了同样的问题,而且我似乎无法找到任何适合我的数据的解决方案,我想知道我是否正在尝试将我的数据拟合到一个模型太复杂了。

\n\n

我正在尝试将我的数据拟合到 MCMCglmm 包中的多项逻辑回归模型。我查看了许多不同的文档、教程和 MCMCglmm 手册本身,主要是Florian Jaeger 的教程,它非常出色且全面。然而,我在他选择先验的 G 结构和 R 结构的值时迷失了方向,并且不断收到此错误消息

\n\n
Error in priorformat(if (NOpriorG) { : \n  V is the wrong dimension for some prior$G/prior$R elements\n
Run Code Online (Sandbox Code Playgroud)\n\n

特别是,我不确定n在这两个数据中应该给我的数据赋予什么值,但有些不透明的错误消息表明这是一个问题V

\n\n

这是我的数据的(相关)子集:

\n\n
CG_imm       locuteur   enquete       loc_age   loc_sexe      left    liquid   right    articulation_C1    voice_C1   NC_C1    NC_right    voice_right    right2          pos    logfreq      realization\nabordable    44ajs1     Nantes        79         M            bl      l        p        stop               V          Vstop    stop        NV             NVstop          adj    NA           2\nadmettre     91adb1     Brunoy        54         M            tR      R        E        stop               N          NVstop   mid-vowel   V              mid-vowel       verb   6.52209279   0\nadorable     91aal1     Brunoy        27         F            bl      l        break    stop               V          Vstop    break       break          weak break      adj    NA           0\nagr\xc3\xa9able     92aaf2     PC            55         F            bl      l        break    stop               V          Vstop    break       break          strong break    adj    7.95191138   0\nagr\xc3\xa9able     21abm1     Dijon         31         M            bl      l        k        stop               V          Vstop    stop        NV             NVstop          adj    7.95191138   1\nagr\xc3\xa9able     75ccr2     Paris         NA         F            bl      l        break    stop               V          Vstop    break       break          break           adj    7.95191138   0\nagr\xc3\xa9able     69ajl1     Lyon          52         M            bl      l        break    stop               V          Vstop    break       break          weak break      adj    7.95191138   0\nAlexandre    91asl1     Brunoy        64         F            dR      R        break    stop               V          Vstop    break       break          weak break      noun   NA           0\n
Run Code Online (Sandbox Code Playgroud)\n\n

从这个数据集中,我尝试realization使用许多不同的预测变量来预测三个级别的变量。这是我尝试过的模型之一:

\n\n
CG_imm       locuteur   enquete       loc_age   loc_sexe      left    liquid   right    articulation_C1    voice_C1   NC_C1    NC_right    voice_right    right2          pos    logfreq      realization\nabordable    44ajs1     Nantes        79         M            bl      l        p        stop               V          Vstop    stop        NV             NVstop          adj    NA           2\nadmettre     91adb1     Brunoy        54         M            tR      R        E        stop               N          NVstop   mid-vowel   V              mid-vowel       verb   6.52209279   0\nadorable     91aal1     Brunoy        27         F            bl      l        break    stop               V          Vstop    break       break          weak break      adj    NA           0\nagr\xc3\xa9able     92aaf2     PC            55         F            bl      l        break    stop               V          Vstop    break       break          strong break    adj    7.95191138   0\nagr\xc3\xa9able     21abm1     Dijon         31         M            bl      l        k        stop               V          Vstop    stop        NV             NVstop          adj    7.95191138   1\nagr\xc3\xa9able     75ccr2     Paris         NA         F            bl      l        break    stop               V          Vstop    break       break          break           adj    7.95191138   0\nagr\xc3\xa9able     69ajl1     Lyon          52         M            bl      l        break    stop               V          Vstop    break       break          weak break      adj    7.95191138   0\nAlexandre    91asl1     Brunoy        64         F            dR      R        break    stop               V          Vstop    break       break          weak break      noun   NA           0\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的完整数据集中,我选择作为随机效应的预测变量具有以下级别:

\n\n
k <- length(levels(df$realization))\nI <- diag(k-1)\nJ <- matrix(rep(1, (k-1)^2), c(k-1, k-1))\n\nprior1<-list(\n  R = list(fix=1, V=0.5 * (I + J), n = 2\n  ),\n  G = list(\n    G1 = list(V = diag(4), n = 4),\n    G2 = list(V = diag(8), n = 8),\n    G3 = list(V = diag(4), n = 4),\n    G4 = list(V = diag(4), n = 4),\n    G5 = list(V = diag(14), n = 14),\n    G6 = list(V = 3, n = 3),\n    G7 = list(V = 3, n = 3),\n    G8 = list(V = diag(6), n = 6)))\n\nm <- MCMCglmm(realization ~ -1 + trait + NC_C1*liquid + right2 + loc_age + logfreq + pos,\n              random = ~ us(trait):CG_imm + us(NC_C1*liquid):CG_imm +\n              us(trait):locuteur  + us(trait):enquete + us(right2):CG_imm +\n              us(loc_age):locuteur + us(log_freq):CG_imm + us(pos):CG_imm,\n              rcov = ~ us(trait):units,\n              prior = prior1,\n              burnin = 15000,\n              nitt = 40000,\n              family = "categorical",\n              data = df)\n
Run Code Online (Sandbox Code Playgroud)\n\n

所有固定效应预测变量都是分类变量,除了loc_agelog_freq 分类固定预测变量处于以下级别:

\n\n
> length(levels(ol_north$CG_imm))\n[1] 181\n> length(levels(ol_north$enquete))\n[1] 13\n> length(levels(ol_north$locuteur))\n[1] 129\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经摆弄了nG 结构列表和 R 结构中的值,并且调整了 G 结构中参数的值,diag()但无济于事。对于如此复杂的模型,我不确定我的错误到底发生在哪里。我已将模型简化为这样,并使其收敛,但有一个警告:

\n\n
> length(levels(ol_north$NC_C1))\n[1] 4\n> length(levels(ol_north$liquid))\n[1] 2\n> length(levels(ol_north$right2))\n[1] 14\n> length(levels(ol_north$pos))\n[1] 6\n
Run Code Online (Sandbox Code Playgroud)\n\n

非常感谢您提前提供的任何帮助!

\n

小智 0

除非您期望从数据中获得特定的内容,否则您可以尝试按以下方式设置先验:

priors <- list(R = list(diag(1), nu = 10^-6), G = list(G1 = list(V = 1, nu = 10^-6))) 
Run Code Online (Sandbox Code Playgroud)

设置这么小的 nu 意味着你设置了一个“平坦先验”,即你说“方差可能是 1,但我对此完全不确定”,所以你基本上不会影响马尔可夫链的开始位置。

您也可以查看这个教程。祝你好运!