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

R中subset()删列与公式内直接删变量的差异及结果不同原因

两种移除变量的lm回归方法差异解析

在分析airquality数据集时,以下两段看似都是移除Solar.R变量的代码,却得到不同的回归结果:

data(airquality)

# using subset()
summary(lm(Ozone ~., data = subset(airquality, select = -Solar.R)))

# direct manipulation
summary(lm(Ozone ~. -Solar.R, data = airquality))

核心差异:缺失值处理顺序不同

  • subset()前置移除列:subset(airquality, select = -Solar.R)会先从数据集中删除Solar.R列,再将剩余数据(Ozone、Wind、Temp、Month、Day)传入lm()。lm()默认执行na.action = na.omit,此时仅会删除剩余列中存在缺失值的行——也就是只剔除Ozone有缺失的行。
  • 公式内移除变量:Ozone ~. -Solar.R是在模型公式层面排除Solar.R,但lm()会先基于完整原始数据集处理缺失值:只要原始数据中任意一列(包括Solar.R)存在缺失值,该行就会被剔除,之后再在剩余的无缺失值样本中拟合去掉Solar.R的模型。

结果不同的具体原因

airquality数据集中,Solar.R存在7行缺失值,Ozone存在37行缺失值:

  • 使用subset()方法时,最终参与回归的样本量为116行(仅剔除Ozone缺失的行);
  • 使用公式移除方法时,最终参与回归的样本量为111行(剔除所有含Solar.R或Ozone缺失的行)。
    由于参与回归的样本集合不同,最终得到的回归系数、拟合优度等结果自然存在差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:57:39