2014-02-20 71 views
1

我剛剛在R學習邏輯迴歸,並且遇到了一些令人困惑的事情。我有一個包含兩個預測變量的大型數據集,我用它來訓練一個logit模型。R logistic迴歸舍入誤差?

> model <- glm(as.factor(traintrain$loss)~.,data=traintrain[,-ncol(traintrain),with=FALSE],family=binomial) 
Warning message: 
glm.fit: fitted probabilities numerically 0 or 1 occurred 
> traintest$pred <- predict(model, traintest[,!"loss",with=FALSE],type="response") 

這裏是我的模型

> model 

Call: glm(formula = as.factor(traintrain$loss) ~ ., family = binomial, 
    data = traintrain[, -ncol(traintrain), with = FALSE]) 

Coefficients: 
(Intercept)   f527   f528 
-2.4123661 -0.0001938 0.0001938 

Degrees of Freedom: 53804 Total (i.e. Null); 53802 Residual 
Null Deviance:  34540 
Residual Deviance: 32740 AIC: 32750 

的輸出這裏是我的測試數據集看起來像

> traintest 
      f527  f528 loss  pred 
    1: 512556.00 512690.3 0 0.08359656 
    2: 516634.38 516635.0 0 0.08162884 
    3: 7261975.82 7262170.0 0 0.07658846 
    4: 1289936.09 1290091.5 0 0.08297042 
    5: 474396.88 476308.0 0 0.11410204 
    ---          
23056: 362651.53 362950.3 0 0.08625780 
23057: 1590119.98 1590853.3 0 0.09150362 
23058: 124814.17 125030.8 0 0.08530484 
23059: 346397.91 346536.2 0 0.08385799 
23060: 85503.97 85504.0 0 0.08213298 

正如你可以看到,該模型停留在成功的0.08359概率我第一個測試數據點。作爲完整性檢查,我想將模型係數與我的第一次測試觀察一起插入logistic function,並確保我得出相同的結果。這就是我得到的

> 1/(1+exp(-(-2.4123661-0.0001938*512556.00+0.0001938*512690.3))) 
[1] 0.08422038 

這是關閉了約.001。我注意到其他一些差異似乎很高。這只是四捨五入錯誤還是我犯了一個根本的錯誤?由於

+0

我從來沒有見過像這樣的任何子集數據。 – rawr

+4

R保留的數字比顯示的更多。 – joran

+0

看看'?options'。特別是查看幫助文件中的'digits'和'scipen'部分。 –

回答

2

試試這個:

sum(c(1, 512556.00, 512690.3) * coef(model)) 

感謝對號但是這一個建議可能,即使我認爲它在我的第一份工作是行不通的。有兩個原因。第一種情況是來自traintest的輸出看起來是來自data.table對象,並且因爲它不包含代表基線的'1',所以需要乘以coef()(Intercept)值。

sum(traintest[1, ] * coef(model))