Einführung in die Überprüfung der Wirksamkeit - kausales Denken für einen korrekten Vergleich / Grundlagen der quantitativen Ökonomie Reproduzieren Sie den Quellcode in Python Machen.
Ich habe bereits ein Beispiel für die Implementierung eines großartigen Vorfahren, aber ich werde es als Memo für meine Studie hinterlassen.
Dieser Artikel behandelt Kapitel 2. Der Code wird auch auf github veröffentlicht. Darüber hinaus sind Variablennamen und Verarbeitungsinhalte grundsätzlich im Buch implementiert.
Sie können eine lineare Regression entweder mit Scicit-Learn- oder Statistikmodellen implementieren. In Bezug auf die Statistik jeder Variablen sind Statistikmodelle jedoch vorteilhafter, sodass dies bequemer ist.
scikit-learn
Regressionsanalyse von sklearn
from sklearn.linear_model import LinearRegression
#Modelllernen
X = biased_data[['treatment', 'history']]
y = biased_data['spend']
model = LinearRegression(fit_intercept=True, normalize=False).fit(X, y)
#Ergebnisausgabe
print(f'R^2: {model.score(X, y)}')
print(f'intercept: {model.intercept_}')
print(f'coefficients: {model.coef_}')
Das Ergebnis von Scikit-Learn ist geringer als das von später beschriebenen Statistikmodellen. Es ist möglich, jeden statistischen Wert basierend auf den Trainingsdaten zu berechnen, aber es scheint, dass es bis zu diesem Zeitpunkt keinen Wert gibt, Scikit-Learn zu verwenden.
statsmodels
Es scheint mehrere Möglichkeiten zu geben, Modelle mithilfe von Statistikmodellen zu lernen, aber die R-ähnlichen sind wie folgt.
Regressionsanalyse von Statistikmodellen
from statsmodels.formula.api import ols
#Modelllernen
model = ols('spend ~ treatment + history', data=biased_data).fit()
#Ergebnisausgabe
model.summary()
Übrigens, wenn die Ausgabe des Ergebnisses wie model.summary (). Tables [1]
ist, können Sie eine beliebige Tabelle aus mehreren Informationen angeben.
Wenn Sie eine Schätzung erhalten möchten, können Sie mit "model.params" auf die Liste im Wörterbuchformat verweisen.
Verwenden Sie zum Lesen von Daten im R-Format rdata. Einzelheiten zur Verwendung des Moduls finden Sie unter hier.
RData lesen
import rdata
parsed = rdata.parser.parse_file('./vouchers.rda')
converted = rdata.conversion.convert(parsed)
vouchers = converted['vouchers']
In diesem Buch lernen wir die Modelle mehrerer objektiver Variablen gleichzeitig, aber es scheint schwierig, dasselbe in Python zu tun.
Kollektive Regressionsanalyse
import pandas as pd
from statsmodels.formula.api import ols
#Definition der Regressionsgleichung
formula_x_base = ['VOUCH0']
formula_x_covariate = [
'SVY', 'HSVISIT', 'AGE', 'STRATA1', 'STRATA2', 'STRATA3', 'STRATA4', 'STRATA5', 'STRATA6', 'STRATAMS',
'D1993', 'D1995', 'D1997', 'DMONTH1', 'DMONTH2', 'DMONTH3', 'DMONTH4', 'DMONTH5', 'DMONTH6',
'DMONTH7', 'DMONTH8', 'DMONTH9', 'DMONTH10', 'DMONTH11', 'DMONTH12', 'SEX2',
]
formula_ys = [
"TOTSCYRS","INSCHL","PRSCH_C","USNGSCH","PRSCHA_1","FINISH6","FINISH7","FINISH8","REPT6",
"REPT","NREPT","MARRIED","HASCHILD","HOURSUM","WORKING3",
]
#Definition der Funktion, die das Regressionsergebnis erhält
def get_regression_result(formula, data):
model = ols(formula, data=data).fit()
result = pd.read_html(model.summary().tables[1].as_html(), header=0)[0]
result.columns = ['term', 'estimate', 'std.err', 'statistic', 'p.value', '0.025', '0.975']
result
return result
#Führen Sie gemeinsam eine Regressionsanalyse durch
results = list()
for formula_y in formula_ys:
base_reg_formula = f'{formula_y} ~ {" + ".join(formula_x_base)}'
base_reg_model_index = f'{formula_y}_base'
covariate_reg_formula = f'{formula_y} ~ {" + ".join(formula_x_base+formula_x_covariate)}'
covariate_reg_model_index = f'{formula_y}_covariate'
base_reg_result = get_regression_result(base_reg_formula, regression_data)
base_reg_result['model_index'] = base_reg_model_index
results.append(base_reg_result)
covariate_reg_result = get_regression_result(covariate_reg_formula, regression_data)
covariate_reg_result['model_index'] = covariate_reg_model_index
results.append(covariate_reg_result)
df_results = pd.concat(results).reset_index(drop=True)
df_results = df_results[['model_index', 'term', 'estimate', 'std.err', 'statistic', 'p.value', '0.025', '0.975']]
Wahrscheinlich einfach mit Fehlerbalken in matplotlib zu zeichnen. Der Punkt besteht darin, die Größe des Fehlers in der Fehlerleiste zu finden, die verwendet wird, um das Konfidenzintervall aus der Differenz zwischen dem geschätzten Wert und dem Konfidenzintervall auszudrücken.
In den zum Zeichnen verwendeten Daten (hier nicht gezeigt) wird der Wert aus dem Modell erhalten, aber da die Anzahl der zu diesem Zeitpunkt gültigen Zahlen gering ist, kann es zu Abweichungen kommen.
Handlung
import matplotlib.pyplot as plt
estimate = going_private_results['estimate']
estimate_error = going_private_results['estimate'] - going_private_results['0.025'] #Die Differenz zwischen dem Konfidenzintervall und dem geschätzten Wert sei die Länge des Fehlerbalkens
xmin = 0
xmax = going_private_results.shape[0] - 1
plt.errorbar(range(xmax+1), estimate, estimate_error, fmt='o')
plt.hlines(y=0, xmin=xmin, xmax=xmax, colors='k', linestyles='dashed')
plt.xlabel('model_indexe')
plt.ylabel('estimate')
plt.xticks(range(going_private_results.shape[0]), going_private_results['model_index'], rotation=45)
plt.show()
Recommended Posts