2017-07-12 14 views
0

In Python, ich habe ein Regressionsmodell erstellt, indem Sie diesen Code verwenden:Conditional Regressionsmodell in Python

import statsmodels.formula.api as sm 
df = pd.DataFrame({"A": data['dur'], "B": data['agreement'], "C": data['vidPersonIdeoDiff'], "D": data['opinionChange'], "G": data['fake']}) 
result = sm.ols(formula="A ~ B + C + D + G", data=df).fit() 
print(result.params) 

print(result.summary()) 

Nun, ich bin daran interessiert, eine Bedingung in dem Hinzufügen oder 'if-Anweisung' auf die gleiche Regression. Wie würde ich es aber nur für bestimmte Gruppen ausführen, wenn beispielsweise das Alter < 36 ist? In Stata wäre das Äquivalent:

reg dur agreement vidPersonIdeoDiff opinionChange fake if age < 36 

Eine Idee, wie ich diese Stata-Zeile in Python replizieren kann? Es wäre besonders hilfreich, wenn die Lösung mit dem Modul statsmodels.formula.api übereinstimmt, das ich verwendet habe. Vielen Dank!

Antwort

2

Wenn Sie einen Datenrahmen wie folgt hatte:

df = pd.DataFrame({'age':[1,2,3,4,5],'b':[2,4,6,8,10]}) 

Sie können nur die Zeilen auswählen, in dem Wert in der Spalte ‚Alter‘ größer als 3 ist wie folgt:

age_greater_3 = df[df['age']>3] 

Dann benutzen Sie einfach age_greater_3 anstelle von df

0

einfach den Datenrahmen Teilmenge ...

import pandas as pd 
import statsmodels.formula.api as sm 
import numpy as np 

df = pd.DataFrame(
    {'x': np.random.normal(1000), 'z': np.random.rand(1000) > 0.5} 
) 
df['y'] = df['x'] * 2 + np.random.normal(1000) 

# full dataset 
sm.ols(formula='y ~ x', data=df).fit().summary() 
# conditional on z = True 
sm.ols(formula='y ~ x', data=df.loc[df['z']]).fit().summary() 

# for a continuous variable 
df['age'] = np.random.randint(18, 65, 1000) 
sm.ols(formula='y ~ x', data=df[df['age'] > 30]).fit().summary() 
1

Wenn sagen wir, 'Alter' ist die Variable, auf dem Sie erhalten haben:

result = sm.ols(formula="A ~ B + C + D + G", data=df[data['age']<36]).fit()