目录
一、缺失值的定义
NA-> not available
二、缺失值的表示方式
R,S-Plus用 “NA”;SAS用“.”;Minitab用“*” ;matlab用“NaN”或“missing”,excel用“ ”表示;
或者自己编码,采用某个明显不合理的值,即特征值,比如,使用999来代替人类空缺的年龄值
三、缺失值的类型
1、完全随机缺失(MCAR)【可忽略】
完全随机的,是可以忽略的。
2、随机缺失(MAR)
3、非随机缺失(MNAR)【不可忽略的】
不可量化,不能简单处理。
四、对待缺失值的策略
• 直接删除包含缺失值的记录
• 简单插值策略,用估计值代替缺失值
• 多重插补策略,用多个估计值代替缺失值,分析多个结果产生或组合插补值
• 用最大期望(expectation maximaization, EM)算法
五、缺失值的类型
1、单值缺失
所有的缺失值都是同一属性。
2、任意缺失
缺失值属于不同的属性
3、单调缺失
对于时间序列类的数据,可能存在随着时间的缺失
六、探究缺失值
1、影子矩阵
用一个二值矩阵描述数据中的缺失值,1代表缺失值,0代表有记录的值,直观看出缺失值的分布
若包含多个分类变量,就不能用简单的二值分布描述
例如纵向研究,一个问题回答情况,可能存在三种结果,0代表已回答,1代表为回答,2代表在研究完成前死亡。
七、利用工具来对缺失值进行分析
1、简单使用R代码:TAO数据集
install.packages("norm")
setwd("C:/Users/86178/Desktop/EDA/实验/data")
library(norm) #加载norm包,分析具有缺失值的多变量正态数据集
d.tao <- read.csv("tao.csv", row.names=1) #读入数据集
d.tao.93 <- as.matrix(subset(
d.tao,year==1993,select=sea.surface.temp:vwind))
d.tao.97 <- as.matrix(subset(
d.tao,year==1997,select=sea.surface.temp:vwind))
d.tao.nm.93 <- prelim.norm(d.tao.93) # 初探带缺失值的数据矩阵
d.tao.nm.93$nmis #look at nmis 查看缺失值数量
d.tao.nm.97 <- prelim.norm(d.tao.97)
d.tao.nm.97$nmis #look at nmis
d.tao.nm.93
$x
[,1] [,2] [,3] [,4] [,5]
[1,] 0.054642998 -0.32840776 -1.92664146 0.89656278 0.567347873
…………………………………………
[200,] 0.077463475 0.01733360 -1.21024325 -1.25016210 -0.562571566
[ reached getOption("max.print") -- omitted 168 rows ]
$n
[1] 368
$p
[1] 5
$r
[,1] [,2] [,3] [,4] [,5]
274 1 1 1 1 1
1 0 0 1 1 1
90 1 1 0 1 1
1 1 0 0 1 1
2 0 0 0 1 1
$nmis
sea.surface.temp air.temp humidity uwind vwind
3 4 93 0 0
$ro
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[25] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
…………………………
$mdpst
[1] 1 275 276 366 367
$nmdp
[1] 274 1 90 1 2
$npatt
[1] 5
$xbar
[1] 23.542110 23.365962 86.847636 -3.828804 2.496196
$sdv
[1] 0.8764259 0.8098504 2.9313391 1.8167209 1.5930340
$d
[1] 21
$psi
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
[2,] 2 7 8 9 10 11
[3,] 3 8 12 13 14 15
[4,] 4 9 13 16 17 18
[5,] 5 10 14 17 19 20
[6,] 6 11 15 18 20 21
$sj
[1] 5 5 5 5 5
$nmon
[1] 368 368 368 368 368
$last
[1] 5 5 5 5 5
$layer
[1] 1 1 1 1 1
$nlayer
[1] 1
使用的函数有norm包里面的prelim.norm()函数,接着取其中变量nmis即可
特别的,其中一个分量 r。
左边的一列代表该缺失类型的记录条数,右边的1和0代表缺失与否,可以看出93年有五种类型的数据记录,97年有两种类型的数据记录。
d.tao.nm.93$r;d.tao.nm.97$r
[,1] [,2] [,3] [,4] [,5]
274 1 1 1 1 1
1 0 0 1 1 1
90 1 1 0 1 1
1 1 0 0 1 1
2 0 0 0 1 1
[,1] [,2] [,3] [,4] [,5]
291 1 1 1 1 1
77 1 0 1 1 1
2、使用图形工具
未完待续……