r - 将拟合回归模型中的数据分配给新列会导致错误:分配的数据必须与现有数据兼容
问题描述
我正在尝试用 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.
有没有办法绕过这个问题?
解决方案
您收到该错误是因为在拟合模型时丢失了缺失值。因此,拟合值包含的数据比数据少 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 个。拟合值是黑色的,原始数据是彩色的。
推荐阅读
- javascript - addblogging.js:5 未捕获的类型错误:无法读取文本区域的 null 属性“值”
- idris - 如何在 idris 中连接字符串和字符?
- google-apps-script - 如何使用 Apps 脚本将特定格式的日期从单元格中的 HTML 表单中获取到 Google 电子表格中
- visual-studio-code - 无法在当前工作目录中运行主类
- amazon-web-services - AWS EMR Spark 错误,“无法加载 driverClassName com.mysql.jdbc.Driver 的类”
- javascript - NodeJS - 与承诺的异步 - 没有按预期工作
- flutter - 访问和取消 dart/flutter 中的周期性计时器
- c - curl 替代 InternetReadFile
- python - 将字符串传递给数据框 - For 循环
- sql-server - Azure Resource Mover 和 SQL Server 是否存在丢失数据的风险?