1 Pendahuluan

Industri kopi merupakan salah satu sektor bisnis yang terus mengalami pertumbuhan signifikan di Amerika Serikat. Persaingan ketat di antara para pengusaha mendorong perlunya pengambilan keputusan berbasis data guna mempertahankan dan meningkatkan kinerja bisnis. Salah satu instrumen utama dalam proses ini adalah analisis statistik yang mendalam.

Laporan ini disusun untuk menggali informasi dalam data penjualan kopi guna memahami pola operasional di berbagai wilayah serta efektivitas variabel keuangan terhadap keuntungan perusahaan. Dengan pendekatan statistik deskriptif dan inferensial, diharapkan pengusaha dapat melakukan evaluasi terhadap performa penjualan dan mengidentifikasi faktor-faktor kunci yang mempengaruhi profitabilitas secara strategis.

1.1 Deskripsi Data

Dataset yang digunakan adalah Coffee Chain Datasets yang berisi data transaksi penjualan jaringan kedai kopi di berbagai wilayah Amerika Serikat selama periode Januari 2012 – Desember 2013.

Dataset terdiri dari 4.248 observasi dengan 20 variabel yang mencakup informasi terkait produk, lokasi pasar, serta aspek keuangan. Data ini bersifat kuantitatif dan kategorikal, sehingga memungkinkan dilakukan berbagai analisis statistik seperti ANOVA dan regresi linear.

Variabel Deskripsi
Market Wilayah pasar (Central, East, South, West)
Product Type Jenis produk (Coffee, Espresso, Tea, Herbal Tea)
Sales Total penjualan (USD)
Profit Keuntungan bersih (USD)
COGS Cost of Goods Sold — biaya pokok penjualan (USD)
Marketing Biaya pemasaran (USD)
Margin Margin keuntungan (USD)

1.2 Insight yang dianalisis

  1. Apakah terdapat perbedaan rata-rata Profit yang signifikan antar wilayah pasar (Market)?

  2. Faktor apa saja yang signifikan mempengaruhi besarnya Profit? dianalisis menggunakan Regresi Linear Berganda dengan prediktor Sales, COGS, dan Marketing, disertai pengecekan asumsi lengkap.


2 Persiapan Data

2.1 Memuat Library

library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(knitr)
library(kableExtra)
library(car)       # untuk uji Levene dan VIF
library(lmtest) # untuk uji Breusch-Pagan
library(rstatix)
library(sandwich)

2.2 Load Data

coffee = read_excel("C:/Users/LENOVO/Downloads/1. Tugas SIM 2025B - Coffee Chain Datasets.xlsx", sheet = "data")

2.3 Preprocessing Data

# Konversi tipe data
coffee = coffee %>%
  mutate(
    Market       = as.factor(Market),
    `Product Type` = as.factor(`Product Type`)
  )

cat("Dimensi data:", nrow(coffee), "baris x", ncol(coffee), "kolom\n")
## Dimensi data: 4248 baris x 20 kolom
cat("Jumlah missing values:", sum(is.na(coffee)), "\n")
## Jumlah missing values: 0
glimpse(coffee)
## Rows: 4,248
## Columns: 20
## $ `Area Code`      <dbl> 719, 970, 970, 303, 303, 720, 970, 719, 970, 719, 303…
## $ Date             <dttm> 2012-01-01, 2012-01-01, 2012-01-01, 2012-01-01, 2012…
## $ Market           <fct> Central, Central, Central, Central, Central, Central,…
## $ `Market Size`    <chr> "Major Market", "Major Market", "Major Market", "Majo…
## $ Product          <chr> "Amaretto", "Colombian", "Decaf Irish Cream", "Green …
## $ `Product Line`   <chr> "Beans", "Beans", "Beans", "Leaves", "Beans", "Beans"…
## $ `Product Type`   <fct> Coffee, Coffee, Coffee, Tea, Espresso, Espresso, Herb…
## $ State            <chr> "Colorado", "Colorado", "Colorado", "Colorado", "Colo…
## $ Type             <chr> "Regular", "Regular", "Decaf", "Regular", "Regular", …
## $ `Budget COGS`    <dbl> 90, 80, 100, 30, 60, 80, 140, 50, 50, 40, 50, 150, 10…
## $ `Budget Margin`  <dbl> 130, 110, 140, 50, 90, 130, 160, 80, 70, 70, 70, 210,…
## $ `Budget Profit`  <dbl> 100, 80, 110, 30, 70, 80, 110, 20, 40, 20, 40, 130, 1…
## $ `Budget Sales`   <dbl> 220, 190, 240, 80, 150, 210, 300, 130, 120, 110, 120,…
## $ COGS             <dbl> 89, 83, 95, 44, 54, 72, 170, 63, 60, 58, 64, 144, 95,…
## $ Inventory        <dbl> 777, 623, 821, 623, 456, 558, 1091, 435, 336, 338, 96…
## $ Margin           <dbl> 130, 107, 139, 56, 80, 108, 171, 87, 80, 72, 76, 201,…
## $ Marketing        <dbl> 24, 27, 26, 14, 15, 23, 47, 57, 19, 22, 19, 47, 30, 7…
## $ Profit           <dbl> 94, 68, 101, 30, 54, 53, 99, 0, 33, 17, 36, 111, 87, …
## $ Sales            <dbl> 219, 190, 234, 100, 134, 180, 341, 150, 140, 130, 140…
## $ `Total Expenses` <dbl> 36, 39, 38, 26, 26, 55, 72, 87, 47, 55, 40, 90, 52, 1…

2.4 Statistik Deskriptif

desc = coffee %>%
  group_by(Market) %>%
  summarise(
    N            = n(),
    Rata2_Profit = round(mean(Profit), 2),
    SD_Profit    = round(sd(Profit), 2),
    Min_Profit   = min(Profit),
    Max_Profit   = max(Profit),
    .groups = "drop"
  )

kable(desc,
      col.names = c("Wilayah", "N", "Rata-rata Profit",
                    "Std. Deviasi", "Min", "Maks"),
      format.args = list(big.mark = ",")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Wilayah N Rata-rata Profit Std. Deviasi Min Maks
Central 1,344 69.83 73.74 -65 362
East 888 66.69 138.22 -420 778
South 672 48.33 54.30 -65 345
West 1,344 55.06 113.88 -638 511

3 Analisis 1: One-Way ANOVA

Analisis ini menguji apakah rata-rata Profit berbeda secara signifikan antar wilayah pasar (Market).

Hipotesis:

  • \(H_0\): \(\mu_{Central} = \mu_{East} = \mu_{South} = \mu_{West}\) (rata-rata profit semua wilayah sama)
  • \(H_1\): Minimal satu wilayah memiliki rata-rata profit yang berbeda

3.1 Pengecekan Asumsi ANOVA

ANOVA memiliki dua asumsi utama yang harus dipenuhi: normalitas dan homogenitas varians.

  1. Normalitas: Data (residual) pada setiap kelompok diharapkan berdistribusi normal.
  2. Homogenitas varians: Varians antar kelompok harus sama.

3.1.1 Asumsi 1 — Normalitas (Uji Shapiro-Wilk per kelompok)

# Uji Shapiro-Wilk per wilayah
shapiro_hasil <- coffee %>%
  group_by(Market) %>%
  summarise(
    Statistik_W = round(shapiro.test(Profit)$statistic, 4),
    p_value     = round(shapiro.test(Profit)$p.value, 4),
    Kesimpulan  = ifelse(shapiro.test(Profit)$p.value > 0.05,
                         "Normal", "Tidak Normal"),
    .groups = "drop"
  )

kable(shapiro_hasil,
      col.names = c("Wilayah", "Statistik W", "p-value", "Kesimpulan")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  column_spec(4, bold = TRUE,
              color = ifelse(shapiro_hasil$Kesimpulan == "Normal", "#F4A7B9", "black"))
Wilayah Statistik W p-value Kesimpulan
Central 0.8745 0 Tidak Normal
East 0.7932 0 Tidak Normal
South 0.8577 0 Tidak Normal
West 0.8057 0 Tidak Normal

Catatan: Pada sampel besar (n > 30), uji Shapiro-Wilk sangat sensitif sehingga hampir selalu menolak H₀ meskipun distribusi sudah mendekati normal. Berdasarkan Central Limit Theorem, dengan n = 4.248, distribusi sampling rata-rata dapat dianggap normal sehingga ANOVA masih valid untuk digunakan.

# Q-Q Plot per wilayah
ggplot(coffee, aes(sample = Profit)) +
  stat_qq(color = "#7A9E4D", alpha = 0.5) +
  stat_qq_line(color = "#E89CA9", linewidth = 1) +
  facet_wrap(~ Market) +
  labs(
    title    = "Q-Q Plot Profit per Wilayah Pasar",
    subtitle = "Jika titik mengikuti garis merah → distribusi mendekati normal",
    x        = "Theoretical Quantiles",
    y        = "Sample Quantiles"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(face = "bold"))

Catatan: Berdasarkan Q-Q plot, terlihat bahwa titik-titik data pada masing-masing wilayah tidak sepenuhnya mengikuti garis diagonal, terutama pada bagian ekor distribusi. Hal ini menunjukkan adanya penyimpangan dari distribusi normal.Namun, mengingat ukuran sampel yang besar, penyimpangan tersebut masih dapat ditoleransi. Berdasarkan Central Limit Theorem, distribusi rata-rata sampel cenderung mendekati normal sehingga analisis ANOVA tetap dapat digunakan.

3.1.2 Asumsi 2 — Homogenitas Varians (Uji Levene)

levene_hasil = leveneTest(Profit ~ Market, data = coffee)
print(levene_hasil)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    3  38.082 < 2.2e-16 ***
##       4244                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggplot(coffee, aes(x = reorder(Market, Profit, FUN = median),
                    y = Profit, fill = Market)) +
  geom_boxplot(outlier.alpha = 0.3, show.legend = FALSE) +
  stat_summary(fun = mean, geom = "point", shape = 18,
               size = 4, color = "white") +
  scale_fill_brewer(palette = "Set2") +
  scale_y_continuous(labels = dollar_format(prefix = "$")) +
  labs(
    title    = "Distribusi Profit per Wilayah Pasar",
    subtitle = "Titik putih = rata-rata; garis tengah kotak = median",
    x        = "Wilayah Pasar",
    y        = "Profit (USD)"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(face = "bold"))

Berdasarkan uji Levene, diperoleh p-value < 0,05 sehingga asumsi homogenitas varians tidak terpenuhi. Hal ini menunjukkan bahwa varians antar kelompok berbeda secara signifikan.

3.2 ANOVA TEST

model_anova = aov(Profit ~ Market, data = coffee)
summary(model_anova)
##               Df   Sum Sq Mean Sq F value   Pr(>F)    
## Market         3   288811   96270   9.361 3.64e-06 ***
## Residuals   4244 43644825   10284                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil ANOVA menunjukkan adanya perbedaan rata-rata profit yang signifikan antar wilayah (p-value < 0,05). Namun, berdasarkan uji Levene, asumsi homogenitas varians tidak terpenuhi.

Oleh karena itu, analisis dikonfirmasi menggunakan Welch ANOVA yang lebih robust terhadap perbedaan varians. Hasil Welch ANOVA juga menunjukkan bahwa terdapat perbedaan yang signifikan antar kelompok.

welch = oneway.test(Profit ~ Market, data = coffee)
welch
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  Profit and Market
## F = 19.734, num df = 3.0, denom df = 2120.2, p-value = 1.288e-12
p_welch = welch$p.value

if(p_welch < 0.05){
  cat("Keputusan: Tolak H0\n")
  cat("Kesimpulan: Terdapat perbedaan rata-rata profit antar wilayah\n")
} else {
  cat("Keputusan: Gagal Tolak H0\n")
  cat("Kesimpulan: Tidak terdapat perbedaan rata-rata profit\n")
}
## Keputusan: Tolak H0
## Kesimpulan: Terdapat perbedaan rata-rata profit antar wilayah

3.3 Uji Games-Howell

Uji lanjutan dilakukan menggunakan metode Games-Howell karena asumsi homogenitas varians tidak terpenuhi.

games <- coffee %>%
  games_howell_test(Profit ~ Market)

games
## # A tibble: 6 × 8
##   .y.    group1  group2 estimate conf.low conf.high    p.adj p.adj.signif
## * <chr>  <chr>   <chr>     <dbl>    <dbl>     <dbl>    <dbl> <chr>       
## 1 Profit Central East      -3.14   -16.2       9.86 9.25e- 1 ns          
## 2 Profit Central South    -21.5    -29.0     -14.0  6.91e-12 ****        
## 3 Profit Central West     -14.8    -24.3      -5.26 3.93e- 4 ***         
## 4 Profit East    South    -18.4    -31.4      -5.26 2   e- 3 **          
## 5 Profit East    West     -11.6    -26.0       2.73 1.59e- 1 ns          
## 6 Profit South   West       6.73    -2.91     16.4  2.76e- 1 ns
ggplot(coffee, aes(x=Market, y=Profit, fill=Market)) +
  geom_boxplot(alpha=0.7, outlier.alpha=0.2) +
  stat_summary(fun=mean, geom="point", shape=18, size=3, color="black") +
  scale_fill_manual(values = c("#A8C686", "#F4A7B9", "#CDE7B0", "#FFB7C5")) +
  labs(title="Perbandingan Profit antar Wilayah",
       subtitle="South signifikan lebih rendah dibanding Central dan East",
       x="Wilayah", y="Profit") +
  theme_minimal()

Berdasarkan uji Games-Howell, terdapat beberapa pasangan wilayah yang menunjukkan perbedaan rata-rata profit yang signifikan.

Wilayah South memiliki profit paling rendah dan berbeda signifikan dibandingkan Central dan East.Sementara itu, Central, East, dan West tidak berbeda signifikan satu sama lain, sehingga ketiganya memiliki tingkat profit yang relatif mirip.

3.4 Interpretasi ANOVA TEST

Terdapat perbedaan rata-rata profit antar wilayah (p < 0,05). Hasil Games-Howell menunjukkan bahwa wilayah South memiliki profit yang lebih rendah secara signifikan dibandingkan Central dan East, sedangkan wilayah lainnya relatif tidak berbeda signifikan. Wilayah dengan profit lebih tinggi dapat dijadikan acuan dalam strategi bisnis.


4 Analisis 2: Regresi Linear Berganda

Analisis ini memodelkan pengaruh Sales, COGS, dan Marketing terhadap Profit.

Model: \[\text{Profit} = \beta_0 + \beta_1 \cdot \text{Sales} + \beta_2 \cdot \text{COGS} + \beta_3 \cdot \text{Marketing} + \varepsilon\] Hipotesis (uji serentak / Uji F):

  • \(H_0\): \(\beta_1 = \beta_2 = \beta_3 = 0\) (tidak ada prediktor yang berpengaruh)
  • \(H_1\): Minimal satu \(\beta_i \neq 0\)

Hipotesis (uji parsial / Uji T per prediktor):

  • \(H_0\): \(\beta_i = 0\) (prediktor ke-i tidak berpengaruh signifikan)
  • \(H_1\): \(\beta_i \neq 0\)

4.1 Eksplorasi Hubungan Antar Variabel

# Scatter plot prediktor vs Profit
pairs_data <- coffee %>% select(Profit, Sales, COGS, Marketing)

# Manual scatter plots
p1 <- ggplot(coffee, aes(x = Sales, y = Profit)) +
  geom_point(alpha = 0.3, color = "#2C7BB6") +
  geom_smooth(method = "lm", color = "#D7191C", se = TRUE) +
  scale_x_continuous(labels = dollar_format(prefix="$")) +
  scale_y_continuous(labels = dollar_format(prefix="$")) +
  labs(title = "Sales vs Profit") +
  theme_minimal() + theme(plot.title = element_text(face="bold", size=11))

p2 <- ggplot(coffee, aes(x = COGS, y = Profit)) +
  geom_point(alpha = 0.3, color = "#1A9641") +
  geom_smooth(method = "lm", color = "#D7191C", se = TRUE) +
  scale_x_continuous(labels = dollar_format(prefix="$")) +
  scale_y_continuous(labels = dollar_format(prefix="$")) +
  labs(title = "COGS vs Profit") +
  theme_minimal() + theme(plot.title = element_text(face="bold", size=11))

p3 <- ggplot(coffee, aes(x = Marketing, y = Profit)) +
  geom_point(alpha = 0.3, color = "#FF7F00") +
  geom_smooth(method = "lm", color = "#D7191C", se = TRUE) +
  scale_x_continuous(labels = dollar_format(prefix="$")) +
  scale_y_continuous(labels = dollar_format(prefix="$")) +
  labs(title = "Marketing vs Profit") +
  theme_minimal() + theme(plot.title = element_text(face="bold", size=11))

library(gridExtra)
grid.arrange(p1, p2, p3, ncol = 3)

Berdasarkan scatter plot, variabel Sales menunjukkan hubungan linear positif yang kuat dengan Profit, sehingga diduga menjadi prediktor utama dalam model regresi. Variabel COGS juga menunjukkan hubungan positif, namun dengan penyebaran data yang lebih besar.

Sementara itu, variabel Marketing menunjukkan hubungan yang lebih lemah dan tidak konsisten terhadap Profit, yang mengindikasikan bahwa peningkatan biaya pemasaran tidak selalu diikuti dengan peningkatan profit.

model_reg = lm(Profit ~ Sales + COGS + Marketing, data = coffee)
summary(model_reg)
## 
## Call:
## lm(formula = Profit ~ Sales + COGS + Marketing, data = coffee)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -123.137  -11.828   -0.518    9.241  101.270 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -22.801081   0.521941  -43.69   <2e-16 ***
## Sales         1.193813   0.004503  265.12   <2e-16 ***
## COGS         -1.195341   0.012388  -96.49   <2e-16 ***
## Marketing    -1.461141   0.020260  -72.12   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 20.48 on 4244 degrees of freedom
## Multiple R-squared:  0.9595, Adjusted R-squared:  0.9595 
## F-statistic: 3.351e+04 on 3 and 4244 DF,  p-value: < 2.2e-16

4.2 Pengecekan Asumsi Regresi

4.2.1 Asumsi 1 — Linearitas

Asumsi linearitas dicek melalui scatter plot antara nilai fitted dan residual. Jika tidak ada pola sistematis, asumsi linearitas terpenuhi.

plot_data <- data.frame(
  Fitted   = fitted(model_reg),
  Residual = residuals(model_reg)
)

ggplot(plot_data, aes(x = Fitted, y = Residual)) +
  geom_point(alpha = 0.3, color = "#2C7BB6") +
  geom_hline(yintercept = 0, color = "#D7191C", linetype = "dashed", linewidth = 1) +
  geom_smooth(method = "loess", color = "#FF7F00", se = FALSE) +
  scale_x_continuous(labels = dollar_format(prefix="$")) +
  labs(
    title    = "Plot Residual vs Fitted (Cek Linearitas)",
    subtitle = "Garis oranye idealnya mendekati garis merah (y = 0)",
    x        = "Nilai Fitted",
    y        = "Residual"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(face = "bold"))

Berdasarkan plot residual terhadap nilai fitted, terlihat adanya sedikit pola lengkungan yang menunjukkan bahwa asumsi linearitas tidak sepenuhnya terpenuhi. Namun, pola tersebut tidak terlalu kuat sehingga model regresi masih dapat digunakan untuk analisis lebih lanjut.

4.2.2 Asumsi 2 — Normalitas Residual (Uji Shapiro-Wilk + Q-Q Plot)

set.seed(123)

resid_sampel <- sample(
  residuals(model_reg),
  size = min(5000, length(residuals(model_reg)))
)

shapiro_reg <- shapiro.test(resid_sampel)

cat("Uji Shapiro-Wilk Residual:\n")
## Uji Shapiro-Wilk Residual:
print(shapiro_reg)
## 
##  Shapiro-Wilk normality test
## 
## data:  resid_sampel
## W = 0.92661, p-value < 2.2e-16
ggplot(plot_data, aes(sample=Residual)) +
  stat_qq(color="#2C7BB6", alpha=0.4) + stat_qq_line(color="#D7191C", linewidth=1) +
  labs(title="Q-Q Plot Residual",
       subtitle="Titik mengikuti garis → residual berdistribusi normal",
       x="Theoretical Quantiles", y="Sample Quantiles") +
  theme_minimal() + theme(plot.title=element_text(face="bold"))

Berdasarkan uji Shapiro-Wilk, diperoleh p-value < 0,05 sehingga residual tidak berdistribusi normal. Namun, dengan ukuran sampel yang besar, uji ini menjadi sangat sensitif terhadap penyimpangan kecil dari normalitas.

Berdasarkan Q-Q plot, residual masih mengikuti pola garis diagonal sehingga dapat disimpulkan bahwa asumsi normalitas secara praktis masih dapat diterima. Oleh karena itu, model regresi tetap dapat digunakan untuk inferensi.

4.2.3 Asumsi 3 — Homoskedastisitas (Uji Breusch-Pagan)

bp_test = bptest(model_reg)
cat("Uji Breusch-Pagan:\n")
## Uji Breusch-Pagan:
print(bp_test)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_reg
## BP = 947.05, df = 3, p-value < 2.2e-16
plot_data$Sqrt_Abs_Resid <- sqrt(abs(residuals(model_reg)))

ggplot(plot_data, aes(x = Fitted, y = Sqrt_Abs_Resid)) +
  geom_point(alpha = 0.3, color = "#2C7BB6") +
  geom_smooth(method = "loess", color = "#D7191C", se = FALSE) +
  scale_x_continuous(labels = dollar_format(prefix="$")) +
  labs(
    title    = "Scale-Location Plot (Cek Homoskedastisitas)",
    subtitle = "Garis merah idealnya mendatar → varians residual konstan",
    x        = "Nilai Fitted",
    y        = "√|Residual|"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(face = "bold"))

Berdasarkan uji Breusch-Pagan,tidak terpenuhi — varians residual tidak konstan (heteroskedastis). Hal ini dikonfirmasi oleh Scale-Location Plot yang menunjukkan pola berbentuk U, di mana residual membesar pada nilai fitted yang sangat negatif maupun sangat positif.

Untuk mengatasi hal ini, digunakan Heteroscedasticity-Consistent (HC3) standard errors agar inferensi tetap valid.

robust_hasil = coeftest(model_reg, vcov = vcovHC(model_reg, type = "HC3"))
print(robust_hasil)
## 
## t test of coefficients:
## 
##               Estimate Std. Error t value  Pr(>|t|)    
## (Intercept) -22.801081   0.611981 -37.258 < 2.2e-16 ***
## Sales         1.193813   0.015680  76.138 < 2.2e-16 ***
## COGS         -1.195341   0.034940 -34.211 < 2.2e-16 ***
## Marketing    -1.461141   0.023366 -62.534 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4.2.4 Asumsi 4 — Non-Multikolinearitas (VIF)

vif_hasil <- vif(model_reg)
vif_df    <- data.frame(
  Prediktor = names(vif_hasil),
  VIF       = round(vif_hasil, 3),
  Kesimpulan = ifelse(vif_hasil < 10, "Tidak ada multikolinearitas", "Multikolinearitas!")
)

kable(vif_df, row.names = FALSE) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  column_spec(3, bold = TRUE,
              color = ifelse(vif_df$Kesimpulan == "Tidak ada multikolinearitas",
                             "green", "red"))
Prediktor VIF Kesimpulan
Sales 4.691 Tidak ada multikolinearitas
COGS 7.030 Tidak ada multikolinearitas
Marketing 3.036 Tidak ada multikolinearitas

4.3 Interpretasi Regresi

koef <- as.data.frame(robust_hasil[, ])
koef$Variabel <- rownames(koef)
rownames(koef) <- NULL
koef <- koef %>%
  select(Variabel, Estimate, `Std. Error`, `t value`, `Pr(>|t|)`) %>%
  mutate(
    Estimate     = round(Estimate, 4),
    `Std. Error` = round(`Std. Error`, 4),
    `t value`    = round(`t value`, 4),
    `Pr(>|t|)`   = round(`Pr(>|t|)`, 4),
    Signifikan   = ifelse(`Pr(>|t|)` < 0.05, "Ya ✓", "Tidak ✗")
  )

kable(koef, row.names = FALSE) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  column_spec(6, bold = TRUE,
              color = ifelse(koef$Signifikan == "Ya ✓", "darkgreen", "red"))
Variabel Estimate Std. Error t value Pr(>&#124;t&#124;) Signifikan
(Intercept) -22.8011 0.6120 -37.2578 0 Ya ✓
Sales 1.1938 0.0157 76.1379 0 Ya ✓
COGS -1.1953 0.0349 -34.2113 0 Ya ✓
Marketing -1.4611 0.0234 -62.5341 0 Ya ✓
rsq     <- round(summary(model_reg)$r.squared, 4)
adj_rsq <- round(summary(model_reg)$adj.r.squared, 4)
fstat   <- round(summary(model_reg)$fstatistic[1], 2)
fp      <- pf(summary(model_reg)$fstatistic[1],
              summary(model_reg)$fstatistic[2],
              summary(model_reg)$fstatistic[3],
              lower.tail = FALSE)

cat("R-squared      :", rsq, "\n")
## R-squared      : 0.9595
cat("Adj. R-squared :", adj_rsq, "\n")
## Adj. R-squared : 0.9595
cat("F-statistic    :", fstat, "| p-value:", format.pval(fp, digits = 4), "\n")
## F-statistic    : 33512.48 | p-value: < 2.2e-16

Interpretasi:

  • Uji F (Serentak): Nilai F-statistic yang besar dengan p-value < 0,001 menunjukkan bahwa model secara keseluruhan signifikan\(H_0\) ditolak, artinya minimal satu prediktor berpengaruh nyata terhadap Profit. Model mampu menjelaskan 95.95% variasi Profit (R² = 0.9595).

  • Sales (β = +1.1938, p < 0,001): Setiap kenaikan $1 pada penjualan, Profit meningkat sebesar $1.19, dengan asumsi COGS dan Marketing konstan. Sales merupakan prediktor dengan pengaruh positif terkuat terhadap profitabilitas.

  • COGS (β = −1.1953, p < 0,001): Setiap kenaikan $1 pada biaya pokok penjualan, Profit turun sebesar $1.20. Hal ini sesuai ekspektasi — semakin tinggi biaya produksi, semakin tergerus margin keuntungan.

  • Marketing (β = −1.4611, p < 0,001): Setiap kenaikan $1 pada biaya pemasaran, Profit justru turun sebesar $1.46. Meskipun secara statistik signifikan, arah negatif ini mengindikasikan bahwa pengeluaran pemasaran dalam periode ini belum menghasilkan return yang sebanding. Kemungkinan disebabkan oleh lag effect (dampak pemasaran baru dirasakan di periode berikutnya) atau alokasi anggaran pemasaran yang lebih besar justru diberikan pada produk/wilayah yang kurang menguntungkan.

  • Intercept (β₀ = −22.80, p < 0,001): Ketika Sales, COGS, dan Marketing bernilai 0, estimasi Profit adalah −$22.80. Nilai ini tidak memiliki makna praktis dalam konteks bisnis nyata.

Catatan: Interpretasi menggunakan HC3 Robust Standard Error karena asumsi homoskedastisitas tidak terpenuhi (Uji Breusch-Pagan, p < 0,05). Koefisien β tetap tidak bias, namun standard error tidak dapat dipercaya sehingga robust SE digunakan untuk validitas inferensi.


5 Kesimpulan

5.1 Analisis 1 — One-Way ANOVA

Berdasarkan Welch ANOVA (digunakan karena asumsi homogenitas varians tidak terpenuhi berdasarkan Uji Levene, p < 0,05), terdapat perbedaan rata-rata Profit yang signifikan antar wilayah pasar (p < 0,05), sehingga \(H_0\) ditolak.

Uji lanjutan Games-Howell mengidentifikasi bahwa:

  • Wilayah South memiliki rata-rata profit paling rendah dan berbeda signifikan dibandingkan Central dan East.
  • Wilayah Central, East, dan West tidak berbeda signifikan satu sama lain, sehingga ketiganya memiliki tingkat profitabilitas yang relatif setara.

Implikasi manajerial: Wilayah South perlu mendapat perhatian khusus dari manajemen, baik dari sisi evaluasi strategi harga, efisiensi operasional, maupun komposisi produk yang dijual, agar profitabilitasnya dapat ditingkatkan mendekati wilayah lain.

5.2 Analisis 2 — Regresi Linear Berganda

Model Profit ~ Sales + COGS + Marketing terbukti signifikan secara keseluruhan (Uji F, p < 0,001) dengan R² = 0.9595, artinya ketiga prediktor mampu menjelaskan sekitar 95.95% variasi Profit dalam data.

Secara parsial (Uji T dengan robust SE), seluruh prediktor berpengaruh signifikan (p < 0,001) dengan temuan utama:

Prediktor Arah Besar Pengaruh Signifikan
Sales ➕ Positif $1.19 per $1 kenaikan
COGS ➖ Negatif $1.20 per $1 kenaikan
Marketing ➖ Negatif $1.46 per $1 kenaikan

Implikasi manajerial: Strategi peningkatan profit paling efektif adalah mendorong pertumbuhan Sales sekaligus menekan COGS melalui efisiensi rantai pasok. Efektivitas pengeluaran Marketing perlu dievaluasi ulang karena belum terbukti berdampak positif langsung terhadap profit dalam periode data ini.

5.3 Keterbatasan Analisis

Beberapa asumsi statistik tidak sepenuhnya terpenuhi (heteroskedastisitas pada regresi, non-normalitas pada ANOVA), namun telah diatasi melalui penggunaan robust standard error dan Welch ANOVA. Dengan ukuran sampel n = 4.248, Central Limit Theorem menjamin validitas inferensi secara umum.