Langkah pertama yang dilakukan adalah mengatur working directory pada R, serta tempatkan data yang tersedia pada file ini.
setwd("D:\\DS\\R\\[R] Regresi Linear Sederhana")
##Input Data Langkah selanjutnya adalah menginput dataset, sebagai berikut :
#Input Data
salary_data <-read.csv("Salary_Data.csv", header = T)
head(salary_data)
## YearsExperience Salary
## 1 1.1 39343
## 2 1.3 46205
## 3 1.5 37731
## 4 2.0 43525
## 5 2.2 39891
## 6 2.9 56642
attach(salary_data)
Langkah selanjutnya adalah melakukan eksplorasi terhadap dataset, sebagai berikut :
#Melihat karakteristik data
str(salary_data)
## 'data.frame': 30 obs. of 2 variables:
## $ YearsExperience: num 1.1 1.3 1.5 2 2.2 2.9 3 3.2 3.2 3.7 ...
## $ Salary : num 39343 46205 37731 43525 39891 ...
Terlihat bahwa terdiri dari 30 baris (observasi) dan 2 kolom (variabel).
#Melihat statistika deskriptif pada data
summary(salary_data)
## YearsExperience Salary
## Min. : 1.100 Min. : 37731
## 1st Qu.: 3.200 1st Qu.: 56721
## Median : 4.700 Median : 65237
## Mean : 5.313 Mean : 76003
## 3rd Qu.: 7.700 3rd Qu.:100545
## Max. :10.500 Max. :122391
Terlihat bahwa maksimum Salary adalah 122391 ribu rupiah, dan minimum Salary adalah 37731 ribu rupiah. Terlihat juga bahwa maksimum Years Experience adalah 10,5 tahun dan minimum Years Experience adalah 1,1 tahun.
#Melihat apakah ada missing value pada data
is.na(salary_data)
## YearsExperience Salary
## [1,] FALSE FALSE
## [2,] FALSE FALSE
## [3,] FALSE FALSE
## [4,] FALSE FALSE
## [5,] FALSE FALSE
## [6,] FALSE FALSE
## [7,] FALSE FALSE
## [8,] FALSE FALSE
## [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## [15,] FALSE FALSE
## [16,] FALSE FALSE
## [17,] FALSE FALSE
## [18,] FALSE FALSE
## [19,] FALSE FALSE
## [20,] FALSE FALSE
## [21,] FALSE FALSE
## [22,] FALSE FALSE
## [23,] FALSE FALSE
## [24,] FALSE FALSE
## [25,] FALSE FALSE
## [26,] FALSE FALSE
## [27,] FALSE FALSE
## [28,] FALSE FALSE
## [29,] FALSE FALSE
## [30,] FALSE FALSE
Terlihat bahwa tidak ada data yang kosong pada dataset.
Langkah selanjutnya adalah memilih variabel respon dan variabel prediktor. Variabel respon yang digunakan adalah Salary dan variabel prediktor yang digunakan adalah YearsExperience.
#Memilih variabel respon
Y <- Salary
head(Y)
## [1] 39343 46205 37731 43525 39891 56642
#Memilih variabel prediktor
X <- YearsExperience
head(X)
## [1] 1.1 1.3 1.5 2.0 2.2 2.9
Langkah selanjutnya adalah membuat plot data set, sebagai berikut :
Langkah selanjutnya adalah membagi data ke dalam Training data dan Testing data, sebagai berikut :
library(caTools)
set.seed(123)
split <- sample.split(salary_data$Salary, SplitRatio = 0.8)
salary_train <- subset(salary_data, split==TRUE)
salary_test <-subset(salary_data, split==FALSE)
X_train <- salary_train$YearsExperience
Y_train <- salary_train$Salary
X_test <- salary_test$YearsExperience
Y_test <- salary_test$Salary
Langkah selanjutnya adalah membuat model terhadap Training data, sebagai berikut :
lm <- lm(Y_train~X_train, salary_train)
summary(lm)
##
## Call:
## lm(formula = Y_train ~ X_train, data = salary_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7810.8 -3698.7 747.8 3046.1 8162.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 26995.6 2262.0 11.93 4.42e-11 ***
## X_train 9152.3 364.8 25.09 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5260 on 22 degrees of freedom
## Multiple R-squared: 0.9662, Adjusted R-squared: 0.9647
## F-statistic: 629.6 on 1 and 22 DF, p-value: < 2.2e-16
Sehingga diperoleh model regresi terhadap Training data adalah : \(Y=26996+9152X\) Interpretasi model : - Jika YearsExperience adalah 0 tahun maka Salary bernilai 26996 ribu rupiah - Jika YearsExperience meningkat 1 tahun maka Salary akan meningkat 9152 ribu rupiah
Langkah selanjutnya adalah melakukan prediksi pada Testing data dengan menggunakan Training model. Sehingga diperoleh nilai Y prediksi sebagai berikut :
library(caret)
## Loading required package: lattice
X_test<-data.frame(X_train = X_test)
Y_pred <- predict(lm, data.frame(X_test))
Y_pred
## 1 2 3 4 5 6
## 47130.67 56282.97 62689.58 71841.88 81909.41 102044.47
Nilai Y prediksi dapat dibandingkan dengan nilai Y aktual sebagai berikut :
Y_test
## [1] 39891 54445 63218 67938 93940 113812
Langkah selanjutnya adalah melakukan uji asumsi, sebagai berikut :
#Uji Asumsi Kenormalan
residual <- resid(lm)
shapiro.test(residual)
##
## Shapiro-Wilk normality test
##
## data: residual
## W = 0.93981, p-value = 0.1616
Hipotesis :
\(H_0\) : Residual menyebar normal
\(H_1\) : Residual tidak menyebar normal
Dapat dilihat nilai p-value = 0,1616 > alpha = 0,05 hal ini berati Terima \(H_0\), sehingga residual menyebar normal.
#Uji Autokorelasi
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
dwtest(lm, data=salary_train)
##
## Durbin-Watson test
##
## data: lm
## DW = 1.2904, p-value = 0.01941
## alternative hypothesis: true autocorrelation is greater than 0
Hipotesis :
\(H_0\) : Tidak ada autokorelasi
\(H_1\) : Ada autokorelasi
Dapat dilihat nilai p-value = 0,01941 < alpha = 0,05 hal ini berati Tolak \(H_0\), sehingga tidak ada autokorelasi.
#Uji Heteroskedastisitas
bptest(lm, data = salary_train)
##
## studentized Breusch-Pagan test
##
## data: lm
## BP = 3.6241, df = 1, p-value = 0.05695
Hipotesis :
\(H_0\) : Tidak ada heteroskedastisitas
\(H_1\) : Ada heteroskedastisitas
Dapat dilihat nilai p-value = 0,05695 > alpha = 0,05 hal ini berati Terima \(H_0\), sehingga tidak ada heteroskedastisitas.
Langkah selanjutnya adalah melakukan evaluasi terhadap model yang telah dibuat, dengan melihat nilai MSE dan \(R^2\) sebagai berikut :
#Evaluasi Model
library(Metrics)
##
## Attaching package: 'Metrics'
## The following objects are masked from 'package:caret':
##
## precision, recall
mse(Y_test, Y_pred)
## [1] 59086716
summary(lm)$r.squared
## [1] 0.9662358
Sehingga diperoleh nilai \(R^2\) adalah 0,966 hal ini berati sebesar 96,6% model dapat menjelaskan variabel YearsExperience dan Salary dan sebesar 3,4% dijelaskan oleh variabel - variabel lain diluar model. Hal ini berati model sudah cukup baik untuk digunakan.
Langkah selanjutnya adalah membuat plot data beserta garis linearnya, sebagai berikut :
## `geom_smooth()` using formula 'y ~ x'