我有一个数据集,其中增长率作为响应变量(resp在示例中),温度、食物供应和盐度作为预测变量(pred1在pred3示例中)。预测变量是“连续的”,具有每周间隔并且具有不同的单位。测量跨越一年(week在示例中;从实验开始时定义)每周一次(某些样本的缺失值)。我有几个样本,我想量化(在所有样本上):
- 每个预测变量在多大程度上解释了增长率的变化
- 每个预测变量对增长率的相对影响
我知道线性混合模型可以解决这个问题,因为随着时间的推移,我有几个样本和相关的测量值。我的问题是:使用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")
据我所知并假设我的模型公式正确,通过此处发布的方法计算的边际

对于相对效应(第 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 不越过水平线(据我所知)。我不确定这些方法是否有意义,这就是我寻求帮助的原因。