代码之家  ›  专栏  ›  技术社区  ›  Cmagelssen

将拟合回归模型中的数据分配到新列会导致错误:分配的数据必须与现有数据兼容

  •  0
  • Cmagelssen  · 技术社区  · 3 年前

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

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

    testplot

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

    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.
    
    

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

    0 回复  |  直到 3 年前
        1
  •  1
  •   cazman    3 年前

    您之所以会出现此错误,是因为模型拟合时丢失了丢失的值。因此,拟合值比数据少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个。拟合值为黑色,原始数据为彩色。

    enter image description here