WHO数据的缺失值处理惩罚
WHO数据是世界卫生组织观测各国环境所得的数据。
数据主要描写:http://www.exploredata.net/Downloads/WHO-Data-Set
这样的高维数据一般都存在很多缺失值,本日对如那里理惩罚缺失值举办了一下实验性摸索,但愿与各人多多接头。
主要思想就是通过计较各个记录的欧氏空间间隔,求出与缺失值地址的记录间隔排序由小到大在2到11位的记录,将这些记录对应的变量求中位数插补到原记载中(留意这些记录对应的变量也大概是NA,求中位数时不计入即可),由于WHO数据的缺失值只牵扯到数值型变量,所以没有对因子型变量举办处理惩罚,同时颠末试验选择2:11不会呈现所有记录的对应变量都是缺失值的问题,可是差异的数据集这个范畴照旧有待调解。
虽然处理惩罚缺失值的要领尚有许多,平均数、中位数尚有回归要领插补,这些在Data Mining with R中都有先容,我实际选的是最近邻要领来做的
anyway,写了半天颠末测试貌似没什么问题…不外刚入门照旧许多不熟悉……搞到代码写的很繁琐啊……但愿列位大神多多指教~
#输入数据
who=read.csv(“WHO.csv”,header=T)
#删除所有值都缺失的变量
which(!apply(!is.na(who),2,any))
#第322个变量全部是缺失值,删除
names(who)[322]
who=who[,-322]
#统计每一行有几多缺失值
x=NULL
for(i in 1:length(airquality[,1]))
{ x=c(x,sum(!complete.cases(t(who[i,]))))
}
#删去缺失值太多的记录,缺失值>=150,可以自由配置
who1=who[-c(which(x>=150)),]
#用最近邻要领举办插补
library(cluster)
who2=who1[,3:length(who[1,])]
dist.mtx <- as.matrix(daisy(who2,stand=T)) #计较欧式间隔的矩阵
for(r in which(!complete.cases(who2)))
for(c in which(!complete.cases(t(who2[r,]))))
who2[r,c]=median(who2[as.integer(names(sort(dist.mtx[r,]))),c][2:11],na.rm=T)
who.final=merge(who[,1:2],who2)
WHO.rar