Cara melakukan regresi linier sederhana dengan python (langkah demi langkah)


Regresi linier sederhana adalah teknik yang dapat kita gunakan untuk memahami hubungan antara satu variabel penjelas dan satu variabel respon .

Teknik ini menemukan garis yang paling “sesuai” dengan data dan mengambil bentuk berikut:

ŷ = b 0 + b 1 x

Emas:

  • ŷ : Perkiraan nilai respons
  • b 0 : Asal garis regresi
  • b 1 : Kemiringan garis regresi

Persamaan ini dapat membantu kita memahami hubungan antara variabel penjelas dan variabel respons dan (dengan asumsi variabel tersebut signifikan secara statistik) persamaan ini dapat digunakan untuk memprediksi nilai variabel respons dengan mempertimbangkan nilai variabel penjelas.

Tutorial ini memberikan penjelasan langkah demi langkah tentang cara melakukan regresi linier sederhana dengan Python.

Langkah 1: Muat data

Untuk contoh ini, kita akan membuat dataset palsu yang berisi dua variabel berikut untuk 15 siswa:

  • Jumlah total jam belajar untuk ujian tertentu
  • Hasil ujian

Kami akan mencoba menyesuaikan model regresi linier sederhana dengan menggunakan jam sebagai variabel penjelas dan hasil pemeriksaan sebagai variabel respon.

Kode berikut menunjukkan cara membuat kumpulan data palsu ini dengan Python:

 import pandas as pd

#create dataset
df = pd. DataFrame ({' hours ': [1, 2, 4, 5, 5, 6, 6, 7, 8, 10, 11, 11, 12, 12, 14],
                   ' score ': [64, 66, 76, 73, 74, 81, 83, 82, 80, 88, 84, 82, 91, 93, 89]})
      

#view first six rows of dataset
df[0:6]

    hours score
0 1 64
1 2 66
2 4 76
3 5 73
4 5 74
5 6 81

Langkah 2: Visualisasikan datanya

Sebelum memasang model regresi linier sederhana, kita harus memvisualisasikan data terlebih dahulu untuk memahaminya.

Pertama, kami ingin memastikan bahwa hubungan antara jam kerja dan skor kira-kira linier, karena ini merupakan asumsi yang mendasari regresi linier sederhana.

Kita dapat membuat diagram sebar sederhana untuk memvisualisasikan hubungan antara dua variabel:

 import matplotlib.pyplot as plt

plt. scatter (df.hours, df.score)
plt. title (' Hours studied vs. Exam Score ')
plt. xlabel (' Hours ')
plt. ylabel (' Score ')
plt. show ()

Arahkan awan dengan Python

Dari grafik terlihat bahwa hubungannya tampak linier. Seiring bertambahnya jumlah jam , skor juga cenderung meningkat secara linier.

Kemudian kita dapat membuat diagram kotak untuk memvisualisasikan distribusi hasil ujian dan memeriksa outlier . Secara default, Python mendefinisikan observasi sebagai outlier jika observasi tersebut 1,5 kali rentang interkuartil di atas kuartil ketiga (Q3) atau 1,5 kali rentang interkuartil di bawah kuartil pertama (Q1).

Jika observasinya outlier, lingkaran kecil akan muncul di plot kotak:

 df. boxplot (column=[' score ']) 

Plot kotak dengan Python

Tidak ada lingkaran kecil di boxplot, artinya tidak ada outlier di dataset kita.

Langkah 3: Lakukan Regresi Linier Sederhana

Setelah kita memastikan bahwa hubungan antar variabel adalah linier dan tidak ada outlier, kita dapat melanjutkan untuk menyesuaikan model regresi linier sederhana dengan menggunakan jam sebagai variabel penjelas dan skor sebagai variabel respons:

Catatan: Kami akan menggunakan fungsi OLS() dari perpustakaan statsmodels agar sesuai dengan model regresi.

 import statsmodels.api as sm

#define response variable
y = df[' score ']

#define explanatory variable
x = df[[' hours ']]

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

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

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

                            OLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.831
Model: OLS Adj. R-squared: 0.818
Method: Least Squares F-statistic: 63.91
Date: Mon, 26 Oct 2020 Prob (F-statistic): 2.25e-06
Time: 15:51:45 Log-Likelihood: -39,594
No. Observations: 15 AIC: 83.19
Df Residuals: 13 BIC: 84.60
Model: 1                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 65.3340 2.106 31.023 0.000 60.784 69.884
hours 1.9824 0.248 7.995 0.000 1.447 2.518
==================================================== ============================
Omnibus: 4,351 Durbin-Watson: 1,677
Prob(Omnibus): 0.114 Jarque-Bera (JB): 1.329
Skew: 0.092 Prob(JB): 0.515
Kurtosis: 1.554 Cond. No. 19.2
==================================================== ============================

Dari ringkasan model, kita dapat melihat bahwa persamaan regresi yang dipasang adalah:

Skor = 65.334 + 1.9824*(jam)

Artinya, setiap tambahan jam belajar dikaitkan dengan peningkatan rata-rata nilai ujian sebesar 1,9824 poin. Dan nilai awal sebesar 65.334 memberi tahu kita rata-rata nilai ujian yang diharapkan untuk seorang siswa yang belajar selama nol jam.

Kita juga dapat menggunakan persamaan ini untuk mencari nilai ujian yang diharapkan berdasarkan jumlah jam belajar seorang siswa. Misalnya, seorang siswa yang belajar selama 10 jam harus mencapai nilai ujian 85.158 :

Skor = 65.334 + 1.9824*(10) = 85.158

Berikut cara menafsirkan ringkasan model lainnya:

  • P>|t| : Ini adalah nilai p yang terkait dengan koefisien model. Karena nilai p untuk jam (0,000) secara signifikan kurang dari 0,05, kita dapat mengatakan bahwa terdapat hubungan yang signifikan secara statistik antara jam dan skor .
  • R-squared: Angka ini menunjukkan bahwa persentase variasi nilai ujian dapat dijelaskan oleh jumlah jam belajar. Secara umum, semakin besar nilai R-squared suatu model regresi, maka variabel penjelas tersebut semakin mampu memprediksi nilai variabel respon. Dalam hal ini, 83,1% variasi skor dijelaskan oleh jam belajar.
  • F-statistik dan nilai p: F-statistik ( 63,91 ) dan nilai p yang sesuai ( 2,25e-06 ) memberi tahu kita signifikansi model regresi secara keseluruhan, yaitu apakah variabel penjelas dalam model berguna dalam menjelaskan variasi . dalam variabel respons. Karena nilai p dalam contoh ini kurang dari 0,05, model kami signifikan secara statistik dan jam dianggap berguna dalam menjelaskan variasi skor .

Langkah 4: Buat Plot Sisa

Setelah model regresi linier sederhana disesuaikan dengan data, langkah terakhir adalah membuat plot sisa.

Salah satu asumsi utama regresi linier adalah bahwa residu model regresi mendekati terdistribusi normal dan bersifat homoskedastik pada setiap tingkat variabel penjelas. Jika asumsi-asumsi ini tidak terpenuhi, hasil model regresi kami bisa menyesatkan atau tidak dapat diandalkan.

Untuk memverifikasi bahwa asumsi ini terpenuhi, kita dapat membuat plot sisa berikut:

Plot residu versus nilai yang dipasang: Plot ini berguna untuk mengkonfirmasi homoskedastisitas. Sumbu x menampilkan nilai yang dipasang dan sumbu y menampilkan residu. Selama residu tampak terdistribusi secara acak dan seragam di seluruh grafik di sekitar nilai nol, kita dapat berasumsi bahwa homoskedastisitas tidak dilanggar:

 #define figure size
fig = plt. figure (figsize=(12.8))

#produce residual plots
fig = sm.graphics. plot_regress_exog (model, ' hours ', fig=fig)

Plot Residu dengan Python

Empat plot diproduksi. Yang di pojok kanan atas adalah plot sisa versus plot yang disesuaikan. Sumbu x pada plot ini menunjukkan nilai sebenarnya dari titik variabel prediktor dan sumbu y menunjukkan sisa nilai tersebut.

Karena residu tampak tersebar secara acak di sekitar nol, hal ini menunjukkan bahwa heteroskedastisitas tidak menjadi masalah pada variabel penjelas.

Plot QQ: Plot ini berguna untuk menentukan apakah residu mengikuti distribusi normal. Jika nilai data pada plot mengikuti garis kira-kira lurus dengan sudut 45 derajat, maka data tersebut berdistribusi normal:

 #define residuals
res = model. reside

#create QQ plot
fig = sm. qqplot (res, fit= True , line=" 45 ")
plt.show() 

Plot QQ dengan Python

Residunya sedikit menyimpang dari garis 45 derajat, namun tidak cukup menimbulkan kekhawatiran serius. Kita dapat berasumsi bahwa asumsi normalitas terpenuhi.

Karena residu berdistribusi normal dan homoskedastik, kami memverifikasi bahwa asumsi model regresi linier sederhana terpenuhi. Dengan demikian, keluaran model kami dapat diandalkan.

Kode Python lengkap yang digunakan dalam tutorial ini dapat ditemukan di sini .

Tambahkan komentar

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