1. 程式人生 > >R語言矩陣/缺失值處理

R語言矩陣/缺失值處理

缺失值處理一般包括三步:
1. 識別缺失資料;
2. 檢查導致資料缺失的原因;
3. 刪除包含缺失值的例項或用合理的數值代替(插補)缺失值。

  • 1.判斷缺失值
    函式is.na()、is.nan()和is.infinite()可分別用來識別缺失值、不可能值和無窮值。每個返回結果都是
    TRUE或FALSE
    na表示缺失值
    nan表示NOT A NUMBER
    infinite表示+-Inf
    一定要親手試x = 0/0,以及x = 1/0
>x <- NA
> is.na(x)
[1] TRUE
> is.nan(x)
[1] FALSE
> is
.infinite(x) [1] FALSE

函式complete.cases()可用來識別矩陣或資料框中沒有缺失值的行
超級好用

#載入資料集
>data(sleep,package = "VIM")
#沒有缺失值的行
>sleep[complete.cases(sleep),]
#列出有一個或多個缺失值的行
>sleep[!complete.cases(sleep),] 
  • 2.圖形探究缺失數
#自己生成圖形
>library("VIM")
>aggr(sleep,prop = FALSE,numbers = TRUE)

matrixplot()函式可生成展示每個例項資料的圖形

#自己生成圖形
marginplot(sleep[c("Gest","Dream")],phc=c(20),col=c("darkgray","red","blue"))
  • 3.1刪除缺失值
    函式complete.cases()可以用來儲存沒有缺失值的資料框或者矩陣形式的例項(行):
#可以把mydata替換成sleep,延續上面的程式碼
>newdata <- mydata[complete.cases(mydata),]

同樣的結果可以用na.omit函式獲得:

#可以把mydata替換成sleep,延續上面的程式碼
>newdata <- na.omit(mydata)

兩行程式碼表示的意思都是:mydata中所有包含缺失資料的行都被刪除,然後結果才儲存到
newdata中,以後擬合就用新資料newdata.

處理含缺失值的資料集時,成對刪除常作為行刪除的備選方法使用。對於成對刪除,觀測只
是當它含缺失資料的變數涉及某個特定分析時才會被刪除:

>cor(sleep,use = "pairwise.complete.obs")
  • 3.2補全缺失值

    這裡寫圖片描述
    函式mice()首先從一個包含缺失資料的資料框開始,然後返回一個包含多個(預設為5個)完
    整資料集的物件。每個完整資料集都是通過對原始資料框中的缺失資料進行插補而生成的。由於插
    補有隨機的成分,因此每個完整資料集都略有不同。然後,with()函式可依次對每個完整資料集
    應用統計模型(如線性模型或廣義線性模型),最 後 ,pool()函式將這些單獨的分析結果整合為一
    組結果。最終模型的標準誤和p值都將準確地反映出由於缺失值和多重插補而產生的不確定性。

>library(mice)
>data("sleep",package = "VIM")
>imp <- mice(sleep,seed = 1234)
#imp <- mice(sleep)
>fit <- with(imp,lm(Dream~Span+Gest))
fit
>pooled <- pool(fit)
>summary(pooled)
imp
>dataset2 <- complete(imp,action = 2)
>cor(sleep,use = "pairwise.complete.obs")

dataset2 is the newData

下圖為完整缺失值處理圖片:

這裡寫圖片描述