So führen sie eine gewichtete regression der kleinsten quadrate in python durch


Eine der wichtigsten Annahmen der linearen Regression besteht darin, dass die Residuen auf jeder Ebene der Prädiktorvariablen mit gleicher Varianz verteilt sind. Diese Annahme wird als Homoskedastizität bezeichnet.

Wenn diese Annahme nicht berücksichtigt wird, spricht man von Heteroskedastizität in den Residuen. Wenn dies geschieht, werden die Regressionsergebnisse unzuverlässig.

Eine Möglichkeit, dieses Problem zu lösen, ist die Verwendung der gewichteten Regression der kleinsten Quadrate , die den Beobachtungen Gewichte zuweist, sodass Beobachtungen mit geringer Fehlervarianz mehr Gewicht erhalten, da sie im Vergleich zu Beobachtungen mit größerer Fehlervarianz mehr Informationen enthalten.

Dieses Tutorial bietet ein schrittweises Beispiel für die Durchführung einer gewichteten Regression der kleinsten Quadrate in Python.

Schritt 1: Erstellen Sie die Daten

Erstellen wir zunächst den folgenden Pandas-DataFrame, der Informationen über die Anzahl der gelernten Stunden und die Abschlussprüfungsnote für 16 Schüler einer Klasse enthält:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' hours ': [1, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 8],
                   ' score ': [48, 78, 72, 70, 66, 92, 93, 75, 75, 80, 95, 97,
                             90, 96, 99, 99]})

#view first five rows of DataFrame
print ( df.head ())

   hours score
0 1 48
1 1 78
2 2 72
3 2 70
4 2 66

Schritt 2: Passen Sie das einfache lineare Regressionsmodell an

Als Nächstes verwenden wir die Funktionen im Modul „statsmodels “, um ein einfaches lineares Regressionsmodell anzupassen, wobei wir „ Stunden “ als Prädiktorvariable und „Score“ als Antwortvariable verwenden:

 import statsmodels.api as sm

#define predictor and response variables
y = df[' score ']
X = df[' hours ']

#add constant to predictor variables
X = sm. add_constant (x)

#fit linear regression model
fit = sm. OLS (y,x). fit ()

#view model summary
print ( fit.summary ())

                            OLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.630
Model: OLS Adj. R-squared: 0.603
Method: Least Squares F-statistic: 23.80
Date: Mon, 31 Oct 2022 Prob (F-statistic): 0.000244
Time: 11:19:54 Log-Likelihood: -57.184
No. Observations: 16 AIC: 118.4
Df Residuals: 14 BIC: 119.9
Model: 1                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 60.4669 5.128 11.791 0.000 49.468 71.465
hours 5.5005 1.127 4.879 0.000 3.082 7.919
==================================================== ============================
Omnibus: 0.041 Durbin-Watson: 1.910
Prob(Omnibus): 0.980 Jarque-Bera (JB): 0.268
Skew: -0.010 Prob(JB): 0.875
Kurtosis: 2.366 Cond. No. 10.5

Aus der Modellzusammenfassung können wir ersehen, dass der R-Quadrat-Wert des Modells 0,630 beträgt.

Verwandt: Was ist ein guter R-Quadrat-Wert?

Schritt 3: Passen Sie das gewichtete Modell der kleinsten Quadrate an

Als Nächstes können wir die WLS() -Funktion von statsmodels verwenden, um gewichtete kleinste Quadrate durchzuführen, indem wir die Gewichte so festlegen, dass Beobachtungen mit geringerer Varianz mehr Gewicht erhalten:

 #define weights to use
wt = 1/smf. ols (' fit.resid.abs() ~ fit.fittedvalues ', data=df). fit (). fitted values **2

#fit weighted least squares regression model
fit_wls = sm. WLS (y, X, weights=wt). fit ()

#view summary of weighted least squares regression model
print ( fit_wls.summary ())

                            WLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.676
Model: WLS Adj. R-squared: 0.653
Method: Least Squares F-statistic: 29.24
Date: Mon, 31 Oct 2022 Prob (F-statistic): 9.24e-05
Time: 11:20:10 Log-Likelihood: -55.074
No. Comments: 16 AIC: 114.1
Df Residuals: 14 BIC: 115.7
Model: 1                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 63.9689 5.159 12.400 0.000 52.905 75.033
hours 4.7091 0.871 5.407 0.000 2.841 6.577
==================================================== ============================
Omnibus: 2,482 Durbin-Watson: 1,786
Prob(Omnibus): 0.289 Jarque-Bera (JB): 1.058
Skew: 0.029 Prob(JB): 0.589
Kurtosis: 1.742 Cond. No. 17.6
==================================================== ============================

Aus dem Ergebnis können wir ersehen, dass der R-Quadrat-Wert für dieses gewichtete Modell der kleinsten Quadrate auf 0,676 gestiegen ist.

Dies weist darauf hin, dass das gewichtete Modell der kleinsten Quadrate die Varianz der Prüfungsergebnisse besser erklären kann als das einfache lineare Regressionsmodell.

Dies zeigt uns, dass das gewichtete Modell der kleinsten Quadrate im Vergleich zum einfachen linearen Regressionsmodell eine bessere Anpassung an die Daten bietet.

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Aufgaben in Python ausführen:

So erstellen Sie ein Restdiagramm in Python
So erstellen Sie ein QQ-Diagramm in Python
So testen Sie die Multikollinearität in Python

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert