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)
## Warning: package 'car' was built under R version 4.5.3
## 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("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.
kable(head(data, 10), caption = "Manufacturing_Dataset", align = "l")
| record_id | plant | line_id | machine_id | shift | operator_experience_years | material_batch | ambient_temp_c | ambient_humidity_pct | vibration_rms | pressure_bar | feed_rate_mm_s | laser_power_w | coolant_flow_l_min | thickness_mm | tensile_strength_mpa | surface_roughness_um | defect_flag | defect_type | rework_needed |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Plant_A | L3 | M07 | evening | 5.27 | B090 | 23.74 | 67.9 | 0.981 | 5.078 | 19.46 | 303.8 | 7.63 | 1.216 | 516.53 | 2.680 | 0 | none | 0 |
| 2 | Plant_A | L1 | M18 | night | 1.61 | B122 | 19.00 | 34.8 | 1.290 | 4.800 | 26.58 | 376.6 | 6.53 | 1.285 | 537.07 | 2.814 | 0 | none | 0 |
| 3 | Plant_A | L4 | M10 | evening | 8.35 | B071 | 19.85 | 50.4 | 0.871 | 5.642 | 23.92 | 328.9 | 6.22 | 1.220 | 539.20 | 2.139 | 0 | none | 0 |
| 4 | Plant_C | L3 | M01 | evening | 4.66 | B069 | 21.32 | 34.8 | 0.995 | 5.282 | 21.41 | 323.1 | 7.47 | 1.204 | 541.54 | 2.197 | 0 | none | 0 |
| 5 | Plant_A | L1 | M08 | evening | 6.77 | B141 | 24.88 | 32.7 | 0.697 | 5.048 | 14.98 | 341.2 | 4.32 | 1.216 | 594.15 | 1.339 | 0 | none | 0 |
| 6 | Plant_C | L3 | M13 | day | 0.00 | B049 | 20.53 | 90.0 | 1.279 | 4.019 | 23.57 | 384.1 | 5.75 | 1.146 | 511.26 | 2.555 | 0 | none | 0 |
| 7 | Plant_A | L2 | M15 | evening | 9.39 | B056 | 23.92 | 48.0 | 1.528 | 4.427 | 23.27 | 350.1 | 6.70 | 1.217 | 559.73 | 2.597 | 0 | none | 0 |
| 8 | Plant_A | L1 | M14 | day | 7.05 | B052 | 28.65 | 55.1 | 1.353 | 6.313 | 26.27 | 340.1 | 6.62 | 1.228 | 530.13 | 2.734 | 1 | warp | 1 |
| 9 | Plant_B | L3 | M06 | night | 7.68 | B051 | 19.41 | 41.9 | 0.845 | 5.887 | 30.45 | 307.2 | 8.89 | 1.090 | 543.20 | 1.670 | 0 | none | 0 |
| 10 | Plant_B | L1 | M07 | evening | 1.80 | B017 | 23.24 | 44.7 | 2.688 | 4.792 | 24.39 | 327.3 | 8.05 | 1.104 | 513.36 | 3.533 | 0 | none | 0 |
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)
)
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
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")
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 <- na.omit(data)
data$shift <- as.factor(data$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$tensile_strength_mpa <- as.numeric(data$tensile_strength_mpa)
data$surface_roughness_um <- as.numeric(data$surface_roughness_um)
data$ambient_humidity_pct <- as.numeric(data$ambient_humidity_pct)
data_clean <- data[complete.cases(data), ]
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.
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.
library(MVN)
Y <- data_clean[, c("tensile_strength_mpa",
"surface_roughness_um")]
mvn_result <- mvn(
data = Y,
mvn_test = "mardia"
)
hasil_mvn <- mvn_result$multivariate_normality
hasil_mvn$MVN <- ifelse(hasil_mvn$p.value > 0.05,
"Normal",
"Tidak Normal")
print(hasil_mvn)
## 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.
Secara keseluruhan, ketiga analisis menunjukkan hasil yang tidak sepenuhnya konsisten pada semua variabel dependen. Hasil MANOVA dan MANCOVA menunjukkan bahwa variabel shift kerja berpengaruh signifikan secara simultan terhadap kombinasi tensile strength dan surface roughness. Namun, berdasarkan uji univariat dan hasil ANCOVA, pengaruh tersebut tidak terjadi pada semua aspek, di mana shift kerja tidak berpengaruh signifikan terhadap tensile strength.
Di sisi lain, variabel ambient humidity terbukti memiliki pengaruh signifikan terhadap tensile strength setelah dikontrol dalam model ANCOVA, serta berpengaruh signifikan secara simultan dalam model MANCOVA. Hal ini menunjukkan bahwa faktor lingkungan memiliki peran penting dalam memengaruhi kualitas material, khususnya kekuatan tarik.
Temuan ini mengindikasikan bahwa variasi kualitas produk dalam proses manufaktur tidak hanya dipengaruhi oleh perbedaan shift kerja, tetapi juga sangat dipengaruhi oleh kondisi lingkungan. Selain itu, pengaruh shift kerja cenderung lebih terlihat pada aspek surface roughness dibandingkan tensile strength. Oleh karena itu, pengendalian kondisi lingkungan, khususnya kelembaban udara, serta evaluasi proses kerja pada setiap shift menjadi hal yang penting untuk menjaga konsistensi kualitas produk secara keseluruhan.