Anggota :
Fina Nihayatul Husna (24031554022)
Juli Yawati Manalu (24031554050)
Alya Nabila Tamam (24031554099)
Link Dataset : https://www.kaggle.com/datasets/williamsewell/manufacturing-dataset
library(readr)
library(psych)
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
require(dplyr)
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:psych':
##
## logit
library(MVN)
## Warning: package 'MVN' was built under R version 4.5.3
##
## Attaching package: 'MVN'
## The following object is masked from 'package:psych':
##
## mardia
library(biotools)
## Warning: package 'biotools' was built under R version 4.5.3
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
## ---
## biotools version 4.3
library(heplots)
## Warning: package 'heplots' was built under R version 4.5.3
## Loading required package: broom
##
## Attaching package: 'heplots'
## The following object is masked from 'package:biotools':
##
## boxM
library(nortest)
library(knitr)
data <- read_csv("C:/Users/LENOVO/Downloads/manufacturing_iot_quality_10000.csv")
## Rows: 10000 Columns: 20
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (6): plant, line_id, machine_id, shift, material_batch, defect_type
## dbl (14): record_id, operator_experience_years, ambient_temp_c, ambient_humi...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
str(data)
## spc_tbl_ [10,000 × 20] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ record_id : num [1:10000] 1 2 3 4 5 6 7 8 9 10 ...
## $ plant : chr [1:10000] "Plant_A" "Plant_A" "Plant_A" "Plant_C" ...
## $ line_id : chr [1:10000] "L3" "L1" "L4" "L3" ...
## $ machine_id : chr [1:10000] "M07" "M18" "M10" "M01" ...
## $ shift : chr [1:10000] "evening" "night" "evening" "evening" ...
## $ operator_experience_years: num [1:10000] 5.27 1.61 8.35 4.66 6.77 0 9.39 7.05 7.68 1.8 ...
## $ material_batch : chr [1:10000] "B090" "B122" "B071" "B069" ...
## $ ambient_temp_c : num [1:10000] 23.7 19 19.9 21.3 24.9 ...
## $ ambient_humidity_pct : num [1:10000] 67.9 34.8 50.4 34.8 32.7 90 48 55.1 41.9 44.7 ...
## $ vibration_rms : num [1:10000] 0.981 1.29 0.871 0.995 0.697 ...
## $ pressure_bar : num [1:10000] 5.08 4.8 5.64 5.28 5.05 ...
## $ feed_rate_mm_s : num [1:10000] 19.5 26.6 23.9 21.4 15 ...
## $ laser_power_w : num [1:10000] 304 377 329 323 341 ...
## $ coolant_flow_l_min : num [1:10000] 7.63 6.53 6.22 7.47 4.32 5.75 6.7 6.62 8.89 8.05 ...
## $ thickness_mm : num [1:10000] 1.22 1.28 1.22 1.2 1.22 ...
## $ tensile_strength_mpa : num [1:10000] 517 537 539 542 594 ...
## $ surface_roughness_um : num [1:10000] 2.68 2.81 2.14 2.2 1.34 ...
## $ defect_flag : num [1:10000] 0 0 0 0 0 0 0 1 0 0 ...
## $ defect_type : chr [1:10000] "none" "none" "none" "none" ...
## $ rework_needed : num [1:10000] 0 0 0 0 0 0 0 1 0 0 ...
## - attr(*, "spec")=
## .. cols(
## .. record_id = col_double(),
## .. plant = col_character(),
## .. line_id = col_character(),
## .. machine_id = col_character(),
## .. shift = col_character(),
## .. operator_experience_years = col_double(),
## .. material_batch = col_character(),
## .. ambient_temp_c = col_double(),
## .. ambient_humidity_pct = col_double(),
## .. vibration_rms = col_double(),
## .. pressure_bar = col_double(),
## .. feed_rate_mm_s = col_double(),
## .. laser_power_w = col_double(),
## .. coolant_flow_l_min = col_double(),
## .. thickness_mm = col_double(),
## .. tensile_strength_mpa = col_double(),
## .. surface_roughness_um = col_double(),
## .. defect_flag = col_double(),
## .. defect_type = col_character(),
## .. rework_needed = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
summary(data)
## record_id plant line_id machine_id
## Min. : 1 Length:10000 Length:10000 Length:10000
## 1st Qu.: 2501 Class :character Class :character Class :character
## Median : 5000 Mode :character Mode :character Mode :character
## Mean : 5000
## 3rd Qu.: 7500
## Max. :10000
## shift operator_experience_years material_batch
## Length:10000 Min. : 0.000 Length:10000
## Class :character 1st Qu.: 3.300 Class :character
## Mode :character Median : 5.460 Mode :character
## Mean : 5.542
## 3rd Qu.: 7.660
## Max. :20.090
## ambient_temp_c ambient_humidity_pct vibration_rms pressure_bar
## Min. :10.00 Min. :15.00 Min. :0.2390 Min. :3.500
## 1st Qu.:19.06 1st Qu.:41.00 1st Qu.:0.7350 1st Qu.:4.860
## Median :21.74 Median :49.10 Median :0.9295 Median :5.260
## Mean :21.78 Mean :49.24 Mean :0.9886 Mean :5.266
## 3rd Qu.:24.53 3rd Qu.:57.50 3rd Qu.:1.1790 3rd Qu.:5.677
## Max. :35.00 Max. :90.00 Max. :3.7060 Max. :7.500
## feed_rate_mm_s laser_power_w coolant_flow_l_min thickness_mm
## Min. :10.00 Min. :250.0 Min. : 3.000 Min. :0.911
## 1st Qu.:19.16 1st Qu.:328.6 1st Qu.: 7.110 1st Qu.:1.147
## Median :22.23 Median :351.7 Median : 8.010 Median :1.200
## Mean :22.23 Mean :352.2 Mean : 8.018 Mean :1.200
## 3rd Qu.:25.32 3rd Qu.:375.5 3rd Qu.: 8.910 3rd Qu.:1.254
## Max. :40.00 Max. :480.0 Max. :13.040 Max. :1.536
## tensile_strength_mpa surface_roughness_um defect_flag defect_type
## Min. :432.6 Min. :0.600 Min. :0.0000 Length:10000
## 1st Qu.:530.7 1st Qu.:1.879 1st Qu.:0.0000 Class :character
## Median :553.1 Median :2.152 Median :0.0000 Mode :character
## Mean :553.3 Mean :2.157 Mean :0.0146
## 3rd Qu.:576.2 3rd Qu.:2.436 3rd Qu.:0.0000
## Max. :680.7 Max. :3.961 Max. :1.0000
## rework_needed
## Min. :0.0000
## 1st Qu.:0.0000
## Median :0.0000
## Mean :0.0108
## 3rd Qu.:0.0000
## Max. :1.0000
freq_shift <- table(data$shift)
persen_shift <- prop.table(freq_shift) * 100
tabel_shift <- data.frame(
Kategori = names(freq_shift),
Frekuensi = as.vector(freq_shift),
Persentase = round(as.vector(persen_shift), 2)
)
knitr::kable(tabel_shift,
caption = "Distribusi Shift",
align = "c")
| Kategori | Frekuensi | Persentase |
|---|---|---|
| day | 4505 | 45.05 |
| evening | 3520 | 35.20 |
| night | 1975 | 19.75 |
colSums(is.na(data))
## record_id plant line_id
## 0 0 0
## machine_id shift operator_experience_years
## 0 0 0
## material_batch ambient_temp_c ambient_humidity_pct
## 0 0 0
## vibration_rms pressure_bar feed_rate_mm_s
## 0 0 0
## laser_power_w coolant_flow_l_min thickness_mm
## 0 0 0
## tensile_strength_mpa surface_roughness_um defect_flag
## 0 0 0
## defect_type rework_needed
## 0 0
Berdasarkan hasil eksplorasi awal menggunakan fungsi str() dan head(), dataset memiliki 20 variabel dan 10.000 observasi yang merepresentasikan data proses manufaktur. Dataset terdiri dari variabel numerik dan kategorik.Selain itu, tidak terdapat missing value sehingga data siap digunakan untuk analisis.
data_clean <- na.omit(data)
data_clean$shift <- as.factor(data_clean$shift)
names(data)
## [1] "record_id" "plant"
## [3] "line_id" "machine_id"
## [5] "shift" "operator_experience_years"
## [7] "material_batch" "ambient_temp_c"
## [9] "ambient_humidity_pct" "vibration_rms"
## [11] "pressure_bar" "feed_rate_mm_s"
## [13] "laser_power_w" "coolant_flow_l_min"
## [15] "thickness_mm" "tensile_strength_mpa"
## [17] "surface_roughness_um" "defect_flag"
## [19] "defect_type" "rework_needed"
data_clean$tensile_strength_mpa <- as.numeric(data_clean$tensile_strength_mpa)
data_clean$surface_roughness_um <- as.numeric(data_clean$surface_roughness_um)
data_clean$ambient_humidity_pct <- as.numeric(data_clean$ambient_humidity_pct)
data_clean <- data_clean[complete.cases(data_clean), ]
head(data_clean)
## # A tibble: 6 × 20
## record_id plant line_id machine_id shift operator_experience_…¹ material_batch
## <dbl> <chr> <chr> <chr> <fct> <dbl> <chr>
## 1 1 Plan… L3 M07 even… 5.27 B090
## 2 2 Plan… L1 M18 night 1.61 B122
## 3 3 Plan… L4 M10 even… 8.35 B071
## 4 4 Plan… L3 M01 even… 4.66 B069
## 5 5 Plan… L1 M08 even… 6.77 B141
## 6 6 Plan… L3 M13 day 0 B049
## # ℹ abbreviated name: ¹operator_experience_years
## # ℹ 13 more variables: ambient_temp_c <dbl>, ambient_humidity_pct <dbl>,
## # vibration_rms <dbl>, pressure_bar <dbl>, feed_rate_mm_s <dbl>,
## # laser_power_w <dbl>, coolant_flow_l_min <dbl>, thickness_mm <dbl>,
## # tensile_strength_mpa <dbl>, surface_roughness_um <dbl>, defect_flag <dbl>,
## # defect_type <chr>, rework_needed <dbl>
Pada tahap preprocessing, data dibersihkan dari missing value menggunakan na.omit(). Variabel shift diubah menjadi kategorik, sedangkan ‘tensile_strength_mpa’, ‘surface_roughness_um’, dan ‘ambient_humidity_pct’ dikonversi ke numerik. Data kemudian dipastikan bebas nilai kosong dengan complete.cases() sehingga siap untuk analisis.
numeric_data <- data[, sapply(data, is.numeric)]
numeric_data <- numeric_data[, !(names(numeric_data) %in% c("record_id"))]
boxplot(numeric_data, las = 2, col = "lightblue", main = "Boxplot Manufacturing Dataset")
# Pemilihan Variabel
a. Variabel Dependen
``` r
X1 <- data_clean$tensile_strength_mpa
X2 <- data_clean$surface_roughness_um
data_clean$X3 <- as.factor(data_clean$shift)
X4 <- data_clean$ambient_humidity_pct
Y <- cbind(X1, X2)
dt <- data.frame(
X3 = data_clean$X3,
X1 = X1,
X2 = X2,
X4 = X4
)
knitr::kable(head(dt, 10),
caption = "Manufacturing Dataset",
align = "l")
| X3 | X1 | X2 | X4 |
|---|---|---|---|
| evening | 516.53 | 2.680 | 67.9 |
| night | 537.07 | 2.814 | 34.8 |
| evening | 539.20 | 2.139 | 50.4 |
| evening | 541.54 | 2.197 | 34.8 |
| evening | 594.15 | 1.339 | 32.7 |
| day | 511.26 | 2.555 | 90.0 |
| evening | 559.73 | 2.597 | 48.0 |
| day | 530.13 | 2.734 | 55.1 |
| night | 543.20 | 1.670 | 41.9 |
| evening | 513.36 | 3.533 | 44.7 |
Variabel ‘tensile_strength_mpa’ dan ‘surface_roughness_um’ digunakan sebagai variabel dependen, ‘shift’ sebagai variabel independen, dan ‘ambient_humidity_pct’ sebagai kovariat. Variabel ‘record_id’ hanya sebagai identitas dan tidak digunakan dalam analisis.
Dilakukan uji asumsi untuk melakukan model Manova, Ancova, dan Mancova.
ad.test(data_clean$tensile_strength_mpa)
##
## Anderson-Darling normality test
##
## data: data_clean$tensile_strength_mpa
## A = 0.27246, p-value = 0.6695
ad.test(data_clean$surface_roughness_um)
##
## Anderson-Darling normality test
##
## data: data_clean$surface_roughness_um
## A = 0.719, p-value = 0.0607
Berdasarkan hasil uji Anderson-Darling pada variabel ‘tensile_strength_mpa’ memiliki p-value sebesar 0.6695 dan variabel ‘surface_roughness_um’ memiliki p-value sebesar 0.0607 yang hasilnya sama-sama menunjukkan lebih dari 0.05.
Sehingga dapat disimpulkan bahwa kedua variabel dependen berdistribusi normal, sehingga asumsi normalitas univariat terpenuhi.
residu <- aov(tensile_strength_mpa ~ shift + ambient_humidity_pct, data = data_clean)
par(mfrow = c(1,1))
qqnorm(residuals(residu),
main = "Q-Q Plot Residual ANCOVA")
qqline(residuals(residu), col = "red")
Berdasarkan Q-Q plot, residual mengikuti garis diagonal sehingga asumsi normalitas terpenuhi.
Y <- data_clean[, c("tensile_strength_mpa",
"surface_roughness_um")]
mvn_result <- mvn(
data = Y,
mvn_test = "mardia"
)
mvn_result$multivariate_normality
## Test Statistic p.value Method MVN
## 1 Mardia Skewness 7.448 0.114 asymptotic ✓ Normal
## 2 Mardia Kurtosis 0.920 0.358 asymptotic ✓ Normal
Hasil uji Mardia menunjukkan Skewness memiliki p-value 0.114 dan Kurtosis memiliki p-value 0.358 yang hasilnya menunjukkan lebih dari 0.05.
Artinya, data berdistribusi normal secara multivariat, sehingga asumsi normalitas multivariat pada MANOVA dan MANCOVA terpenuhi.
boxM(Y, data_clean$shift)
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: Y by data_clean$shift
## Chi-Sq (approx.) = 3.3034, df = 6, p-value = 0.7699
Hasil uji Box’s M, p-value = 0.7699 yang artinya lebih dari 0.05.
Menunjukkan bahwa tidak terdapat perbedaan matriks kovarians antar kelompok shift, sehingga asumsi homogenitas kovarians terpenuhi.
leveneTest(tensile_strength_mpa ~ shift, data = data_clean)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.1823 0.8333
## 9997
leveneTest(surface_roughness_um ~ shift, data = data_clean)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 1.8579 0.156
## 9997
Hasil uji Levene pada variabel ‘tensile_strength_mpa’ memiliki p-value 0.8333 dan varibel ‘surface_roughness_um’ memiliki p-value 0.156 yang menunjukkan hasilnya lebih dari 0.05.
Artinya, varians antar kelompok homogen.
lin1 <- lm(tensile_strength_mpa ~ ambient_humidity_pct,
data=data_clean)
summary(lin1)
##
## Call:
## lm(formula = tensile_strength_mpa ~ ambient_humidity_pct, data = data_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -120.127 -22.244 -0.288 21.999 114.059
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 580.44356 1.37562 421.95 <2e-16 ***
## ambient_humidity_pct -0.55031 0.02713 -20.28 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 32.77 on 9998 degrees of freedom
## Multiple R-squared: 0.03951, Adjusted R-squared: 0.03942
## F-statistic: 411.3 on 1 and 9998 DF, p-value: < 2.2e-16
Terdapat hubungan linier signifikan antara ambient humidity dan tensile strength (p-value < 0,05) dengan arah negatif, di mana kenaikan kelembaban menurunkan tensile strength. Namun, pengaruhnya lemah (R² ≈ 3,95%).
lin2 <- lm(surface_roughness_um ~ ambient_humidity_pct,
data=data_clean)
summary(lin2)
##
## Call:
## lm(formula = surface_roughness_um ~ ambient_humidity_pct, data = data_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.46895 -0.27683 -0.00346 0.27317 1.67110
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.7730421 0.0171901 103.14 <2e-16 ***
## ambient_humidity_pct 0.0078075 0.0003391 23.03 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4095 on 9998 degrees of freedom
## Multiple R-squared: 0.05036, Adjusted R-squared: 0.05027
## F-statistic: 530.2 on 1 and 9998 DF, p-value: < 2.2e-16
Terdapat hubungan linier signifikan antara ambient humidity dan surface roughness (p-value < 0,05) dengan arah positif, di mana peningkatan kelembaban meningkatkan surface roughness. Namun, pengaruhnya lemah (R² ≈ 5,03%).
plot(data_clean$ambient_humidity_pct,
data_clean$tensile_strength_mpa)
plot(data_clean$ambient_humidity_pct,
data_clean$surface_roughness_um)
Berdasarkan scatter plot uji linieritas antara variabel ‘ambient_humidity_pct’ dengan ‘tensile_strength_mpa’ dan ‘ambient_humidity_pct’ dengan ‘surface_roughness_um’ terlihat adanya pola hubungan linier (tidak acak), sehingga asumsi linearitas terpenuhi.
cor(data_clean[, c("tensile_strength_mpa",
"surface_roughness_um",
"ambient_humidity_pct")])
## tensile_strength_mpa surface_roughness_um
## tensile_strength_mpa 1.00000000 -0.05067843
## surface_roughness_um -0.05067843 1.00000000
## ambient_humidity_pct -0.19878308 0.22441043
## ambient_humidity_pct
## tensile_strength_mpa -0.1987831
## surface_roughness_um 0.2244104
## ambient_humidity_pct 1.0000000
Hasil korelasi menunjukkan bahwa tidak ada nilai korelasi yang mendekati ±0.9 dan nilai tertingginya hanya sekitar 0.22.
Sehingga dapat disimpulkan bahwa tidak terjadi multikolinearitas, dan variabel aman digunakan bersama dalam model.
cor_matrix <- cor(data_clean[, c(
"tensile_strength_mpa",
"surface_roughness_um"
)])
cortest.bartlett(cor_matrix, n = nrow(data_clean))
## $chisq
## [1] 25.70964
##
## $p.value
## [1] 3.968393e-07
##
## $df
## [1] 1
Hasil uji Bartlett menunjukkan p-value < 0,05, sehingga terdapat korelasi signifikan antar variabel dependen dan asumsi untuk MANOVA terpenuhi.
model_interaksi <- manova(
cbind(tensile_strength_mpa,
surface_roughness_um) ~
shift * ambient_humidity_pct,
data = data_clean
)
summary(model_interaksi, test = "Pillai")
## Df Pillai approx F num Df den Df Pr(>F)
## shift 2 0.007491 18.79 4 19988 1.986e-15 ***
## ambient_humidity_pct 1 0.086232 471.52 2 9993 < 2.2e-16 ***
## shift:ambient_humidity_pct 2 0.000673 1.68 4 19988 0.1512
## Residuals 9994
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil uji interaksi variabel ‘ambient_humidity_pct’ memiliki p-value 0.1512 yang nilainya > 0.05.
Artinya, tidak terdapat interaksi signifikan antara variabel independen dan kovariat. Sehingga asumsi homogenitas slope terpenuhi.
Asumsi independensi observasi menyatakan bahwa setiap pengamatan bersifat bebas satu sama lain. Dalam penelitian ini, setiap baris data merepresentasikan satu kejadian produksi yang berbeda pada sistem manufaktur berbasis IoT. Data tidak memiliki struktur pengukuran berulang atau keterkaitan langsung antar observasi dalam analisis, sehingga setiap pengamatan diperlakukan sebagai independen. Oleh karena itu, asumsi independensi observasi dianggap terpenuhi.
hasil_uji <- data.frame(
Uji = c(
"Normalitas Univariat (Tensile)",
"Normalitas Univariat (Roughness)",
"Normalitas Multivariat (Mardia Skewness)",
"Normalitas Multivariat (Mardia Kurtosis)",
"Homogenitas Kovarians (Box's M)",
"Homogenitas Varians (Levene Tensile)",
"Homogenitas Varians (Levene Roughness)",
"Linieritas (Tensile vs Humidity)",
"Linieritas (Roughness vs Humidity)",
"Multikolinearitas",
"Korelasi DV (Bartlett)",
"Homogenitas Slope"
),
p_value = c(
0.6695,
0.0607,
0.114,
0.358,
0.7699,
0.8333,
0.156,
"< 2e-16",
"< 2e-16",
"0.22 (corr)",
3.968e-07,
0.1512
),
Keputusan = c(
"Normal",
"Normal",
"Normal",
"Normal",
"Homogen",
"Homogen",
"Homogen",
"Linier",
"Linier",
"Tidak ada multikolinearitas",
"Ada korelasi",
"Terpenuhi"
)
)
hasil_uji
## Uji p_value
## 1 Normalitas Univariat (Tensile) 0.6695
## 2 Normalitas Univariat (Roughness) 0.0607
## 3 Normalitas Multivariat (Mardia Skewness) 0.114
## 4 Normalitas Multivariat (Mardia Kurtosis) 0.358
## 5 Homogenitas Kovarians (Box's M) 0.7699
## 6 Homogenitas Varians (Levene Tensile) 0.8333
## 7 Homogenitas Varians (Levene Roughness) 0.156
## 8 Linieritas (Tensile vs Humidity) < 2e-16
## 9 Linieritas (Roughness vs Humidity) < 2e-16
## 10 Multikolinearitas 0.22 (corr)
## 11 Korelasi DV (Bartlett) 3.968e-07
## 12 Homogenitas Slope 0.1512
## Keputusan
## 1 Normal
## 2 Normal
## 3 Normal
## 4 Normal
## 5 Homogen
## 6 Homogen
## 7 Homogen
## 8 Linier
## 9 Linier
## 10 Tidak ada multikolinearitas
## 11 Ada korelasi
## 12 Terpenuhi
Berdasarkan hasil uji asumsi, data memenuhi normalitas, homogenitas, linearitas, serta tidak terjadi multikolinearitas maupun interaksi signifikan. Dengan demikian, asumsi MANOVA, ANCOVA, dan MANCOVA terpenuhi dan analisis dapat dilanjutkan.
manova_model <- manova(
cbind(tensile_strength_mpa, surface_roughness_um) ~ shift,
data = data_clean
)
summary(manova_model, test = "Wilks")
## Df Wilks approx F num Df den Df Pr(>F)
## shift 2 0.99288 17.884 4 19992 1.143e-14 ***
## Residuals 9997
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary.aov(manova_model)
## Response tensile_strength_mpa :
## Df Sum Sq Mean Sq F value Pr(>F)
## shift 2 375 187.33 0.1675 0.8457
## Residuals 9997 11177799 1118.12
##
## Response surface_roughness_um :
## Df Sum Sq Mean Sq F value Pr(>F)
## shift 2 12.49 6.2446 35.612 3.88e-16 ***
## Residuals 9997 1753.00 0.1754
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil MANOVA menunjukkan nilai Wilks’ Lambda sebesar 0,99288 dengan p-value < 0,05, sehingga dapat disimpulkan bahwa variabel shift berpengaruh signifikan secara simultan terhadap variabel dependen. Namun secara uji univariat, pengaruh signifikan hanya terjadi pada surface roughness, sedangkan tensile strength tidak signifikan.
ancova_model <- aov(
tensile_strength_mpa ~ shift + ambient_humidity_pct,
data = data_clean
)
summary(ancova_model)
## Df Sum Sq Mean Sq F value Pr(>F)
## shift 2 375 187 0.174 0.84
## ambient_humidity_pct 1 441559 441559 411.115 <2e-16 ***
## Residuals 9996 10736240 1074
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil ANCOVA menunjukkan bahwa variabel shift memiliki p-value sebesar 0,84 (> 0,05), sehingga dapat disimpulkan bahwa shift tidak berpengaruh signifikan terhadap tensile strength setelah dikontrol oleh kovariat. Sementara itu, variabel ambient_humidity_pct memiliki p-value < 0,05, yang berarti berpengaruh signifikan terhadap tensile strength. Dengan demikian, dapat disimpulkan bahwa variasi tensile strength lebih dipengaruhi oleh faktor kelembaban lingkungan dibandingkan oleh perbedaan shift kerja.
mancova_model <- manova(
cbind(tensile_strength_mpa, surface_roughness_um) ~
shift + ambient_humidity_pct,
data = data_clean
)
summary(mancova_model, test = "Pillai")
## Df Pillai approx F num Df den Df Pr(>F)
## shift 2 0.007486 18.78 4 19992 2.019e-15 ***
## ambient_humidity_pct 1 0.086195 471.39 2 9995 < 2.2e-16 ***
## Residuals 9996
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary.aov(mancova_model)
## Response tensile_strength_mpa :
## Df Sum Sq Mean Sq F value Pr(>F)
## shift 2 375 187 0.1744 0.84
## ambient_humidity_pct 1 441559 441559 411.1148 <2e-16 ***
## Residuals 9996 10736240 1074
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response surface_roughness_um :
## Df Sum Sq Mean Sq F value Pr(>F)
## shift 2 12.49 6.245 37.523 < 2.2e-16 ***
## ambient_humidity_pct 1 89.45 89.455 537.521 < 2.2e-16 ***
## Residuals 9996 1663.54 0.166
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil MANCOVA menunjukkan bahwa variabel shift memiliki nilai Pillai’s Trace = 0.007486 dengan p-value = 2.019 × 10⁻15 (< 0,05), sehingga berpengaruh signifikan secara simultan terhadap variabel dependen tensile_strength_mpa dan surface_roughness_um. Sementara itu, ambient_humidity_pct memiliki nilai Pillai’s Trace = 0.086195 dengan p-value < 2.2 × 10⁻16, sehingga juga berpengaruh signifikan secara simultan terhadap variabel dependen.
Untuk memenuhi tujuan analisis, dilakukan perbandingan antara model MANOVA (tanpa kovariat) dan MANCOVA (dengan kovariat) guna melihat pengaruh variabel ambient_humidity_pct terhadap hubungan antara shift dan variabel dependen.
Pada model MANOVA, variabel shift menunjukkan pengaruh signifikan secara simultan terhadap tensile_strength_mpa dan surface_roughness_um (p-value < 0,05). Namun, berdasarkan uji univariat, pengaruh signifikan hanya terjadi pada surface_roughness_um, sedangkan tensile_strength_mpa tidak signifikan.
Setelah memasukkan kovariat ambient_humidity_pct dalam model MANCOVA, hasil menunjukkan bahwa: - Variabel shift tetap signifikan secara simultan - Variabel ambient_humidity_pct juga signifikan terhadap kedua variabel dependen
Selain itu, pada uji univariat MANCOVA: - tensile_strength_mpa tetap tidak dipengaruhi oleh shift, tetapi dipengaruhi signifikan oleh ambient_humidity_pct - surface_roughness_um dipengaruhi signifikan oleh shift dan juga oleh ambient_humidity_pct
Hal ini menunjukkan bahwa kovariat ambient_humidity_pct memberikan kontribusi tambahan dalam menjelaskan variasi variabel dependen, terutama pada tensile_strength_mpa yang sebelumnya tidak signifikan terhadap shift.
Dengan demikian, MANCOVA memberikan model yang lebih komprehensif dibandingkan MANOVA karena mampu mengontrol pengaruh variabel luar (kovariat), sehingga interpretasi menjadi lebih akurat.
Hasil analisis menunjukkan adanya perbedaan interpretasi antara MANOVA dan MANCOVA akibat pengaruh kovariat. Pada MANOVA, variabel shift berpengaruh signifikan secara simultan, namun tidak signifikan terhadap tensile_strength_mpa secara parsial.
Setelah memasukkan kovariat ambient_humidity_pct pada MANCOVA, variabel tersebut terbukti berpengaruh signifikan terhadap kedua variabel dependen, sementara pengaruh shift tetap tidak signifikan terhadap tensile_strength_mpa. Hasil ini didukung oleh ANCOVA yang menunjukkan bahwa tensile_strength_mpa lebih dipengaruhi oleh ambient_humidity_pct dibandingkan shift.
Dengan demikian, kovariat memiliki peran penting dalam meningkatkan ketepatan model, dan MANCOVA lebih representatif dibandingkan MANOVA dalam menjelaskan data.