You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用lm含poly项时调用ggResidPanel::resid_panel绘制残差图报错

解决ggResidPanel::resid_panel()与poly()兼容的行数不匹配问题

核心原因

这个错误是因为poly(x, degree=2)会生成两个术语(线性项和二次项),而resid_panel()在处理这些自动命名的复合术语时,错误地重复赋值数据,导致试图用200行数据替换原数据框的100行。

解决方法

方法1:手动创建多项式项(最可靠)

直接在数据框中生成所需的多项式特征,避开poly()自动生成的特殊术语,让模型变量名更清晰,同时彻底规避这个bug:

df <- data.frame(x=rnorm(100), y=rnorm(100))
# 手动生成二次项
df$x_sq <- df$x^2
# 拟合模型
limo <- lm(y~x+x_sq, data=df)
# 正常绘制诊断图
resid_panel(limo)

方法2:手动重命名正交多项式术语(可选)

如果需要使用正交多项式,可以保留poly()但手动重命名生成的术语,避免resid_panel()的解析错误:

df <- data.frame(x=rnorm(100), y=rnorm(100))
# 生成正交多项式并自定义列名
poly_terms <- poly(df$x, degree=2)
colnames(poly_terms) <- c("x_poly1", "x_poly2")
df <- cbind(df, poly_terms)
# 拟合模型
limo <- lm(y~x_poly1+x_poly2, data=df)
# 绘制诊断图
resid_panel(limo)

方法3:使用替代工具包

如果不想修改模型构建逻辑,可以用car包的residualPlots()函数,它对含poly()的模型支持更稳定:

library(car)
residualPlots(limo)

内容的提问来源于stack exchange,提问作者Gmichael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:44:55