转载https://blog.csdn.net/yyykkklll123/article/details/83867076
步骤:
1.识别缺失值
2.分析缺失的原因
3.查看缺失值情况
4.处理缺失值
识别
判断缺失值:is.na()
识别矩阵或数据框中的完整观测:complete.cases()
any(is.na(data)):检查是否存在缺失值
head(is.na(data $ col1),5):查看数据data中col1列前5个数据的缺失情况
sum(is.na(data $ col1)):计算col1列中的缺失值个数
sum(!is.na(data $ col1)):计算col1列中的非缺失值个数
mean(!complete.cases(data)):计算data中完整行的百分比
newdata=data[complete.cases(data),]:从data中提取出完整观测
deldata=data[!complete.cases(data),]:从data中提取出非完整观测
分析缺失的原因
MCAR:完全随机缺失,即某变量缺失值与它所在变量其他观测值无关,与其他变量也无关。
MAR:随机缺失,即某变量出现缺失与其他变量相关,与自身未观测值不相关(大多数情况下处理的都是这种数据)
MANR:非随机缺失,即变量出现缺失与其观测值有关,需要用专门的方法重新收集数据。
查看缺失值情况
1.列表显示:
加载mice包(实现处理丢失数据方法的包)
md.pattern()函数:md.pattern(x, plot = TRUE)
生成一个显示缺失值模式(0,1)的表格,0表示列中有缺失值,1表示没有
2.图形显示:
加载VIM包(可视化缺失值、插补值)
aggr()函数:绘制变量缺失值个数
aggr(x, delimiter = NULL, plot = TRUE, …)
处理缺失值
删除法
1.行删除(个案删除)
适用:缺失数据较少,且分散
缺点:造成数据浪费,估计参数可能会有偏
data[complete.cases(data),]
2.成对删除
优点:用到了 所以可获取的信息,在MCAR时可,参数估计无偏
缺点:相关系数矩阵可能不正定,难以选择用哪个样本量计算标准误,用平均的可能造成低估
apply(data,2,mean,na.rm=T)
cor(data,use=‘pair’)
插补
1.用代表中心趋势的值插补缺失
选择中位数、平均数、众数中哪一个由分布决定
近似正态分布:均值插补
偏态分布:中位数插补
例:使用内置数据集实现均值插补
2.回归插补
方法:对缺失变量和已观测变量建立回归方程,用缺失变量的预测值对缺失值进行插补
例:
3.随机回归插补
在回归预测值上增加随机因素
(这种方法生成的插补值可能有负数,这是由于加入随机因素引起的)
4.多重插补
基于重复模拟插补缺失值
5.K临近法
根据样本观测值之间的相关性,利用欧氏距离寻找与缺失观测最相似的k个样本中的观测,填补缺失值
DMwR包中knnInputation函数可以实现这种方法