Data berasal dari desain faktorial 2 × 2 dengan:
| Simbol | Keterangan |
|---|---|
| Faktor A | 2 level: l1, l2 |
| Faktor B | 2 level: f1, f2 |
| n | 4 observasi per sel |
| p | 3 variabel dependen: X1, X2,
X3 |
data <- data.frame(
A = factor(rep(c("l1","l1","l2","l2"), each = 4)),
B = factor(rep(c("f1","f2","f1","f2"), each = 4)),
X1 = c(1.3, 1.2, 0.7, 1.3, # A=l1, B=f1
1.3, 1.4, 1.5, 1.7, # A=l1, B=f2
1.3, 1.5, 1.5, 1.8, # A=l2, B=f1
1.3, 1.4, 1.5, 1.6), # A=l2, B=f2
X2 = c(1.2, 1.1, 1.9, 2.1,
1.3, 1.9, 1.2, 2.1,
1.2, 1.7, 1.5, 2.1,
1.7, 1.8, 1.9, 2.0),
X3 = c(1.0, 1.3, 1.4, 1.5,
0.2, 0.7, 0.9, 0.9,
1.3, 2.1, 0.5, 1.3,
1.9, 1.6, 1.8, 2.7)
)
knitr::kable(data, caption = "Data Two-Way MANOVA", align = "c")| A | B | X1 | X2 | X3 |
|---|---|---|---|---|
| l1 | f1 | 1.3 | 1.2 | 1.0 |
| l1 | f1 | 1.2 | 1.1 | 1.3 |
| l1 | f1 | 0.7 | 1.9 | 1.4 |
| l1 | f1 | 1.3 | 2.1 | 1.5 |
| l1 | f2 | 1.3 | 1.3 | 0.2 |
| l1 | f2 | 1.4 | 1.9 | 0.7 |
| l1 | f2 | 1.5 | 1.2 | 0.9 |
| l1 | f2 | 1.7 | 2.1 | 0.9 |
| l2 | f1 | 1.3 | 1.2 | 1.3 |
| l2 | f1 | 1.5 | 1.7 | 2.1 |
| l2 | f1 | 1.5 | 1.5 | 0.5 |
| l2 | f1 | 1.8 | 2.1 | 1.3 |
| l2 | f2 | 1.3 | 1.7 | 1.9 |
| l2 | f2 | 1.4 | 1.8 | 1.6 |
| l2 | f2 | 1.5 | 1.9 | 1.8 |
| l2 | f2 | 1.6 | 2.0 | 2.7 |
# Fungsi menghitung SSCP matrix (sum of squares and cross products)
sscp <- function(mat) {
centered <- scale(mat, scale = FALSE)
t(centered) %*% centered
}
# Fungsi untuk membulatkan hanya kolom numerik dari hasil aggregate
round_agg <- function(df_agg, digits = 4) {
num_cols <- sapply(df_agg, is.numeric)
df_agg[, num_cols] <- round(df_agg[, num_cols], digits)
return(df_agg)
}Y <- as.matrix(data[, c("X1","X2","X3")])
n_cell <- 4 # observasi per sel
p <- 3 # jumlah variabel dependen
g <- 2 # level Faktor A
b <- 2 # level Faktor B
grand_mean <- colMeans(Y)Grand Mean:
| X1 | X2 | X3 | |
|---|---|---|---|
| round(grand_mean, 4) | 1.3938 | 1.6687 | 1.3188 |
Marginal Means Faktor A:
| A | X1 | X2 | X3 |
|---|---|---|---|
| l1 | 1.3000 | 1.6000 | 0.9875 |
| l2 | 1.4875 | 1.7375 | 1.6500 |
Marginal Means Faktor B:
| B | X1 | X2 | X3 |
|---|---|---|---|
| f1 | 1.3250 | 1.6000 | 1.3000 |
| f2 | 1.4625 | 1.7375 | 1.3375 |
Cell Means (A × B):
| A | B | X1 | X2 | X3 |
|---|---|---|---|---|
| l1 | f1 | 1.125 | 1.575 | 1.300 |
| l2 | f1 | 1.525 | 1.625 | 1.300 |
| l1 | f2 | 1.475 | 1.625 | 0.675 |
| l2 | f2 | 1.450 | 1.850 | 2.000 |
\[ \text{SSP}_{\text{total}} = \sum_{\ell}\sum_{k}\sum_{r} (\mathbf{x}_{\ell kr} - \bar{\mathbf{x}})(\mathbf{x}_{\ell kr} - \bar{\mathbf{x}})^T \]
| X1 | X2 | X3 | |
|---|---|---|---|
| X1 | 0.9094 | 0.3669 | 0.1619 |
| X2 | 0.3669 | 1.9944 | 1.3294 |
| X3 | 0.1619 | 1.3294 | 5.9644 |
\[ \text{SSP}_{\text{fak1}} = \sum_{\ell=1}^{g} bn\,(\bar{\mathbf{x}}_{\ell.} - \bar{\mathbf{x}})(\bar{\mathbf{x}}_{\ell.} - \bar{\mathbf{x}})^T \]
SSP_A <- matrix(0, p, p)
for (la in levels(data$A)) {
idx <- data$A == la
ni <- sum(idx)
diff <- colMeans(Y[idx, ]) - grand_mean
SSP_A <- SSP_A + ni * outer(diff, diff)
}| X1 | X2 | X3 | |
|---|---|---|---|
| X1 | 0.1406 | 0.1031 | 0.4969 |
| X2 | 0.1031 | 0.0756 | 0.3644 |
| X3 | 0.4969 | 0.3644 | 1.7556 |
\[ \text{SSP}_{\text{fak2}} = \sum_{k=1}^{b} gn\,(\bar{\mathbf{x}}_{.k} - \bar{\mathbf{x}})(\bar{\mathbf{x}}_{.k} - \bar{\mathbf{x}})^T \]
SSP_B <- matrix(0, p, p)
for (lb in levels(data$B)) {
idx <- data$B == lb
ni <- sum(idx)
diff <- colMeans(Y[idx, ]) - grand_mean
SSP_B <- SSP_B + ni * outer(diff, diff)
}| X1 | X2 | X3 | |
|---|---|---|---|
| X1 | 0.0756 | 0.0756 | 0.0206 |
| X2 | 0.0756 | 0.0756 | 0.0206 |
| X3 | 0.0206 | 0.0206 | 0.0056 |
\[ \text{SSP}_{\text{res}} = \sum_{\ell=1}^{g}\sum_{k=1}^{b}\sum_{r=1}^{n} (\mathbf{x}_{\ell kr} - \bar{\mathbf{x}}_{\ell k})(\mathbf{x}_{\ell kr} - \bar{\mathbf{x}}_{\ell k})^T \]
SSP_E <- matrix(0, p, p)
for (la in levels(data$A)) {
for (lb in levels(data$B)) {
idx <- data$A == la & data$B == lb
Ycell <- Y[idx, ]
SSP_E <- SSP_E + sscp(Ycell)
}
}| X1 | X2 | X3 | |
|---|---|---|---|
| X1 | 0.5125 | 0.2625 | 0.2075 |
| X2 | 0.2625 | 1.8125 | 0.7125 |
| X3 | 0.2075 | 0.7125 | 2.4475 |
\[ \text{SSP}_{\text{int}} = \text{SSP}_{\text{total}} - \text{SSP}_{\text{fak1}} - \text{SSP}_{\text{fak2}} - \text{SSP}_{\text{res}} \]
| X1 | X2 | X3 | |
|---|---|---|---|
| X1 | 0.1806 | -0.0744 | -0.5631 |
| X2 | -0.0744 | 0.0306 | 0.2319 |
| X3 | -0.5631 | 0.2319 | 1.7556 |
Verifikasi Dekomposisi:
check <- SSP_A + SSP_B + SSP_AB + SSP_E
max_selisih <- max(abs(check - SSP_total))
cat("Max selisih (harus ~0):", max_selisih, "\n")Max selisih (harus ~0): 8.326673e-17
\[ gbn - 1 = (g-1) + (b-1) + (g-1)(b-1) + gb(n-1) \]
df_A <- g - 1 # 1
df_B <- b - 1 # 1
df_AB <- (g - 1) * (b - 1) # 1
df_E <- g * b * (n_cell - 1) # 12
df_T <- g * b * n_cell - 1 # 15| Sumber | Formula | df |
|---|---|---|
| Faktor A | g − 1 | 1 |
| Faktor B | b − 1 | 1 |
| Interaksi A×B | (g−1)(b−1) | 1 |
| Error | gb(n−1) | 12 |
| Total | gbn − 1 | 15 |
\[ \Lambda^* = \frac{|\text{SSP}_{\text{res}}|}{|\text{SSP}_H + \text{SSP}_{\text{res}}|} \]
\[ F = \left(\frac{1 - \Lambda^*}{\Lambda^*}\right) \times \frac{(gb(n-1) - p + 1)/2}{(|df_H - p| + 1)/2} \]
wilks_test <- function(SSP_H, SSP_E, df_h, g, b, n, p, label) {
lam <- det(SSP_E) / det(SSP_H + SSP_E)
num_term <- (g * b * (n - 1) - p + 1) / 2
den_term <- (abs(df_h - p) + 1) / 2
F_stat <- ((1 - lam) / lam) * (num_term / den_term)
v1 <- abs(df_h - p) + 1
v2 <- g * b * (n - 1) - p + 1
p_val <- pf(F_stat, v1, v2, lower.tail = FALSE)
sig <- ifelse(p_val < 0.001, "***",
ifelse(p_val < 0.01, "**",
ifelse(p_val < 0.05, "*", "ns")))
list(label = label,
lambda = lam,
F = F_stat,
v1 = v1,
v2 = v2,
pval = p_val,
sig = sig)
}res_A <- wilks_test(SSP_A, SSP_E, df_A, g, b, n_cell, p, "Faktor A")
res_B <- wilks_test(SSP_B, SSP_E, df_B, g, b, n_cell, p, "Faktor B")
res_AB <- wilks_test(SSP_AB, SSP_E, df_AB, g, b, n_cell, p, "Interaksi A×B")| Sumber | df | Lambda | F_hitung | v1 | v2 | p_value | Sig |
|---|---|---|---|---|---|---|---|
| Faktor A | 1 | 0.5297 | 2.9598 | 3 | 10 | 0.084179 | ns |
| Faktor B | 1 | 0.8609 | 0.5388 | 3 | 10 | 0.666364 | ns |
| Interaksi A×B | 1 | 0.4346 | 4.3359 | 3 | 10 | 0.033497 | * |
| Error | 12 | NA | NA | NA | NA | NA | |
| Total | 15 | NA | NA | NA | NA | NA |
Keterangan signifikansi:
***p < 0.001 |**p < 0.01 |*p < 0.05 |nstidak signifikan
manova() R Df Wilks approx F num Df den Df Pr(>F)
A 1 0.52968 2.9598 3 10 0.08418 .
B 1 0.86085 0.5388 3 10 0.66636
A:B 1 0.43464 4.3359 3 10 0.03350 *
Residuals 12
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
| Komponen | Nilai |
|---|---|
| Jumlah observasi | 16 |
| Faktor A (level) | 2 |
| Faktor B (level) | 2 |
| Variabel dependen (p) | 3 |
| Observasi per sel (n) | 4 |
| df Error | 12 |