用 lmer 绘制个体和种群回归线

plot individual and population regression lines with lmer

我正在使用 cake 数据集并构建了以下模型

mod <- lmer(angle ~ recipe*temp + (1|replicate), data=cake)
newdat <- expand.grid(recipe=unique(cake$recipe),
              temp=c(min(cake$temp),
                     max(cake$temp)))

然后我想为每个 replicate 分别绘制每个 recipe 的回归线(ABC

 ggplot(cake, aes(x=temp, y=angle, color=recipe)) +
      geom_line(aes(y=predict(mod), group=replicate, size="Replicate")) +
      geom_line(data=newdat, aes(y=predict(mod, re.form=~0, newdata=newdat), size="Population")) +
      scale_size_manual(name="Predictions", values=c("Replicate"=0.5, "Population"=1))

我有两个问题。首先,PopulationBC 似乎不平行,即使我没有定义随机斜率模型。 其次,我无法使上面的代码绘制每个 replicaterecipe 分割的回归线。

要回答你的第一个问题,你的线不平行,因为你的公式中有 recipetemp 之间的交互项。因此, 固定效应 具有不同的斜率(即 temp 的每单位变化 angle 的变化取决于 recipe)。即使我们绘制一个简单的 lm:

我们也可以看到这一点
library(ggplot2)

mod <- lm(angle ~ recipe * temp, data = cake)

newdat <- expand.grid(recipe=unique(cake$recipe),
                      temp=c(min(cake$temp),
                             max(cake$temp)))
newdat$angle <- predict(mod, newdata = newdat)

ggplot(cake, aes(temp, angle, color = recipe)) + 
  geom_point(position = position_jitter(width = 1)) +
  geom_line(data = newdat) +
  scale_y_continuous(limits = c(25, 40))

要回答第二个问题,您需要根据 replicaterecipe 的相互作用进行分组,以便为​​每个重复获得正确的彩色线条。您还需要为它们生成单独的 lm 行。最简单的方法是通过 geom_smoothmethod = lm:

ggplot(cake, aes(temp, angle, color = recipe)) + 
  geom_point(position = position_jitter(width = 1)) +
  geom_smooth(aes(group = interaction(replicate, recipe)), se = FALSE, method = lm)