2017-08-18 2 views
1

Vous trouverez une implémentation manuelle de la régression logistique dans Excel à l'adresse: http://blog.excelmasterseries.com/2014/06/logistic-regression-performed-in-excel.html.Résultats incohérents entre glm() dans R et implémentation manuelle de la régression logistique dans Excel

Cette implémentation utilise l'ensemble de données ci-dessous et rapporte les coefficients suivants

b0 = 12,48285608

b1 = -0,117031374

b2 = -1,469140055

Cependant, quand je analyser le même ensemble de données avec glm() en R, les résultats ne sont pas les mêmes, i.e. .:

b0 = 1,687445

b1 = -0,012525

b2 = -0,116473

d <- structure(list(Y = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), X1 = c(78L, 73L, 73L, 
71L, 68L, 59L, 57L, 49L, 35L, 27L, 59L, 57L, 44L, 38L, 36L, 36L, 
22L, 22L, 15L, 10L), X2 = c(8L, 8L, 5L, 7L, 5L, 4L, 7L, 5L, 4L, 
7L, 3L, 4L, 5L, 5L, 4L, 2L, 6L, 5L, 4L, 6L)), .Names = c("Y", 
"X1", "X2"), class = "data.frame", row.names = c(NA, -20L)) 

summary(glm(Y ~ X1+X2, data=d), family=binomial(link='logit')) 


# > summary(glm(Y ~ X1+X2, data=d), family=binomial(link='logit')) 
# 
# Call: 
# glm(formula = Y ~ X1 + X2, data = d) 
# 
# Deviance Residuals: 
# Min  1Q Median  3Q  Max 
# -0.78318 -0.20641 0.07689 0.24375 0.49237 
# 
# Coefficients: 
# Estimate Std. Error t value Pr(>|t|)  
# (Intercept) 1.687445 0.319872 5.275 6.18e-05 *** 
# X1   -0.012525 0.004376 -2.862 0.0108 * 
# X2   -0.116473 0.056959 -2.045 0.0567 . 
# --- 
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
# 
# (Dispersion parameter for gaussian family taken to be 0.146843) 
# 
# Null deviance: 5.0000 on 19 degrees of freedom 
# Residual deviance: 2.4963 on 17 degrees of freedom 
# AIC: 23.139 
# 
# Number of Fisher Scoring iterations: 2 

Pourquoi les résultats diffèrent-ils?

Répondre

5

Vous avez le paramètre de la famille au mauvais endroit. Il devrait être dans l'appel glm(), pas l'appel summary().

summary(glm(Y ~ X1+X2, data=d, family=binomial(link='logit'))) 

Si vous ne pas inclure la famille dans le glm(), il fera une régression gaussienne (linéaire).