R语言中基于完美拟合线预测填充列NA缺失值的实现方法
实现方案
你可以通过拟合A、B的反比例关系模型,再调用predict()完成缺失值填充,具体实现如下:
步骤1:构建训练子集
首先提取A、B均无缺失的样本作为训练集:
train_df <- df[!is.na(df$B), ]
步骤2:两种建模填充方案
方案1:用lm()拟合后直接predict()填充
直接以B为因变量、1/A为自变量拟合线性模型(适配两者的反比关系),再直接预测缺失值:
# 拟合B和1/A的线性模型 model_B <- lm(B ~ I(1/A), data = train_df) # 定位B缺失的行 na_rows <- is.na(df$B) # 预测并填充缺失值 df$B[na_rows] <- predict(model_B, newdata = df[na_rows, ])
该方案的优势是会自动适配B和1/A的最优线性关系,兼顾数据整体分布趋势,填充后可以保留原有的反比关联特征。
方案2:非线性拟合得到最优k值填充
如果你需要严格维持A*B=k的完美反比关系,可以用非线性最小二乘拟合得到最优的k值后填充,比手动取均值的方法误差更小:
# 拟合A ~ k/B的非线性模型,得到最优k值 model_nls <- nls(A ~ k/B, data = train_df, start = list(k = mean(train_df$A * train_df$B))) k_opt <- coef(model_nls)["k"] # 填充缺失值 df$B[is.na(df$B)] <- k_opt / df$A[is.na(df$B)]
内容的提问来源于stack exchange,提问作者user16971617
相关产品推荐
相关产品推荐

