2012-07-18 89 views
1

在R的R邏輯迴歸中,我試圖創建一個比較擬合觀察值(即0或1實際值與0或1擬合值)的列聯表。但是,我的數據在各種變量的各行中缺少值,因此擬合值向量的長度比原始數據集短。這裏有一個例子:在表R中邏輯迴歸的列聯表與缺失的擬合值

test <- data.frame(male=c(1,0,1,0,0,1,1,0,1,0,0,1), 
       height=c(58,100,NA,19,20,69,58,24,46,19,97,69)) 

model <- glm(male~height, family=binomial("logit"),data=test) 

check_model <- table(test$male,fitted.values(model)>0.5) 

錯誤(測試$男,fitted.values(模型)> 0.5): 所有參數必須具有相同的長度

有誰知道只有在模型有fitted.value而非NULL的行中才提供實際值(測試$男性)的方法?

+0

你意識到你的代碼意味着,你認爲有一個名爲函數'fitted.values'?如果你只是在控制檯輸入'?fitted'(或者'str(model)',你就可以獲得更快的進展 – 2012-07-18 02:15:18

回答

2

如果你看看?glm你會看到它返回model.frame(默認)作爲glm對象的組件

這包含用來擬合模型

的數據。因此,你可以使用

table(model.frame(model)$male, fitted(model) > 0.5) 

table(model$model$male, fitted(model) > 0.5) 

來回報您需要的結果

##  FALSE TRUE 
## 0  4 2 
## 1  3 2 
+0

'glm'不返回「model.frame」,它返回一個更復雜的對象,從這個函數中'model.frame'能夠提取原始數據。 – 2012-07-18 02:34:11

+0

我已經編輯了更清晰的響應 - 它被返回爲''glm「'類的對象的*部分*。 – mnel 2012-07-18 02:43:07

1
> table(test$male[complete.cases(test)], fitted(model)>0.5) 

    FALSE TRUE 
    0  4 2 
    1  3 2