######### Analisis Regresi Sederhana ##########
# =========================
# 1. INPUT DATA
# =========================
iklan <- c(10,9,11,12,11,12,13,13,14,15)
penjualan <- c(44,40,42,46,48,52,54,58,56,60)
data <- data.frame(iklan, penjualan)
# Scatterplot
# ========================= #
# INSTALL & LOAD PACKAGE #
# ========================= #
# install.packages("ggplot2") # jalankan sekali saja
library(ggplot2)
ggplot(data, aes(x = iklan, y = penjualan)) +
geom_point(size = 4, color = "#2E86C1") +
geom_smooth(method = "lm",
se = TRUE,
color = "#E74C3C",
fill = "#FADBD8",
linewidth = 1.2) +
labs(
title = "Hubungan Iklan terhadap Penjualan",
subtitle = "Regresi Linear Sederhana",
x = "Biaya Iklan",
y = "Penjualan"
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 12),
plot.subtitle = element_text(size = 10),
axis.title = element_text(face = "bold")
)
## `geom_smooth()` using formula = 'y ~ x'

# Interpretasi: bentuk polanya naik, turun, atau tidak beraturan
# Dugaan ada hubungan linear antara x dan y maka bentuk polanya naik/turun, jika tidak beraturan maka diduga tidak ada hubungan linear.
# =========================
# 2. REGRESI LINEAR SEDERHANA
# =========================
model <- lm(penjualan ~ iklan, data = data)
summary(model)
##
## Call:
## lm(formula = penjualan ~ iklan, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.4667 -0.9500 0.5333 1.4167 4.4667
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.6000 6.3323 1.200 0.264397
## iklan 3.5333 0.5223 6.765 0.000143 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.861 on 8 degrees of freedom
## Multiple R-squared: 0.8512, Adjusted R-squared: 0.8326
## F-statistic: 45.77 on 1 and 8 DF, p-value: 0.0001428
# model regresi: y=7.6+3.53x
# interpretasi b0: saat biaya iklan tidak ada atau nol, maka penjualan sebesar 7.6
# interpretasi b1: jika biaya iklan naik satu satuan, maka penjualan akan bertambah sebesar 3.53
# =========================
# 3. UJI ASUMSI
# =========================
# Shapiro-Wilk (n<30)
shapiro.test(residuals(model))
##
## Shapiro-Wilk normality test
##
## data: residuals(model)
## W = 0.9452, p-value = 0.6121
# Kolmogorov-Smirnov (n>=30)
ks.test(residuals(model), "pnorm", mean(residuals(model)), sd(residuals(model)))
##
## Exact one-sample Kolmogorov-Smirnov test
##
## data: residuals(model)
## D = 0.16869, p-value = 0.8951
## alternative hypothesis: two-sided
# 3.1 Uji Normalitas Residual (Shapiro-Wilk)
shapiro.test(residuals(model))
##
## Shapiro-Wilk normality test
##
## data: residuals(model)
## W = 0.9452, p-value = 0.6121
# uji hipotesis:
# H0: residual berdistribusi normal, H1: residual tidak berdistribusi normal
# 3.2 Uji Homoskedastisitas (Breusch-Pagan)
# Tujuan: Mengetahui apakah Varians residual sama pada semua tingkat X?
# install.packages("lmtest") # jalankan sekali saja
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(model)
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 0.0023414, df = 1, p-value = 0.9614
# uji hipotesis:
# H0: Residual homogen, H1: Residual tidak homogen
# 3.3 Uji Autokorelasi (Durbin-Watson)
# biasanya dilakukan hanya jika data berdasarkan waktu
# Tujuan: Melihat apakah residual pada observasi ke-i berkorelasi dengan residual observasi lain.
# install.packages("car") # jalankan sekali saja
library(car)
## Loading required package: carData
durbinWatsonTest(model)
## lag Autocorrelation D-W Statistic p-value
## 1 0.1780041 1.621113 0.326
## Alternative hypothesis: rho != 0
# uji hipotesis:
# H0: Tidak ada autokorelasi, H1: Ada autokorelasi
# =========================
# 4. VISUALISASI
# =========================
par(mfrow=c(2,2))
plot(model)

# Q-Q Residuals: Jika Residual membentuk pola linear-> normalitas terpenuhi
# Residuals vs Fitted: Jika tidak membentuk pola tertentu, diasumsikan residual homogen->tidak terjadi heterokedastistitas
# Residuals vs leverage: Tidak membentuk pola tertentu, diasumsikan tidak ada autokorelasi