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)

Eksplorasi 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 :

Split Data

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

Model Regresi Linear Sederhana

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

Uji Asumsi

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.

Evaluasi Model

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'