Python'da ağırlıklı en küçük kareler regresyonu nasıl gerçekleştirilir


Doğrusal regresyonun temel varsayımlarından biri, artıkların , yordayıcı değişkenin her düzeyinde eşit varyansla dağıldığıdır. Bu varsayıma eş varyanslılık denir.

Bu varsayıma uyulmadığı takdirde artıklarda değişen varyansın mevcut olduğu söylenir. Bu durumda regresyon sonuçları güvenilmez hale gelir.

Bu sorunu çözmenin bir yolu, ağırlıklı en küçük kareler regresyonunu kullanmaktır; bu regresyon, gözlemlere ağırlıklar atayarak, düşük hata varyansına sahip olanların, daha büyük hata varyansına sahip gözlemlere kıyasla daha fazla bilgi içerdiklerinden daha fazla ağırlık almasını sağlar.

Bu eğitimde Python’da ağırlıklı en küçük kareler regresyonunun nasıl gerçekleştirileceğine ilişkin adım adım bir örnek sunulmaktadır.

1. Adım: Verileri oluşturun

Öncelikle bir sınıftaki 16 öğrencinin ders saati sayısı ve final sınav notu bilgilerini içeren aşağıdaki panda DataFrame’i oluşturalım:

 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

Adım 2: Basit doğrusal regresyon modelini yerleştirin

Daha sonra, tahmin değişkeni olarak saatleri ve yanıt değişkeni olarak puanı kullanarak basit bir doğrusal regresyon modeline uyum sağlamak için statsmodels modülündeki işlevleri kullanacağız:

 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

Model özetinden modelin R-kare değerinin 0,630 olduğunu görüyoruz.

İlgili: İyi bir R-kare değeri nedir?

Adım 3: Ağırlıklandırılmış en küçük kareler modelini yerleştirin

Daha sonra, ağırlıkları daha düşük varyansa sahip gözlemlerin daha fazla ağırlık alacağı şekilde ayarlayarak ağırlıklı en küçük kareler gerçekleştirmek için statsmodels WLS() işlevini kullanabiliriz:

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

Sonuçtan bu ağırlıklı en küçük kareler modeli için R-kare değerinin 0,676’ya yükseldiğini görebiliriz.

Bu, ağırlıklı en küçük kareler modelinin, basit doğrusal regresyon modeline göre sınav puanlarındaki varyansı daha fazla açıklayabildiğini gösterir.

Bu bize ağırlıklı en küçük kareler modelinin basit doğrusal regresyon modeline kıyasla verilere daha iyi uyum sağladığını söylüyor.

Ek kaynaklar

Aşağıdaki eğitimlerde Python’da diğer genel görevlerin nasıl gerçekleştirileceği açıklanmaktadır:

Python’da Artık Arsa Nasıl Oluşturulur
Python’da QQ Grafiği Nasıl Oluşturulur
Python’da çoklu doğrusallık nasıl test edilir

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir