A. PERSIAPAN DATA DAN LOAD LIBRARY

Load Library

library(tidyverse)
library(car)
library(MVN)
library(heplots)
library(emmeans)
library(gridExtra)

Import Data

data <- read.csv("6 class csv.csv")

Data Cleaning & Rename Columns

# Merapikan nama kolom agar tidak ada spasi atau karakter khusus
colnames(data) <- c("Temperature", "Luminosity", "Radius", "Abs_Magnitude", 
                    "Star_Type", "Star_Color", "Spectral_Class")
# Mengubah Spectral_Class menjadi variabel kategori (factor)
data$Star_Type <- as.factor(data$Star_Type)
# Melihat struktur data
str(data)
## 'data.frame':    240 obs. of  7 variables:
##  $ Temperature   : int  3068 3042 2600 2800 1939 2840 2637 2600 2650 2700 ...
##  $ Luminosity    : num  0.0024 0.0005 0.0003 0.0002 0.000138 0.00065 0.00073 0.0004 0.00069 0.00018 ...
##  $ Radius        : num  0.17 0.154 0.102 0.16 0.103 ...
##  $ Abs_Magnitude : num  16.1 16.6 18.7 16.6 20.1 ...
##  $ Star_Type     : Factor w/ 6 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Star_Color    : chr  "Red" "Red" "Red" "Red" ...
##  $ Spectral_Class: chr  "M" "M" "M" "M" ...

B. EKSPLORASI DATA (VISUALISASI AWAL)

# Visualisasi Distribusi Suhu dan Kecerahan berdasarkan Kelas Spektral

p1 <- ggplot(data, aes(x = Star_Type, y = Temperature, fill = Star_Type)) +
  geom_boxplot() +
  labs(title = "Suhu Mutlak (K) vs Tipe Bintang", x = "Tipe Bintang", y = "Suhu (K)") +
  theme_minimal() + theme(legend.position = "none")
p2 <- ggplot(data, aes(x = Star_Type, y = Abs_Magnitude, fill = Star_Type)) +
  geom_boxplot() +
  labs(title = "Magnitudo Absolut vs Tipe Bintang", x = "Tipe Bintang", y = "Magnitudo Absolut") +
  theme_minimal() + theme(legend.position = "none")
grid.arrange(p1, p2, ncol = 2)

# Scatter plot: Pengaruh Radius (Kovariat) terhadap Magnitudo
ggplot(data, aes(x = Radius, y = Abs_Magnitude, color = Star_Type)) +
  geom_point(alpha = 0.7) +
  geom_smooth(method = "lm", se = FALSE) +
  labs(title = "Hubungan Radius dan Magnitudo Absolut per Tipe Bintang",
       x = "Radius (R/Ro)", y = "Magnitudo Absolut") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

C. UJI ASUMSI MULTIVARIAT

# Menyiapkan matriks Variabel Dependen (Y)
Y_matrix <- data %>% select(Temperature, Abs_Magnitude)
# 1. Uji Normalitas Multivariat
mvn_result <- mvn(data = Y_matrix)
# Menampilkan semua tabel secara otomatis
print(mvn_result)
## $multivariate_normality
##            Test Statistic p.value     Method          MVN
## 1 Henze-Zirkler    18.256  <0.001 asymptotic ✗ Not normal
## 
## $univariate_normality
##               Test      Variable Statistic p.value    Normality
## 1 Anderson-Darling   Temperature    18.212  <0.001 ✗ Not normal
## 2 Anderson-Darling Abs_Magnitude    13.109  <0.001 ✗ Not normal
## 
## $descriptives
##        Variable   n      Mean  Std.Dev   Median     Min      Max     25th
## 1   Temperature 240 10497.462 9552.425 5776.000 1939.00 40000.00 3344.250
## 2 Abs_Magnitude 240     4.382   10.533    8.313  -11.92    20.06   -6.232
##        75th   Skew Kurtosis
## 1 15055.500  1.313    3.834
## 2    13.698 -0.121    1.354
## 
## $data
##     Temperature Abs_Magnitude
## 1          3068        16.120
## 2          3042        16.600
## 3          2600        18.700
## 4          2800        16.650
## 5          1939        20.060
## 6          2840        16.980
## 7          2637        17.220
## 8          2600        17.400
## 9          2650        17.450
## 10         2700        16.050
## 11         3600        10.690
## 12         3129        11.790
## 13         3134        13.210
## 14         3628        10.480
## 15         2650        11.782
## 16         3340        13.070
## 17         2799        14.790
## 18         3692        10.800
## 19         3192        13.530
## 20         3441        11.180
## 21        25000        10.580
## 22         7740        14.020
## 23         7220        14.230
## 24         8500        14.500
## 25        16500        11.890
## 26        12990        12.230
## 27         8570        14.200
## 28         7700        14.470
## 29        11790        12.590
## 30         7230        14.080
## 31        39000        -4.700
## 32        30000        -4.200
## 33        15276        -1.970
## 34         9700         0.160
## 35         5800         5.050
## 36         8052         2.420
## 37         6757         2.410
## 38         6380         2.930
## 39         5936         4.460
## 40         5587         5.030
## 41         3826        -6.930
## 42         3365        -6.200
## 43         3270        -6.020
## 44         3200        -7.220
## 45         3008        -6.000
## 46         3600        -6.600
## 47         3575        -6.780
## 48         3574        -5.240
## 49         3625        -6.740
## 50        33750        -6.100
## 51         3490        -9.400
## 52         3750        -7.630
## 53         3834        -9.200
## 54         3749        -8.050
## 55         3650        -7.790
## 56         3450       -11.750
## 57         3660       -11.920
## 58         3450       -11.280
## 59         3752       -11.240
## 60         3535       -11.360
## 61         3341        16.230
## 62         3432        16.940
## 63         2983        16.090
## 64         2835        16.960
## 65         2935        18.890
## 66         3295        17.130
## 67         2945        18.340
## 68         2817        16.450
## 69         2774        17.390
## 70         2871        19.430
## 71         3345        12.300
## 72         3607        10.120
## 73         3304        13.200
## 74         3150        11.940
## 75         3550        10.890
## 76         3180        11.760
## 77         2890        13.460
## 78         3342        11.870
## 79         2621        12.810
## 80         3158        13.980
## 81         7100        14.090
## 82        10574        12.020
## 83         8930        13.780
## 84        17200        12.450
## 85        14100        12.170
## 86         9675        13.980
## 87        12010        12.130
## 88        10980        11.190
## 89        13720        12.970
## 90        19860        11.340
## 91         5300         5.490
## 92         4526         6.506
## 93         4077         6.228
## 94         4980         4.780
## 95         9030         1.450
## 96        11250        -2.300
## 97         5112         4.680
## 98         7720         2.440
## 99        12098         0.020
## 100       36108        -4.400
## 101       33300        -6.500
## 102       40000        -6.230
## 103       23000        -5.760
## 104       17120        -6.890
## 105       11096        -5.910
## 106       14245        -6.120
## 107       24630        -5.830
## 108       12893        -6.340
## 109       24345        -6.240
## 110       33421        -5.790
## 111        3459       -10.700
## 112        3605       -10.810
## 113        3615       -11.330
## 114        3399       -10.920
## 115        3610       -10.860
## 116        3553       -11.030
## 117        4015       -11.390
## 118        3625       -10.250
## 119        6850       -10.070
## 120        3780       -10.700
## 121        3323        17.160
## 122        3531        19.940
## 123        3218        20.020
## 124        3146        16.920
## 125        3511        17.120
## 126        3225        19.630
## 127        2935        16.880
## 128        2861        16.710
## 129        2856        19.560
## 130        2731        18.090
## 131        3095        10.870
## 132        3607        10.340
## 133        3100        11.170
## 134        2989        13.120
## 135        3542        14.230
## 136        3243        14.750
## 137        3091        11.430
## 138        3598        14.260
## 139        3324        12.230
## 140        3541        14.330
## 141       13420        13.670
## 142       21020        11.520
## 143       18290        12.780
## 144       14520        11.920
## 145       11900        11.380
## 146        8924        14.870
## 147       12912        12.830
## 148       14732        12.890
## 149        7723        14.810
## 150       12984        11.230
## 151       29560        -4.010
## 152        8945         0.120
## 153       14060        -2.040
## 154       16390        -3.320
## 155       25070        -3.980
## 156       28700        -4.090
## 157       26140        -3.800
## 158       20120        -3.400
## 159       13023        -1.380
## 160       37800        -4.560
## 161       25390        -5.920
## 162       11567        -6.245
## 163       12675        -5.620
## 164        5752        -6.630
## 165        8927        -7.340
## 166        7282        -7.220
## 167       19923        -5.690
## 168       26373        -5.830
## 169       17383        -6.090
## 170        9373        -5.990
## 171        3570        -7.580
## 172        3500        -8.180
## 173        4287        -9.200
## 174       26000        -9.100
## 175        3600        -7.890
## 176        3614        -7.710
## 177       18000        -8.300
## 178       11000        -9.900
## 179       12100        -7.840
## 180       24490        -8.240
## 181        2831        16.210
## 182        2914        18.390
## 183        3419        17.560
## 184        3218        17.340
## 185        3453        17.080
## 186        2889        16.930
## 187        2968        17.450
## 188        3484        16.670
## 189        2778        19.450
## 190        3523        16.350
## 191        3462        11.470
## 192        3257        10.730
## 193        2994        13.450
## 194        3212        12.854
## 195        3523        12.430
## 196        3598        13.667
## 197        3142        14.120
## 198        3496        14.940
## 199        3324        12.780
## 200        3463        14.776
## 201       16790        12.870
## 202       15680        11.920
## 203       14982        12.230
## 204       13340        12.900
## 205       18340        11.220
## 206       19920        11.340
## 207       24020        10.550
## 208       23092        10.180
## 209       17920        11.660
## 210       19360        11.620
## 211       22350        -3.670
## 212       10012         0.013
## 213       13089        -0.120
## 214       22012        -2.550
## 215       34190        -4.570
## 216       32460        -4.360
## 217        9320         1.236
## 218       19400        -3.080
## 219       17140        -2.640
## 220        8250        -0.980
## 221       23678        -6.270
## 222       12749        -7.020
## 223        9383        -6.980
## 224       23440        -5.975
## 225       16787        -6.350
## 226       18734        -7.450
## 227        9892        -7.262
## 228       10930        -6.224
## 229       23095        -5.905
## 230       21738        -7.346
## 231       24145        -8.840
## 232       38234        -9.290
## 233       32489       -10.840
## 234       27739        -7.590
## 235       21904        -7.670
## 236       38940        -9.930
## 237       30839       -10.630
## 238        8829       -10.730
## 239        9235       -11.230
## 240       37882        -7.800
## 
## $subset
## NULL
## 
## $outlierMethod
## [1] "none"
## 
## attr(,"class")
## [1] "mvn"
# 2. Uji Homogenitas Matriks Kovarians (Box's M Test)
# Menguji apakah varians-kovarians antar kelas spektral itu sama

box_m <- boxM(Y_matrix, data$Star_Type)
print(box_m)
## 
##  Box's M-test for Homogeneity of Covariance Matrices 
## 
## data:  Y_matrix by data$Star_Type 
## Chi-Sq (approx.) = 675.87, df = 15, p-value = < 2.2e-16
# 3. Uji Homogenitas Varians Univariat (Levene's Test)
leveneTest(Temperature ~ Star_Type, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value    Pr(>F)    
## group   5  16.063 1.316e-13 ***
##       234                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
leveneTest(Abs_Magnitude ~ Star_Type, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value    Pr(>F)    
## group   5  30.877 < 2.2e-16 ***
##       234                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Meskipun hasil uji menunjukkan data tidak berdistribusi normal (p < 0.001) dan varians tidak homogen (p < 0.05), analisis tetap dilanjutkan menggunakan Pillai’s Trace pada MANOVA karena sifatnya yang tangguh(robust) terhadap pelanggaran asumsi tersebut.

D. ANALISIS MANOVA

# Model MANOVA
model_manova <- manova(cbind(Temperature, Abs_Magnitude) ~ Star_Type, data = data)
# Menggunakan test Pillai (Lebih robust jika Box's M terlanggar)
summary(model_manova, test = "Pillai")
##            Df Pillai approx F num Df den Df    Pr(>F)    
## Star_Type   5 1.1926   69.124     10    468 < 2.2e-16 ***
## Residuals 234                                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Melihat efek pada masing-masing variabel dependen secara terpisah
summary.aov(model_manova)
##  Response Temperature :
##              Df     Sum Sq    Mean Sq F value    Pr(>F)    
## Star_Type     5 6.9960e+09 1399192099  22.104 < 2.2e-16 ***
## Residuals   234 1.4813e+10   63301318                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Abs_Magnitude :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## Star_Type     5  25709  5141.8  1496.5 < 2.2e-16 ***
## Residuals   234    804     3.4                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil Pillai’s Trace menunjukkan p-value < 2.2e-16. Ini membuktikan adanya perbedaan karakteristik fisik (suhu dan kecerahan) yang sangat nyata di antara berbagai tipe bintang.

E. ANALISIS ANCOVA

A. Uji Asumsi Homogenitas Slope (Interaksi antara Faktor dan Kovariat)

# Menggunakan Star_Type (Tipe Bintang) sebagai faktor agar sebaran data seimbang
data$Star_Type <- as.factor(data$Star_Type)
# 1. Ubah Pengaturan Contrast Bawaan R (Wajib untuk Tipe III)

options(contrasts = c("contr.sum", "contr.poly"))
# 2. Uji Asumsi Interaksi (Homogenitas Slope)

model_interaksi <- aov(Abs_Magnitude ~ Radius * Star_Type, data = data)
Anova(model_interaksi, type = "III")
## Anova Table (Type III tests)
## 
## Response: Abs_Magnitude
##                   Sum Sq  Df  F value Pr(>F)    
## (Intercept)       421.60   1 236.3632 <2e-16 ***
## Radius              0.30   1   0.1698 0.6807    
## Star_Type        2103.25   5 235.8325 <2e-16 ***
## Radius:Star_Type  395.21   5  44.3140 <2e-16 ***
## Residuals         406.68 228                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 3. Model ANCOVA Utama (Ganti tanda bintang * menjadi plus +)
model_ancova <- aov(Abs_Magnitude ~ Radius + Star_Type, data = data)
Anova(model_ancova, type = "III")
## Anova Table (Type III tests)
## 
## Response: Abs_Magnitude
##              Sum Sq  Df  F value Pr(>F)    
## (Intercept)   812.8   1 236.1744 <2e-16 ***
## Radius          2.1   1   0.6084 0.4362    
## Star_Type   15886.8   5 923.2261 <2e-16 ***
## Residuals     801.9 233                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model ANCOVA Utama

# Menghilangkan interaksi (*) dan menggantinya dengan (+)
emm_ancova <- emmeans(model_ancova, "Star_Type")
print(emm_ancova)
##  Star_Type emmean    SE  df lower.CL upper.CL
##  0         17.350 0.401 233    16.56   18.141
##  1         12.327 0.401 233    11.54   13.117
##  2         12.369 0.401 233    11.58   13.160
##  3         -0.577 0.398 233    -1.36    0.207
##  4         -6.538 0.364 233    -7.25   -5.821
##  5         -8.636 1.340 233   -11.27   -6.000
## 
## Confidence level used: 0.95

C. Estimated Marginal Means (EMMeans)

# Melihat rata-rata Magnitudo yang sudah "dibersihkan" dari efek perbedaan Radius
emm_ancova <- emmeans(model_ancova, "Star_Type")
print(emm_ancova)
##  Star_Type emmean    SE  df lower.CL upper.CL
##  0         17.350 0.401 233    16.56   18.141
##  1         12.327 0.401 233    11.54   13.117
##  2         12.369 0.401 233    11.58   13.160
##  3         -0.577 0.398 233    -1.36    0.207
##  4         -6.538 0.364 233    -7.25   -5.821
##  5         -8.636 1.340 233   -11.27   -6.000
## 
## Confidence level used: 0.95
# Plot EMMeans

plot(emm_ancova, comparisons = TRUE) +
  labs(title = "Estimated Marginal Means dari Magnitudo Absolut",
       x = "EMMean Magnitudo Absolut", y = "Tipe Bintang") +
  theme_minimal()

Uji interaksi menunjukkan slope yang tidak homogen (p < 2e-16). Pada model ANCOVA utama, terlihat bahwa tipe bintang menentukan kecerahan bintang secara signifikan, sementara faktor radius tidak memberikan pengaruh tambahan yang berarti secara univariat pada variabel ini.

Model MANCOVA

F. ANALISIS MANCOVA

model_mancova <- manova(cbind(Temperature, Abs_Magnitude) ~ Radius + Star_Type, data = data)

Uji Multivariat Pillai’s Trace

summary(model_mancova, test = "Pillai")
##            Df Pillai approx F num Df den Df    Pr(>F)    
## Radius      1 0.9331  1617.95      2    232 < 2.2e-16 ***
## Star_Type   5 1.1385    61.58     10    466 < 2.2e-16 ***
## Residuals 233                                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Uji Efek Individu (Univariat) setelah dikontrol Radius

summary.aov(model_mancova)
##  Response Temperature :
##              Df     Sum Sq    Mean Sq F value Pr(>F)    
## Radius        1 8.9931e+07   89931390  1.4234 0.2341    
## Star_Type     5 6.9979e+09 1399585081 22.1528 <2e-16 ***
## Residuals   233 1.4721e+10   63178593                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Abs_Magnitude :
##              Df  Sum Sq Mean Sq F value    Pr(>F)    
## Radius        1  9824.5  9824.5 2854.63 < 2.2e-16 ***
## Star_Type     5 15886.8  3177.4  923.23 < 2.2e-16 ***
## Residuals   233   801.9     3.4                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil MANCOVA menunjukkan bahwa baik radius maupun tipe bintang berpengaruh sangat signifikan terhadap karakteristik fisik bintang secara simultan (p < 2.2e-16). Ini menunjukkan pentingnya mempertimbangkan ukuran radius dalam model klasifikasi bintang yang lebih kompleks.

KESIMPULAN

Berdasarkan serangkaian pengujian statistik multivariat yang telah dilakukan pada dataset klasifikasi bintang, dapat ditarik beberapa kesimpulan utama sebagai berikut:

  1. Kondisi Asumsi Data : Pengujian awal menunjukkan bahwa data bintang memiliki sebaran yang tidak berdistribusi normal secara multivariat dan memiliki varians/kovarians yang tidak homogen. Adanya pelanggaran pada asumsi homogenitas slope regresi juga ditemukan. Namun, hal ini sangat wajar terjadi pada data riil astronomi yang rentan terhadap observasi ekstrem (outlier alami seperti bintang maha-raksasa). Penggunaan statistik Pillai’s Trace terbukti menjadi solusi yang tangguh (robust) untuk tetap menguji hipotesis dengan presisi tinggi pada kondisi data tersebut.

  2. Pengaruh Tipe Bintang (MANOVA) : Tipe bintang (Star_Type) terbukti memberikan pengaruh yang sangat signifikan terhadap karakteristik fisik bintang, yang dalam hal ini diwakili oleh kombinasi Suhu Mutlak dan Magnitudo Absolut (Kecerahan). Setiap tipe bintang memiliki profil suhu dan kecerahan yang secara statistik berbeda nyata satu sama lain.

  3. Peran Radius secara Univariat (ANCOVA) : Ketika analisis difokuskan hanya pada satu variabel dependen, yaitu Magnitudo Absolut, hasil ANCOVA menunjukkan bahwa variabel tipe bintang tetap menjadi penentu utama kecerahan. Menariknya, variabel kontrol berupa ukuran bintang (Radius) secara univariat tidak memberikan pengaruh tambahan yang signifikan (p = 0.4362). Hal ini mengindikasikan bahwa jika kita hanya ingin memprediksi kecerahan mutlak, mengetahui tipe bintangnya saja sudah cukup representatif.

  4. Peran Radius secara Multivariat (MANCOVA) : Situasi berubah drastis ketika Suhu Mutlak dan Magnitudo Absolut dianalisis secara bersamaan (multivariat). Hasil MANCOVA membuktikan bahwa ukuran Radius ternyata memegang peranan pengontrol yang sangat krusial dan signifikan (p < 2.2e-16) terhadap kombinasi kedua variabel fisik tersebut.

Secara keseluruhan, analisis ini menyimpulkan bahwa klasifikasi bintang adalah fenomena multivariat yang kompleks. Kita tidak bisa sepenuhnya memahami karakteristik termal dan luminositas sebuah bintang hanya dengan melihat tipenya saja, melainkan harus selalu mempertimbangkan faktor ukuran (radius) yang mengontrol pergerakan suhu dan kecerahan tersebut secara simultan di alam semesta.