可以这样来处理——
1.删除法在不影响数据结构的情况下,删除法是最简单的将缺失数据集转变成完整数据集的方法。根据数据处理的不同角度,可以将删除法分为以下4种。
(1)删除观测样本。
(2)删除变量:当某个变量缺失值较多且对研究目标影响不大时,可以将整个变量整体删除。
(3)使用完整原始数据分析:当数据存在较多缺失而其原始数据完整时,可以使用原始数据替代现有数据进行分析。
(4)改变权重:当删除缺失数据会改变数据结构时,通过对完整数据按照不同的权重进行加权,可以降低删除缺失数据带来的偏差。
2.插补法
删除数据虽然简单易行,但会带来信息浪费、改变数据结构等问题,因此在条件允许的情况下,找到缺失值的替代值来进行插补,尽可能还原真实数据是更好的方法。
下面介绍均值插补、回归插补、二阶插补、热平台、冷平台、抽样填补等单一变量插补,多变量插补是单变量插补的推广,请读者自行尝试。
在插补方法中,最简单的是从总体中随机抽取某个样本代替缺失样本。
R程序如下:
> sub=which(is.na(nhanes2[,4])==TRUE) # 返回nhanes2数据集中第4列为NA的行
> dataTR=nhanes2[-sub,] # 将第4列不为NA的数存入数据集dataTR中
> dataTE=nhanes2[sub,] # 将第4列为NA的数存入数据集dataTE中
> dataTE[,4]=sample(dataTR[,4],length(dataTE[,4]),replace=T)# 在非缺失值中简单抽样
> dataTE
age bmi hyp chl
1 20-39 NA <NA> 206
4 60-99 NA <NA> 204
10 40-59 NA <NA> 206
11 20-39 NA <NA> 113
12 40-59 NA <NA> 229
15 20-39 29.6 no 199
16 20-39 NA <NA> 218
20 60-99 25.5 yes 187
21 20-39 NA <NA> 199
24 60-99 24.9 no 238
均值法是通过计算缺失值所在变量所有非缺失观测值的均值,使用均值来代替缺失值的插补方法。
类似的,可以使用中位数、四分位数等进行插补,下面仅以均值法为例来对nhanes2数据集的第4列进行实现。
> sub=which(is.na(nhanes2[,4])==TRUE) # 返回nhanes2数据集中第4列为NA的行
> dataTR=nhanes2[-sub,] # 将第四列不为NA的数存入数据集dataTR中
> dataTE=nhanes2[sub,] # 将第四列为NA的数存入数据集dataTE中
> dataTE[,4]=mean(dataTR[,4]) # 用非缺失值的均值代替缺失值
> dataTE
age bmi hyp chl
1 20-39 NA <NA> 191.4
4 60-99 NA <NA> 191.4
10 40-59 NA <NA> 191.4
11 20-39 NA <NA> 191.4
12 40-59 NA <NA> 191.4
15 20-39 29.6 no 191.4
16 20-39 NA <NA> 191.4
20 60-99 25.5 yes 191.4
21 20-39 NA <NA> 191.4
24 60-99 24.9 no 191.4
|