Pada Lesson multiple linear regression menggunakan statsmodel, kita akan bahas perhitungan GPA berdasarkan dua independent variable, yaitu SAT dan Attendance (kehadiran).
Variable kehadiran adalah berupa kategorikal data, 1 untuk kehadiran diatas 75% dan 0 untuk kehadiran dibawah 75%. Download data disini.
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
data = pd.read_csv('multipleRegression3.csv')
y = data ['GPA']
x1 = data [['SAT','Attendance']]
x = sm.add_constant(x1)
results = sm.OLS(y,x).fit()
results.summary()
plt.scatter(data['SAT'],data['GPA'], c=data['Attendance'],cmap='RdYlGn_r')
yhat_no = 0.3599 + 0.0016*data['SAT']
yhat_yes = 0.3599 + 0.1149 + 0.0016*data['SAT']
#yhat adalah persamaan dari simple linear regression lesson sebelumnya.
yhat = 0.0017*data['SAT'] + 0.275
fig = plt.plot(data['SAT'],yhat_no, lw=2, c='#006837', label ='regression line1')
fig = plt.plot(data['SAT'],yhat_yes, lw=2, c='#a50026', label ='regression line2')
fig = plt.plot(data['SAT'],yhat, lw=3, c='#4C72B0', label ='regression line')
plt.xlabel('SAT', fontsize = 20)
plt.ylabel('GPA', fontsize = 20)
plt.show()

Dari table OLS diatas, dibandingkan dengan OLS table dari lesson Simple Linear Regression Menggunakan StatsModel, dapat dilihat ada perbaikan, nilai Adj. R-Squared, F-Statistic lebih besar dari model simple linear regression.
Coeficient Attandance juga significant terhadap model, dapat dilihat dari nilai p value = 0. Bandingkan dengan tabel OLS pada lesson Indikator Model Yang SIgnifikan.
Dari tabel diatas dapat dibuat 2 persamaan regression untuk kehadiran diatas 75% dan dibawah 75%.
- yhat_no = 0.9160 + 0.0012*data[‘SAT’] (garis hijau)
- yhat_yes = 0.9160 + 0.2487 + 0.0012*data[‘SAT’] (garis merah)
- yhat = 0.0017*data[‘SAT’] + 0.275 (garis biru)

Prediksi GPA menggunakan Model
Untuk melakukan prediksi nilai GPA dengan menggunakan model diatas, dibutuhkan 2 input, yaitu nilai SAT dan kehadiran. Contoh:
- Budi, nilai SAT: 1700 dan kehadiran dibawah 75% atau 0.
- Wati, nilai SAT: 1670 dan kehadiran diatas 75% atau 1.
new_data = pd.DataFrame({'const': 1,'SAT': [1700, 1670], 'Attendance': [0, 1]})
#reorder data
new_data = new_data[['const','SAT','Attendance']]
predictions = results.predict(new_data)
predictions
Saat membuat new data frame menggunakan Panda, data akan diurut berdasarkan abjad. Oleh karena itu harus di-reorder, sesuai uratan data frame x, yaitu const, SAT dan Attendance.
Berikut hasil dari prediksi adalah sebagai berikut, dimana 0 adalah untuk Budi dan 1 adalah untuk wati.
0 3.003796
1 3.215648
dtype: float64