Penjualan merupakan salah satu indikator utama dalam menilai kinerja suatu perusahaan, khususnya pada industri makanan dan minuman seperti coffee chain. Industri coffee chain mengalami perkembangan pesat dalam beberapa tahun terakhir seiring dengan meningkatnya gaya hidup masyarakat yang menjadikan konsumsi kopi sebagai bagian dari aktivitas sehari-hari. Persaingan yang semakin ketat di industri ini menuntut perusahaan untuk memahami faktor-faktor yang mempengaruhi tingkat penjualan agar dapat meningkatkan profitabilitas dan efisiensi operasional.
Dalam praktik bisnis coffee chain, penjualan tidak hanya dipengaruhi oleh satu faktor saja, melainkan oleh berbagai faktor seperti biaya produksi (Cost of Goods Sold/COGS), aktivitas pemasaran (Marketing), persediaan barang (Inventory), serta faktor operasional lainnya.Oleh karena itu, diperlukan suatu metode analisis yang dapat mengidentifikasi hubungan antara faktor-faktor tersebut dengan penjualan. Analisis regresi merupakan salah satu metode statistik yang dapat digunakan untuk mengetahui pengaruh variabel independen terhadap variabel dependen. Pada penelitian ini, digunakan data Coffee Chain untuk menganalisis faktor-faktor yang mempengaruhi penjualan menggunakan metode regresi.
Analisis regresi linear berganda merupakan metode statistik yang digunakan untuk mengetahui hubungan antara satu variabel dependen dengan dua atau lebih variabel independen. Metode ini bertujuan untuk mengetahui besarnya pengaruh masing-masing variabel independen terhadap variabel dependen serta memprediksi nilai variabel dependen berdasarkan nilai variabel independen. Metode Ordinary Least Squares (OLS) merupakan metode yang digunakan untuk mengestimasi parameter dalam model regresi linear. Metode ini bekerja dengan meminimalkan jumlah kuadrat selisih antara nilai aktual dengan nilai prediksi. Secara matematis, model regresi linear berganda dapat dinyatakan sebagai berikut. \[ Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k X_k + \varepsilon \] Keterangan:
Dalam analisis regresi linear, terdapat beberapa asumsi yang harus dipenuhi agar model regresi menghasilkan estimasi yang baik, yaitu: Uji Normalitas Uji Homoskedastisitas Uji Independensi Uji Multikolinearitas
Regresi robust merupakan metode alternatif yang digunakan ketika asumsi klasik regresi linear tidak terpenuhi, khususnya ketika terjadi heteroskedastisitas atau terdapat data pencilan (outlier). Metode ini menghasilkan estimasi parameter yang lebih stabil dibandingkan metode OLS karena tidak terlalu sensitif terhadap pelanggaran asumsi klasik.
Salah satu metode regresi robust yang sering digunakan adalah metode M-estimation, yang bekerja dengan memberikan bobot berbeda pada setiap observasi sehingga pengaruh data pencilan dapat diminimalkan. Penggunaan regresi robust bertujuan untuk memperoleh model yang lebih reliabel ketika data tidak memenuhi asumsi klasik regresi linear.
Mengaktifkan Package
library(readxl)
library(car)
## Warning: package 'car' was built under R version 4.4.2
## Loading required package: carData
library(stats)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(tidyr)
library(GGally)
## Warning: package 'GGally' was built under R version 4.4.3
library(knitr)
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.4.2
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(robustbase)
## Warning: package 'robustbase' was built under R version 4.4.3
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.2
## corrplot 0.95 loaded
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
library(lmtest)
Memuat Dataset Berikut deskripsi data 1 paragraf singkat yang cocok untuk laporanmu:
Data yang digunakan dalam penelitian ini merupakan Coffee Chain Dataset yang berisi informasi mengenai aktivitas penjualan pada jaringan coffee chain. Dataset ini mencakup berbagai variabel yang berkaitan dengan penjualan dan operasional, seperti Sales, COGS (Cost of Goods Sold), Marketing, dan Inventory, serta beberapa variabel pendukung lainnya. Dalam penelitian ini, variabel Sales digunakan sebagai variabel dependen karena merepresentasikan tingkat penjualan.
data=read_excel("C:/Users/ASUS/OneDrive/文档/KULIAH/SEMESTER 6/SIM/1. Tugas SIM 2025B - Coffee Chain Datasets.xlsx")
data
## # A tibble: 4,248 × 20
## `Area Code` Date Market `Market Size` Product `Product Line`
## <dbl> <dttm> <chr> <chr> <chr> <chr>
## 1 719 2012-01-01 00:00:00 Central Major Market Amaretto Beans
## 2 970 2012-01-01 00:00:00 Central Major Market Colombi… Beans
## 3 970 2012-01-01 00:00:00 Central Major Market Decaf I… Beans
## 4 303 2012-01-01 00:00:00 Central Major Market Green T… Leaves
## 5 303 2012-01-01 00:00:00 Central Major Market Caffe M… Beans
## 6 720 2012-01-01 00:00:00 Central Major Market Decaf E… Beans
## 7 970 2012-01-01 00:00:00 Central Major Market Chamomi… Leaves
## 8 719 2012-01-01 00:00:00 Central Major Market Lemon Leaves
## 9 970 2012-01-01 00:00:00 Central Major Market Mint Leaves
## 10 719 2012-01-01 00:00:00 Central Major Market Darjeel… Leaves
## # ℹ 4,238 more rows
## # ℹ 14 more variables: `Product Type` <chr>, State <chr>, Type <chr>,
## # `Budget COGS` <dbl>, `Budget Margin` <dbl>, `Budget Profit` <dbl>,
## # `Budget Sales` <dbl>, COGS <dbl>, Inventory <dbl>, Margin <dbl>,
## # Marketing <dbl>, Profit <dbl>, Sales <dbl>, `Total Expenses` <dbl>
num_data <- data[,c(
"Sales",
"Profit",
"COGS",
"Inventory",
"Marketing",
"Margin",
"Budget Sales",
"Budget Profit",
"Budget Margin",
"Budget COGS",
"Total Expenses"
)]
cor_matrix <- cor(num_data)
corrplot(cor_matrix,
method="color",
type="upper")
Berdasarkan hasil visualisasi heatmap korelasi, terlihat bahwa variabel
Sales memiliki korelasi positif yang kuat dengan
beberapa variabel, terutama COGS, serta korelasi
positif sedang dengan Marketing dan
Inventory. Hal ini menunjukkan bahwa peningkatan biaya
produksi, aktivitas pemasaran, dan jumlah persediaan cenderung diikuti
oleh peningkatan penjualan. Selain itu, terdapat korelasi yang sangat
tinggi antar beberapa variabel independen seperti
Profit, Margin, dan Total
Expenses.
# Mencari kolom yang numerik saja
num_data <- data[, sapply(data, is.numeric)]
# Lanjutkan hitung korelasi
cor_matrix <- cor(num_data, use = "complete.obs") # use="complete.obs" untuk menangani data kosong/NA
cor_sales <- cor_matrix[, "Sales"]
cor_sales
## Area Code Budget COGS Budget Margin Budget Profit Budget Sales
## 0.05521962 0.86288199 0.92075731 0.81543484 0.95653760
## COGS Inventory Margin Marketing Profit
## 0.88665116 0.32593355 0.93880945 0.71051489 0.79733091
## Sales Total Expenses
## 1.00000000 0.68935002
# Pilih variabel dengan korelasi >= 0.5
selected_var <- names(
cor_sales[abs(cor_sales) >= 0.5]
)
# Hapus Sales dari predictor
selected_var <- selected_var[
selected_var != "Sales"
]
selected_var
## [1] "Budget COGS" "Budget Margin" "Budget Profit" "Budget Sales"
## [5] "COGS" "Margin" "Marketing" "Profit"
## [9] "Total Expenses"
# Tambahkan backtick ke nama variabel
selected_var_bt <- paste0("`", selected_var, "`")
# Buat formula otomatis
formula_selected <- as.formula(
paste(
"Sales ~",
paste(selected_var_bt, collapse = " + ")
)
)
Berdasarkan hasil feature selection menggunakan ambang batas korelasi \(\ge 0.5\), variabel independen yang terpilih untuk model prediksi adalah Budget COGS, Budget Margin, Budget Profit, Budget Sales, COGS, Margin, Marketing, Profit, dan Total Expenses. Variabel-variabel ini dipilih karena memiliki hubungan linear yang kuat dengan Sales, di mana Budget Sales menunjukkan nilai korelasi tertinggi sebesar \(0.9565\), diikuti oleh Margin (\(0.9388\)) dan Budget Margin (\(0.9207\)). Sementara itu, variabel seperti Area Code dan Inventory dieliminasi dari model karena memiliki nilai korelasi di bawah \(0.5\), yang mengindikasikan kontribusi yang rendah dalam menjelaskan variabilitas nilai penjualan secara linear.
# 1. Pastikan kita mengambil nama-nama kolom dari num_data
# Kita hanya ingin variabel yang sudah Anda pilih sebelumnya (selected_var)
plot_data <- num_data %>%
dplyr::select(Sales, all_of(selected_var)) %>%
pivot_longer(
cols = -Sales,
names_to = "Variable",
values_to = "Value"
)
# 2. Plotting
ggplot(plot_data, aes(x = Value, y = Sales)) +
geom_point(alpha = 0.5, color = "steelblue") +
geom_smooth(method = "lm", color = "red", se = FALSE) +
facet_wrap(~ Variable, scales = "free_x") +
theme_minimal() +
labs(
title = "Hubungan Antara Sales dengan Variabel Independen",
x = "Nilai Variabel",
y = "Sales"
)
## `geom_smooth()` using formula = 'y ~ x'
Seluruh variabel menunjukkan korelasi positif yang searah dengan Sales,
di mana variabel kategori “Budget” (seperti Budget Sales dan Budget
COGS) menunjukkan hubungan linear yang paling kuat dan konsisten
dibandingkan variabel realisasi. Variabel seperti Marketing dan Total
Expenses memperlihatkan sebaran data yang lebih lebar (variansi tinggi),
mengindikasikan adanya titik-titik data yang tidak selalu menghasilkan
peningkatan penjualan secara linear atau adanya faktor efisiensi yang
berbeda-beda. Secara statistik, pola linear yang dominan pada hampir
seluruh grid mengonfirmasi bahwa asumsi linearitas untuk model regresi
telah terpenuhi, namun kemiripan pola antar variabel budget memperkuat
indikasi adanya multikolinearitas yang perlu dimitigasi dalam pemilihan
variabel independen final.
# Visualisasi distribusi Profit
ggplot(data, aes(x = Sales)) +
geom_histogram(fill = "#b3003c", bins = 30) +
ggtitle("Distribusi Sales")
Histogram tersebut menunjukkan bahwa distribusi variabel
Sales memiliki kemiringan positif
(right-skewed) yang cukup signifikan, di mana mayoritas
data terpusat pada rentang nilai rendah hingga menengah (sekitar 100
hingga 200 unit) dan frekuensinya menurun drastis seiring meningkatnya
nilai penjualan. Terdapat indikasi pola multimodal
dengan munculnya “bukit” kecil pada rentang 500 hingga 750, yang
menandakan adanya kelompok transaksi bernilai tinggi atau segmen pasar
tertentu yang berbeda dari populasi utama. Kondisi ketidaknormalan
distribusi ini menyarankan perlunya transformasi data (seperti
logaritma) jika ingin digunakan dalam analisis regresi linear agar
memenuhi asumsi normalitas residual yang lebih baik.
model_selected <- lm(
formula_selected,
data = data
)
summary(model_selected)
##
## Call:
## lm(formula = formula_selected, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -38.014 -2.892 -0.024 2.606 39.475
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.8133570 0.2834288 -9.926 < 2e-16 ***
## `Budget COGS` -0.0008736 0.0084002 -0.104 0.917
## `Budget Margin` -0.1181789 0.0155491 -7.600 3.61e-14 ***
## `Budget Profit` 0.1456319 0.0138236 10.535 < 2e-16 ***
## `Budget Sales` NA NA NA NA
## COGS 1.0341732 0.0077903 132.751 < 2e-16 ***
## Margin 0.6700545 0.0077824 86.099 < 2e-16 ***
## Marketing -0.1503473 0.0157461 -9.548 < 2e-16 ***
## Profit 0.2553533 0.0046148 55.334 < 2e-16 ***
## `Total Expenses` 0.5696334 0.0167194 34.070 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.472 on 4239 degrees of freedom
## Multiple R-squared: 0.9982, Adjusted R-squared: 0.9982
## F-statistic: 2.89e+05 on 8 and 4239 DF, p-value: < 2.2e-16
Model regresi ini menunjukkan nilai Adjusted
R-squared yang sangat tinggi sebesar 0,9982,
namun terdapat indikasi masalah serius berupa
singularitas pada variabel Budget Sales
dan adanya variabel yang tidak signifikan seperti
Budget COGS (\(p\)-value
\(0,917\)). Hal ini menandakan adanya
multikolinearitas sempurna atau hubungan matematis
antar variabel yang saling tumpang tindih, sehingga koefisien yang
dihasilkan bisa menjadi bias dan tidak efisien. Oleh karena itu,
diperlukan analisis Stepwise Regression untuk
menyeleksi variabel secara otomatis, membuang prediktor yang redundan
atau tidak berkontribusi signifikan, serta menghasilkan model yang lebih
sederhana (parsimonious) namun tetap akurat tanpa melanggar
asumsi klasik regresi.
model_step <- stepAIC(
model_selected,
direction = "both",
trace = TRUE
)
## Start: AIC=15874.59
## Sales ~ `Budget COGS` + `Budget Margin` + `Budget Profit` + `Budget Sales` +
## COGS + Margin + Marketing + Profit + `Total Expenses`
##
##
## Step: AIC=15874.59
## Sales ~ `Budget COGS` + `Budget Margin` + `Budget Profit` + COGS +
## Margin + Marketing + Profit + `Total Expenses`
##
## Df Sum of Sq RSS AIC
## - `Budget COGS` 1 0 177535 15873
## <none> 177535 15875
## - `Budget Margin` 1 2419 179954 15930
## - Marketing 1 3818 181353 15963
## - `Budget Profit` 1 4648 182183 15982
## - `Total Expenses` 1 48615 226150 16901
## - Profit 1 128234 305769 18182
## - Margin 1 310469 488004 20168
## - COGS 1 738071 915606 22841
##
## Step: AIC=15872.6
## Sales ~ `Budget Margin` + `Budget Profit` + COGS + Margin + Marketing +
## Profit + `Total Expenses`
##
## Df Sum of Sq RSS AIC
## <none> 177535 15873
## + `Budget COGS` 1 0 177535 15875
## + `Budget Sales` 1 0 177535 15875
## - Marketing 1 3876 181411 15962
## - `Budget Margin` 1 4882 182417 15986
## - `Budget Profit` 1 6006 183542 16012
## - `Total Expenses` 1 52060 229595 16963
## - Profit 1 128366 305901 18182
## - Margin 1 392805 570340 20828
## - COGS 1 4922217 5099753 30134
summary(model_step)
##
## Call:
## lm(formula = Sales ~ `Budget Margin` + `Budget Profit` + COGS +
## Margin + Marketing + Profit + `Total Expenses`, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -38.020 -2.892 -0.025 2.601 39.463
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.812094 0.283135 -9.932 <2e-16 ***
## `Budget Margin` -0.119316 0.011050 -10.798 <2e-16 ***
## `Budget Profit` 0.146305 0.012215 11.977 <2e-16 ***
## COGS 1.033426 0.003014 342.863 <2e-16 ***
## Margin 0.670424 0.006922 96.857 <2e-16 ***
## Marketing -0.150130 0.015605 -9.621 <2e-16 ***
## Profit 0.255368 0.004612 55.369 <2e-16 ***
## `Total Expenses` 0.570076 0.016167 35.261 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.471 on 4240 degrees of freedom
## Multiple R-squared: 0.9982, Adjusted R-squared: 0.9982
## F-statistic: 3.304e+05 on 7 and 4240 DF, p-value: < 2.2e-16
Berdasarkan hasil pemilihan variabel menggunakan metode stepwise regression dengan kriteria Akaike Information Criterion (AIC), diperoleh model regresi terbaik yang terdiri dari variabel Budget Margin, Budget Profit, COGS, Margin, Marketing, Profit, dan Total Expenses. Variabel Budget COGS dan Budget Sales dieliminasi dari model karena tidak memberikan kontribusi signifikan terhadap peningkatan kualitas model. Model akhir memiliki nilai koefisien determinasi (R²) sebesar 0.9982, yang menunjukkan bahwa variabel independen mampu menjelaskan sebesar 99.82% variasi pada variabel Sales. ## UJI ASUMSI KLASIK ### UJI Normalitas
shapiro.test(residuals(model_step))
##
## Shapiro-Wilk normality test
##
## data: residuals(model_step)
## W = 0.88693, p-value < 2.2e-16
Berdasarkan nilai p-value, dapat disimpulkan bahwa terdapat bukti yang cukup kuat untuk menolak hipotesis nol bahwa residu regresi terdistribusi secara normal. Artinya, residu regresi tidak mengikuti distribusi normal. ### Uji Homoskedastisitas
bptest(model_step)
##
## studentized Breusch-Pagan test
##
## data: model_step
## BP = 1422.5, df = 7, p-value < 2.2e-16
Berdasarkan nilai p-value yang diperoleh, menunjukkan bahwa terdapat bukti yang kuat untuk menolak hipotesis nol bahwa varians residual dalam model regresi adalah konstan (homoskedastisitas). Dengan demikian, dapat disimpulkan bahwa terdapat ketidakhomoskedastisitas dalam data. ### Uji Independensi
dwtest(model_step)
##
## Durbin-Watson test
##
## data: model_step
## DW = 0.88033, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Berdasarkan nilai dapat disimpulkan tidak terdapat cukup bukti statistik untuk menolak hipotesis nol bahwa tidak ada autokorelasi dalam residu model. Artinya, tidak ada indikasi kuat adanya autokorelasi dalam data. ### Uji Multikolinearitas
vif(model_step)
## `Budget Margin` `Budget Profit` COGS Margin
## 106.207516 95.767281 4.167369 43.253397
## Marketing Profit `Total Expenses`
## 18.036431 22.319240 27.750068
Berdasarkan output yang >10, dapat disimpulkan bahwa terdapat indikasi kuat mengenai masalah multikolinearitas pada model tersebut. ## DETEKSI PENCILAN
p <- length(coef(model_step))
p
## [1] 8
n <- nrow(num_data)
n
## [1] 4248
dffits_values <- dffits(model_step)
nilai_pembanding <- 2 * (sqrt(p/n))
cat("\nNilai Pembanding DFFITS:", nilai_pembanding)
##
## Nilai Pembanding DFFITS: 0.08679261
jumlah_outlier <- sum(abs(dffits_values) > nilai_pembanding)
cat("\n\nJumlah Data Outlier:", jumlah_outlier)
##
##
## Jumlah Data Outlier: 352
Hasil menunjukkan bahwa sebanyak 352 data dari 4248 data merupakan data outlier.
# Ambil hanya variabel yang dipakai model stepwise
data_robust <- data[, c(
"Sales",
"Budget Margin",
"Budget Profit",
"COGS",
"Margin",
"Marketing",
"Profit",
"Total Expenses"
)]
data_robust <- as.data.frame(data_robust)
colnames(data_robust) <- c(
"Sales",
"Budget_Margin",
"Budget_Profit",
"COGS",
"Margin",
"Marketing",
"Profit",
"Total_Expenses"
)
model_robust_final <- rlm(
Sales ~ Budget_Margin +
Budget_Profit +
COGS +
Margin +
Marketing +
Profit +
Total_Expenses,
data = data_robust
)
## Warning in rlm.default(x, y, weights, method = method, wt.method = wt.method, :
## 'rlm' failed to converge in 20 steps
summary(model_robust_final)
##
## Call: rlm(formula = Sales ~ Budget_Margin + Budget_Profit + COGS +
## Margin + Marketing + Profit + Total_Expenses, data = data_robust)
## Residuals:
## Min 1Q Median 3Q Max
## -60.84045 -1.67846 0.08203 1.63846 65.15686
##
## Coefficients:
## Value Std. Error t value
## (Intercept) -1.6082 0.1269 -12.6771
## Budget_Margin -0.0481 0.0050 -9.7240
## Budget_Profit 0.0583 0.0055 10.6596
## COGS 1.0315 0.0014 763.7607
## Margin 0.6147 0.0031 198.1922
## Marketing -0.0987 0.0070 -14.1103
## Profit 0.3410 0.0021 165.0187
## Total_Expenses 0.5016 0.0072 69.2499
##
## Residual standard error: 2.471 on 4240 degrees of freedom
Berdasarkan hasil estimasi parameter menggunakan metode regresi robust dengan pendekatan M-estimation, diperoleh nilai t-value pada masing-masing koefisien regresi yang relatif besar, sehingga dapat disimpulkan bahwa variabel Budget Margin, Budget Profit, COGS, Margin, Marketing, Profit, dan Total Expenses secara bersama-sama memiliki pengaruh signifikan terhadap variabel Sales. Oleh karena itu, model regresi robust yang diperoleh dapat digunakan sebagai model yang layak dalam menjelaskan variasi pada variabel Sales.
#MODEL AKHIR Dari analisis di atas, diperoleh model regresi sebagai berikut: \[ \hat{Y} = -1.6082 - 0.0481X_1 + 0.0583X_2 + 1.0315X_3 + 0.6147X_4 - 0.0987X_5 + 0.3410X_6 + 0.5016X_7 \] Keterangan:
\[ \begin{aligned} Y &= \text{Sales (Penjualan)} \\ X_1 &= \text{Budget Margin} \\ X_2 &= \text{Budget Profit} \\ X_3 &= \text{COGS (Cost of Goods Sold)} \\ X_4 &= \text{Margin} \\ X_5 &= \text{Marketing} \\ X_6 &= \text{Profit} \\ X_7 &= \text{Total Expenses} \end{aligned} \] Berdasarkan hasil regresi robust menggunakan metode M-estimation, diperoleh model regresi akhir yang menunjukkan bahwa variabel Budget Profit, COGS, Margin, Profit, dan Total Expenses memiliki pengaruh positif terhadap Sales, sedangkan variabel Budget Margin dan Marketing memiliki pengaruh negatif terhadap Sales. Variabel COGS memiliki nilai koefisien terbesar dibandingkan variabel lainnya, sehingga dapat disimpulkan bahwa COGS merupakan variabel yang paling dominan dalam mempengaruhi peningkatan nilai Sales.