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

使用na.exclude将回归残差合并至含缺失值数据时失效的问题排查

问题原因及解决办法

核心问题:直接取d$residuals无法触发na.exclude的补NA逻辑

当你设置na.action = na.exclude时,lm函数确实会保留原始数据的行结构,为缺失值对应的位置预留NA,但**d$residuals是模型内部存储的仅包含有效拟合行的残差,并没有包含NA**。只有通过residuals(d)或resid(d)函数调用,才能激活na.exclude的规则,返回与原始数据行数一致、缺失值位置自动填充NA的残差向量。

另外,你用cbind合并数据时,如果P1的行数和test不一致(比如从d$residuals取的残差行数更少),会导致数据错位,进一步掩盖na.exclude的实际效果。

修正后的代码

# 拟合模型,保留na.exclude参数
d <- lm(log(br_prix) ~ sectoryear, data = test, na.action = na.exclude)

# 用residuals()获取带NA的完整残差向量,直接添加到原数据集
test <- test %>%
  dplyr::mutate(lnprice = residuals(d))

额外说明

  • residuals(d)会严格对应原始数据的行顺序,自动在缺失值行填充NA,无需手动处理行匹配
  • 用dplyr::mutate代替cbind更安全,能避免因行名、行数不一致导致的数据错位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:07:26