#Dataset Dataset: https://www.kaggle.com/datasets/CooperUnion/anime-recommendations-database?select=anime.csv

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(heplots)
## Loading required package: broom
## Warning in rgl.init(initValue, onlyNULL): RGL: unable to open X11 display
## Warning: 'rgl.init' failed, will use the null device.
## See '?rgl.useNULL' for ways to avoid this warning.
library(psych)
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
library(patchwork)
df <- read.csv("anime_clean.csv")

df_anime <- df %>%
  
  filter(type %in% c("TV", "Movie")) %>%
  filter(!is.na(rating) & !is.na(members)) %>%
  mutate(log_members = log10(members)) %>%
  mutate(type = as.factor(type)) %>%
  select(type, rating, log_members)
dvs <- df_anime %>% select(rating, log_members)
#Uji Normalitas Multivariat (Mardia's Test)
uji_mardia <- mardia(dvs, plot = FALSE)
print(uji_mardia)
## Call: mardia(x = dvs, plot = FALSE)
## 
## Mardia tests of multivariate skew and kurtosis
## Use describe(x) the to get univariate tests
## n.obs = 5866   num.vars =  2 
## b1p =  0.99   skew =  964.23  with probability  <=  2e-207
##  small sample skew =  965.06  with probability <=  1.3e-207
## b2p =  9.21   kurtosis =  11.57  with probability <=  0

Melihat apakah variabel dependen (rating dan log_members) secara bersama-sama memiliki distribusi normal multivariat. \(H_0\): Data berdistribusi normal multivariat. \(H_1\): Data tidak berdistribusi normal multivariat.

Didapat probabilitas (p-value) bernilai \(p < 0.05\). Ini berarti kita menolak \(H_0\) dan data diasumsikan tidak normal.

#B. Uji Homogenitas Matriks Kovarians (Box's M Test)
uji_boxm <- boxM(Y = dvs, group = df_anime$type)
print(uji_boxm)
## 
##  Box's M-test for Homogeneity of Covariance Matrices 
## 
## data:  dvs by df_anime$type 
## Chi-Sq (approx.) = 718.4303, df = 3, p-value = < 2.2e-16
summary(uji_boxm)
## 
##  Box's M-test for Homogeneity of Covariance Matrices 
## 
## data:  dvs by df_anime$type 
## 
## Chi-Sq (approx.) =  718.4303 
## df:   3 
## p-value: <2e-16 
## 
## log of Covariance determinants:
##    Movie       TV   pooled 
## -0.25427 -0.66663 -0.38268 
## 
## Eigenvalues:
##     Movie      TV  pooled
## 1 2.04268 1.63819 1.74497
## 2 0.37964 0.31342 0.39085
## 
## Statistics based on eigenvalues:
##             Movie      TV  pooled
## product   0.77549 0.51343 0.68203
## sum       2.42232 1.95160 2.13583
## precision 0.32014 0.26308 0.31933
## max       2.04268 1.63819 1.74497

Mengecek apakah varians dan kovarians dari rating dan log_members setara atau homogen di antara kelompok “TV” dan “Movie”

Hipotesis: \(H_0\): Matriks kovarians bersifat homogen (sama) antar grup. \(H_1\): Matriks kovarians tidak homogen antar grup.

Didapatkan hasil p-value menunjuk angka \(< 0.05\), maka \(H_0\) ditolak, artinya data tidak homogen.

#model MANOVA
model_manova <- manova(cbind(rating, log_members) ~ type, data = df_anime)

#Hasil dengan menyoroti Pillai's Trace
hasil_manova <- summary(model_manova, test = "Pillai")
print(hasil_manova)
##             Df  Pillai approx F num Df den Df    Pr(>F)    
## type         1 0.12296   411.01      2   5863 < 2.2e-16 ***
## Residuals 5864                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Uji ini melihat apakah secara keseluruhan terdapat perbedaan rata-rata (vektor mean) pada kombinasi variabel rating dan log_members berdasarkan tipe tayangannya (TV vs Movie)

Hipotesis: \(H_0\): Tidak ada perbedaan performa (kombinasi rating & members) antara tayangan TV dan Movie. \(H_1\): Terdapat perbedaan performa yang signifikan antara tayangan TV dan Movie.

Didapatkan P value = < 2.2e-16,karena dibawah 0.05 sehingga , maka kita menolak \(H_0\)

#Distribusi Rating
plot_rating <- ggplot(df, aes(x = type, y = rating, fill = type)) +
  geom_boxplot(alpha = 0.8) +
  scale_fill_manual(values = c("Movie" = "#E63946", "TV" = "#1D3557")) +
  labs(title = "Distribusi Rating",
       subtitle = "TV vs Movie",
       x = "Format Tayangan",
       y = "Rating") +
  theme_minimal() +
  theme(legend.position = "none",
        plot.title = element_text(face = "bold"))
print(plot_rating)

Plot Distribusi Rating: Memperlihatkan di mana rata-rata tengah (garis tebal di dalam kotak/median) dari rating TV dibandingkan Movie. Kotak juga menunjukkan seberapa menyebar nilai ratingnya.

#Distribusi Popularitas
plot_popularitas <- ggplot(df, aes(x = type, y = log_members, fill = type)) +
  geom_boxplot(alpha = 0.8) +
  scale_fill_manual(values = c("Movie" = "#E63946", "TV" = "#1D3557")) +
  labs(title = "Distribusi Popularitas",
       subtitle = "Skala Logaritma (Members)",
       x = "Format Tayangan",
       y = "Log (Members)") +
  theme_minimal() +
  theme(legend.position = "none",
        plot.title = element_text(face = "bold"))
print(plot_popularitas)

Plot Distribusi Popularitas: Memperlihatkan sebaran jumlah penonton (dalam skala logaritma). TV biasanya memiliki penyebaran yang posisinya cenderung berbeda dibandingkan Movie. Perbedaan tinggi kotak dan letak garis tengah secara kasat mata inilah yang dibuktikan secara matematis oleh MANOVA.

plot_hasil <- plot_rating + plot_popularitas
print(plot_hasil)

Kesimpulan: Berdasarkan pengujian MANOVA (menggunakan metode statistik Pillai’s Trace yang tangguh terhadap pelanggaran asumsi pada sampel besar), diperoleh nilai p-value \(< 0.05\). Hal ini membuktikan bahwa terdapat perbedaan yang signifikan secara statistik pada kombinasi performa (rating dan jumlah members) antara format tayangan seri TV dan Movie. Secara visual yang didukung oleh boxplot, realita di permukaan menunjukkan bahwa format penayangan memang memberikan karakteristik daya tarik yang berbeda, baik dari segi penilaian kualitas (rating) maupun jangkauan audiens (popularitas).