A. Pendahuluan

Latar Belakang

Ukuran pasar (market size) merupakan salah satu dimensi penting dalam pengelolaan bisnis ritel. Perusahaan yang beroperasi di berbagai skala pasar perlu memahami apakah perbedaan ukuran pasar tersebut secara nyata berkontribusi terhadap perbedaan performa bisnis, khususnya dari sisi penjualan (Sales) dan keuntungan (Profit).

Dataset yang digunakan adalah Coffee Chain Datasets, yang mencatat data transaksi penjualan berbagai produk minuman di berbagai wilayah Amerika Serikat pada periode Januari hingga Juni 2012. Dataset ini membagi wilayah pemasaran ke dalam dua kategori, yaitu Major Market dan Small Market.

Tujuan Analisis

  1. Mendeskripsikan karakteristik distribusi Sales dan Profit pada masing-masing kelompok Market Size.
  2. Menguji secara statistik perbedaan rata-rata Sales dan Profit antar kelompok menggunakan ANOVA.

B. Metode

One-Way ANOVA

Analysis of Variance (ANOVA) satu arah adalah metode statistik untuk menguji apakah terdapat perbedaan rata-rata yang signifikan di antara dua atau lebih kelompok independen. ANOVA bekerja dengan membandingkan variansi antar kelompok terhadap variansi dalam kelompok. Apabila variansi antar kelompok jauh lebih besar, maka perbedaan rata-rata antar kelompok kemungkinan bukan terjadi secara kebetulan.

Asumsi ANOVA

ANOVA mensyaratkan tiga asumsi utama:

  1. Normalitas: data dalam setiap kelompok mengikuti distribusi normal, diuji dengan Shapiro-Wilk test.
  2. Homogenitas varians: varians antar kelompok bersifat homogen, diuji dengan Levene’s test.
  3. Independensi: setiap observasi bersifat independen.

Apabila asumsi tidak terpenuhi, digunakan pendekatan alternatif:

  • Welch ANOVA — robust terhadap heterogenitas varians.
  • Kruskal-Wallis test — uji non-parametrik yang tidak mengasumsikan distribusi normal.

Taraf signifikansi yang digunakan pada seluruh pengujian adalah α = 0,05.


C. Persiapan Data

Instalasi dan Pemuatan Paket

library(readxl)
library(ggplot2)
library(dplyr)
library(car)

Import dan Eksplorasi Data

df <- read_excel("D:\\angelaamasayu\\Sistem Informasi Manajemen\\1. Tugas SIM 2025B - Coffee Chain Datasets.xlsx", sheet = "data")

colnames(df) <- gsub(" ", "_", colnames(df))
df$Market_Size <- as.factor(df$Market_Size)
df$Date        <- as.Date(df$Date)

head(df[, c("Date", "Market", "Market_Size", "Product_Type", "Sales", "Profit")])
## # A tibble: 6 × 6
##   Date       Market  Market_Size  Product_Type Sales Profit
##   <date>     <chr>   <fct>        <chr>        <dbl>  <dbl>
## 1 2012-01-01 Central Major Market Coffee         219     94
## 2 2012-01-01 Central Major Market Coffee         190     68
## 3 2012-01-01 Central Major Market Coffee         234    101
## 4 2012-01-01 Central Major Market Tea            100     30
## 5 2012-01-01 Central Major Market Espresso       134     54
## 6 2012-01-01 Central Major Market Espresso       180     53
cat("Dimensi dataset:", nrow(df), "baris x", ncol(df), "kolom\n\n")
## Dimensi dataset: 4248 baris x 20 kolom
cat("Jumlah observasi per Market Size:\n")
## Jumlah observasi per Market Size:
print(table(df$Market_Size))
## 
## Major Market Small Market 
##         1704         2544
cat("\nMissing values pada variabel analisis:\n")
## 
## Missing values pada variabel analisis:
print(colSums(is.na(df[, c("Market_Size", "Sales", "Profit")])))
## Market_Size       Sales      Profit 
##           0           0           0

Dataset terdiri dari 4248 observasi dengan dua kategori Market Size: Major Market (n = 1704) dan Small Market (n = 2544). Tidak ditemukan missing values pada variabel yang digunakan.


D. Statistik Deskriptif

desc_major_sales  <- df %>% filter(Market_Size == "Major Market") %>% pull(Sales)
desc_small_sales  <- df %>% filter(Market_Size == "Small Market") %>% pull(Sales)
desc_major_profit <- df %>% filter(Market_Size == "Major Market") %>% pull(Profit)
desc_small_profit <- df %>% filter(Market_Size == "Small Market") %>% pull(Profit)

cat("=== Statistik Deskriptif: Sales ===\n")
## === Statistik Deskriptif: Sales ===
cat("Major Market  — Mean:", round(mean(desc_major_sales), 2),
    "| SD:", round(sd(desc_major_sales), 2),
    "| Median:", round(median(desc_major_sales), 2), "\n")
## Major Market  — Mean: 249.5 | SD: 174.51 | Median: 199
cat("Small Market  — Mean:", round(mean(desc_small_sales), 2),
    "| SD:", round(sd(desc_small_sales), 2),
    "| Median:", round(median(desc_small_sales), 2), "\n\n")
## Small Market  — Mean: 155.14 | SD: 119.07 | Median: 122
cat("=== Statistik Deskriptif: Profit ===\n")
## === Statistik Deskriptif: Profit ===
cat("Major Market  — Mean:", round(mean(desc_major_profit), 2),
    "| SD:", round(sd(desc_major_profit), 2),
    "| Median:", round(median(desc_major_profit), 2), "\n")
## Major Market  — Mean: 91.39 | SD: 124.28 | Median: 73
cat("Small Market  — Mean:", round(mean(desc_small_profit), 2),
    "| SD:", round(sd(desc_small_profit), 2),
    "| Median:", round(median(desc_small_profit), 2), "\n")
## Small Market  — Mean: 40.8 | SD: 76.85 | Median: 31

Kelompok Major Market memiliki rata-rata Sales (M = 249.5; SD = 174.51) yang lebih tinggi dibandingkan Small Market (M = 155.14; SD = 119.07). Pola serupa terlihat pada Profit, di mana Major Market (M = 91.39; SD = 124.28) menunjukkan keuntungan rata-rata yang lebih besar daripada Small Market (M = 40.8; SD = 76.85).


E. Visualisasi Data

Bar Chart: Rata-rata Sales dan Profit per Market Size

df_mean <- df %>%
  group_by(Market_Size) %>%
  summarise(
    Mean_Sales  = mean(Sales),
    Mean_Profit = mean(Profit)
  )

# Bar chart Sales
p1 <- ggplot(df_mean, aes(x = Market_Size, y = Mean_Sales, fill = Market_Size)) +
  geom_bar(stat = "identity", width = 0.5) +
  geom_text(aes(label = round(Mean_Sales, 1)), vjust = -0.5, size = 4) +
  scale_fill_manual(values = c("Major Market" = "#4E79A7", "Small Market" = "#F28E2B")) +
  labs(
    title = "Rata-rata Sales per Market Size",
    x     = "Market Size",
    y     = "Rata-rata Sales",
    caption = "Sumber: Coffee Chain Datasets (2012)"
  ) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "none",
        plot.title = element_text(face = "bold"))

# Bar chart Profit
p2 <- ggplot(df_mean, aes(x = Market_Size, y = Mean_Profit, fill = Market_Size)) +
  geom_bar(stat = "identity", width = 0.5) +
  geom_text(aes(label = round(Mean_Profit, 1)), vjust = -0.5, size = 4) +
  scale_fill_manual(values = c("Major Market" = "#59A14F", "Small Market" = "#E15759")) +
  labs(
    title = "Rata-rata Profit per Market Size",
    x     = "Market Size",
    y     = "Rata-rata Profit",
    caption = "Sumber: Coffee Chain Datasets (2012)"
  ) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "none",
        plot.title = element_text(face = "bold"))

gridExtra::grid.arrange(p1, p2, ncol = 2)
Gambar 1. Rata-rata Sales dan Profit per Market Size

Gambar 1. Rata-rata Sales dan Profit per Market Size

Histogram: Distribusi Sales dan Profit per Market Size

# Histogram Sales
h1 <- ggplot(df, aes(x = Sales, fill = Market_Size)) +
  geom_histogram(bins = 30, alpha = 0.7, position = "identity", color = "white") +
  scale_fill_manual(values = c("Major Market" = "#4E79A7", "Small Market" = "#F28E2B")) +
  labs(
    title   = "Distribusi Sales per Market Size",
    x       = "Sales",
    y       = "Frekuensi",
    fill    = "Market Size",
    caption = "Sumber: Coffee Chain Datasets (2012)"
  ) +
  theme_minimal(base_size = 13) +
  theme(plot.title = element_text(face = "bold"))

# Histogram Profit
h2 <- ggplot(df, aes(x = Profit, fill = Market_Size)) +
  geom_histogram(bins = 30, alpha = 0.7, position = "identity", color = "white") +
  scale_fill_manual(values = c("Major Market" = "#59A14F", "Small Market" = "#E15759")) +
  labs(
    title   = "Distribusi Profit per Market Size",
    x       = "Profit",
    y       = "Frekuensi",
    fill    = "Market Size",
    caption = "Sumber: Coffee Chain Datasets (2012)"
  ) +
  theme_minimal(base_size = 13) +
  theme(plot.title = element_text(face = "bold"))

gridExtra::grid.arrange(h1, h2, ncol = 2)
Gambar 2. Histogram Distribusi Sales dan Profit per Market Size

Gambar 2. Histogram Distribusi Sales dan Profit per Market Size

Scatter Plot: Hubungan Sales dan Profit

ggplot(df, aes(x = Sales, y = Profit, color = Market_Size)) +
  geom_point(alpha = 0.4, size = 1.8) +
  geom_smooth(method = "lm", se = TRUE, linewidth = 1) +
  scale_color_manual(values = c("Major Market" = "#4E79A7", "Small Market" = "#F28E2B")) +
  labs(
    title   = "Hubungan Sales dan Profit berdasarkan Market Size",
    subtitle = "Garis menunjukkan tren regresi linear per kelompok",
    x       = "Sales",
    y       = "Profit",
    color   = "Market Size",
    caption = "Sumber: Coffee Chain Datasets (2012)"
  ) +
  theme_minimal(base_size = 13) +
  theme(plot.title    = element_text(face = "bold"),
        plot.subtitle = element_text(color = "gray50", size = 10))
Gambar 3. Scatter Plot Sales vs Profit berdasarkan Market Size

Gambar 3. Scatter Plot Sales vs Profit berdasarkan Market Size

Dari histogram terlihat bahwa distribusi Sales dan Profit pada Major Market memiliki sebaran yang lebih lebar dan menjulur ke kanan dibandingkan Small Market. Bar chart mengonfirmasi bahwa rata-rata Sales maupun Profit pada Major Market lebih tinggi. Scatter plot menunjukkan hubungan positif antara Sales dan Profit di kedua kelompok, dengan tren yang lebih curam pada Major Market, mengindikasikan bahwa peningkatan penjualan menghasilkan keuntungan yang lebih besar secara proporsional pada pasar besar.


F. Uji Asumsi ANOVA

Uji Normalitas (Shapiro-Wilk)

Sebelum melakukan uji ANOVA, perlu dipastikan bahwa data pada masing-masing kelompok berdistribusi normal. Uji Shapiro-Wilk digunakan untuk menguji asumsi ini dengan hipotesis sebagai berikut:

Hipotesis (Sales):

  • H₀: Data Sales pada masing-masing kelompok Market Size berdistribusi normal
  • H₁: Data Sales pada masing-masing kelompok Market Size tidak berdistribusi normal

Hipotesis (Profit):

  • H₀: Data Profit pada masing-masing kelompok Market Size berdistribusi normal
  • H₁: Data Profit pada masing-masing kelompok Market Size tidak berdistribusi normal

Taraf signifikansi: α = 0,05. H₀ ditolak apabila p-value < 0,05.

cat("=== Uji Shapiro-Wilk: Sales — Major Market ===\n")
## === Uji Shapiro-Wilk: Sales — Major Market ===
sw_sales_major <- shapiro.test(df$Sales[df$Market_Size == "Major Market"])
print(sw_sales_major)
## 
##  Shapiro-Wilk normality test
## 
## data:  df$Sales[df$Market_Size == "Major Market"]
## W = 0.84196, p-value < 2.2e-16
cat("\n=== Uji Shapiro-Wilk: Sales — Small Market ===\n")
## 
## === Uji Shapiro-Wilk: Sales — Small Market ===
sw_sales_small <- shapiro.test(df$Sales[df$Market_Size == "Small Market"])
print(sw_sales_small)
## 
##  Shapiro-Wilk normality test
## 
## data:  df$Sales[df$Market_Size == "Small Market"]
## W = 0.75389, p-value < 2.2e-16
cat("\n=== Uji Shapiro-Wilk: Profit — Major Market ===\n")
## 
## === Uji Shapiro-Wilk: Profit — Major Market ===
sw_profit_major <- shapiro.test(df$Profit[df$Market_Size == "Major Market"])
print(sw_profit_major)
## 
##  Shapiro-Wilk normality test
## 
## data:  df$Profit[df$Market_Size == "Major Market"]
## W = 0.89157, p-value < 2.2e-16
cat("\n=== Uji Shapiro-Wilk: Profit — Small Market ===\n")
## 
## === Uji Shapiro-Wilk: Profit — Small Market ===
sw_profit_small <- shapiro.test(df$Profit[df$Market_Size == "Small Market"])
print(sw_profit_small)
## 
##  Shapiro-Wilk normality test
## 
## data:  df$Profit[df$Market_Size == "Small Market"]
## W = 0.68676, p-value < 2.2e-16

Hasil uji Shapiro-Wilk menunjukkan bahwa p-value untuk Sales pada Major Market = 0 dan Small Market = 0, sedangkan untuk Profit pada Major Market = 0 dan Small Market = 0. Seluruh p-value < 0,05 sehingga H₀ ditolak — data tidak memenuhi asumsi normalitas. Dengan ukuran sampel yang besar (n_Major = 1704; n_Small = 2544), ANOVA tetap robust berdasarkan prinsip Central Limit Theorem. Uji Kruskal-Wallis dijalankan sebagai konfirmasi non-parametrik.

Uji Homogenitas Varians (Levene’s Test)

Selanjutnya diuji apakah varians antar kelompok bersifat homogen menggunakan Levene’s Test, dengan hipotesis sebagai berikut:

Hipotesis (Sales):

  • H₀: Varians Sales antar kelompok Market Size adalah homogen (σ²₁ = σ²₂)
  • H₁: Varians Sales antar kelompok Market Size tidak homogen (σ²₁ ≠ σ²₂)

Hipotesis (Profit):

  • H₀: Varians Profit antar kelompok Market Size adalah homogen (σ²₁ = σ²₂)
  • H₁: Varians Profit antar kelompok Market Size tidak homogen (σ²₁ ≠ σ²₂)

Taraf signifikansi: α = 0,05. H₀ ditolak apabila p-value < 0,05.

cat("=== Levene's Test: Sales ~ Market_Size ===\n")
## === Levene's Test: Sales ~ Market_Size ===
lev_sales <- leveneTest(Sales ~ Market_Size, data = df)
print(lev_sales)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    1  197.23 < 2.2e-16 ***
##       4246                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
cat("\n=== Levene's Test: Profit ~ Market_Size ===\n")
## 
## === Levene's Test: Profit ~ Market_Size ===
lev_profit <- leveneTest(Profit ~ Market_Size, data = df)
print(lev_profit)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    1   288.2 < 2.2e-16 ***
##       4246                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil Levene’s Test menunjukkan p-value untuk Sales = 0 dan untuk Profit = 0. Keduanya < 0,05 sehingga H₀ ditolak — asumsi homogenitas varians tidak terpenuhi. Oleh karena itu, Welch ANOVA digunakan sebagai pendekatan utama yang robust terhadap heterogenitas varians.


G. Analisis ANOVA

One-Way ANOVA Klasik

Sebelum Welch ANOVA, terlebih dahulu dijalankan One-Way ANOVA klasik sebagai pembanding. Hipotesis yang diuji adalah:

Hipotesis (Sales):

  • H₀: Tidak terdapat perbedaan rata-rata Sales yang signifikan antara Major Market dan Small Market (μ₁ = μ₂)
  • H₁: Terdapat perbedaan rata-rata Sales yang signifikan antara Major Market dan Small Market (μ₁ ≠ μ₂)

Hipotesis (Profit):

  • H₀: Tidak terdapat perbedaan rata-rata Profit yang signifikan antara Major Market dan Small Market (μ₁ = μ₂)
  • H₁: Terdapat perbedaan rata-rata Profit yang signifikan antara Major Market dan Small Market (μ₁ ≠ μ₂)

Taraf signifikansi: α = 0,05.

cat("=== One-Way ANOVA: Sales ~ Market_Size ===\n")
## === One-Way ANOVA: Sales ~ Market_Size ===
anova_sales <- aov(Sales ~ Market_Size, data = df)
summary(anova_sales)
##               Df   Sum Sq Mean Sq F value Pr(>F)    
## Market_Size    1  9085787 9085787   438.8 <2e-16 ***
## Residuals   4246 87920884   20707                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
cat("\n=== One-Way ANOVA: Profit ~ Market_Size ===\n")
## 
## === One-Way ANOVA: Profit ~ Market_Size ===
anova_profit <- aov(Profit ~ Market_Size, data = df)
summary(anova_profit)
##               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

Welch ANOVA

Karena asumsi homogenitas varians tidak terpenuhi, Welch ANOVA digunakan sebagai pendekatan utama. Hipotesis yang diuji sama dengan One-Way ANOVA klasik di atas.

cat("=== Welch ANOVA: Sales ~ Market_Size ===\n")
## === Welch ANOVA: Sales ~ Market_Size ===
welch_sales <- oneway.test(Sales ~ Market_Size, data = df, var.equal = FALSE)
print(welch_sales)
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  Sales and Market_Size
## F = 379.75, num df = 1.0, denom df = 2751.5, p-value < 2.2e-16
cat("\n=== Welch ANOVA: Profit ~ Market_Size ===\n")
## 
## === Welch ANOVA: Profit ~ Market_Size ===
welch_profit <- oneway.test(Profit ~ Market_Size, data = df, var.equal = FALSE)
print(welch_profit)
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  Profit and Market_Size
## F = 224.79, num df = 1.0, denom df = 2574.1, p-value < 2.2e-16

Uji Kruskal-Wallis

Sebagai konfirmasi non-parametrik (karena asumsi normalitas tidak terpenuhi), dijalankan pula uji Kruskal-Wallis dengan hipotesis sebagai berikut:

Hipotesis (Sales):

  • H₀: Distribusi Sales adalah sama di semua kelompok Market Size
  • H₁: Distribusi Sales tidak sama di semua kelompok Market Size

Hipotesis (Profit):

  • H₀: Distribusi Profit adalah sama di semua kelompok Market Size
  • H₁: Distribusi Profit tidak sama di semua kelompok Market Size

Taraf signifikansi: α = 0,05.

cat("=== Kruskal-Wallis: Sales ~ Market_Size ===\n")
## === Kruskal-Wallis: Sales ~ Market_Size ===
kw_sales <- kruskal.test(Sales ~ Market_Size, data = df)
print(kw_sales)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  Sales by Market_Size
## Kruskal-Wallis chi-squared = 500.84, df = 1, p-value < 2.2e-16
cat("\n=== Kruskal-Wallis: Profit ~ Market_Size ===\n")
## 
## === Kruskal-Wallis: Profit ~ Market_Size ===
kw_profit <- kruskal.test(Profit ~ Market_Size, data = df)
print(kw_profit)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  Profit by Market_Size
## Kruskal-Wallis chi-squared = 424.94, df = 1, p-value < 2.2e-16

H. Interpretasi dan Kesimpulan

Interpretasi Hasil

Berdasarkan hasil seluruh pengujian yang telah dilakukan, berikut ringkasan temuan untuk masing-masing variabel:

Variabel Sales:

  • Welch ANOVA menghasilkan F = 379.746 dengan p-value = 2.48e-79. Karena p-value < 0,05, H₀ ditolak.
  • Uji Kruskal-Wallis menghasilkan H = 500.837 dengan p-value = 6.25e-111. Karena p-value < 0,05, H₀ ditolak.
  • Kesimpulan: Terdapat perbedaan rata-rata Sales yang signifikan secara statistik antara Major Market (M = 249.5) dan Small Market (M = 155.14).

Variabel Profit:

  • Welch ANOVA menghasilkan F = 224.792 dengan p-value = 8.8e-49. Karena p-value < 0,05, H₀ ditolak.
  • Uji Kruskal-Wallis menghasilkan H = 424.942 dengan p-value = 2.05e-94. Karena p-value < 0,05, H₀ ditolak.
  • Kesimpulan: Terdapat perbedaan rata-rata Profit yang signifikan secara statistik antara Major Market (M = 91.39) dan Small Market (M = 40.8).

Konsistensi hasil antara One-Way ANOVA, Welch ANOVA, dan Kruskal-Wallis memperkuat keyakinan bahwa perbedaan yang ditemukan bukan merupakan artefak dari pelanggaran asumsi.

Kesimpulan

  1. Terdapat perbedaan rata-rata Sales yang signifikan antara kelompok Major Market (M = 249.5) dan Small Market (M = 155.14), dengan p < 0,05 pada seluruh pendekatan uji.
  2. Terdapat perbedaan rata-rata Profit yang signifikan antara kedua kelompok, di mana Major Market (M = 91.39) menghasilkan keuntungan rata-rata lebih dari dua kali lipat Small Market (M = 40.8).
  3. Temuan ini mengindikasikan bahwa Market Size merupakan faktor yang berpengaruh nyata terhadap performa penjualan dan keuntungan pada Coffee Chain. ```