Multiple Linear Regression Menggunakan StatsModel

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()
Multiple Linear Regression OLS Table

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)
Mulitiple Linear Regression Scatter Plot

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

Sharing is caring: