我正在尝试使用MCMCglmm
R 中的包创建模型。
数据的结构如下,其中 dyad、focal、other 都是随机效应,predict1-2 是预测变量,响应 1-5 是捕获不同亚型观察到的行为的结果变量:
dyad focal other r present village resp1 resp2 resp3 resp4 resp5
1 10101 14302 0.5 3 1 0 0 4 0 5
2 10405 11301 0.0 5 0 0 0 1 0 1
…
因此,只有一个结果(教学)的模型如下:
prior_overdisp_i <- list(R=list(V=diag(2),nu=0.08,fix=2),
G=list(G1=list(V=1,nu=0.08), G2=list(V=1,nu=0.08), G3=list(V=1,nu=0.08), G4=list(V=1,nu=0.08)))
m1 <- MCMCglmm(teaching ~ trait-1 + at.level(trait,1):r + at.level(trait,1):present,
random= ~idh(at.level(trait,1)):focal + idh(at.level(trait,1)):other +
idh(at.level(trait,1)):X + idh(at.level(trait,1)):village,
rcov=~idh(trait):units, family = "zipoisson", prior=prior_overdisp_i,
data = data, nitt = nitt.1, thin = 50, burnin = 15000, pr = TRUE, pl = TRUE, verbose = TRUE, DIC = TRUE)
Hadfield 的课程笔记(第 5 章)给出了一个多项模型的示例,该模型仅使用具有 3 个级别的单个结果变量(3 种类型的羊角)。可以在这里找到类似的处理方法:http: //hlplab.wordpress.com/2009/05/07/multinomial-random-effects-models-in-r/这对我正在做的事情不太正确,但包含有用背景资料。
另一个参考资料(Hadfield 2010)给出了一个多响应 MCMCglmm 的示例,它遵循相同的格式,但使用 cbind() 来预测响应向量,而不是单个结果。具有多个响应的相同模型如下所示:
m1 <- MCMCglmm(cbind(resp1, resp2, resp3, resp4, resp5) ~ trait-1 +
at.level(trait,1):r + at.level(trait,1):present,
random= ~idh(at.level(trait,1)):focal + idh(at.level(trait,1)):other +
idh(at.level(trait,1)):X + idh(at.level(trait,1)):village,
rcov=~idh(trait):units,
family = cbind("zipoisson","zipoisson","zipoisson","zipoisson","zipoisson"),
prior=prior_overdisp_i,
data = data, nitt = nitt.1, thin = 50, burnin = 15000, pr = TRUE, pl = TRUE, verbose = TRUE, DIC = TRUE)
我在这里有两个编程问题:
如何为此模型指定先验?我已经查看了这篇文章中提到的材料,但无法弄清楚。
我运行了一个只有两个响应变量的类似版本,但我只得到一个斜率 - 我认为我应该为每个
resp
变量得到不同的斜率。我哪里出错了,或者我误解了模型?