R/RStudio新手求助:用线性回归拟合值填充age与tax缺失值
解决方案:用线性回归填充age和tax的缺失值
核心思路
先从原始数据中筛选出所有变量均无缺失值的子集,用这个子集训练回归模型;然后针对age或tax存在缺失的行,用模型预测拟合值来替换NA。
完整代码实现
# 假设你的数据框名为Data,变量名是小写:price、sqm、age、feats、ne、cor、tax # 1. 筛选出所有变量都无缺失值的训练集 train_data <- Data[complete.cases(Data), ] # 2. 训练age的回归模型(基于无缺失的训练数据) lm_age <- lm(age ~ price + sqm + feats, data = train_data) # 3. 训练tax的回归模型 lm_tax <- lm(tax ~ price + sqm + feats, data = train_data) # 4. 填充age的缺失值 # 定位age为NA的行索引,用对应行的自变量数据预测拟合值 age_na_idx <- which(is.na(Data$age)) Data$age[age_na_idx] <- predict(lm_age, newdata = Data[age_na_idx, ]) # 5. 填充tax的缺失值 tax_na_idx <- which(is.na(Data$tax)) Data$tax[tax_na_idx] <- predict(lm_tax, newdata = Data[tax_na_idx, ])
关键细节解释
- 训练集的选择:
complete.cases(Data)会筛选出所有变量(包括被预测的age/tax和自变量)都无缺失的行,确保训练模型的样本是完全完整的,避免lm自动删除含NA行带来的逻辑混乱。 - 变量名一致性:必须保证代码中的变量名和数据框
Data里的命名完全一致(比如你数据里是小写age,就不要写成大写AGE,这是原代码的典型错误)。 - 简化预测逻辑:不需要复杂循环,直接定位缺失行的索引,将这些行的自变量数据作为
newdata传入predict,就能精准生成对应缺失值的拟合结果并替换。
额外提示
如果你的自变量(price、sqm、feats等)也存在缺失值,需要先处理这些缺失,或者调整回归模型的自变量组合,确保训练集里的自变量都是完整的。
内容的提问来源于stack exchange,提问作者petar
相关产品推荐
相关产品推荐

