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)
adjdep | adjfatal | adjsimp | |
---|---|---|---|
0 | 0.41865 | 0.10673 | 0.75934 |
1 | 0.51688 | 0.99915 | 0.72717 |
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: | adjdep | R-squared: | 0.433 |
---|---|---|---|
Model: | OLS | Adj. R-squared: | 0.419 |
Method: | Least Squares | F-statistic: | 30.19 |
Date: | Thu, 29 Jul 2021 | Prob (F-statistic): | 1.82e-10 |
Time: | 06:26:30 | Log-Likelihood: | -35.735 |
No. Observations: | 82 | AIC: | 77.47 |
Df Residuals: | 79 | BIC: | 84.69 |
Df Model: | 2 | ||
Covariance Type: | nonrobust |
coef | std err | t | P>|t| | [0.025 | 0.975] | |
---|---|---|---|---|---|---|
Intercept | 0.2492 | 0.105 | 2.365 | 0.021 | 0.039 | 0.459 |
adjfatal | 0.3845 | 0.100 | 3.829 | 0.000 | 0.185 | 0.584 |
adjsimp | 0.3663 | 0.100 | 3.649 | 0.000 | 0.166 | 0.566 |
Omnibus: | 10.510 | Durbin-Watson: | 1.178 |
---|---|---|---|
Prob(Omnibus): | 0.005 | Jarque-Bera (JB): | 10.561 |
Skew: | 0.836 | Prob(JB): | 0.00509 |
Kurtosis: | 3.542 | Cond. 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()
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)
Hi, this is a comment.
To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.
Commenter avatars come from Gravatar.