Program Studi Sarjana Statistika · Departemen Statistika · Fakultas Sains, Teknologi, dan Matematika · Universitas Brawijaya · 2026


1 Deskripsi Dataset

1.1 Latar Belakang

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).

1.2 Variabel

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

1.3 Load Data

# 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")
10 Observasi Pertama Dataset Advertising Sales
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

2 Eksplorasi Data

2.1 Statistik Deskriptif

# 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)
Statistik Deskriptif Dataset Advertising Sales
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:

  • TV (X1): Pengeluaran iklan berkisar antara 11,70 — 287,60 ribu dolar dengan rata-rata 141,86. Nilai rata-rata < median (141,86 < 159,95) mengindikasikan distribusi condong negatif (kiri).
  • Radio (X2): Pengeluaran berkisar antara 0,00 — 49,40 ribu dolar. Nilai rata-rata > median (23,03 > 20,60) mengindikasikan distribusi condong positif (kanan).
  • Sales (Y): Volume penjualan berkisar 5,30 — 26,20 ribu unit dengan rata-rata 13,90. Rata-rata > median (13,90 > 12,90) menunjukkan distribusi condong positif (kanan).

2.2 Scatter Plot

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

  • TV vs Sales: Titik-titik data membentuk pola linier menanjak dari kiri bawah ke kanan atas, mengindikasikan hubungan positif antara anggaran iklan TV dan volume penjualan.
  • Radio vs Sales: Tren pergerakan naik serupa terlihat, dengan hubungan positif antara anggaran iklan radio dan penjualan, meski sebaran titik sedikit lebih bervariasi.

3 Model Regresi Berganda

3.1 Pembentukan Model

# 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.2 Persamaan Model

Ŷ = 3,096753 + 0,043849 TV + 0,198879 Radio

3.3 Interpretasi Koefisien

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.


4 Uji Signifikansi Model

4.1 Uji F (Simultan)

# 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")
Hasil Uji F (Simultan)
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.

4.2 Uji t (Parsial)

# 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")
Hasil Uji t (Parsial)
Variabel Estimate Std. Error t value Pr(>&#124;t&#124;) 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:

  • TV: t = 17,479, p-value < 0,05 → berpengaruh signifikan secara parsial terhadap Sales.
  • Radio: t = 13,125, p-value < 0,05 → berpengaruh signifikan secara parsial terhadap Sales.

4.3 Koefisien Determinasi

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")
Koefisien Determinasi
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.


5 Uji Asumsi Regresi

5.1 Pemeriksaan Visual

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")

par(mfrow = c(1, 1))

Interpretasi Grafik Diagnostik:

  • Residuals vs Fitted: Residual menyebar acak di sekitar garis nol → asumsi linearitas dan homoskedastisitas terpenuhi secara visual.
  • Normal Q-Q: Titik-titik residual mengikuti garis diagonal → residual mendekati distribusi normal.
  • Scale-Location: Sebaran residual relatif konstan → mendukung homoskedastisitas.
  • Residuals vs Leverage: Tidak ada observasi dengan pengaruh ekstrem (leverage tinggi) → tidak ada outlier berpengaruh besar.

5.2 Uji Linearitas (RESET)

reset_result <- resettest(model)
print(reset_result)
## 
##  RESET test
## 
## data:  model
## RESET = 9.9098, df1 = 2, df2 = 45, p-value = 0.0002716
Hasil Uji Linearitas
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.

5.3 Uji Normalitas (Jarque-Bera)

residual <- residuals(model)
jb_result <- jarque.bera.test(residual)
print(jb_result)
## 
##  Jarque Bera Test
## 
## data:  residual
## X-squared = 5.9097, df = 2, p-value = 0.05209
Hasil Uji Normalitas Residual
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.

5.4 Uji Homoskedastisitas (BP)

bp_result <- bptest(model)
print(bp_result)
## 
##  studentized Breusch-Pagan test
## 
## data:  model
## BP = 0.20278, df = 2, p-value = 0.9036
Hasil Uji Homoskedastisitas
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.

5.5 Uji Non-Autokorelasi (DW)

dw_result <- dwtest(model)
print(dw_result)
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 1.9926, p-value = 0.4978
## alternative hypothesis: true autocorrelation is greater than 0
Hasil Uji Non-Autokorelasi
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.

5.6 Uji Non-Multikolinearitas (VIF)

vif_result <- vif(model)
print(vif_result)
##       TV    Radio 
## 1.020475 1.020475
Hasil Uji Non-Multikolinearitas (VIF)
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.


6 Ringkasan Uji Asumsi

Ringkasan Hasil Uji Asumsi Klasik Regresi
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 |

7 Kesimpulan

Berdasarkan keseluruhan analisis regresi linear berganda, diperoleh kesimpulan sebagai berikut:

  1. Model Regresi: Ŷ = 3,0968 + 0,0438 TV + 0,1989 Radio — kedua variabel independen berpengaruh positif dan signifikan terhadap Sales.

  2. Uji F (Simultan): F-statistic = 276,9 dengan p-value < 0,05 → TV dan Radio secara bersama-sama berpengaruh signifikan terhadap penjualan.

  3. Uji t (Parsial): Kedua variabel (TV dan Radio) masing-masing berpengaruh signifikan secara parsial terhadap Sales (p-value < 0,05).

  4. Goodness of Fit: Adjusted R² = 0,9185 → model mampu menjelaskan 91,85% variasi Sales. Kualitas model sangat baik.

  5. 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.

  6. 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.


8 Daftar Pustaka

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


Laporan Praktikum 2 | Komputasi Statistika B | Universitas Brawijaya | 2026