LOAD PACKAGES

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(corrplot)
## corrplot 0.95 loaded
library(car)
## Warning: package 'car' was built under R version 4.5.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.3
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
library(ggplot2)
library(FSA)
## Warning: package 'FSA' was built under R version 4.5.3
## Registered S3 methods overwritten by 'FSA':
##   method       from
##   confint.boot car 
##   hist.boot    car 
## ## FSA v0.10.1. See citation('FSA') if used in publication.
## ## Run fishR() for related website and fishR('IFAR') for related book.
## 
## Attaching package: 'FSA'
## 
## The following object is masked from 'package:car':
## 
##     bootCase
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.5.3
## 
## Attaching package: 'DescTools'
## 
## The following object is masked from 'package:car':
## 
##     Recode
library(readxl)

IMPORT DATA

data <- read_xlsx("D:/SIM/Coffee Chain Datasets.xlsx")

EKSPLORASI DATA

Lihat struktur data

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 ...
dim(data)
## [1] 4248   20
sapply(data, class)
## $`Area Code`
## [1] "numeric"
## 
## $Date
## [1] "POSIXct" "POSIXt" 
## 
## $Market
## [1] "character"
## 
## $`Market Size`
## [1] "character"
## 
## $Product
## [1] "character"
## 
## $`Product Line`
## [1] "character"
## 
## $`Product Type`
## [1] "character"
## 
## $State
## [1] "character"
## 
## $Type
## [1] "character"
## 
## $`Budget COGS`
## [1] "numeric"
## 
## $`Budget Margin`
## [1] "numeric"
## 
## $`Budget Profit`
## [1] "numeric"
## 
## $`Budget Sales`
## [1] "numeric"
## 
## $COGS
## [1] "numeric"
## 
## $Inventory
## [1] "numeric"
## 
## $Margin
## [1] "numeric"
## 
## $Marketing
## [1] "numeric"
## 
## $Profit
## [1] "numeric"
## 
## $Sales
## [1] "numeric"
## 
## $`Total Expenses`
## [1] "numeric"

Jumlah unique tiap variabel

sapply(data, function(x) length(unique(x)))
##      Area Code           Date         Market    Market Size        Product 
##            156             24              4              2             13 
##   Product Line   Product Type          State           Type    Budget COGS 
##              2              4             20              2             41 
##  Budget Margin  Budget Profit   Budget Sales           COGS      Inventory 
##             76             76             89            173            610 
##         Margin      Marketing         Profit          Sales Total Expenses 
##            290            102            466            432            156

Jumlah missing value tiap variabel

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

Jumlah duplikat data

sum(duplicated(data))
## [1] 0

Summary data

summary(data)
##    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  
##  Min.   : 10.00  
##  1st Qu.: 33.00  
##  Median : 46.00  
##  Mean   : 54.06  
##  3rd Qu.: 65.00  
##  Max.   :190.00

Rata-rata tiap variabel untuk variabel numerik

Dengan rumus rata-rata sebagai berikut : \[ \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i \]

data_numeric <- data[sapply(data, is.numeric)]

colMeans(data_numeric, na.rm = TRUE)
##      Area Code    Budget COGS  Budget Margin  Budget Profit   Budget Sales 
##      582.27801       74.83051      100.81921       60.91337      175.64972 
##           COGS      Inventory         Margin      Marketing         Profit 
##       84.43315      749.38136      104.29331       31.18503       61.09769 
##          Sales Total Expenses 
##      192.98752       54.06356

Variasi tiap variabel untuk variabel numerik

Dengan rumus variasi sebagai berikut : \[ s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2 \]

apply(data_numeric, 2, var, na.rm = TRUE)
##      Area Code    Budget COGS  Budget Margin  Budget Profit   Budget Sales 
##     48903.0367      4387.4919      8575.2647      6327.5856     22168.6854 
##           COGS      Inventory         Margin      Marketing         Profit 
##      4522.5314    436963.1670      8900.5115       730.2568     10344.6283 
##          Sales Total Expenses 
##     22841.2221      1046.6906

Standar deviasi tiap variabel untuk variabel numerik

Dengan rumus standar deviasi sebagai berikut : \[ s = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2} \]

apply(data_numeric, 2, sd, na.rm = TRUE)
##      Area Code    Budget COGS  Budget Margin  Budget Profit   Budget Sales 
##      221.14031       66.23815       92.60273       79.54612      148.89152 
##           COGS      Inventory         Margin      Marketing         Profit 
##       67.24977      661.03190       94.34252       27.02326      101.70855 
##          Sales Total Expenses 
##      151.13313       32.35260

Tren Profit Bulanan

data %>%
  mutate(Date = as.Date(Date)) %>%
  mutate(Month = floor_date(Date, "month")) %>%
  group_by(Month) %>%
  summarise(Total_Profit = sum(Profit, na.rm = TRUE)) %>%
  ggplot(aes(x = Month, y = Total_Profit)) +
  geom_line(color = "#734", linewidth = 1.2) +
  labs(title = "Tren Profit Bulanan",
       x = "Bulan",
       y = "Total Profit (USD)") +
  theme_minimal()

Berdasarkan grafik tren profit bulanan tersebut, dapat disimpulkan bahwa secara keseluruhan profit bulanan menunjukkan tren meningkat positif, terutama setelah awal tahun 2013. Meskipun terdapat fluktuasi pada beberapa bulan, perusahaan mampu mempertahankan profit pada level yang lebih tinggi dibandingkan tahun sebelumnya. Hal ini menunjukkan bahwa kinerja bisnis coffee chain mengalami perbaikan yang signifikan dari waktu ke waktu, sehingga analisis penting untuk dilakukan dalam evaluasi kinerja bisnis.

HASIL DAN PEMBAHASAN

CASE 1

Ingin dibandingkan apakah terdapat perbedaan profit antar market? Jika iya, pasangan market mana yang terdapat perbedaan secara signifikan.

Sebelum menguji lebih lanjut, dilakukan uji normalitas terlebih dahulu menggunakan uji Shapiro-Wilk.

\[ W = \frac{\left( \sum_{i=1}^{n} a_i x_{(i)} \right)^2}{\sum_{i=1}^{n} (x_i - \bar{x})^2} \]

H0 : Data berdistribusi normal H1 : Data tidak berdistribusi normal Dengan menggunakan taraf signifikansi atau \[alpha = 0.05\] Kriteria keputusan : H0 ditolak jika p-value < 0.05.

Normalitas secara keseluruhan

shapiro.test(
  data$Profit
)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Profit
## W = 0.79969, p-value < 2.2e-16

Normalitas per kelompok market

by(
  data$Profit,
  data$Market,
  shapiro.test
)
## data$Market: Central
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.87449, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## data$Market: East
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.7932, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## data$Market: South
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.85775, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## data$Market: West
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.80573, p-value < 2.2e-16

Hasil kedua uji Shapiro-Wilk menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti data tidak berdistribusi normal.

Karena asumsi data tidak berdistribusi normal, maka uji dapat dilanjutkan dengan menggunakan uji Kruskal-Wallis.

\[ H = \frac{12}{N(N+1)} \sum_{i=1}^{k} \frac{R_i^2}{n_i} - 3(N+1) \]

H0 : Tidak terdapat perbedaan rata-rata profit antar market H1 : Terdapat minimal satu perbedaan profit antar market Dengan menggunakan taraf signifikansi atau \[alpha = 0.05\] Kriteria keputusan : H0 ditolak jika p-value < 0.05.

kruskal.test(
  Profit ~ Market,
  data = data
)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  Profit by Market
## Kruskal-Wallis chi-squared = 26.504, df = 3, p-value = 7.48e-06

Hasil uji Kruskal-Wallis menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti terdapat perbedaan profit antar market.

Karena terdapat perbedaan profit antar market, selanjutnya ingin diketahui pasangan kelompok mana yang berbeda signifikan. Uji yang digunakan yaitu Uji Dunn Test.

\[ Z = \frac{\bar{R}_i - \bar{R}_j} {\sqrt{ \frac{N(N+1)}{12} \left( \frac{1}{n_i} + \frac{1}{n_j} \right) }} \]

H0 : Tidak terdapat perbedaan median profit antar dua kelompok yang dibandingkan H1 : Terdapat perbedaan median profit antar dua kelompok yang dibandingkan. Dengan menggunakan taraf signifikansi atau \[alpha = 0.05\] Kriteria keputusan : H0 ditolak jika P.adj < 0.05.

dunnTest(
  Profit ~ Market,
  data = data,
  method = "bonferroni"
)
## Warning: Market was coerced to a factor.
##   Kruskal-Wallis rank sum test
## 
## data: x and g
## Kruskal-Wallis chi-squared = 26.504, df = 3, p-value = 0
## 
## 
##                      Dunn's Pairwise Comparison of x by g                     
##                                  (Bonferroni)                                 
## Col Mean-│
## Row Mean │    Central       East      South
## ─────────┼─────────────────────────────────
##     East │   2.597291
##          │     0.0564 
##          │
##    South │   5.039142   2.459558
##          │     0.0000*    0.0835 
##          │
##     West │   2.886597  -0.022390  -2.682245
##          │     0.0234*    1.0000     0.0439*
## 
## α = 0.05
## Reject Ho if p ≤ α, where p = Pr(|Z| ≥ |z|)
## Dunn (1964) Kruskal-Wallis multiple comparison
## 
##   p-values adjusted with the Bonferroni method.
##        Comparison           Z      P.unadj        P.adj
## 1  Central - East  2.59729187 9.396205e-03 5.637723e-02
## 2 Central - South  5.03914244 4.676224e-07 2.805734e-06
## 3    East - South  2.45955873 1.391079e-02 8.346476e-02
## 4  Central - West  2.88659786 3.894316e-03 2.336590e-02
## 5     East - West -0.02239007 9.821368e-01 1.000000e+00
## 6    South - West -2.68224516 7.312985e-03 4.387791e-02

Uji lanjut Dunn Test menunjukkan bahwa perbedaan median profit yang signifikan terjadi antara market East-West dan market South-West

CASE 2

Ingin dibandingkan apakah terdapat perbedaan budget dan realisasi pada variabel profit, sales, margin, dan COGS?

Sebelum menguji lebih lanjut, dilakukan uji normalitas terlebih dahulu menggunakan uji Shapiro-Wilk.

\[ W = \frac{\left( \sum_{i=1}^{n} a_i x_{(i)} \right)^2}{\sum_{i=1}^{n} (x_i - \bar{x})^2} \]

H0 : Selisih data berdistribusi normal H1 : Selisih data tidak berdistribusi normal Dengan menggunakan taraf signifikansi atau \[alpha = 0.05\] Kriteria keputusan : H0 ditolak jika p-value < 0.05.

Normalitas selisih profit

selisih_profit <-
  data$"Profit" -
  data$"Budget Profit"

shapiro.test(selisih_profit)
## 
##  Shapiro-Wilk normality test
## 
## data:  selisih_profit
## W = 0.7795, p-value < 2.2e-16

Hasil uji Shapiro-Wilk menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti selisih data profit tidak berdistribusi normal.

Normalitas selisih sales

selisih_sales <-
  data$"Sales" -
  data$"Budget Sales"

shapiro.test(selisih_sales)
## 
##  Shapiro-Wilk normality test
## 
## data:  selisih_sales
## W = 0.85945, p-value < 2.2e-16

Hasil uji Shapiro-Wilk menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti selisih data sales tidak berdistribusi normal.

Normalitas selisih margin

selisih_margin <-
  data$"Margin" -
  data$"Budget Margin"

shapiro.test(selisih_margin)
## 
##  Shapiro-Wilk normality test
## 
## data:  selisih_margin
## W = 0.84021, p-value < 2.2e-16

Hasil uji Shapiro-Wilk menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti selisih data margin tidak berdistribusi normal.

Normalitas selisih COGS

selisih_cogs <-
  data$"COGS" -
  data$"Budget COGS"

shapiro.test(selisih_cogs)
## 
##  Shapiro-Wilk normality test
## 
## data:  selisih_cogs
## W = 0.85357, p-value < 2.2e-16

Hasil uji Shapiro-Wilk menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti selisih data COGS tidak berdistribusi normal.

Karena asumsi selisih keempat variabel tidak berdistribusi normal, maka uji dapat dilanjutkan dengan menggunakan uji Wilcoxon Signed Rank Test.

\[ W = \sum R_i \] H0 : Tidak terdapat perbedaan antara budget dan realisasi H1 : Terdapat perbedaan antara budget dan realisasi Dengan menggunakan taraf signifikansi atau \[alpha = 0.05\] Kriteria keputusan : H0 ditolak jika p-value < 0.05.

Budget vs realisasi profit

wilcox.test(
  data$"Profit",
  data
  $"Budget Profit",
  paired = TRUE
)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  data$Profit and data$"Budget Profit"
## V = 3739475, p-value = 2.192e-14
## alternative hypothesis: true location shift is not equal to 0

Hasil uji Wilcoxon Signed Rank menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti terdapat perbedaan antara budget dan realisasi profit

Budget vs realisasi sales

wilcox.test(
  data$"Sales",
  data
  $"Budget Sales",
  paired = TRUE
)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  data$Sales and data$"Budget Sales"
## V = 6894767, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

Hasil uji Wilcoxon Signed Rank menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti terdapat perbedaan antara budget dan realisasi sales.

Budget vs realisasi margin

wilcox.test(
  data$"Margin",
  data
  $"Budget Margin",
  paired = TRUE
)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  data$Margin and data$"Budget Margin"
## V = 5491743, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

Hasil uji Wilcoxon Signed Rank menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti terdapat perbedaan antara budget dan realisasi margin.

Budget vs realisasi COGS

wilcox.test(
  data$"COGS",
  data
  $"Budget COGS",
  paired = TRUE
)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  data$COGS and data$"Budget COGS"
## V = 6918364, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

Hasil uji Wilcoxon Signed Rank menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti terdapat perbedaan antara budget dan realisasi COGS.

Berdasarkan keempat uji diatas, didapatkan hasil bahwa terdapat perbedaan antara budget dan realisasi dari keempat variabel yaitu profit, sales, margin, dan COGS. Selanjutnya akan ditinjau apakah perbedaan tersebut termasuk ke dalam top perform atau under perform. Jika selisih budget vs realisasi > 0, maka diklasifikasikan ke dalam top perform, begitupun sebaliknya.

Klasifikasi top perfom & under perform

data <- data %>%
  mutate(

    Profit_Status =
      ifelse(
        selisih_profit > 0,
        "Top Perform",
        "Under Perform"
      ),

    Sales_Status =
      ifelse(
        selisih_sales > 0,
        "Top Perform",
        "Under Perform"
      ),

    Margin_Status =
      ifelse(
        selisih_margin > 0,
        "Top Perform",
        "Under Perform"
      ),

    COGS_Status =
      ifelse(
        selisih_cogs > 0,
        "Top Perform",
        "Under Perform"
      )
  )

Jumlah kategori top perform & under perform

cat("STATUS PROFIT :")
## STATUS PROFIT :
table(data$Profit_Status)
## 
##   Top Perform Under Perform 
##          1655          2593
cat("STATUS SALES :")
## STATUS SALES :
table(data$Sales_Status)
## 
##   Top Perform Under Perform 
##          3165          1083
cat("STATUS MARGIN :")
## STATUS MARGIN :
table(data$Margin_Status)
## 
##   Top Perform Under Perform 
##          2646          1602
cat("STATUS COGS :")
## STATUS COGS :
table(data$COGS_Status)
## 
##   Top Perform Under Perform 
##          3224          1024

Berdasarkan hasil diatas disimpulkan bahwa secara keseluruhan, perusahaan menunjukkan performa yang baik pada aspek Sales, Margin, dan COGS, namun masih perlu perhatian pada aspek Profit, karena mayoritas data masih berada pada kategori Under Perform. Kondisi ini mengindikasikan bahwa meskipun penjualan tinggi dan margin cukup baik, masih terdapat faktor lain yang memengaruhi rendahnya pencapaian profit, seperti beban operasional atau biaya tambahan lainnya.

CASE 3

Ingin dibandingkan apakah terdapat hubungan antara variabel market dengan variabel product_type? Jika iya, seberapa kuat hubungan keduanya?

Untuk menguji independensi, uji akan dilakukan dengan uji Pearson Chi-Square karena data berupa kategorik. \[ \chi^2 = \sum_{i=1}^{r} \sum_{j=1}^{c} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]

H0 : Tidak terdapat hubungan antara Market dan Product Type (independen) H1 : Terdapat hubungan antara Market dan Product Type (dependen) Dengan menggunakan taraf signifikansi atau \[alpha = 0.05\] Kriteria keputusan : H0 ditolak jika p-value < 0.05.

Tabel kontingensi variabel market dan product_type

table_market_product <- table(
  data$Market,
  data$`Product Type`
)

table_market_product
##          
##           Coffee Espresso Herbal Tea Tea
##   Central    384      288        336 336
##   East       168      240        216 264
##   South      192      288        192   0
##   West       312      360        312 360

Uji Pearson Chi-Square

chisq.test(
  table_market_product
)
## 
##  Pearson's Chi-squared test
## 
## data:  table_market_product
## X-squared = 291.66, df = 9, p-value < 2.2e-16

Hasil uji Pearson Chi-Squared menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti terdapat hubungan antara Market dan Product Type atau kedua variabel dependen.

Karena terdapat hubungan antara Market dan Product Type, selanjutnya ingin diketahui seberapa kuat hubungan keduanya. Uji yang digunakan yaitu Uji Cramer. \[ V = \sqrt{ \frac{\chi^2}{n(k - 1)} } \]

CramerV(
  table_market_product
)
## [1] 0.1512806

Berdasarkan hasil nilai Cramer’s V tersebut menunjukkan bahwa hubungan antara Market dan Product Type termasuk ke dalam hubungan kekuatan sedang.

Berikut adalah visualisasi dari Market dengan Product Type.

ggplot(
  data,
  aes(
    x = Market,
    fill = `Product Type`
  )
) +
  geom_bar(
    position = "fill"
  ) +
  ggtitle(
    "Proporsi Product Type pada Setiap Market"
  ) +
  ylab("Proporsi") +
  xlab("Market")

CASE 4

Ingin dibandingkan apakah terdapat hubungan antara variabel profit dengan variabel total expenses? Jika iya, seberapa kuat hubungan keduanya?

Sebelum menguji lebih lanjut, dilakukan uji normalitas terlebih dahulu menggunakan uji Shapiro-Wilk.

\[ W = \frac{\left( \sum_{i=1}^{n} a_i x_{(i)} \right)^2}{\sum_{i=1}^{n} (x_i - \bar{x})^2} \]

H0 : Data berdistribusi normal H1 : Data tidak berdistribusi normal Dengan menggunakan taraf signifikansi atau \[alpha = 0.05\] Kriteria keputusan : H0 ditolak jika p-value < 0.05.

Normalitas untuk profit

shapiro.test(
  data$Profit
)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Profit
## W = 0.79969, p-value < 2.2e-16

Normalitas untuk total expenses

shapiro.test(
  data$`Total Expenses`
)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$`Total Expenses`
## W = 0.88605, p-value < 2.2e-16

Hasil kedua uji Shapiro-Wilk menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti data tidak berdistribusi normal.

Karena asumsi data tidak berdistribusi normal, maka dapat dilanjutkan dengan menggunakan Uji Spearman Correlation. \[ r_s = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)} \] H0 : Tidak terdapat hubungan antara Total Expenses dan Profit H1 : Terdapat hubungan antara Total Expenses dan Profit Dengan menggunakan taraf signifikansi atau \[alpha = 0.05\] Kriteria keputusan : H0 ditolak jika p-value < 0.05.

cor.test(
  data$`Total Expenses`,
  data$Profit,
  method = "spearman"
)
## Warning in cor.test.default(data$`Total Expenses`, data$Profit, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  data$`Total Expenses` and data$Profit
## S = 1.0678e+10, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.1641984

Hasil menunjukkan p-value < 0,05 sehingga H₀ ditolak, yang berarti terdapat hubungan antara Profit dan Total Expenses atau kedua variabel dependen. Diperoleh nilai rho sebesar 0,1642 yang menunjukkan hubungan tersebut bersifat positif namun lemah, yang menunjukkan bahwa peningkatan total expenses cenderung diikuti oleh peningkatan profit, meskipun pengaruhnya tidak terlalu kuat.

Berikut adalah visualisasi dari Total Expenses dengan Profit

ggplot(
  data,
  aes(
    x = `Total Expenses`,
    y = Profit
  )
) +
  geom_point() +
  geom_smooth(
    method = "lm",
    se = FALSE
  ) +
  ggtitle(
    "Trend Hubungan Total Expenses dan Profit"
  ) +
  xlab("Total Expenses") +
  ylab("Profit")
## `geom_smooth()` using formula = 'y ~ x'

KESIMPULAN

Secara keseluruhan, perusahaan menunjukkan performa yang cukup baik pada aspek penjualan, margin, dan biaya operasional, namun masih menghadapi tantangan dalam pencapaian profit sesuai target. Perbedaan performa antar market, hubungan antara market dan product type, serta pengaruh faktor operasional terhadap profit menjadi temuan penting yang dapat digunakan sebagai dasar dalam pengambilan keputusan strategis perusahaan. Oleh karena itu, perusahaan perlu melakukan evaluasi yang lebih mendalam terhadap strategi profitabilitas, efisiensi operasional, dan penyesuaian distribusi produk agar kinerja bisnis dapat semakin optimal di masa mendatang.