Dataset Coffee Chain merupakan data penjualan jaringan kedai kopi yang beroperasi di berbagai wilayah Amerika Serikat. Dataset ini terdiri dari 4.248 transaksi dengan 20 variabel yang mencakup informasi produk, wilayah, ukuran pasar, biaya operasional, dan realisasi profit.
library(readxl)
library(dplyr)
library(ggplot2)
library(corrplot)
library(car)
library(lmtest)
library(MASS)
library(sandwich)
data <- read_excel("D:/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>
Insight yang diangkat adalah faktor apa yang paling memengaruhi profit pada Coffee Chain. Profit dipilih sebagai variabel utama karena merupakan indikator keberhasilan bisnis yang paling langsung. Dengan memahami faktor-faktor yang secara signifikan memengaruhinya, seperti penjualan, biaya produksi, dan total pengeluaran, manajemen dapat mengambil keputusan alokasi sumber daya yang lebih tepat.
Berikut adalah tahap analisis yang saya lakukan.
knitr::include_graphics("C:/Users/Surface/SIM2026/Flowchart Pengerjaan Tugas 1 SIM.jpg")
Analisis korelasi Pearson digunakan sebagai langkah awal untuk mengukur kekuatan hubungan linear antar variabel numerik sekaligus mendeteksi potensi multikolinearitas sebelum pemodelan.
Regresi linear berganda digunakan untuk menguji pengaruh simultan seluruh prediktor terhadap Profit, dilengkapi uji asumsi klasik untuk memastikan kesahihan model.
Uji ANOVA melengkapi regresi dari sisi kategorikal, menguji apakah terdapat perbedaan rata-rata profit yang signifikan antar kelompok Market Size dan Product Type.
Uji post-hoc Tukey HSD digunakan untuk mengidentifikasi secara spesifik pasangan kelompok mana yang berbeda signifikan, karena ANOVA hanya mendeteksi ada tidaknya perbedaan secara keseluruhan.
Sebelum masuk ke analisis lanjutan, dilakukan eksplorasi awal untuk memahami struktur dataset — mencakup tipe data tiap variabel, ringkasan statistik variabel numerik utama, serta kategori unik pada variabel kategorikal.
str(data)
## tibble [4,248 × 20] (S3: tbl_df/tbl/data.frame)
## $ Area Code : num [1:4248] 719 970 970 303 303 720 970 719 970 719 ...
## $ Date : POSIXct[1:4248], format: "2012-01-01" "2012-01-01" ...
## $ Market : chr [1:4248] "Central" "Central" "Central" "Central" ...
## $ Market Size : chr [1:4248] "Major Market" "Major Market" "Major Market" "Major Market" ...
## $ Product : chr [1:4248] "Amaretto" "Colombian" "Decaf Irish Cream" "Green Tea" ...
## $ Product Line : chr [1:4248] "Beans" "Beans" "Beans" "Leaves" ...
## $ Product Type : chr [1:4248] "Coffee" "Coffee" "Coffee" "Tea" ...
## $ State : chr [1:4248] "Colorado" "Colorado" "Colorado" "Colorado" ...
## $ Type : chr [1:4248] "Regular" "Regular" "Decaf" "Regular" ...
## $ Budget COGS : num [1:4248] 90 80 100 30 60 80 140 50 50 40 ...
## $ Budget Margin : num [1:4248] 130 110 140 50 90 130 160 80 70 70 ...
## $ Budget Profit : num [1:4248] 100 80 110 30 70 80 110 20 40 20 ...
## $ Budget Sales : num [1:4248] 220 190 240 80 150 210 300 130 120 110 ...
## $ COGS : num [1:4248] 89 83 95 44 54 72 170 63 60 58 ...
## $ Inventory : num [1:4248] 777 623 821 623 456 ...
## $ Margin : num [1:4248] 130 107 139 56 80 108 171 87 80 72 ...
## $ Marketing : num [1:4248] 24 27 26 14 15 23 47 57 19 22 ...
## $ Profit : num [1:4248] 94 68 101 30 54 53 99 0 33 17 ...
## $ Sales : num [1:4248] 219 190 234 100 134 180 341 150 140 130 ...
## $ Total Expenses: num [1:4248] 36 39 38 26 26 55 72 87 47 55 ...
summary(data[, c("Profit", "Sales", "Marketing", "COGS",
"Total Expenses", "Margin", "Inventory")])
## Profit Sales Marketing COGS
## Min. :-638.0 Min. : 17 Min. : 0.00 Min. : 0.00
## 1st Qu.: 17.0 1st Qu.:100 1st Qu.: 13.00 1st Qu.: 43.00
## Median : 40.0 Median :138 Median : 22.00 Median : 60.00
## Mean : 61.1 Mean :193 Mean : 31.19 Mean : 84.43
## 3rd Qu.: 92.0 3rd Qu.:230 3rd Qu.: 39.00 3rd Qu.:100.00
## Max. : 778.0 Max. :912 Max. :156.00 Max. :364.00
## Total Expenses Margin Inventory
## Min. : 10.00 Min. :-302.00 Min. :-3534.0
## 1st Qu.: 33.00 1st Qu.: 52.75 1st Qu.: 432.0
## Median : 46.00 Median : 76.00 Median : 619.0
## Mean : 54.06 Mean : 104.29 Mean : 749.4
## 3rd Qu.: 65.00 3rd Qu.: 132.00 3rd Qu.: 910.5
## Max. :190.00 Max. : 613.00 Max. : 8252.0
unique(data$`Market Size`)
## [1] "Major Market" "Small Market"
unique(data$`Product Type`)
## [1] "Coffee" "Tea" "Espresso" "Herbal Tea"
unique(data$`Market`)
## [1] "Central" "East" "South" "West"
unique(data$`Product Line`)
## [1] "Beans" "Leaves"
colSums(is.na(data))
## Area Code Date Market Market Size Product
## 0 0 0 0 0
## Product Line Product Type State Type Budget COGS
## 0 0 0 0 0
## Budget Margin Budget Profit Budget Sales COGS Inventory
## 0 0 0 0 0
## Margin Marketing Profit Sales Total Expenses
## 0 0 0 0 0
Dari ringkasan statistik, Profit memiliki rata-rata 61,1 namun median hanya 40 dengan nilai minimum -638, menandakan distribusi miring ke kanan dengan sejumlah transaksi yang mengalami kerugian cukup besar. Pola serupa terjadi pada Margin (minimum -302) dan Inventory (minimum -3.534). Marketing memiliki nilai minimum 0, artinya ada produk atau wilayah yang tidak mendapat alokasi pemasaran sama sekali.
Dari sisi kategori, dataset mencakup 2 ukuran pasar (Major Market dan Small Market), 4 jenis produk (Coffee, Tea, Espresso, Herbal Tea), 4 wilayah (Central, East, South, West), dan 2 lini produk (Beans dan Leaves). Tidak ditemukan nilai kosong pada variabel-variabel yang akan dianalisis.
Visualisasi dilakukan untuk melihat pola awal dalam data sebelum analisis kuantitatif. Dua visualisasi dipilih: distribusi profit berdasarkan ukuran pasar menggunakan boxplot, dan hubungan biaya marketing dengan profit menggunakan scatter plot.
Boxplot dipilih karena mampu menampilkan sebaran data, nilai median, dan keberadaan outlier secara bersamaan sehingga cocok untuk membandingkan dua kelompok pasar.
ggplot(data, aes(x = `Market Size`, y = Profit, fill = `Market Size`)) +
geom_boxplot() +
labs(title = "Distribusi Profit Berdasarkan Ukuran Pasar",
x = "Ukuran Pasar", y = "Profit") +
theme_minimal() +
scale_fill_manual(values = c("Major Market" = "#6F4E37",
"Small Market" = "#D2B48C"))
Boxplot menunjukkan bahwa Major Market memiliki median dan rentang interkuartil yang jauh lebih tinggi dibanding Small Market, mengindikasikan profit yang secara umum lebih besar di pasar besar. Meskipun demikian, Major Market juga memiliki outlier negatif yang lebih ekstrem (hingga -400), menunjukkan adanya transaksi dengan kerugian besar. Small Market cenderung lebih sempit sebarannya namun justru memiliki outlier negatif yang lebih banyak di bawah -400, bahkan mencapai hampir -600.
Hal ini mengindikasikan bahwa ukuran pasar kemungkinan berpengaruh terhadap profit, yang akan diuji secara statistik pada bagian ANOVA.
###Scatter Plot: Hubungan Biaya Marketing dengan Profit Scatter plot digunakan untuk melihat pola hubungan antara biaya marketing dan profit. Garis tren linear ditambahkan untuk memudahkan pembacaan arah hubungan keduanya.
ggplot(data, aes(x = Marketing, y = Profit)) +
geom_point(alpha = 0.4, color = "#6F4E37") +
geom_smooth(method = "lm", color = "darkred", se = TRUE) +
labs(title = "Hubungan Biaya Marketing dengan Profit",
x = "Biaya Marketing", y = "Profit") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Scatter plot menunjukkan adanya tren positif antara biaya marketing dan profit, ditandai garis merah yang sedikit menanjak. Namun sebaran titik data sangat lebar dan tidak merata, banyak transaksi dengan biaya marketing tinggi justru menghasilkan profit negatif, bahkan hingga -400. Hal ini mengindikasikan bahwa marketing bukan satu-satunya faktor penentu profit dan hubungan keduanya relatif lemah. Kekuatan hubungan ini akan dikonfirmasi pada analisis korelasi.
Setelah eksplorasi visual, dilakukan uji korelasi Pearson untuk mengukur kekuatan hubungan linear antar variabel numerik secara kuantitatif. Nilai korelasi berkisar antara -1 hingga 1. Jika mendekati 1 berarti hubungan positif kuat, mendekati -1 berarti negatif kuat, dan mendekati 0 berarti tidak ada hubungan linear. Hasil divisualisasikan dalam heatmap korelasi.
data_num <- data %>%
dplyr::select(Profit, Sales, Marketing, COGS,
`Total Expenses`, Margin, Inventory) %>%
na.omit()
mat_kor <- cor(data_num, method = "pearson")
print(round(mat_kor, 2))
## Profit Sales Marketing COGS Total Expenses Margin Inventory
## Profit 1.00 0.80 0.23 0.46 0.20 0.92 -0.09
## Sales 0.80 1.00 0.71 0.89 0.69 0.94 0.33
## Marketing 0.23 0.71 1.00 0.82 0.97 0.53 0.50
## COGS 0.46 0.89 0.82 1.00 0.78 0.68 0.62
## Total Expenses 0.20 0.69 0.97 0.78 1.00 0.52 0.43
## Margin 0.92 0.94 0.53 0.68 0.52 1.00 0.06
## Inventory -0.09 0.33 0.50 0.62 0.43 0.06 1.00
corrplot(mat_kor, method = "color", type = "upper",
addCoef.col = "black", tl.col = "black",
title = "Heatmap Korelasi Antar Variabel",
mar = c(0, 0, 1, 0))
Variabel yang paling kuat berkorelasi dengan Profit adalah Margin (0,92) dan Sales (0,80), sementara COGS menunjukkan korelasi sedang (0,46). Marketing (0,23) dan Total Expenses (0,20) hanya berkorelasi lemah dengan Profit. Inventory hampir tidak memiliki hubungan linear dengan Profit (-0,09). Perlu diperhatikan pula bahwa Marketing dan Total Expenses berkorelasi sangat tinggi satu sama lain (0,97), begitu pula COGS dan Sales (0,89), hal ini akan menjadi perhatian pada tahap pemodelan regresi.
Korelasi hanya menunjukkan kekuatan hubungan antar dua variabel secara terpisah, bukan pengaruh secara simultan. Maka dilakukan regresi linear berganda untuk melihat variabel mana yang benar-benar signifikan ketika diuji bersama-sama. Variabel Margin tidak dimasukkan sebagai prediktor karena nilainya merupakan turunan langsung dari Sales dan COGS sehingga pasti memicu multikolinearitas. Variabel independen yang digunakan adalah Sales, COGS, Marketing, dan Total Expenses dengan Profit sebagai variabel dependen. Variabel dinyatakan signifikan jika p-value < 0,05.
model <- lm(Profit ~ Sales + COGS + Marketing + `Total Expenses`,
data = data)
summary(model)
##
## Call:
## lm(formula = Profit ~ Sales + COGS + Marketing + `Total Expenses`,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -112.028 -5.748 0.526 5.525 105.228
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.366873 0.705850 3.353 0.000806 ***
## Sales 1.208316 0.003721 324.744 < 2e-16 ***
## COGS -1.241869 0.010250 -121.156 < 2e-16 ***
## Marketing 0.195850 0.040466 4.840 1.35e-06 ***
## `Total Expenses` -1.400421 0.031161 -44.942 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 16.86 on 4243 degrees of freedom
## Multiple R-squared: 0.9726, Adjusted R-squared: 0.9725
## F-statistic: 3.76e+04 on 4 and 4243 DF, p-value: < 2.2e-16
Meskipun model menunjukkan performa yang baik, kesahihan hasil regresi linear berganda bergantung pada terpenuhinya asumsi klasik. Oleh karena itu dilakukan pengujian asumsi meliputi normalitas residual, homoskedastisitas, multikolinearitas, dan autokorelasi.
1. Normalitas Residual Dengan jumlah sampel 4.248, uji Shapiro-Wilk tidak disarankan karena pada sampel besar hampir selalu menolak H0 meskipun residual mendekati normal. Maka normalitas dievaluasi secara visual menggunakan QQ-plot.
qqnorm(residuals(model), main = "QQ-Plot Residual")
qqline(residuals(model), col = "darkred")
QQ-plot menunjukkan bahwa titik-titik di bagian tengah cukup mengikuti garis merah, namun terdapat penyimpangan di kedua ekor — ekor kiri maupun kanan melenceng cukup jauh dari garis. Ini mengindikasikan residual memiliki ekor yang lebih tebal dari distribusi normal (heavy-tailed).
2. Homoskedastisitas
Homoskedastisitas diuji menggunakan uji Breusch-Pagan untuk memeriksa apakah varians residual konstan di seluruh nilai fitted. H0: varians residual homogen. Jika p-value < 0.05 maka terdapat indikasi heteroskedastisitas.
bptest(model)
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 994.78, df = 4, p-value < 2.2e-16
plot(model$fitted.values, residuals(model),
xlab = "Fitted Values", ylab = "Residuals",
main = "Residuals vs Fitted Values")
abline(h = 0, col = "darkred")
Plot residual vs fitted menunjukkan pola seperti bentuk X yang sangat
jelas, varians residual semakin melebar seiring perubahan nilai fitted,
baik ke arah positif maupun negatif. Pola sistematis ini merupakan
indikasi kuat adanya heteroskedastisitas, artinya asumsi
homoskedastisitas tidak terpenuhi. Hasil ini konsisten dengan uji
Breusch-Pagan yang akan dikonfirmasi secara statistik.
3. Multikolinearitas Multikolinearitas dideteksi menggunakan Variance Inflation Factor (VIF). Nilai VIF > 10 mengindikasikan multikolinearitas serius yang dapat mempengaruhi kestabilan koefisien model.
vif(model)
## Sales COGS Marketing `Total Expenses`
## 4.726685 7.102318 17.874073 15.191366
Hasil VIF menunjukkan bahwa Marketing (17,87) dan Total Expenses (15,19) memiliki nilai jauh di atas batas 10, mengindikasikan multikolinearitas serius pada kedua variabel ini — sejalan dengan temuan korelasi sebelumnya (r = 0,97). Sales (4,73) dan COGS (7,10) masih dalam batas toleransi. Asumsi bebas multikolinearitas tidak terpenuhi.
4. Autokorelasi Autokorelasi diuji menggunakan Durbin-Watson. Nilai DW mendekati 2 menunjukkan tidak ada autokorelasi. H0: tidak ada autokorelasi antar residual.
dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 1.7888, p-value = 2.781e-12
## alternative hypothesis: true autocorrelation is greater than 0
Nilai DW = 1,789 cukup mendekati 2, namun p-value = 2,781e-12 jauh di bawah 0,05 sehingga H0 ditolak artinya terdapat autokorelasi positif antar residual. Asumsi bebas autokorelasi tidak terpenuhi.
Keempat asumsi klasik tidak ada yang terpenuhi, residual tidak normal (QQ-plot menyimpang di kedua ekor), terdapat heteroskedastisitas (pola X pada residual vs fitted, BP signifikan), multikolinearitas serius pada Marketing dan Total Expenses (VIF > 10), serta terdapat autokorelasi positif (DW = 1,789, p < 0,05). Model perlu diperbaiki.
Sebelum melakukan transformasi, perlu diatasi terlebih dahulu masalah multikolinearitas. Dari heatmap korelasi sebelumnya diketahui bahwa Marketing dan Total Expenses berkorelasi sangat tinggi (0.97). Untuk memahami hubungan keduanya, dilakukan pengecekan selisih antara Total Expenses dan Marketing.
# Cek apakah Total Expenses = Marketing + komponen lain
data %>%
mutate(selisih = `Total Expenses` - Marketing) %>%
summary()
## Area Code Date Market
## Min. :203.0 Min. :2012-01-01 00:00:00 Length:4248
## 1st Qu.:417.0 1st Qu.:2012-06-23 12:00:00 Class :character
## Median :573.0 Median :2012-12-16 12:00:00 Mode :character
## Mean :582.3 Mean :2012-12-15 22:00:00
## 3rd Qu.:772.0 3rd Qu.:2013-06-08 12:00:00
## Max. :985.0 Max. :2013-12-01 00:00:00
## Market Size Product Product Line Product Type
## Length:4248 Length:4248 Length:4248 Length:4248
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## State Type Budget COGS Budget Margin
## Length:4248 Length:4248 Min. : 0.00 Min. :-210.0
## Class :character Class :character 1st Qu.: 30.00 1st Qu.: 50.0
## Mode :character Mode :character Median : 50.00 Median : 70.0
## Mean : 74.83 Mean : 100.8
## 3rd Qu.: 90.00 3rd Qu.: 130.0
## Max. :450.00 Max. : 690.0
## Budget Profit Budget Sales COGS Inventory
## Min. :-320.00 Min. : 0.0 Min. : 0.00 Min. :-3534.0
## 1st Qu.: 20.00 1st Qu.: 80.0 1st Qu.: 43.00 1st Qu.: 432.0
## Median : 40.00 Median : 130.0 Median : 60.00 Median : 619.0
## Mean : 60.91 Mean : 175.6 Mean : 84.43 Mean : 749.4
## 3rd Qu.: 80.00 3rd Qu.: 210.0 3rd Qu.:100.00 3rd Qu.: 910.5
## Max. : 560.00 Max. :1140.0 Max. :364.00 Max. : 8252.0
## Margin Marketing Profit Sales
## Min. :-302.00 Min. : 0.00 Min. :-638.0 Min. : 17
## 1st Qu.: 52.75 1st Qu.: 13.00 1st Qu.: 17.0 1st Qu.:100
## Median : 76.00 Median : 22.00 Median : 40.0 Median :138
## Mean : 104.29 Mean : 31.19 Mean : 61.1 Mean :193
## 3rd Qu.: 132.00 3rd Qu.: 39.00 3rd Qu.: 92.0 3rd Qu.:230
## Max. : 613.00 Max. :156.00 Max. : 778.0 Max. :912
## Total Expenses selisih
## Min. : 10.00 Min. : 8.00
## 1st Qu.: 33.00 1st Qu.:12.00
## Median : 46.00 Median :23.00
## Mean : 54.06 Mean :22.88
## 3rd Qu.: 65.00 3rd Qu.:30.00
## Max. :190.00 Max. :58.00
Hasil menunjukkan bahwa selisih antara Total Expenses dan Marketing selalu positif (minimum = 8), yang mengkonfirmasi bahwa Marketing sudah tercakup di dalam Total Expenses sebagai salah satu komponen biaya. Memasukkan keduanya ke dalam model berarti memasukkan informasi yang redundan. Oleh karena itu, Marketing dikeluarkan dari model dan Total Expenses dipertahankan karena lebih komprehensif mencakup seluruh komponen biaya operasional.
Untuk mengatasi pelanggaran asumsi normalitas dan homoskedastisitas, dilakukan transformasi logaritma pada variabel dependen Profit. Karena Profit mengandung nilai negatif (minimum -638), variabel digeser dengan menambahkan konstanta 639 agar seluruh nilai menjadi positif sebelum ditransformasi. Model final yang dibangun adalah:
log(Profit + 639) ~ Sales + COGS + Total Expenses
data$Profit_log <- log(data$Profit + 639)
model_final <- lm(Profit_log ~ Sales + COGS + `Total Expenses`, data = data)
summary(model_final)
##
## Call:
## lm(formula = Profit_log ~ Sales + COGS + `Total Expenses`, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.2685 -0.0082 0.0010 0.0116 0.2751
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.475e+00 3.150e-03 2055.52 <2e-16 ***
## Sales 2.277e-03 2.272e-05 100.21 <2e-16 ***
## COGS -3.140e-03 5.941e-05 -52.85 <2e-16 ***
## `Total Expenses` -2.068e-03 7.883e-05 -26.24 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1035 on 4244 degrees of freedom
## Multiple R-squared: 0.7304, Adjusted R-squared: 0.7302
## F-statistic: 3833 on 3 and 4244 DF, p-value: < 2.2e-16
1. Normalitas Residual
qqnorm(residuals(model_final), main = "QQ-Plot Residual (Model Final)")
qqline(residuals(model_final), col = "darkred")
QQ-plot menunjukkan bahwa sebagian besar titik mengikuti garis merah dengan baik terutama di bagian tengah dan kanan, namun masih terdapat beberapa titik yang melenceng di ekor kiri. Penyimpangan ini disebabkan oleh beberapa transaksi dengan profit sangat negatif yang memang karakteristik alami data bisnis. Dengan jumlah sampel 4.248, asumsi normalitas dapat ditoleransi berdasarkan Central Limit Theorem yang menjamin estimasi koefisien tetap valid secara asimtotik.
2. Homoskedastisitas
bptest(model_final)
##
## studentized Breusch-Pagan test
##
## data: model_final
## BP = 130.66, df = 3, p-value < 2.2e-16
plot(model_final$fitted.values, residuals(model_final),
xlab = "Fitted Values", ylab = "Residuals",
main = "Residuals vs Fitted Values (Model Final)")
abline(h = 0, col = "darkred")
Plot residual vs fitted tidak menunjukkan pola sistematis yang jelas — titik-titik tersebar cukup acak di sekitar garis nol. Asumsi homoskedastisitas terpenuhi.
3. Multikolinearitas
vif(model_final)
## Sales COGS `Total Expenses`
## 4.677316 6.332252 2.580334
Setelah Marketing dikeluarkan, nilai VIF seluruh variabel turun drastis: Sales (4.68), COGS (6.33), dan Total Expenses (2.58) — semua jauh di bawah batas 10. Asumsi bebas multikolinearitas terpenuhi.
4. Autokorelasi
dwtest(model_final)
##
## Durbin-Watson test
##
## data: model_final
## DW = 2.0434, p-value = 0.9203
## alternative hypothesis: true autocorrelation is greater than 0
Nilai DW = 2.0434 sangat mendekati 2 dengan p-value = 0.9203 jauh di atas 0.05, sehingga H0 gagal ditolak. Tidak terdapat autokorelasi antar residual. Asumsi bebas autokorelasi terpenuhi.
Setelah diketahui bahwa Sales, COGS, dan Total Expenses merupakan faktor numerik yang signifikan memengaruhi profit melalui regresi, analisis dilanjutkan dengan melihat sisi kategorikal — apakah terdapat perbedaan rata-rata profit yang signifikan antar kelompok. Uji ANOVA satu arah dilakukan untuk dua variabel kategorikal yaitu Market Size dan Product Type. Variabel dinyatakan berpengaruh signifikan jika p-value < 0,05.
anova_market <- aov(Profit ~ `Market Size`, data = data)
cat("=== ANOVA: Profit ~ Market Size ===\n")
## === ANOVA: Profit ~ Market Size ===
summary(anova_market)
## Df Sum Sq Mean Sq F value Pr(>F)
## `Market Size` 1 2611722 2611722 268.4 <2e-16 ***
## Residuals 4246 41321915 9732
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova_produk <- aov(Profit ~ `Product Type`, data = data)
cat("=== ANOVA: Profit ~ Product Type ===\n")
## === ANOVA: Profit ~ Product Type ===
summary(anova_produk)
## Df Sum Sq Mean Sq F value Pr(>F)
## `Product Type` 3 141680 47227 4.577 0.00333 **
## Residuals 4244 43791957 10319
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Kedua uji ANOVA menunjukkan hasil yang signifikan. Untuk Market Size, diperoleh F-value = 268,4 dengan p-value < 2e-16, artinya terdapat perbedaan rata-rata profit yang sangat signifikan antara Major Market dan Small Market. Untuk Product Type, diperoleh F-value = 4,577 dengan p-value = 0,003, artinya terdapat perbedaan rata-rata profit yang signifikan antar keempat jenis produk, meskipun tidak sekuat perbedaan antar ukuran pasar. Namun ANOVA belum menjelaskan pasangan kelompok mana yang berbeda secara spesifik, sehingga dilanjutkan dengan uji Tukey HSD.
data$Market_Size <- data$`Market Size`
data$Product_Type <- data$`Product Type`
anova_market2 <- aov(Profit ~ Market_Size, data = data)
anova_produk2 <- aov(Profit ~ Product_Type, data = data)
tukey_market <- TukeyHSD(anova_market2)
tukey_produk <- TukeyHSD(anova_produk2)
print(tukey_market)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Profit ~ Market_Size, data = data)
##
## $Market_Size
## diff lwr upr p adj
## Small Market-Major Market -50.58973 -56.64413 -44.53533 0
print(tukey_produk)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Profit ~ Product_Type, data = data)
##
## $Product_Type
## diff lwr upr p adj
## Espresso-Coffee -12.372198 -23.44003 -1.3043662 0.0212815
## Herbal Tea-Coffee -10.822917 -22.18438 0.5385423 0.0684855
## Tea-Coffee -15.528788 -27.17082 -3.8867568 0.0034344
## Herbal Tea-Espresso 1.549281 -9.51855 12.6171126 0.9840623
## Tea-Espresso -3.156590 -14.51225 8.1990707 0.8914175
## Tea-Herbal Tea -4.705871 -16.34790 6.9361599 0.7265871
par(mfrow = c(1, 2))
plot(tukey_market)
plot(tukey_produk)
par(mfrow = c(1, 1))
Untuk Market Size, hasil Tukey menunjukkan perbedaan rata-rata profit antara Small Market dan Major Market sebesar -50,59 dengan p-adj = 0 artinya perbedaannya sangat signifikan. Major Market terbukti menghasilkan rata-rata profit 50,59 lebih tinggi dibanding Small Market, dikonfirmasi pula oleh plot confidence interval yang seluruhnya berada di sisi negatif dan tidak memotong garis nol.
Untuk Product Type, hanya dua pasangan yang menunjukkan perbedaan signifikan (p-adj < 0,05): Espresso-Coffee (p = 0,021) dan Tea-Coffee (p = 0,003). Keduanya menunjukkan bahwa Coffee memiliki rata-rata profit yang signifikan lebih tinggi dibanding Espresso maupun Tea. Pasangan lainnya, Herbal Tea-Coffee (p = 0,068), Herbal Tea-Espresso (p = 0,984), Tea-Espresso (p = 0,891), dan Tea-Herbal Tea (p = 0,727) tidak menunjukkan perbedaan yang signifikan. Hal ini mengindikasikan bahwa Coffee adalah satu-satunya produk yang secara statistik unggul signifikan dibanding produk lainnya, sementara Espresso, Tea, dan Herbal Tea tidak berbeda satu sama lain.
Berdasarkan seluruh analisis yang telah dilakukan terhadap dataset Coffee Chain, dapat ditarik beberapa kesimpulan sebagai berikut.
Dari visualisasi data, Major Market secara konsisten menghasilkan profit lebih tinggi dibanding Small Market meskipun memiliki risiko kerugian lebih besar, sementara hubungan antara biaya marketing dengan profit terbukti lemah secara visual.
Dari analisis korelasi, Margin (0,92) dan Sales (0,80) merupakan variabel yang paling kuat berkorelasi dengan profit, sementara Marketing (0,23) dan Total Expenses (0,20) hanya berkorelasi lemah.
Dari regresi linear berganda dengan transformasi logaritma, model final menggunakan Sales, COGS, dan Total Expenses menghasilkan R-squared sebesar 0,7304. Sales berpengaruh positif, sedangkan COGS dan Total Expenses berpengaruh negatif terhadap profit, menegaskan bahwa efisiensi biaya merupakan kunci utama profitabilitas.
Dari uji ANOVA, terdapat perbedaan profit yang sangat signifikan antara Major Market dan Small Market (F = 268,4; p < 0,001), serta perbedaan signifikan antar jenis produk (F = 4,577; p = 0,003).
Dari uji Tukey HSD, Major Market terbukti menghasilkan profit rata-rata 50,59 lebih tinggi dibanding Small Market. Untuk jenis produk, Coffee terbukti secara statistik unggul signifikan dibanding Espresso (p = 0,021) dan Tea (p = 0,003), sementara perbedaan dengan Herbal Tea tidak signifikan (p = 0,068).
Berdasarkan hasil analisis, terdapat tiga titik kritis yang perlu menjadi perhatian manajemen Coffee Chain.
knitr::include_graphics("C:/Users/Surface/SIM2026/Strategi Bisnis Tugas 1 SIM.jpg")