2017-11-29 4 views
3

Ich habe einige Daten-Set: titanicGLM in Python vs R

dies in R Doing

glm(Survived ~ Sex, titanic, family = "binomial")

I

(Intercept)  SexMale 
1.124321 -2.477825 

R erhalten nimmt als positives Ergebnis erhalten.

Aber wenn ich das gleiche in Python zu tun

sm.formula.glm("Survived ~ Sex", family=sm.families.Binomial(), data=titanic).fit()

ich negative Ergebnisse: das heißt Python nimmt nicht als positives Ergebnis erhalten.

Wie kann ich Pythons glm-Funktionsverhalten so anpassen, dass es dasselbe Ergebnis liefert wie R?

+1

Ich bezweifle, dass 'sm.formula.glm' im Basis-Python verfügbar ist. Bitte listen Sie alle Module/Pakete auf, die Sie im Hauptteil Ihrer Frage verwenden, oder fügen Sie das entsprechende Tag hinzu. – lmo

+0

'import numpy als np' ' importiere pandas als pd' 'import statsmodels.api as sm' – user2528473

Antwort

3

Sie müssen nur auf Ihre Referenzgruppe gesetzt entweder männlich oder weiblich (je nachdem, was Sie interessiert sind):

Mit einem kleinen Testdatensatzes in R, der Code und Modell Zusammenfassung sieht wie folgt aus:

df <- data.frame(c(0,0,1,1,0), c("Male", "Female", "Female", "Male", "Male")) 
colnames(df) <- c("Survived", "Sex") 

model <- glm(Survived ~ Sex, data=df, family="binomial") 
summary(model) 

Ausgang:

Coefficients: 
       Estimate Std. Error z value Pr(>|z|) 
(Intercept) -3.084e-16 1.414e+00 0.000 1.000 
SexMale  -6.931e-01 1.871e+00 -0.371 0.711 

Um etwas ähnliches in Python/statsmodels zu erhalten:

import pandas as pd 
import statsmodels.api as sm 

df = pd.DataFrame({"Survived": [0,0,1,1,0], 
        "Sex": ["Male", "Female", "Female", "Male", "Male"]}) 

model = sm.formula.glm("Survived ~ C(Sex, Treatment(reference='Female'))", 
         family=sm.families.Binomial(), data=df).fit() 
print(model.summary()) 

Welche geben:

            coef std err   z  P>|z|  [0.025  0.975] 
----------------------------------------------------------------------------------------------------------------- 
Intercept          5.551e-16  1.414 3.93e-16  1.000  -2.772  2.772 
C(Sex, Treatment(reference='Female'))[T.Male] -0.6931  1.871  -0.371  0.711  -4.360  2.974 

Beachten Sie die Verwendung von Treatment() die Referenzgruppe zu setzen. Ich habe es auf Female in diesem Fall eingestellt, um die R-Ausgabe zu entsprechen, aber mit Ihrem Dataset könnte es sinnvoller sein, Male zu verwenden. Wie auch immer, es ist nur eine Frage der expliziten Angabe, welche Gruppe als Referenz verwendet wird.

Verwandte Themen