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

R语言lm回归使用~.排除指定变量运行异常问题咨询

问题原因
  • 核心原因是lm()的缺失值处理逻辑和公式中.的解析规则差异:
    lm()默认对所有公式中涉及的变量执行行删除(只要某变量有缺失值,对应整行观测都会被丢弃)。当你使用Life.expectancy ~ . - Alcohol - Total.expenditure简写时,R解析公式时会先将数据框所有列(包括你要排除的Alcohol、Total.expenditure)纳入缺失值检查范围,只要这两个变量存在缺失值,对应行就会被删除。你提供的输出里简写写法共删除了181个观测,仅剩2个有效观测,自然会出现自由度为0、系数大量为NA的异常结果。
    而你手动输入自变量时,公式里完全没有出现Alcohol和Total.expenditure,lm()只会检查你手动列出的变量的缺失值,仅删除了53个观测,样本量足够得出正常结果。
  • 额外笔误提醒:你最初贴的错误长公式里将因变量Life.expectancy也放入了自变量列表,不过你实际运行的长公式已修正该问题,不影响结果。
解决方法

两种方案都可以实现简写需求,同时避开上述问题:

  1. 提前从数据框中删除不需要的变量,再用.简写建模
# 先移除Alcohol、Total.expenditure两列
life_2015_clean_v2 <- subset(life_2015_clean, select = -c(Alcohol, Total.expenditure))
# 直接用.代表所有剩余自变量
modreg_trein <- lm(Life.expectancy ~ ., data = life_2015_clean_v2)
  1. 动态构造回归公式,不用.简写
# 提取所有自变量,排除因变量和不需要的两个变量
predictors <- setdiff(colnames(life_2015_clean), c("Life.expectancy", "Alcohol", "Total.expenditure"))
# 生成公式
reg_formula <- reformulate(predictors, response = "Life.expectancy")
# 建模
modreg_trein <- lm(reg_formula, data = life_2015_clean)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:03