Cara melakukan regresi kuadrat terkecil tertimbang dengan python


Salah satu asumsi utama regresi linier adalah bahwa residu terdistribusi dengan varian yang sama di setiap tingkat variabel prediktor. Asumsi ini dikenal dengan istilah homoskedastisitas .

Jika asumsi ini tidak dipenuhi, maka dikatakan terdapat heteroskedastisitas pada residu. Jika hal ini terjadi, hasil regresi menjadi tidak dapat diandalkan.

Salah satu cara untuk mengatasi masalah ini adalah dengan menggunakan regresi kuadrat terkecil tertimbang , yang memberikan bobot pada observasi sedemikian rupa sehingga observasi dengan varian kesalahan rendah menerima bobot lebih karena berisi lebih banyak informasi dibandingkan dengan observasi dengan varian kesalahan lebih besar.

Tutorial ini memberikan contoh langkah demi langkah tentang cara melakukan regresi kuadrat terkecil tertimbang dengan Python.

Langkah 1: Buat datanya

Pertama, mari kita buat DataFrame pandas berikut yang berisi informasi tentang jumlah jam belajar dan nilai ujian akhir untuk 16 siswa dalam satu kelas:

 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

Langkah 2: Sesuaikan model regresi linier sederhana

Selanjutnya, kita akan menggunakan fungsi dalam modul statsmodels untuk menyesuaikan model regresi linier sederhana dengan menggunakan jam sebagai variabel prediktor dan skor sebagai variabel respons:

 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

Dari rangkuman model terlihat bahwa nilai R-squared model adalah 0,630 .

Terkait: Berapa nilai R-kuadrat yang bagus?

Langkah 3: Pasangkan model kuadrat terkecil tertimbang

Selanjutnya, kita dapat menggunakan fungsi statsmodels WLS() untuk melakukan kuadrat terkecil berbobot dengan mengatur bobot sedemikian rupa sehingga observasi dengan varians lebih rendah menerima bobot lebih banyak:

 #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
==================================================== ============================

Dari hasilnya terlihat bahwa nilai R-squared untuk model kuadrat terkecil tertimbang ini meningkat menjadi 0,676 .

Hal ini menunjukkan bahwa model kuadrat terkecil tertimbang lebih mampu menjelaskan varians nilai ujian dibandingkan model regresi linier sederhana.

Hal ini menunjukkan bahwa model kuadrat terkecil tertimbang memberikan kecocokan yang lebih baik terhadap data dibandingkan dengan model regresi linier sederhana.

Sumber daya tambahan

Tutorial berikut menjelaskan cara melakukan tugas umum lainnya dengan Python:

Cara Membuat Plot Sisa dengan Python
Cara Membuat Plot QQ dengan Python
Cara menguji multikolinearitas dengan Python

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *