Sebelum memulai analisis multivariat, langkah pertama adalah memuat semua package R yang diperlukan untuk pengujian MANOVA, MANCOVA, uji asumsi klasik, serta visualisasi tingkat lanjut.
Dataset yang digunakan adalah Bike Sharing Dataset (Capital
Bikeshare) yang diperoleh dari UCI Machine Learning Repository.
Pastikan file day.csv berada di dalam working
directory Anda.
Di sini kita akan mengubah variabel prediktor kategorik menjadi factor agar dibaca dengan benar oleh fungsi pemodelan R. Selain itu, transformasi logaritma natural (\(log(x + 1)\)) dilakukan pada variabel dependen untuk mengurangi efek skewness (kemencengan data) dan menjaga pemenuhan asumsi normalitas.
# Konversi variabel menjadi faktor
bike_data$season <- as.factor(bike_data$season)
bike_data$weathersit <- as.factor(bike_data$weathersit)
# Transformasi logaritmik untuk variabel dependen (Y)
bike_data$log_casual <- log(bike_data$casual + 1)
bike_data$log_registered <- log(bike_data$registered + 1)
# PENTING: Membuat matriks Y dengan nama kolom yang spesifik dan bersih
# agar tidak memicu error mfcol=c(nv,nv) pada visualisasi heplot
Y_matrix <- cbind(
log_casual = bike_data$log_casual,
log_registered = bike_data$log_registered
)Analisis deskriptif digunakan untuk melihat karakteristik dasar dari data, termasuk nilai pemusatan data (mean, median) dan ukuran penyebaran data (standar deviasi).
# Menampilkan ringkasan statistik (Min, Q1, Median, Mean, Q3, Max)
summary(bike_data[, c("casual", "registered", "temp")])## casual registered temp
## Min. : 2.0 Min. : 20 Min. :0.05913
## 1st Qu.: 315.5 1st Qu.:2497 1st Qu.:0.33708
## Median : 713.0 Median :3662 Median :0.49833
## Mean : 848.2 Mean :3656 Mean :0.49538
## 3rd Qu.:1096.0 3rd Qu.:4776 3rd Qu.:0.65542
## Max. :3410.0 Max. :6946 Max. :0.86167
# Menghitung Standar Deviasi (SD) untuk masing-masing variabel utama
cat("Standar Deviasi Casual (Y1) : ", sd(bike_data$casual), "\n")## Standar Deviasi Casual (Y1) : 686.6225
## Standar Deviasi Registered (Y2) : 1560.256
## Standar Deviasi Temp (X3) : 0.183051
Validitas kesimpulan dari pengujian MANOVA dan MANCOVA sangat bergantung pada dipenuhinya asumsi-asumsi klasik multivariat berikut.
Uji Mardia digunakan untuk menguji apakah variasi kombinasi linear dari variabel dependen berdistribusi normal multivariat melalui parameter skewness dan kurtosis.
# Memanggil fungsi mvn(). Secara default fungsi ini otomatis menjalankan Uji Mardia,
# sehingga kita tidak perlu menulis parameter tambahan yang rawan memicu error antar-versi
mardia_test <- mvn(data = bike_data[, c("log_casual", "log_registered")])
print(mardia_test$multivariateNormality)## NULL
Uji ini bertujuan untuk memastikan bahwa matriks varians-kovarians dari variabel dependen bernilai sama (homogen) di setiap kelompok/kombinasi perlakuan.
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: bike_data
## Chi-Sq (approx.) = 277.8829, df = 33, p-value = < 2.2e-16
Sebelum menjalankan MANCOVA, kemiringan regresi (regression
slopes) antara variabel kovariat (temp) dan variabel
dependen harus sama di seluruh kelompok. Hal ini ditunjukkan oleh
tidak signifikannya interaksi antara kovariat dan
faktor utama.
model_asumsi <- manova(Y_matrix ~ temp * season * weathersit, data = bike_data)
summary(model_asumsi, test = "Pillai")## Df Pillai approx F num Df den Df Pr(>F)
## temp 1 0.61244 557.82 2 706 < 2.2e-16 ***
## season 3 0.21265 28.04 6 1414 < 2.2e-16 ***
## weathersit 2 0.29127 60.26 4 1414 < 2.2e-16 ***
## temp:season 3 0.14466 18.38 6 1414 < 2.2e-16 ***
## temp:weathersit 2 0.00590 1.05 4 1414 0.3822299
## season:weathersit 6 0.02964 1.77 12 1414 0.0477434 *
## temp:season:weathersit 6 0.04884 2.95 12 1414 0.0004551 ***
## Residuals 707
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Setelah memeriksa asumsi, kita dapat menjalankan pengujian signifikansi kelompok secara multivariat.
Pengujian MANOVA digunakan untuk menguji apakah terdapat perbedaan
rata-rata kombinasi variabel dependen (casual dan
registered) yang signifikan berdasarkan faktor musim
(season), cuaca (weathersit), maupun interaksi
keduanya.
model_manova <- manova(Y_matrix ~ season * weathersit, data = bike_data)
summary(model_manova, test = "Pillai")## Df Pillai approx F num Df den Df Pr(>F)
## season 3 0.51586 83.304 6 1438 < 2e-16 ***
## weathersit 2 0.23935 48.871 4 1438 < 2e-16 ***
## season:weathersit 6 0.02654 1.612 12 1438 0.08208 .
## Residuals 719
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Pengujian MANCOVA memperluas MANOVA dengan memasukkan variabel
kontinu temp (suhu) sebagai kovariat untuk mengontrol
pengaruh lingkungan luar secara statistik.
model_mancova <- manova(Y_matrix ~ temp + season * weathersit, data = bike_data)
summary(model_mancova, test = "Pillai")## Df Pillai approx F num Df den Df Pr(>F)
## temp 1 0.57435 483.75 2 717 < 2.2e-16 ***
## season 3 0.18920 25.01 6 1436 < 2.2e-16 ***
## weathersit 2 0.25888 53.38 4 1436 < 2.2e-16 ***
## season:weathersit 6 0.04384 2.68 12 1436 0.001413 **
## Residuals 718
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Visualisasi sangat penting untuk membantu menginterpretasikan hasil uji statistik dan melihat pola data secara langsung.
Plot ini menggambarkan jarak kuadrat Mahalanobis terhadap distribusi
Chi-Square untuk mendeteksi deviasi dari normalitas multivariat. Kita
menggunakan fungsi cqplot dari package heplots
yang sangat stabil untuk membaca objek MANOVA.
# Visualisasi Normalitas Multivariat
cqplot(model_manova, main = "Chi-Square Q-Q Plot (Normalitas Multivariat)")Visualisasi berbasis dot plot untuk melihat perbandingan log determinan matriks kovarians antar kelompok kombinasi perlakuan.
Hypothesis-Error (HE) Plots memproyeksikan kekuatan bukti pengujian menggunakan bentuk geometri elips untuk mewakili variabilitas akibat Efek Hipotesis (H) dibandingkan dengan Variabilitas Error (E).