Program Studi Sarjana Statistika · Departemen Statistika · Fakultas Sains, Teknologi, dan Matematika · Universitas Brawijaya · 2026
Dataset yang digunakan adalah Advertising Sales yang diperoleh dari platform Kaggle (De, 2020). Dataset ini menggambarkan hubungan antara pengeluaran iklan pada berbagai media dengan volume penjualan suatu produk.
Dataset asli terdiri dari 200 observasi dengan tiga
variabel prediktor: TV (X1), Radio
(X2), dan Newspaper (X3), serta satu variabel
dependen Sales (Y). Setelah uji awal, variabel
Newspaper dikeluarkan karena nilai p-value = 0,860 (tidak
signifikan). Diambil 50 observasi menggunakan
random sampling dengan set.seed(123).
| Variabel | Kode | Satuan | Keterangan |
|---|---|---|---|
| TV | X1 | Ribuan Dolar | Pengeluaran iklan media televisi |
| Radio | X2 | Ribuan Dolar | Pengeluaran iklan media radio |
| Sales | Y | Ribuan Unit | Volume penjualan produk |
# Install package jika belum tersedia (jalankan sekali)
# install.packages("readxl")
# install.packages("lmtest")
# install.packages("tseries")
# install.packages("car")
library(readxl)
library(lmtest)
library(tseries)
library(car)
library(ggplot2)
library(gridExtra)
library(knitr)
library(kableExtra)
library(dplyr)
# Membaca dataset
data <- read_excel("Advertising 50 Sampel 2 Prediktor.xlsx")
colnames(data) <- c("No", "TV", "Radio", "Sales")
data <- data[, c("TV", "Radio", "Sales")]
# Tampilkan 10 baris pertama
kable(head(data, 10),
caption = "10 Observasi Pertama Dataset Advertising Sales",
align = "ccc",
booktabs = TRUE) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE, position = "center") %>%
column_spec(1, bold = TRUE, color = "#2980B9") %>%
column_spec(2, color = "#E74C3C") %>%
column_spec(3, color = "#27AE60")| TV | Radio | Sales |
|---|---|---|
| 180.8 | 10.8 | 12.9 |
| 147.3 | 23.9 | 14.6 |
| 218.4 | 27.7 | 18.0 |
| 228.3 | 16.9 | 15.5 |
| 62.3 | 12.6 | 9.7 |
| 142.9 | 29.3 | 15.0 |
| 112.9 | 17.4 | 11.9 |
| 265.6 | 20.0 | 17.4 |
| 74.7 | 49.4 | 14.7 |
| 177.0 | 33.4 | 17.1 |
# Ringkasan statistik deskriptif
desc <- data.frame(
Variabel = c("TV (X1)", "Radio (X2)", "Sales (Y)"),
Min = c(min(data$TV), min(data$Radio), min(data$Sales)),
Q1 = c(quantile(data$TV, .25), quantile(data$Radio, .25), quantile(data$Sales, .25)),
Median = c(median(data$TV), median(data$Radio), median(data$Sales)),
Mean = c(mean(data$TV), mean(data$Radio), mean(data$Sales)),
Q3 = c(quantile(data$TV, .75), quantile(data$Radio, .75), quantile(data$Sales, .75)),
Max = c(max(data$TV), max(data$Radio), max(data$Sales)),
Std.Dev = c(sd(data$TV), sd(data$Radio), sd(data$Sales))
)
kable(desc, digits = 2,
caption = "Statistik Deskriptif Dataset Advertising Sales",
align = "lccccccc") %>%
kable_styling(bootstrap_options = c("striped", "hover", "bordered"),
full_width = TRUE) %>%
row_spec(0, bold = TRUE, background = "#2C3E50", color = "white") %>%
column_spec(1, bold = TRUE)| Variabel | Min | Q1 | Median | Mean | Q3 | Max | Std.Dev |
|---|---|---|---|---|---|---|---|
| TV (X1) | 11.7 | 73.73 | 159.95 | 141.86 | 213.55 | 287.6 | 84.70 |
| Radio (X2) | 0.0 | 12.92 | 20.60 | 23.03 | 33.48 | 49.4 | 14.02 |
| Sales (Y) | 5.3 | 10.20 | 12.90 | 13.90 | 17.05 | 26.2 | 5.16 |
Interpretasi:
# Scatter plot TV vs Sales
p1 <- ggplot(data, aes(x = TV, y = Sales)) +
geom_point(color = "#2980B9", size = 2.5, alpha = 0.75) +
geom_smooth(method = "lm", color = "#E74C3C", se = TRUE, linewidth = 1) +
labs(title = "TV (X1) vs Sales (Y)",
x = "Pengeluaran Iklan TV (ribu $)",
y = "Volume Penjualan (ribu unit)") +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(hjust = 0.5, face = "bold", color = "#2C3E50"))
# Scatter plot Radio vs Sales
p2 <- ggplot(data, aes(x = Radio, y = Sales)) +
geom_point(color = "#E67E22", size = 2.5, alpha = 0.75) +
geom_smooth(method = "lm", color = "#E74C3C", se = TRUE, linewidth = 1) +
labs(title = "Radio (X2) vs Sales (Y)",
x = "Pengeluaran Iklan Radio (ribu $)",
y = "Volume Penjualan (ribu unit)") +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(hjust = 0.5, face = "bold", color = "#2C3E50"))
grid.arrange(p1, p2, ncol = 2)Interpretasi:
# Membentuk model regresi linear berganda
model <- lm(Sales ~ TV + Radio, data = data)
# Tampilkan hasil summary
summary(model)##
## Call:
## lm(formula = Sales ~ TV + Radio, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8872 -0.7787 0.2038 0.8972 2.1982
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.096753 0.506586 6.113 0.000000182 ***
## TV 0.043849 0.002509 17.479 < 0.0000000000000002 ***
## Radio 0.198879 0.015153 13.125 < 0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.472 on 47 degrees of freedom
## Multiple R-squared: 0.9218, Adjusted R-squared: 0.9185
## F-statistic: 276.9 on 2 and 47 DF, p-value: < 0.00000000000000022
Ŷ = 3,096753 + 0,043849 TV + 0,198879 Radio
Intercept (β₀ = 3,096753): Apabila pengeluaran iklan TV dan Radio keduanya bernilai nol, maka estimasi rata-rata volume Sales adalah sebesar 3,097 ribu unit.
Variabel TV (β₁ = 0,043849): Setiap peningkatan 1 ribu dolar pengeluaran iklan TV — dengan Radio konstan — akan meningkatkan volume Sales sebesar 0,0438 ribu unit. Nilai p-value < 0,0000000000000002 menunjukkan pengaruh yang sangat signifikan.
Variabel Radio (β₂ = 0,198879): Setiap peningkatan 1 ribu dolar pengeluaran iklan Radio — dengan TV konstan — akan meningkatkan volume Sales sebesar 0,1989 ribu unit. Nilai p-value < 0,0000000000000002 menunjukkan pengaruh yang sangat signifikan. Koefisien Radio lebih besar dari TV, artinya iklan radio memberikan dampak per-unit yang lebih tinggi.
# Ekstrak nilai F dan p-value dari summary model
sm <- summary(model)
f_stat <- sm$fstatistic
p_val_f <- pf(f_stat[1], f_stat[2], f_stat[3], lower.tail = FALSE)
kable(data.frame(
Statistik = c("F-statistic", "df1", "df2", "p-value", "Keputusan"),
Nilai = c(round(f_stat[1], 3), f_stat[2], f_stat[3],
formatC(p_val_f, format = "e", digits = 3),
ifelse(p_val_f < 0.05, "Tolak H₀ ✓", "Gagal Tolak H₀"))
), caption = "Hasil Uji F (Simultan)", align = "ll") %>%
kable_styling(bootstrap_options = c("striped", "hover", "bordered"),
full_width = FALSE, position = "center") %>%
row_spec(5, bold = TRUE, color = "#27AE60")| Statistik | Nilai |
|---|---|
| F-statistic | 276.947 |
| df1 | 2 |
| df2 | 47 |
| p-value | 9.830e-27 |
| Keputusan | Tolak H₀ ✓ |
Kesimpulan Uji F: Nilai F-statistic = 276,9 dengan p-value < 0,05. Hipotesis nol ditolak, artinya variabel TV dan Radio secara bersama-sama berpengaruh signifikan terhadap Sales.
# Ekstrak koefisien
coef_tbl <- as.data.frame(summary(model)$coefficients)
coef_tbl$Variabel <- rownames(coef_tbl)
coef_tbl$Keputusan <- ifelse(coef_tbl[,4] < 0.05, "Signifikan ✓", "Tidak Signifikan")
kable(coef_tbl[, c("Variabel","Estimate","Std. Error","t value","Pr(>|t|)","Keputusan")],
digits = 6,
caption = "Hasil Uji t (Parsial)",
row.names = FALSE,
align = "lrrrrr") %>%
kable_styling(bootstrap_options = c("striped","hover","bordered"),
full_width = TRUE) %>%
row_spec(0, bold = TRUE, background = "#2C3E50", color = "white") %>%
row_spec(2:3, color = "#1A5276")| Variabel | Estimate | Std. Error | t value | Pr(>|t|) | Keputusan |
|---|---|---|---|---|---|
| (Intercept) | 3.096753 | 0.506586 | 6.112981 | 0 | Signifikan ✓ |
| TV | 0.043849 | 0.002509 | 17.479276 | 0 | Signifikan ✓ |
| Radio | 0.198879 | 0.015153 | 13.124862 | 0 | Signifikan ✓ |
Kesimpulan Uji t:
r2 <- sm$r.squared
ar2 <- sm$adj.r.squared
kable(data.frame(
Ukuran = c("Multiple R-squared", "Adjusted R-squared", "Residual Std. Error"),
Nilai = c(round(r2, 4), round(ar2, 4), round(sm$sigma, 4)),
Interpretasi = c(
paste0(round(r2*100, 2), "% variasi Sales dijelaskan oleh TV & Radio"),
paste0(round(ar2*100, 2), "% setelah penyesuaian jumlah prediktor"),
"Rata-rata simpangan prediksi dari nilai aktual"
)
), caption = "Koefisien Determinasi", align = "lrl") %>%
kable_styling(bootstrap_options = c("striped","hover"), full_width = TRUE) %>%
row_spec(2, bold = TRUE, background = "#D5F5E3")| Ukuran | Nilai | Interpretasi |
|---|---|---|
| Multiple R-squared | 0.9218 | 92.18% variasi Sales dijelaskan oleh TV & Radio |
| Adjusted R-squared | 0.9185 | 91.85% setelah penyesuaian jumlah prediktor |
| Residual Std. Error | 1.4723 | Rata-rata simpangan prediksi dari nilai aktual |
Adjusted R² = 0,9185 — Model mampu menjelaskan 91,85% variasi pada variabel Sales. Hanya 8,15% yang dipengaruhi faktor di luar model. Ini merupakan tingkat goodness-of-fit yang sangat baik.
par(mfrow = c(2, 2), mar = c(4, 4, 3, 1))
plot(model, col = "#2980B9", pch = 16, cex = 0.8,
cex.main = 1.1, col.main = "#2C3E50")Interpretasi Grafik Diagnostik:
##
## RESET test
##
## data: model
## RESET = 9.9098, df1 = 2, df2 = 45, p-value = 0.0002716
| Uji | Statistik | df1 | df2 | p.value | Keputusan |
|---|---|---|---|---|---|
| Ramsey RESET Test | 9.9098 | 2 | 45 | 0.000272 | Tolak H₀ → Tidak Linear ✗ |
⚠️ Catatan: Hasil Ramsey RESET Test menunjukkan p-value = 0,0002716 (< 0,05), sehingga secara formal uji ini menolak linearitas. Namun, nilai ini sensitif terhadap spesifikasi model; secara visual (Residuals vs Fitted) pola linearitas masih dapat diterima. Perlu eksplorasi lebih lanjut jika diperlukan transformasi variabel.
##
## Jarque Bera Test
##
## data: residual
## X-squared = 5.9097, df = 2, p-value = 0.05209
| Uji | X.squared | df | p.value | Keputusan |
|---|---|---|---|---|
| Jarque-Bera Test | 5.9097 | 2 | 0.05209 | Gagal Tolak H₀ → Normal ✓ |
Kesimpulan: p-value = 0,05209 > 0,05 → Hipotesis nol gagal ditolak. Residual model berdistribusi normal sehingga asumsi normalitas terpenuhi.
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 0.20278, df = 2, p-value = 0.9036
| Uji | BP | df | p.value | Keputusan |
|---|---|---|---|---|
| Breusch-Pagan Test | 0.20278 | 2 | 0.9036 | Gagal Tolak H₀ → Homoskedastis ✓ |
Kesimpulan: p-value = 0,9036 > 0,05 → Tidak terjadi heteroskedastisitas. Varians residual bersifat konstan — asumsi homoskedastisitas terpenuhi.
##
## Durbin-Watson test
##
## data: model
## DW = 1.9926, p-value = 0.4978
## alternative hypothesis: true autocorrelation is greater than 0
| Uji | DW | p.value | Rentang | Keputusan |
|---|---|---|---|---|
| Durbin-Watson Test | 1.9926 | 0.4978 | 1,5 — 2,5 (bebas autokorelasi) | DW ≈ 2 → Tidak Autokorelasi ✓ |
Kesimpulan: DW = 1,9926 berada pada rentang 1,5 — 2,5 → Tidak terdapat autokorelasi antar residual. Asumsi non-autokorelasi terpenuhi.
## TV Radio
## 1.020475 1.020475
| Variabel | VIF | Threshold | Keputusan |
|---|---|---|---|
| TV | 1.020475 | < 10 | Tidak Multikolinear ✓ |
| Radio | 1.020475 | < 10 | Tidak Multikolinear ✓ |
Kesimpulan: Nilai VIF TV = Radio = 1,0205 — keduanya jauh di bawah threshold 10 → Tidak terjadi multikolinearitas antar variabel independen. Asumsi non-multikolinearitas terpenuhi.
| No | Uji | Metode | Statistik | p.value | Status |
|---|---|---|---|---|---|
| 1 | Linearitas | Ramsey RESET Test | RESET = 9,9098 | 0,0003 | ⚠️ Perlu Perhatian |
| 2 | Normalitas Residual | Jarque-Bera Test | JB = 5,9097 | 0,0521 | ✅ Terpenuhi | |
| 3 | Homoskedastisitas | Breusch-Pagan Test | BP = 0,2028 | 0,9036 | ✅ Terpenuhi | |
| 4 | Non-Autokorelasi | Durbin-Watson Test | DW = 1,9926 | 0,4978 | ✅ Terpenuhi | |
| 5 | Non-Multikolinearitas | VIF | VIF = 1,0205 | — | ✅ Terpenuhi | |
Berdasarkan keseluruhan analisis regresi linear berganda, diperoleh kesimpulan sebagai berikut:
Model Regresi: Ŷ = 3,0968 + 0,0438 TV + 0,1989 Radio — kedua variabel independen berpengaruh positif dan signifikan terhadap Sales.
Uji F (Simultan): F-statistic = 276,9 dengan p-value < 0,05 → TV dan Radio secara bersama-sama berpengaruh signifikan terhadap penjualan.
Uji t (Parsial): Kedua variabel (TV dan Radio) masing-masing berpengaruh signifikan secara parsial terhadap Sales (p-value < 0,05).
Goodness of Fit: Adjusted R² = 0,9185 → model mampu menjelaskan 91,85% variasi Sales. Kualitas model sangat baik.
Uji Asumsi Klasik: Model memenuhi asumsi normalitas residual, homoskedastisitas, non-autokorelasi, dan non-multikolinearitas. Uji RESET menunjukkan indikasi nonlinearitas yang perlu dikaji lebih lanjut, namun secara visual masih dapat diterima.
Implikasi Praktis: Peningkatan anggaran promosi — khususnya melalui radio (efek per unit lebih besar: 0,1989 vs 0,0438) — terbukti efektif dalam mendorong pertumbuhan volume penjualan.
De, T. (2020). Advertising Sales. Kaggle. https://www.kaggle.com/datasets/tuhinsubhrade/advertising-sales
Aflah, F. R., Risnawati, & Hamdani, M. F. (2025). Penerapan regresi linier berganda dalam menilai hubungan antar variabel dalam penelitian kuantitatif. INNOVATIVE: Journal of Social Science Research, 5(3), 4195–4211.
Mardiatmoko, G. (2020). Pentingnya uji asumsi klasik pada analisis regresi linier berganda. BAREKENG: Jurnal Ilmu Matematika dan Terapan, 14(3), 333–342. https://doi.org/10.30598/barekengvol14iss3pp333-342
Youssef, A. M. A. E. R. (2022). Detecting of multicollinearity, autocorrelation and heteroscedasticity in regression analysis. Advances in Sciences and Humanities, 3(3). https://doi.org/10.11648/j.advances.20220303.24