我尝试为GLLM进行基于模拟的功效分析,如here所述。
我的模型对象使用带有日志链接的Gamma分布来配置glmer:
fit.gamma = glmer(time ~ display + root + technique + order + (1|user), data=Static, family = Gamma(link="log"))
当我提供拟合的模型对象时,响应的模拟效果很好:
simulate(fit.gamma, nsim=1, newdata=expdat)
结果看起来不错:
sim_1
1 1.8300779
2 12.8543403
3 30.7541107
4 8.2714460
5 162.2040545
但是,当我通知模型公式和模型的参数时,我得到警告和输出错误:
newparams <- list(beta = fixef(fit.gamma), theta = getME(fit.gamma, "theta"),
sigma = getME(fit.gamma, "sigma"))
simulate(~ display + root + technique + order + (1|user),
nsim=1,
family=Gamma(link="log"),
newdata=expdat,
newparams=newparams,
allow.new.levels=T)
我收到以下警告:
Warning message:
In rgamma(nsim * length(ftd), shape = shape, rate = shape/ftd) :
NAs produced
响应向量看起来像这样:
sim_1
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
可以使用以下代码重现该问题:
dd <- data.frame(x=rep(seq(-2,2,length=15),10), f=factor(rep(1:10,each=15)));
dd$y <- simulate(~x+(1|f), family=Gamma(link="log"), seed=101, newdata=dd, newparams=list(beta = c(0,2), theta = 1, sigma = 1))[[1]]
使用公式会更好,因为我可以操作参数来模拟各种效果大小。
函数模拟应该适用于模型对象或公式。我错过了什么吗?有没有一个论据我没有传递给函数?