数据缺失必须被优先处理。如果是缺失的很少很少,无伤大雅,那么直接删了也没问题。除此之外,应该想办法补上它,i.e. 预测。
Little和Ruth(1987)把数据缺失的机制分为三类:
完全随机缺失(missing completely at random, MCAR)
所缺失的数据是完全随机的,缺失发生的概率既与已观察到的数据无关,也与未观察到的数据无关。这是一种比较理想的情况。
随机缺失(missing at random, MAR)
数据的缺失不是完全随机的。缺失数据发生的概率与所观察到的变量是有关的,而与未观察到的数据的特征是无关的。这是一个比较严重的问题,在这种情况下,我们需要进一步检查数据收集过程,并尝试了解数据为什么丢失。 例如,如果在一项问卷调查中,大多数人没有回答某个问题,他们为什么这么做,是问题不清楚吗?
不可忽略的缺失(non-ignorable missing ,NIM)
亦称为非随机缺失(not missing at random, NMAR),也有研究者将其称为MNAR(missing not at random)。 缺失数据不仅依赖于其它变量,又依赖于变量本身,这种缺失即为不可忽略的缺失。
一般MAR碰见多一些。在R语言中,非常容易搞定。只需要用mice库。更多应用请参考帮助文档。http://www.stefvanbuuren.nl/publications/MICE%20V1.0%20Manual%20TNO00038%202000.pdf
mice是链式方程多元插值的简写(Multivariate Imputation by Chained Equations)。R中有个同名包提供了多种先进的缺失值处理方法。它使用一种颇不常见的方法来进行两步插值:先利用mice函数建模再用complete函数生成完整数据。效果非常的好,令人惊讶。注意mice库假设数据缺失为MAR。
下面的程序使用mice库自带的数据nhanes
library(mice)
nhanes
md.pattern(nhanes)
# 返回数据的缺失值的模式
imp <- mice(nhanes, imputationMethod = c(' ', 'norm', 'pmm', 'mean'))
# 指定选用的方法,空字符表示这一列没有缺失值。
imp$imp
#查看生成的数据,默认生成五个备选组
x <- complete(imp,1)
# 生成完整数据
#假设我们的数据有一个线性回归:
fit <- lm.mids(chl~age+hyp, imp)
# lm.mids( )将会对五个备选数据都做回归
pool(fit)
summary(pool(fit))
# 可以筛选下哪一个数据集最好
这篇文章https://datascienceplus.com/imputing-missing-data-with-r-mice-package/讨论了更多mice库的应用,但是最基础的也就是这些了。
网友评论