2015-10-23 62 views
0

所以我有一個包含很多缺失值的數據集。我想分離不同丟失模式的數據。我發現了包裝中的'老鼠',在總結缺失值模式時非常方便。但是,當我想選擇具有某種缺失模式的行時,選定行的數量遠少於缺少模式矩陣所建議的數量。如何選擇某些缺失模式的行?

我的代碼如下。

要獲得丟失的模式:

library(mice) 
# md.pattern returns a matrix, I convert the matrix into a data frame with the first column as its frequency in the data frame 
pattern = md.pattern(data) 
freq = dimnames(pattern)[[1]][-nrow(pattern)] 
pattern = data.frame(pattern[1:nrow(pattern)-1, 1:ncol(pattern)-1], row.names = NULL) 
pattern$freq = freq 
pattern = pattern[order(freq,decreasing = TRUE),] 

然而,當我嘗試通過在pattern特定圖案手工清點丟失的模式。計數要小得多。

count = 0 
for (i in 1:nrow(data)){ 
    # match the missingness by the entire row 
    if (all(!is.na(data[i, names(data)[1:ncol(pattern)-1]]) == test[1,1:ncol(pattern)-1])){ 
     count = count +1 
    } 
} 

有沒有人有一個想法,哪裏出錯了? 謝謝!

數據有很多變量(共107個)和70000+個觀測值。該代碼適用於mice包中的示例數據nhanes。但它在我的數據文件中出錯。

例如:

V1 V2 V3 V4 V5 
1 NA 3 5 2 
NA 3 23 2 9 
NA 3 90 7 5 
3 3 2 34 NA 
3 NA 2 1 3 
4 NA 7 3 1 
+0

你必須提供一些樣本數據給我們玩,這是你的真實數據的代表。目前,我們沒有任何建議。 – thelatemail

+0

@thelatemail我上傳了一個數據文件的樣本。謝謝! – StatCC

+2

*「提供一些樣本數據」*並不意味着*「給我們一個鏈接到一個未知來源的文件,以便我們可以點擊它,看看它在什麼格式,推斷問題出在哪裏,等等」*。請將問題簡化爲小數據集,然後直接將此問題添加到此問題中。 (這也有助於某人在你提供的鏈接失效時從這個問題中受益) – r2evans

回答

2

無論如何,我在mice包檢查original code爲。它基於Schafer的prelim.norm函數,而不是逐行檢查缺失值模式。

我發現countplyr包真的有竅門。我寫了這個函數返回數據集中缺失的模式。數據幀爲x。對我而言,它效果很好。

library(plyr) 
miss.pattern <- function(x, topn) { 
    # find missingness patterns, 1 represents missing 
    r <- 1 * data.frame(is.na(x)) 
    pattern <- data.frame(count(r)) 
    pattern <- pattern[order(-pattern$freq),] 
    return(pattern[1:topn,]) 
}