MASS::rlm函数na.action=na.exclude参数失效问题咨询
关于MASS包rlm函数na.action参数的问题解答
核心结论
MASS::rlm函数的na.action参数并未完全实现stats::na.exclude的预期功能——它不会自动在拟合值中保留原数据NA对应的位置,直接提取fit$fitted.values只会得到非缺失观测的拟合结果(长度为6)。
原因说明
rlm函数在处理NA值时,即便指定na.exclude,内部仅会剔除含NA的观测进行模型拟合,并不会像基础包lm函数那样,将原数据中NA对应的位置以NA填充到拟合值向量中。这是rlm实现上的特性,并非参数未生效。
解决方案
要得到与输入长度一致(包含NA)的拟合值,需使用predict()函数并指定na.action=na.exclude,示例代码如下:
ref_a <- c(13.70284,11.61466,16.03751,20.70219,13.85347,22.22926,18.16462,16.39861,14.62653,13.66633) m <- c(NA,NA,0.05286859,0.23125664,-0.55154806, 0.16420488,0.29565772 ,0.49802977, NA,NA) fit <- MASS::rlm(m ~ ref_a, na.action = stats::na.exclude) # 使用predict获取完整长度的拟合值 fit_values <- predict(fit, na.action = na.exclude) length(fit_values) # 10,与输入长度一致
该方法会在原数据NA的位置填充NA,最终拟合值总长度与输入的m和ref_a保持一致。
内容的提问来源于stack exchange,提问作者Arend Lis
相关产品推荐
相关产品推荐

