Wie finde ich den p-Wert (Signifikanz) jedes Koeffizienten?
lm = sklearn.linear_model.LinearRegression()
lm.fit(x,y)
python
numpy
statistics
scikit-learn
regression
elplatt
quelle
quelle
Antworten:
Das ist eine Art Overkill, aber probieren wir es aus. Lassen Sie uns zuerst statsmodel verwenden, um herauszufinden, wie die p-Werte aussehen sollten
und wir bekommen
Ok, lass uns das reproduzieren. Es ist eine Art Overkill, da wir mit Matrix Algebra fast eine lineare Regressionsanalyse reproduzieren. Aber was zum Teufel.
Und das gibt uns.
So können wir die Werte aus dem Statistikmodell reproduzieren.
quelle
code
np.linalg.inv manchmal ein Ergebnis zurückgeben kann, selbst wenn die Matrix nicht invertierbar ist. Das könnte das Problem sein.nan
s. Für mich lag es daranX
, dass meine Daten eine Stichprobe meiner Daten waren, sodass der Index deaktiviert war. Dies führt zu Fehlern beim Aufrufpd.DataFrame.join()
. Ich habe diese eine Zeile geändert und es scheint jetzt zu funktionieren:newX = pd.DataFrame({"Constant":np.ones(len(X))}).join(pd.DataFrame(X.reset_index(drop=True)))
Die LinearRegression von scikit-learn berechnet diese Informationen nicht, aber Sie können die Klasse einfach erweitern, um dies zu tun:
Von hier gestohlen .
Sie sollten sich die Statistikmodelle für diese Art der statistischen Analyse in Python ansehen .
quelle
EDIT: Wahrscheinlich nicht der richtige Weg, siehe Kommentare
Sie können sklearn.feature_selection.f_regression verwenden.
Klicken Sie hier für die Scikit-Lernseite
quelle
Der Code in der Antwort von elyase https://stackoverflow.com/a/27928411/4240413 funktioniert nicht wirklich. Beachten Sie, dass sse ein Skalar ist und dann versucht, ihn zu durchlaufen. Der folgende Code ist eine geänderte Version. Nicht erstaunlich sauber, aber ich denke, es funktioniert mehr oder weniger.
quelle
Eine einfache Möglichkeit, die p-Werte abzurufen, ist die Verwendung der Statistikmodell-Regression:
Sie erhalten eine Reihe von p-Werten, die Sie bearbeiten können (wählen Sie beispielsweise die Reihenfolge, die Sie beibehalten möchten, indem Sie jeden p-Wert auswerten):
quelle
p_value gehört zu den f-Statistiken. Wenn Sie den Wert erhalten möchten, verwenden Sie einfach die folgenden Codezeilen:
quelle
Bei einer multivariablen Regression könnte die Antwort von @JARH einen Fehler enthalten . (Ich habe nicht genug Ruf, um einen Kommentar abzugeben.)
In der folgenden Zeile:
p_values =[2*(1-stats.t.cdf(np.abs(i),(len(newX)-1))) for i in ts_b]
,der t-Wert folgt eine Chi-Quadrat - Verteilung von Grad
len(newX)-1
statt nach einer Chi-Quadrat - Verteilung Gradlen(newX)-len(newX.columns)-1
.Das sollte also sein:
p_values =[2*(1-stats.t.cdf(np.abs(i),(len(newX)-len(newX.columns)-1))) for i in ts_b]
( Weitere Informationen finden Sie unter t-Werte für die OLS-Regression. )
quelle
Sie können scipy für den p-Wert verwenden. Dieser Code stammt aus der Scipy-Dokumentation.
quelle
Für einen Einzeiler können Sie die Funktion pingouin.linear_regression ( Haftungsausschluss: Ich bin der Schöpfer von Pingouin ) verwenden, die mit uni- / multi-variabler Regression unter Verwendung von NumPy-Arrays oder Pandas DataFrame arbeitet, z.
Die Ausgabe ist ein Datenrahmen mit den Beta-Koeffizienten, Standardfehlern, T-Werten, p-Werten und Konfidenzintervallen für jeden Prädiktor sowie dem R ^ 2 und dem angepassten R ^ 2 der Anpassung.
quelle