我想比较使用MCMCglmm
估算的响应变量的模拟(“拟合”)值和零膨胀泊松分布以及来自数据的观测值。任何人都可以建议从这样的模型中提取响应变量的条件均值的机制吗?基本上,我只想使用观察到的数据和模型中响应变量的预测值来计算残差,但predict
中的zipoisson-family模型的数据比例尚未实现MCMCglmm
。
require(MCMCglmm)
example = data.frame(response=rbinom(10000,1,0.05), predictorA=rnorm(10000,100,10),
predictorB=rnorm(10000,50,5), predictorC=rnorm(10000,1000,100),
predictorD=rnorm(10000,10,1), predictorE=rnorm(10000,10000,1),
randomA=runif(10000,1,10), randomB=runif(10000,75,90),
randomC=runif(10000,800,10000))
pois_example = round(example,0)
gen_lin_mix_mod = MCMCglmm(fixed = response ~ predictorA + predictorB + predictorC +
predictorD + predictorE,
random = ~ randomA + randomB + randomC,
family = "zipoisson", data = pois_example, nitt = 10000,
burnin = 1000, rcov = ~ idh(trait):units, DIC = TRUE)
更新
在Jarrod Hadfield的课程笔记文件中,似乎有一种用于计算预测值的“手动”方法:
在对MCMCglmm的调用中,我们指定了saveX = TRUE和saveZ = TRUE 表明我们想保存设计矩阵。我们可以结合起来 这些矩阵进入设计矩阵W并乘以参数 向量θ得到预测(见方程2.9):
W.1< -cBind(m4a.1 $ X,m4a.1 $ Z)#note X和Z稀疏所以使用cBind
prediction.1< -W.1%*%posterior.mode(m4a.1 $溶胶)
xyplot(weight+prediction.1@x~Time | Chick,data = ChickWeight)
但是,当我尝试实现这个时,我收到以下错误:
design_mat = cBind(gen_lin_mix_mod$X, gen_lin_mix_mod$Z)
fitted = design_mat %*% posterior.mode(gen_lin_mix_mod$Sol)
observed = example
> design_mat = cBind(gen_lin_mix_mod$X, gen_lin_mix_mod$Z)
> fitted = design_mat %*% posterior.mode(gen_lin_mix_mod$Sol)
Error in design_mat %*% posterior.mode(gen_lin_mix_mod$Sol) :
Cholmod error 'X and/or Y have wrong dimensions' at file ../MatrixOps/cholmod_sdmult.c,
line 90
答案 0 :(得分:1)
除了pr = TRUE
和saveX = TRUE
选项之外,您是否添加了saveZ = TRUE
?如果没有,gen_lin_mix_mod$Sol
仅包含固定效果而非随机效果。这就是维度不正确的原因。