Diagnosa Model Linear Regresion dengan StatModels

Model linear merupakan model dasar yang sederhana namun merupakan pondasi dari banyak teknik-teknik yang banyak digunakan saat ini. Model ini dibangun berdasarkan asumsi-asumsi bahwa data yang digunakan bersifat linear, independen, memiliki varian yang sama (homoscedasticity). Pengabaian dari beberapa asumsi tentunya mengakibatkan resiko-resiko tertentu. Sebagai resiko ketika salah satu asumsi tidak terpenuhi adalah model regresi menjadi kurang dapat diandalkan. Namun tidak berarti tidak bisa digunakan. Sebaliknya jika semua asumsi terpenuhi maka model regresi tersebut bisa sangat powerfull untuk digunakan. Model regresi yang memenuhi beberapa asumsi biasanya disebut dengan istilah BLUE (Best Linear Unbiased Estimator). Untuk memasikan itu kita dapat melakukan diagnosa terhadap model yang telah dibangun menggunakan packet Python yang benama StatModels.

Menurut Robert Nau, ada empat asumsi yang principal yang harus dipenuhi oleh sebuah linear regression model agar dapat digunakan untuk inferensi atau prediksi diantaranya

  • Linearity dan additivity
  • statistical independence
  • homoscedasticity
  • normality of the error distribution

Kita langsung saja mulai dengan melatih sebuah dataset.

Melatih Linear Model

Langkah pertama adalah memuat file dan library yang dibutuhkan yaitu numpy, mathplotlib dan statsmodel. Pada tutorial ini kita akan menggunakan car data dataset.

import numpy as np
import statsmodels
from matplotlib import pyplot as plt
import statsmodels.api as sm

#load Dataset 
df =  sm.datasets.get_rdataset("Ginzberg", "carData").data
df = df[['adjdep', 'adjfatal', 'adjsimp']]
df.head(2)
adjdepadjfataladjsimp
00.418650.106730.75934
10.516880.999150.72717
Contoh luaran/isi dataframe

Pada dataset tersebut, kita hanya menggunakan 3 fitur yaitu adjdep, adjfatal, adjsimp dimana adjdep merupakan variabel dependen. Selanjutnya kita akan mentrain data menggunakan metode OLS.

import statsmodels.formula.api as smf
reg = smf.ols('adjdep ~ adjfatal + adjsimp', data=df).fit()
reg.summary()
Dep. Variable:adjdepR-squared:0.433
Model:OLSAdj. R-squared:0.419
Method:Least SquaresF-statistic:30.19
Date:Thu, 29 Jul 2021Prob (F-statistic):1.82e-10
Time:06:26:30Log-Likelihood:-35.735
No. Observations:82AIC:77.47
Df Residuals:79BIC:84.69
Df Model:2
Covariance Type:nonrobust
coefstd errtP>|t|[0.0250.975]
Intercept0.24920.1052.3650.0210.0390.459
adjfatal0.38450.1003.8290.0000.1850.584
adjsimp0.36630.1003.6490.0000.1660.566
Omnibus:10.510Durbin-Watson:1.178
Prob(Omnibus):0.005Jarque-Bera (JB):10.561
Skew:0.836Prob(JB):0.00509
Kurtosis:3.542Cond. No.5.34
  • R-Squared: Nilai ini menandakan “persentase variasi variabel dependen yang dijelaskan oleh variabel independen”. Di sini, 43,3% variasi y (adjdep) dijelaskan oleh adjfatal dan adjsimp. Statistik ini memiliki kelemahan, jumlahnya meningkat seiring peningkatan prediktor (variabel dependen).
  • Adj. R-squared: Ini adalah modifikasi dari R-squared yang disesuaikan dengan jumlah variabel dalam regresi.
  • Prob(F-Statistic): Nilai ini menunjukkan signifikansi keseluruhan dari regresi. Ini untuk menilai tingkat signifikansi semua variabel secara bersama-sama tidak seperti t-statistik yang mengukurnya untuk variabel individu. Hipotesis nol nya adalah “semua koefisien regresi sama dengan nol”. Prob(F-statistik) menggambarkan probabilitas hipotesis nol menjadi benar. Sesuai hasil di atas, probabilitas mendekati nol. Ini menyiratkan bahwa secara keseluruhan regresi memiliki pengaruh.
  • AIC: Singkatan dari Akaike’s Information Criteria dan digunakan untuk pemilihan model. AIC yang lebih rendah menyiratkan model yang lebih baik. Nilai ini memiliki fungsi yang sama dengan BIC Bayesian information criteria .
  • Prob(Omnibus): Salah satu asumsi OLS adalah bahwa error terdistribusi secara normal. Uji Omnibus dilakukan untuk memeriksa ini. Di sini, hipotesis nolnya adalah bahwa kesalahan terdistribusi secara normal. Prob(Omnibus) seharusnya dekat dengan 1 agar memenuhi asumsi OLS. Dalam hal ini Prob(Omnibus) adalah 0,005, yang berarti asumsi OLS tidak terpenuhi. Oleh karena itu, koefisien yang diestimasi darinya bukan BLUE (Best Linear Unbiased Estimators).
  • Durbin-watson: Asumsi lain dari OLS adalah homoskedastisitas. Ini berarti bahwa varian error adalah konstan. Nilai antara 1 hingga 2 lebih disukai. Di sini, nilai1,178 menyiratkan bahwa hasil regresi dapat diandalkan dari sisi interpretasi metrik ini.
  • Jarque-Bera : Ini sejalan dengan uji Omnibus. Hal ini juga dilakukan untuk analisis distribusi errorregresi. Seharusnya sesuai dengan hasil uji Omnibus. Nilai uji JB yang besar menunjukkan bahwa error tidak berdistribusi normal.

Selain hasil summary tersebut, kita juga dapat melakukan pengecekan satu persatu

Liniaritas dan equal variance

Keduanya dapat diuji dengan memplot residu dan prediksi. residu adalah kesalahan prediksi

pred_val = reg.fittedvalues.copy()
true_val = df['adjdep'].values.copy()
residual = true_val - pred_val

plt.scatter(residual, pred_val,  alpha=0.5)
plt.show()
hasil plot residu dan prediksi

Sepertinya plot residual yang sesuai cukup acak. Untuk memastikannya, mari kita lakukan uji hipotesis, Harvey-Collier multiplier test, untuk linearitas

import statsmodels.stats.api as sms
sms.linear_harvey_collier(reg)
Ttest_1sampResult(statistic=4.99021488298292, pvalue=3.5816973971949393e-06)

Nilai p yang kecil ( di pvalue bawah ) menunjukkan bahwa terjadi pelanggaran homoskedastisitas .

Normalitas

import scipy as sp
fig, ax = plt.subplots(figsize=(6,2.5))
_, (__, ___, r) = sp.stats.probplot(residual, plot=ax, fit=True)
hasil plot normalitas

Write a Comment

Your email address will not be published. Required fields are marked *

2 × 2 =