我在使用lme4预测函数时遇到了一些困难。当进行预测时,我想要设置一些解释变量为指定水平,但是要在其他变量上取平均值。
这里有一些虚构的数据,是我原始数据集的简化版本:
a <- data.frame(
TLR4=factor(rep(1:3, each=4, times=4)),
repro.state=factor(rep(c("a","j"),each=6,times=8)),
month=factor(rep(1:2,each=8,times=6)),
sex=factor(rep(1:2, each=4, times=12)),
year=factor(rep(1:3, each =32)),
mwalkeri=(sample(0:15, 96, replace=TRUE)),
AvM=(seq(1:96))
)
AvM编号是水田鼠的识别编号。响应变量(mwalkeri)是每只田鼠身上跳蚤数量的计数。我感兴趣的主要解释变量是Tlr4,这是一个拥有3个不同基因型(编码为1、2和3)的基因。其他解释变量包括生殖状态(成年或幼年)、月份(1或2)、性别(1或2)和年份(1、2或3)。我的模型如下所示(当然,该模型对于虚构数据现在已经不合适,但这并不重要):
install.packages("lme4")
library(lme4)
mm <- glmer(mwalkeri~TLR4+repro.state+month+sex+year+(1|AvM), data=a,
family=poisson,control=glmerControl(optimizer="bobyqa"))`
summary(mm)
我希望可以预测每个不同Tlr4基因型的寄生虫负担,同时考虑到所有其他协变量。为了达到这个目的,我创建了一个新的数据集来指定我想要设置每个解释变量的水平,并使用预测函数:
b <- data.frame(
TLR4=factor(1:3),
repro.state=factor(c("a","a","a")),
month=factor(rep(1, times=3)),
sex=factor(rep(1, times=3)),
year=factor(rep(1, times=3))
)
predict(mm, newdata=b, re.form=NA, type="response")
这种方法虽然可行,但我更希望能够对多年份进行平均,而不是将年份设定为一个特定的级别。然而,每当我尝试对年份进行平均时,就会出现以下错误信息:
我是否可以跨年份进行平均,而不是选择指定的级别?此外,我还没有找到如何获取这些预测的标准误差的方法。目前我唯一能够获取预测标准误差的方式是使用Error in model.frame.default(delete.response(Terms), newdata, na.action = na.action, : factor year has new level
lsmeans()
函数(来自 lsmeans 包):c <- lsmeans(mm, "TLR4", type="response")
summary(c, type="response")
这会自动生成标准误差,但是它是通过对所有其他解释变量进行平均而生成的。我相信可能可以更改这一点,但如果可以的话,我宁愿使用 predict()
函数。我的目标是创建一个图表,其中Tlr4 基因型在 x 轴上,预测寄生虫负荷在 y 轴上,以演示在考虑所有其他显著协变量的情况下,每个基因型的预测寄生虫负荷的差异。
predict()
应该非常容易。你可以尝试在代码中包含一些尝试的内容和精确的错误信息。 - MrFlickpredict()
时我没问题,但是如果我尝试做其他事情(例如取年份的平均值),我就无法使其正常工作。一如既往,任何建议都将不胜感激! - Martha?predict.merMod
帮助页面中,他们有一条注释说:“没有计算预测标准误差的选项,因为很难定义一种有效的方法来包含方差参数的不确定性;我们建议使用bootMer来完成此任务。”因此,您可能需要考虑引导法来估计误差(除非您有其他计算方法)。 - MrFlick