2014-04-28 32 views
0

當在R中運行迴歸分析(使用glm)時,由於數據的「缺失」,案例被刪除。有什麼方法可以標記哪些案件已被刪除?理想情況下,我想從我的原始數據框中刪除這些。R迴歸分析中缺失的標誌案例

非常感謝

回答

1

glm()返回的模型擬合對象記錄了它排除的不完整數據的行號。他們有點埋沒,但你可以這樣進行檢索:或者

## Example data.frame with some missing data 
df <- mtcars[1:6, 1:5] 
df[cbind(1:5,1:5)] <- NA 
df 
#     mpg cyl disp hp drat 
# Mazda RX4   NA 6 160 110 3.90 
# Mazda RX4 Wag  21.0 NA 160 110 3.90 
# Datsun 710  22.8 4 NA 93 3.85 
# Hornet 4 Drive 21.4 6 258 NA 3.08 
# Hornet Sportabout 18.7 8 360 175 NA 
# Valiant   18.1 6 225 105 2.76 

## Fit an example model, and learn which rows it excluded 
f <- glm(mpg~drat,weight=disp, data=df) 
as.numeric(na.action(f)) 
# [1] 1 3 5 

,以獲得行索引,而不必擬合模型,用同樣的策略與model.frame()輸出:

as.numeric(na.action(model.frame(mpg~drat,weight=disp, data=df))) 
# [1] 1 3 5 
+1

是否有任何理由不只是'as.numeric(f $ na.action)'而不是'as.numeric(attr(f $ model,「na.action」))''? – eipi10

+0

不,沒有,它看起來像'as.numeric(na.action(f))'也適用。我剛剛編輯了答案以包含該信息。謝謝! –

1

沒有一個重複的例子,我無法提供適合您的問題代碼,但在這裏,應該工作的通用方法。假設你的數據框叫做df,你的變量被稱爲y,x1,x2等等。假設你需要y,x1,x3和x6在你的模型中。

# Make a vector of the variables that you want to include in your glm model 
# (Be sure to include any weighting or subsetting variables as well, per Josh's comment) 
glm.vars = c("y","x1","x3","x6") 

# Create a new data frame that includes only those rows with no missing values 
# for the variables that are in your model 
df.glm = df[complete.cases(df[ , glm.vars]), ] 

另外,如果你想看到這一點至少有一個缺失值的行,請執行下列操作(注意添加!(以下簡稱「非」運算符)):

df[!complete.cases(df[ , glm.vars]), ] 
+1

究竟。另外,如果你對'glm()'的調用使用它的'weights'或'subset'參數,確保包含傳遞給'glm.vars'中的變量。 –

+0

好點喬希。我已更新我的回答,以包含您的評論。 – eipi10

+0

非常感謝您對這個問題的幫助。我一直在努力解決這個問題數週! – Ampersand