Regresi kuadratik dengan Python |
Hubungan sebab akibat antara variabel independen dan dependen selain dapat berbentuk garis lurus juga kita temukan dalam bentuk parabolik atau kuadratik. Hubungan kausal inilah yang kemudian dikenal sebagai regresi kuadratik. Konsep regresi sendiri memang mewakili hubungan linier terhadap parameternya. Dalam artinya, koefisien beta atau alpha berderajat satu. Sedangkan penamaan kuadratik ini menunjukkan pola garis hubungan kausal yang parabolis akibat derajat atau order tertinggi variabel independennya sebesar 2.
Dalam keseharian, fenomena yang menunjukkan hubungan kuadratis ini mudah kita jumpai. Sebagai contoh sederhana di sekitar saja, kita coba makan satu kue setiap 1 menit. Pada waktu tertentu, perut kita akan merasa kenyang dan akhirnya jumlah kue yang kita makan justru berkurang setelah mencapai puncak rasa kenyang.
Pada praktikum pemodelan regresi kuadratik kali ini, kita akan membuat data dummy antara variabel jam dengan kepuasan. Sama halnya dengan kue tadi, kepuasan seiring bertambahnya jam terlihat meningkat, tetapi setelah mencapai puncak kepuasan, kepuasan itu justru menurun seiring berjalannya jam. Adapun langkah-langkah pemodelan regresi kuadratik dengan Python adalah sebagai berikut:
import numpy as np
import scipy.stats as stats
#define variables
jam = [6, 9, 12, 12, 15, 21, 24, 24, 27, 30, 36, 39, 45, 48, 57, 60]
kepuasan = [13, 19, 32, 41, 45, 77, 92, 95, 97, 90, 83, 76, 65, 55, 37, 23]
import matplotlib.pyplot as plt
#create scatterplot
plt.scatter(x=jam, y=kepuasan, s=60, c='green')
<matplotlib.collections.PathCollection at 0x2af9b941b70>
import numpy as np
#polynomial fit with degree = 2
modku = np.poly1d(np.polyfit(jam, kepuasan, 2))
#add fitted polynomial line to scatterplot
polyline = np.linspace(1, 60, 50)
plt.scatter(jam, kepuasan)
plt.plot(polyline, model(polyline))
plt.show()
print(modku)
2 -0.1059 x + 7.091 x - 29.23
#define function to calculate r-squared
def polyfit(x, y, degree):
results = {}
coeffs = np.polyfit(x, y, degree)
p = np.poly1d(coeffs)
#calculate r-squared
yhat = p(x)
ybar = np.sum(y)/len(y)
ssreg = np.sum((yhat-ybar)**2)
sstot = np.sum((y - ybar)**2)
results['r_squared'] = ssreg / sstot
return results
#find r-squared of polynomial model with degree = 3
polyfit(jam, kepuasan, 2)
{'r_squared': 0.9033225611594683}