如何制定线性混合模型以找出连续变量的影响?

机器算法验证 r 混合模式 lme4-nlme
2022-04-13 07:23:28

我有一个数据集,其中增长率作为响应变量(resp在示例中),温度、食物供应和盐度作为预测变量(pred1pred3示例中)。预测变量是“连续的”,具有每周间隔并且具有不同的单位。测量跨越一年(week在示例中;从实验开始时定义)每周一次(某些样本的缺失值)。我有几个样本,我想量化(在所有样本上):

  1. 每个预测变量在多大程度上解释了增长率的变化
  2. 每个预测变量对增长率的相对影响

我知道线性混合模型可以解决这个问题,因为随着时间的推移,我有几个样本和相关的测量值。我的问题是:使用R 包的最佳模型公式是什么?lme4

示例数据可在此处获得。这是它的概述:

library(ggplot2)
tmp <- melt(X, id = c("Sample", "weeks"))
ggplot(tmp, aes(x = weeks, y = value)) + geom_line() + facet_wrap(Sample ~ variable, scales = "free_y")

在此处输入图像描述

我试过以下:

作为第 1 点的解决方案:

library("lme4")
library("MuMIn")

p1 <- lmer(resp ~ pred1 + (1|Sample) + (1|weeks), data = X)
p2 <- lmer(resp ~ pred2 + (1|Sample) + (1|weeks), data = X)
p3 <- lmer(resp ~ pred3 + (1|Sample) + (1|weeks), data = X)

margr2 <- data.frame(Pred = c("pred1", "pred2", "pred3"), marginal.R2 = c(r.squaredGLMM(p1)[[1]], r.squaredGLMM(p2)[[1]], r.squaredGLMM(p3)[[1]]))

ggplot(margr2, aes(x = Pred, y = marginal.R2)) + geom_bar(stat = "identity")

据我所知并假设我的模型公式正确,通过此处发布的方法计算的边际R2

在此处输入图像描述

对于相对效应(第 2 点),我认为我首先必须将预测变量放在相同的尺度上。只有这样我才能通过将它们全部放在模型中并删除截距来比较它们:

Xs <- X
Xs[4:6] <- scale(Xs[4:6])

mod <- lmer(resp ~ pred1 + pred2 + pred3 - 1 + (1|weeks) + (1|Sample), data = Xs)
cis <- confint(mod)[4:6,]

releff <- data.frame(par = rownames(cis), lower = cis[,1], est = fixef(mod), upper = cis[,2])

为了使解释更直观,我将效果缩放到跨置信区间的最大绝对值(我只对相对效果感兴趣):

tmp <- c(releff$lower,releff$upper)

add <- 100*releff[c("lower", "est", "upper")]/max(abs(tmp))
colnames(add) <- paste0("rel.", colnames(add))

releff <- cbind(releff, add)

ggplot(releff, aes(x = par, y = rel.est, ymin = rel.lower, ymax = rel.upper)) + geom_pointrange() + geom_hline(yintercept = 0)

在此处输入图像描述

预测变量是“显着的”,其中 CI 不越过水平线(据我所知)。我不确定这些方法是否有意义,这就是我寻求帮助的原因。

1个回答

改进所使用的边际计算的一个想法是使用模型中包含的其他预测变量来评估这一点。就目前而言,边际计算一次只考虑一个预测变量。R2R2

另一种方法是拟合两个模型。一个模型包含所有预测变量,另一个模型删除了一个预测变量。然后可以比较模型以查看由于移除预测变量而导致例如:R2

m1 <- lmer(resp ~ pred1 + pred2 + pred3 + (1|weeks) + (1|Sample), data = Xs)
m2 <- lmer(resp ~ pred2 + pred3 + (1|weeks) + (1|Sample), data = Xs)

r.squaredGLMM(m1)[[1]]-r.squaredGLMM(m2)[[1]]

这告诉您,只需删除第一个预测变量,边际就会下降很多。这与您的方法相呼应,但具有在用于计算拟合优度的模型中包含所有相关预测变量的额外好处。R2

关于构建合适的模型,为什么要删除截距?这是一条关键信息。当您这样做时,您将强制模型通过原点。具体来说,您强制执行当预测变量取值为 0 时,预测响应必须为 0。我怀疑这可能不是您想要的。

既然您说您对预测变量的相对影响感兴趣,那么像您所做的那样标准化您的预测变量是一个好主意。

另一种方法是使用缩放预测器拟合模型,例如:

m3 <- lmer(resp ~ pred1 + pred2 + pred3 + (1|weeks) + (1|Sample), data = X)

由于您对预测变量进行了标准化,因此估计的代表预测变量对结果的相对影响。βresp

为了检验这些关系是否可能不仅在样本中而且在总体中为真,一种明智的方法是进行模型比较,例如似然比检验、AIC 或 BIC。

这样做的方法是逐步删除预测变量,并将两个模型与您选择的比较方法进行比较。如果此类比较显示预测变量对整体拟合的改善没有显着贡献,那么您可以从模型中删除此预测变量,并考虑报告该预测变量与您的结果之间似乎没有关系。这个网站上有很多信息可以进行模型比较。