如何估计缺失数据?

机器算法验证 r 回归 估计 缺失数据 多重插补
2022-04-07 06:51:28

我正在使用具有 32 个观察值的几个自变量进行回归(从 1975 年到 2006 年,它们是年度数据)。这里的问题是 1980 年之前的变量之一不存在任何观测值。因此,该变量有 5 个缺失观测值(从 1975 年到 1979 年)。R中是否有任何方法可以为这些缺失值提供估计?顺便说一下,这里的解释变量是“总劳动力”,而且趋势非常明显。因此,我非常清楚,在统计上很有可能估计过去的值。

3个回答
x <- 1:30; y <- c(rnorm(25) + 1:25, rep(NA, 5)) #generate data with NAs
df1 <- data.frame(x, y)                         #combine into data frame
lmx <- lm(y~x, data=df1)                        #create model to predict from
ndf <- data.frame(x=1:30)                       #create data to predict to
df1$fit <- predict(lmx, newdata=ndf)            #get predictions
df1$y2 <- with(df1, ifelse(is.na(y) == T, fit, y)) 

最后一行在数据框中创建了一个新变量,其中包含所有旧变量以及回归中的拟合变量。

另一种方法是使用基于过去观察统计数据的模拟解决方案,例如Gibbs Sampling 。

我相信 R 对此有支持:http: //darrenjw.wordpress.com/2011/07/31/faster-gibbs-sampling-mcmc-from-within-r/

考虑数据丢失的可能原因通常是一个好主意,即完全随机丢失、随机丢失、非随机丢失。取决于此,估计缺失数据的方法可能存在偏差。

处理随机缺失数据的一种复杂方法是​​多重插补,它承认缺失数量的值存在不确定性。这可以使用MICE包在 R 中完成。nhanes这是一个使用包附带的数据的可重现示例:

library(mice)
imp <-mice(nhanes)
fit <-with(imp, lm(bmi~chl+hyp))
fit
summary(pool(fit))
complete(imp)  # returns the data with first imputed values. complete(imp,2) returns 2nd set