缺失值侦测与处理
?
缺失值的偵測的方法:
1、mice包中的md.pattern()函數可以生成一個以矩陣或數據框形式展示缺失值模式的表格
這個矩陣呢,表示像第一行缺失0個的模式有13行,像第二行缺失1個的模式有1行,如此類推
所以呢,一共就有0*13+1*1+1*3+2*1+3*7=27個缺失值,也可以算每列的,age列缺0個,hyp列缺8個,bmi列缺9個,chl列缺10個,共缺0+8+9+10=27個
2、VIM包中可可視化數據集中缺失值模式的函數:aggr()、matrixplot()、scattMiss()
?aggr(nhanes,prop=FALSE,numbers=TRUE)?
此外,當prop參數設置為true時,將用比例代替計數
?matrixplot(nhanes)?
此處,缺失的地方為紅色,其他的數值較小,顏色較淺;數值越大,顏色越重。
另,不適合非數值數據,會把非數值數據判斷成缺失
?marginplot(nhanes[c("hyp","chl")],pch=c(20),col=c("darkgray","red","blue"))?
?
缺失值的處理一般有以下幾種方法:
1、將含缺失值的記錄刪除
2、根據變量之間的相關關系填補缺失值
3、根據記錄之間的相似性填補缺失值
4、使用能夠處理缺失值的工具
?
將含缺失值的記錄刪除
一般適用于以下情況:
此條記錄中含有較多變量的缺失值
?
得到數據中至少含有一個變量的缺失值的記錄 的計數
nrow(data[!complete.cases(data),]剔除含有缺失值的記錄
data=data[complete.cases(data),]或者
data=na.omit(data)
?得到每行數據的缺失值個數
apply(data,1,function(x) sum(is.na(x)))
用最高頻率值填補缺失值
填補缺失值最簡便和快捷的方法是使用一些代表中心趨勢的值,因為他們反映了變量分布的最常見值。例如平均值、中位數、眾數等。
對于接近正態的分布來講,平均值數就是最佳選擇;
對于偏態分布或者有離群值的分布而言,中位數是更好的代表數據中心趨勢的指標。
填補data的noNum列的缺失值:
data[is.na(data$noNum,"noNum"]=median(data$noNum,na.rm=T)對于名義變量,常使用眾數填補。
通過變量的相關關系來填補缺失值
缺失值為數值變量時常使用相關性計算線性回歸,
缺失值為名義變量時常通過繪圖觀察規律進行填充。
產生變量之間的相關值
cor(data[,4:18],use="complete.obs")?改善結果輸出形式:
symnum(cor(data[,4:18],use="complete.obs"))?
找出相關性比較高的變量,通過線性回歸對缺失值進行計算填充
填充名義變量時常用的繪圖函數(lattice包):
histogram(~mxPH|season,data=algae) histogram(~mxPH|size*speed,data=algae) stripplot(size~mxPH|speed,data=algae,jitter=T)?
根據記錄之間的相似性填補缺失值
度量兩個記錄之間的相似性:歐氏距離,找出與任何含有缺失值的案例最相似的10條記錄
兩種方法:
1、計算這10條記錄的中位數,并用中位數來填補缺失值。若為名義變量,采用眾數
2、采用這些最相似數據的加權均值。權重的大小隨著距待填補缺失值的個案的距離增大而減小。可采用高斯核函數從距離獲得權重。若相鄰個案距待填補缺失值的個案的距離為d,則它的值在加權平均中的權重為 w(d)=exp(-d)
注:在計算距離時,一般要對數值變量進行標準化。即 yi=(xi-xbar)/sigma(x)
?
轉載于:https://www.cnblogs.com/Hyacinth-Yuan/p/7887181.html
總結
- 上一篇: linux命令添加文件权限,linux
- 下一篇: tmb100a linux,天猫魔盒TM