首页 > 解决方案 > 将拟合回归模型中的数据分配给新列会导致错误:分配的数据必须与现有数据兼容

问题描述

我正在尝试用 ggplot2 绘制我的线性混合效应模型,但我很难绘制单个数据点。

因为我在模型中包含了预测试作为协变量,并且预测试的条件均值之间存在一些差异,所以模型的估计均值与样本均值有很大不同。最好用一张测试图来说明这一点:

测试图

现在,我想绘制各个数据点的调整值,但我很难在 R 中实现这一点。我发现了一个相关问题(here),所以我尝试使用 fit() 函数但收到错误消息:

CI_post <- lmer(
  post.diff ~ 
    pre.diff +
    group * course 
  + (1|bib) 
  + (1|school), 
  data = dat, 
  REML = FALSE)

dat$fitted <- fitted(CI_post)

#########
Error: Assigned data `fitted(CI_post)` must be compatible with existing data.
x Existing data has 156 rows.
x Assigned data has 154 rows.
ℹ Only vectors of size 1 are recycled.

有没有办法绕过这个问题?

标签: rlme4

解决方案


您收到该错误是因为在拟合模型时丢失了缺失值。因此,拟合值包含的数据比数据少 2,因此存在误差。我用一些假数据复制了这个。

> nrow(data)
[1] 32
> nrow(fitted_values)
[1] 30
> data$fitted = fitted_values$fitted.fit.
Error in `$<-.data.frame`(`*tmp*`, fitted, value = c(20.4094804918911,  : 
  replacement has 30 rows, data has 32

为了解决这个问题,您可以删除模型删除的观测值,或者将原始数据留在拟合值上(这将删除不在该集中的观测值)。

fitted_values = left_join(x = fitted_values,
                          y = data,
                          by = c("car"))
> head(fitted_values[, 1:5])
  fitted.fit.               car  mpg cyl disp
1    20.40948         Mazda RX4 21.0   6  160
2    20.16342     Mazda RX4 Wag 21.0   6  160
3    26.89532        Datsun 710 22.8   4  108
4    19.10009    Hornet 4 Drive 21.4   6  258
5    14.99109 Hornet Sportabout 18.7   8  360
6    18.75736           Valiant 18.1   6  225

然后将这些点添加到绘图中。

  ... +
  geom_point(data = fitted_values,
             aes(x = factor(cyl),
                 y = fitted.fit.),
             position = position_jitter(width = 0.1))

这会产生以下图,其中拟合值比原始数据少 2 个。拟合值是黑色的,原始数据是彩色的。

在此处输入图像描述


推荐阅读