Cara melakukan regresi kuantil dengan python


Regresi linier merupakan metode yang dapat kita gunakan untuk memahami hubungan antara satu atau lebih variabel prediktor dan variabel respon .

Biasanya, saat kita melakukan regresi linier, kita ingin memperkirakan nilai rata-rata variabel respon.

Namun, kita dapat menggunakan metode yang disebut regresi kuantil untuk memperkirakan nilai kuantil atau persentil dari nilai respons, seperti persentil ke-70, persentil ke-90, persentil ke-98, dan sebagainya.

Tutorial ini memberikan contoh langkah demi langkah tentang cara menggunakan fungsi ini untuk melakukan regresi kuantil dengan Python.

Langkah 1: Muat paket yang diperlukan

Pertama, kami akan memuat paket dan fungsi yang diperlukan:

 import numpy as np
import pandas as pd
import statsmodels. api as sm
import statsmodels. formula . api as smf
import matplotlib. pyplot as plt

Langkah 2: Buat datanya

Untuk contoh ini, kita akan membuat dataset yang berisi jam belajar dan hasil ujian yang diperoleh untuk 100 mahasiswa di sebuah universitas:

 #make this example reproducible
n.p. random . seeds (0)

#create dataset
obs = 100

hours = np. random . uniform (1, 10, obs)
score = 60 + 2*hours + np. random . normal (loc=0, scale=.45*hours, size=100)

df = pd. DataFrame ({' hours ':hours, ' score ':score})

#view first five rows
df. head ()

hours score
0 5.939322 68.764553
1 7.436704 77.888040
2 6.424870 74.196060
3 5.903949 67.726441
4 4.812893 72.849046

Langkah 3: Lakukan Regresi Kuantil

Selanjutnya, kita akan menyesuaikan model regresi kuantil dengan menggunakan jam belajar sebagai variabel prediktor dan nilai ujian sebagai variabel respon.

Kami akan menggunakan model tersebut untuk memprediksi perkiraan nilai ujian persentil ke-90 berdasarkan jumlah jam belajar:

 #fit the model
model = smf. quantreg ('score~hours', df). fit (q= 0.9 )

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

                         QuantReg Regression Results                          
==================================================== ============================
Dept. Variable: Pseudo R-squared score: 0.6057
Model: QuantReg Bandwidth: 3.822
Method: Least Squares Sparsity: 10.85
Date: Tue, 29 Dec 2020 No. Observations: 100
Time: 15:41:44 Df Residuals: 98
                                        Model: 1
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
Intercept 59.6104 0.748 79.702 0.000 58.126 61.095
hours 2.8495 0.128 22.303 0.000 2.596 3.103
==================================================== ============================

Dari hasilnya kita dapat melihat persamaan regresi estimasi:

Persentil ke-90 nilai ujian = 59,6104 + 2,8495*(jam)

Misalnya, skor persentil ke-90 dari seluruh siswa yang belajar 8 jam seharusnya adalah 82,4:

Persentil ke-90 nilai ujian = 59,6104 + 2,8495*(8) = 82,4 .

Outputnya juga menampilkan batas kepercayaan atas dan bawah untuk intersep dan waktu variabel prediktor.

Langkah 4: Visualisasikan hasilnya

Kita juga dapat memvisualisasikan hasil regresi dengan membuat plot sebar dengan persamaan regresi kuantil yang dilapiskan pada grafik:

 #define figure and axis
fig, ax = plt.subplots(figsize=(8, 6))

#get y values
get_y = lambda a, b: a + b * hours
y = get_y( model.params [' Intercept '], model.params [' hours '])

#plot data points with quantile regression equation overlaid
ax. plot (hours, y, color=' black ')
ax. scatter (hours, score, alpha=.3)
ax. set_xlabel (' Hours Studied ', fontsize=14)
ax. set_ylabel (' Exam Score ', fontsize=14)

Regresi Kuantil dengan Python

Berbeda dengan garis regresi linier sederhana, perhatikan bahwa garis pas ini tidak mewakili “garis yang paling sesuai” untuk data. Sebaliknya, ia melewati perkiraan persentil ke-90 pada setiap tingkat variabel prediktor.

Sumber daya tambahan

Cara melakukan regresi linier sederhana dengan Python
Cara melakukan regresi kuadrat dengan Python

Tambahkan komentar

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