#
#
# Idzni shabrina maharani
# NIM : 2611018007
#
#DATA SIMULASI: 15 unit sampel independen, 3 perlakuan, 3 pengukuran.
# Di RStudio: buka file ini lalu klik Source. Tidak perlu paket tambahan.
# Angka sama dengan Data_Simulasi_Laboratorium_3_Perlakuan.xlsx.
# Hasil tersimpan pada folder hasil_laboratorium di working directory (lihat getwd()).
out <- file.path(getwd(), "hasil_laboratorium")
dir.create(out, recursive=TRUE, showWarnings=FALSE)
options(width=110, digits=7)
data <- data.frame(
ID=factor(sprintf("S%02d",1:15)),
Perlakuan=factor(rep(c("Beku","Dingin","Ruang"),each=5), levels=c("Beku","Dingin","Ruang")),
Hari0=c(102.4,98.6,105.2,100.8,96.5,101.3,97.8,104.6,99.5,100.2,103.1,98.4,101.7,96.9,104.2),
Hari7=c(99.8,96.2,101.5,98.6,94.1,90.5,89.2,92.8,87.6,91.4,77.4,72.6,80.1,74.8,78.3),
Hari14=c(96.5,92.8,99.1,94.7,91.9,80.2,76.5,83.7,79.1,77.8,51.2,48.5,55.3,46.7,53.6))
long <- reshape(data, varying=c("Hari0","Hari7","Hari14"),
v.names="VitaminC", timevar="Waktu", times=c("Hari0","Hari7","Hari14"),
idvar="ID", direction="long")
long$Waktu <- factor(long$Waktu, levels=c("Hari0","Hari7","Hari14"))
long <- long[order(long$ID,long$Waktu), ]; rownames(long) <- NULL
stopifnot(nrow(long)==45, all(table(long$ID)==3), all(table(data$Perlakuan)==5))
deskriptif <- do.call(rbind,lapply(levels(data$Perlakuan),function(g) {
do.call(rbind,lapply(levels(long$Waktu),function(t) {
x <- long$VitaminC[long$Perlakuan==g & long$Waktu==t]
data.frame(Perlakuan=g,Waktu=t,N=length(x),Mean=mean(x),SD=sd(x))
}))
}))
model <- aov(VitaminC ~ Perlakuan * Waktu + Error(ID/Waktu), data=long)
tab <- summary(model)
Y <- as.matrix(data[,c("Hari0","Hari7","Hari14")])
mlm <- lm(Y ~ Perlakuan, data=data)
# Sphericity: kovarians residual setelah memperhitungkan kelompok.
mauchly <- mauchly.test(mlm, X=~1)
C <- qr.Q(qr(contr.helmert(3)))
S <- crossprod(residuals(mlm))/df.residual(mlm)
Sc <- t(C) %*% S %*% C
epsilon <- sum(diag(Sc))^2/(2*sum(Sc^2))
within <- tab[["Error: ID:Waktu"]][[1]]
between <- tab[["Error: ID"]][[1]]
efek <- c("Waktu","Perlakuan:Waktu")
gg <- do.call(rbind,lapply(efek,function(e) {
df1 <- within[e,"Df"] * epsilon
df2 <- within["Residuals","Df"] * epsilon
f <- within[e,"F value"]
data.frame(Efek=e,Epsilon_GG=epsilon,df1_GG=df1,df2_GG=df2,F=f,
p_GG=pf(f,df1,df2,lower.tail=FALSE),
Eta2_parsial=within[e,"Sum Sq"]/(within[e,"Sum Sq"]+within["Residuals","Sum Sq"]))
}))
# Diagnostik normalitas residual rerata sampel dan dua kontras waktu.
res_diag <- cbind(Rerata=rowMeans(residuals(mlm)),residuals(mlm)%*%C)
colnames(res_diag) <- c("Rerata_sampel","Kontras_waktu_1","Kontras_waktu_2")
normalitas <- do.call(rbind,lapply(seq_len(ncol(res_diag)),function(j) {
a <- shapiro.test(res_diag[,j]);data.frame(Komponen=colnames(res_diag)[j],W=unname(a$statistic),p=a$p.value)
}))
# Brown-Forsythe (Levene berbasis median) pada setiap waktu.
homogenitas <- do.call(rbind,lapply(levels(long$Waktu),function(t) {
d <- subset(long,Waktu==t)
d$dev <- abs(d$VitaminC-ave(d$VitaminC,d$Perlakuan,FUN=median))
a <- anova(lm(dev~Perlakuan,data=d))
data.frame(Waktu=t,F=a[1,"F value"],df1=a[1,"Df"],df2=a[2,"Df"],p=a[1,"Pr(>F)"])
}))
# Analisis lanjutan: penurunan kadar dari hari 0 ke hari 14 (nilai positif = turun).
data$Perubahan <- data$Hari0-data$Hari14
gain_model <- aov(Perubahan~Perlakuan,data=data)
gain_desc <- aggregate(Perubahan~Perlakuan,data,function(x)c(Mean=mean(x),SD=sd(x)))
posthoc <- TukeyHSD(gain_model)
normalitas_penurunan <- shapiro.test(residuals(gain_model))
dev_gain <- abs(data$Perubahan-ave(data$Perubahan,data$Perlakuan,FUN=median))
homogenitas_penurunan <- anova(lm(dev_gain~data$Perlakuan))
# Analisis kepekaan karena residual penurunan tidak normal pada data ini.
# Uji permutasi eksak jumlah peringkat (dua sisi), termasuk peringkat terikat.
# Hipotesis nol: label kelompok dapat dipertukarkan (distribusi sama).
kruskal_penurunan <- kruskal.test(Perubahan~Perlakuan,data=data)
pasangan <- combn(levels(data$Perlakuan),2,simplify=FALSE)
permutasi <- do.call(rbind,lapply(pasangan,function(g) {
x <- data$Perubahan[data$Perlakuan==g[1]]
y <- data$Perubahan[data$Perlakuan==g[2]]
r <- rank(c(x,y),ties.method="average")
pusat <- length(x)*mean(r)
observed <- abs(sum(r[seq_along(x)])-pusat)
null <- combn(seq_along(r),length(x),FUN=function(i)abs(sum(r[i])-pusat))
data.frame(Perbandingan=paste(g[2],g[1],sep=" - "),
p_eksak=mean(null >= observed-1e-10),Jumlah_permutasi=length(null))
}))
permutasi$p_Holm <- p.adjust(permutasi$p_eksak,method="holm")
write.csv(permutasi,file.path(out,"Permutasi_Penurunan_Holm.csv"),row.names=FALSE)
write.csv(data,file.path(out,"Data_Wide.csv"),row.names=FALSE)
write.csv(as.data.frame(posthoc$Perlakuan),file.path(out,"Tukey_Penurunan.csv"))
write.csv(deskriptif,file.path(out,"Deskriptif.csv"),row.names=FALSE)
write.csv(long,file.path(out,"Data_Long.csv"),row.names=FALSE)
write.csv(gg,file.path(out,"ANOVA_Koreksi_GG.csv"),row.names=FALSE)
logfile <- file.path(out,"Output_Analisis_R.txt")
sink(logfile)
cat("ANALISIS DATA SIMULASI LABORATORIUM VITAMIN C\n",R.version.string,"\n\n")
cat("Data fiktif disusun manual untuk latihan. Tidak mewakili penelitian nyata.\n")
cat("Desain: 3 kelompok independen x 3 waktu berulang, 5 unit sampel/kelompok.\n")
cat("Analisis utama: interaksi perlakuan x waktu; alfa 0,05.\n\nDATA\n");print(data)
cat("\nDESKRIPTIF\n");print(deskriptif,row.names=FALSE)
cat("\nANOVA CAMPURAN TANPA KOREKSI\n");print(tab)
cat("\nUJI SPHERICITY MAUCHLY\n");print(mauchly)
cat("\nKOREKSI GREENHOUSE-GEISSER (dilaporkan konsisten untuk efek waktu)\n");print(gg,row.names=FALSE)
cat("\nSHAPIRO-WILK RESIDUAL\n");print(normalitas,row.names=FALSE)
cat("\nBROWN-FORSYTHE PER WAKTU\n");print(homogenitas,row.names=FALSE)
cat("\nPERUBAHAN HARI 0 DIKURANGI HARI 14\n");print(gain_desc)
cat("\nANOVA PENURUNAN\n");print(summary(gain_model))
cat("\nTUKEY: SELISIH PENURUNAN ANTARKELOMPOK, CI 95%\n");print(posthoc)
cat("\nNORMALITAS RESIDUAL PENURUNAN\n");print(normalitas_penurunan)
cat("\nBROWN-FORSYTHE PENURUNAN\n");print(homogenitas_penurunan)
cat("\nANALISIS KEPEKAAN: KRUSKAL-WALLIS PENURUNAN\n");print(kruskal_penurunan)
cat("\nPERMUTASI EKSAK JUMLAH PERINGKAT, DUA SISI, KOREKSI HOLM\n");print(permutasi,row.names=FALSE)
cat("\nCATATAN\n")
cat("Normalitas residual penurunan tidak terpenuhi; Tukey dilaporkan sebagai analisis parametrik pendukung.\n")
cat("Gunakan hasil permutasi peringkat sebagai pemeriksaan kepekaan perbandingan penurunan.\n")
cat("Uji peringkat menilai distribusi penurunan; bukan pengujian identik atas selisih rerata.\n")
cat("Nilai p adj=0 pada keluaran Tukey adalah keterbatasan presisi numerik, bukan peluang tepat nol.\n")
cat("Kadar vitamin C dalam mg/100 mL. Beku=-18 C, Dingin=4 C, Ruang=25 C.\n")
cat("Setiap ID adalah unit asal independen, dibagi menjadi tiga wadah untuk tiga waktu.\n")
cat("Wadah dari satu ID merupakan subsampel; bukan ulangan independen tambahan.\n")
cat("Uji homogenitas per waktu bukan uji lengkap kesamaan matriks kovarians antarkelompok.\n")
cat("Uji lanjut menilai penurunan Hari0 dikurangi Hari14, bukan seluruh pasangan waktu.\n")
cat("Tukey mengoreksi tiga perbandingan pasangan kelompok untuk perubahan tersebut.\n")
cat("Ukuran sampel kecil; uji asumsi memiliki daya terbatas. p>0,05 bukan bukti asumsi pasti terpenuhi.\n")
cat("Independensi antarunit sampel merupakan asumsi desain, tidak dapat diuji dari angka ini.\n")
cat("Hasil hanya latihan dan tidak membuktikan efek suhu penyimpanan atau umur simpan produk nyata.\n\n")
print(sessionInfo());sink()
png(file.path(out,"Grafik_Vitamin_C.png"),width=1400,height=900,res=150)
means <- sapply(levels(data$Perlakuan),function(g)colMeans(Y[data$Perlakuan==g,,drop=FALSE]))
par(mar=c(5,5,5,2))
matplot(1:3,means,type="b",pch=c(16,17,15),lty=1,lwd=2,
col=c("#2563EB","#D97706","#15803D"),xaxt="n",ylim=c(40,110),
xlab="Waktu pengukuran",ylab="Rerata vitamin C (mg/100 mL)",
main="Perubahan kadar vitamin C sari jambu biji")
axis(1,at=1:3,labels=c("Hari 0","Hari 7","Hari 14"))
legend("bottomleft",legend=c("Beku (-18 C)","Dingin (4 C)","Ruang (25 C)"),col=c("#2563EB","#D97706","#15803D"),pch=c(16,17,15),lty=1,bty="n")
mtext("Data simulasi; 5 unit sampel per kelompok. Garis menunjukkan rerata.",side=3,line=0.5,cex=0.8)
dev.off()
## png
## 2
cat(readLines(logfile),sep="\n")
## ANALISIS DATA SIMULASI LABORATORIUM VITAMIN C
## R version 4.6.1 (2026-06-24 ucrt)
##
## Data fiktif disusun manual untuk latihan. Tidak mewakili penelitian nyata.
## Desain: 3 kelompok independen x 3 waktu berulang, 5 unit sampel/kelompok.
## Analisis utama: interaksi perlakuan x waktu; alfa 0,05.
##
## DATA
## ID Perlakuan Hari0 Hari7 Hari14 Perubahan
## 1 S01 Beku 102.4 99.8 96.5 5.9
## 2 S02 Beku 98.6 96.2 92.8 5.8
## 3 S03 Beku 105.2 101.5 99.1 6.1
## 4 S04 Beku 100.8 98.6 94.7 6.1
## 5 S05 Beku 96.5 94.1 91.9 4.6
## 6 S06 Dingin 101.3 90.5 80.2 21.1
## 7 S07 Dingin 97.8 89.2 76.5 21.3
## 8 S08 Dingin 104.6 92.8 83.7 20.9
## 9 S09 Dingin 99.5 87.6 79.1 20.4
## 10 S10 Dingin 100.2 91.4 77.8 22.4
## 11 S11 Ruang 103.1 77.4 51.2 51.9
## 12 S12 Ruang 98.4 72.6 48.5 49.9
## 13 S13 Ruang 101.7 80.1 55.3 46.4
## 14 S14 Ruang 96.9 74.8 46.7 50.2
## 15 S15 Ruang 104.2 78.3 53.6 50.6
##
## DESKRIPTIF
## Perlakuan Waktu N Mean SD
## Beku Hari0 5 100.70 3.361547
## Beku Hari7 5 98.04 2.927969
## Beku Hari14 5 95.00 2.898275
## Dingin Hari0 5 100.68 2.533180
## Dingin Hari7 5 90.30 2.000000
## Dingin Hari14 5 79.46 2.746452
## Ruang Hari0 5 100.86 3.106928
## Ruang Hari7 5 76.64 2.958547
## Ruang Hari14 5 51.06 3.535958
##
## ANOVA CAMPURAN TANPA KOREKSI
##
## Error: ID
## Df Sum Sq Mean Sq F value Pr(>F)
## Perlakuan 2 3636 1818.1 77.69 1.36e-07 ***
## Residuals 12 281 23.4
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Error: ID:Waktu
## Df Sum Sq Mean Sq F value Pr(>F)
## Waktu 2 4906 2453.2 2121.7 <2e-16 ***
## Perlakuan:Waktu 4 2503 625.6 541.1 <2e-16 ***
## Residuals 24 28 1.2
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## UJI SPHERICITY MAUCHLY
##
## Mauchly's test of sphericity
## Contrasts orthogonal to
## ~1
##
##
## data: SSD matrix from lm(formula = Y ~ Perlakuan, data = data)
## W = 0.93131, p-value = 0.6761
##
##
## KOREKSI GREENHOUSE-GEISSER (dilaporkan konsisten untuk efek waktu)
## Efek Epsilon_GG df1_GG df2_GG F p_GG Eta2_parsial
## Waktu 0.9357212 1.871442 22.45731 2121.6984 4.46595e-26 0.9943760
## Perlakuan:Waktu 0.9357212 3.742885 22.45731 541.1101 9.03047e-22 0.9890333
##
## SHAPIRO-WILK RESIDUAL
## Komponen W p
## Rerata_sampel 0.9478656 0.49148521
## Kontras_waktu_1 0.8991757 0.09245444
## Kontras_waktu_2 0.9847895 0.99213113
##
## BROWN-FORSYTHE PER WAKTU
## Waktu F df1 df2 p
## Hari0 0.2745377 2 12 0.7645697
## Hari7 0.3387350 2 12 0.7192700
## Hari14 0.2989106 2 12 0.7469901
##
## PERUBAHAN HARI 0 DIKURANGI HARI 14
## Perlakuan Perubahan.Mean Perubahan.SD
## 1 Beku 5.7000000 0.6284903
## 2 Dingin 21.2200000 0.7395945
## 3 Ruang 49.8000000 2.0481699
##
## ANOVA PENURUNAN
## Df Sum Sq Mean Sq F value Pr(>F)
## Perlakuan 2 5004 2502.1 1461 4.68e-15 ***
## Residuals 12 21 1.7
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## TUKEY: SELISIH PENURUNAN ANTARKELOMPOK, CI 95%
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Perubahan ~ Perlakuan, data = data)
##
## $Perlakuan
## diff lwr upr p adj
## Dingin-Beku 15.52 13.31206 17.72794 0
## Ruang-Beku 44.10 41.89206 46.30794 0
## Ruang-Dingin 28.58 26.37206 30.78794 0
##
##
## NORMALITAS RESIDUAL PENURUNAN
##
## Shapiro-Wilk normality test
##
## data: residuals(gain_model)
## W = 0.87013, p-value = 0.03389
##
##
## BROWN-FORSYTHE PENURUNAN
## Analysis of Variance Table
##
## Response: dev_gain
## Df Sum Sq Mean Sq F value Pr(>F)
## data$Perlakuan 2 2.2773 1.1387 1.1263 0.3562
## Residuals 12 12.1320 1.0110
##
## ANALISIS KEPEKAAN: KRUSKAL-WALLIS PENURUNAN
##
## Kruskal-Wallis rank sum test
##
## data: Perubahan by Perlakuan
## Kruskal-Wallis chi-squared = 12.5, df = 2, p-value = 0.00193
##
##
## PERMUTASI EKSAK JUMLAH PERINGKAT, DUA SISI, KOREKSI HOLM
## Perbandingan p_eksak Jumlah_permutasi p_Holm
## Dingin - Beku 0.007936508 252 0.02380952
## Ruang - Beku 0.007936508 252 0.02380952
## Ruang - Dingin 0.007936508 252 0.02380952
##
## CATATAN
## Normalitas residual penurunan tidak terpenuhi; Tukey dilaporkan sebagai analisis parametrik pendukung.
## Gunakan hasil permutasi peringkat sebagai pemeriksaan kepekaan perbandingan penurunan.
## Uji peringkat menilai distribusi penurunan; bukan pengujian identik atas selisih rerata.
## Nilai p adj=0 pada keluaran Tukey adalah keterbatasan presisi numerik, bukan peluang tepat nol.
## Kadar vitamin C dalam mg/100 mL. Beku=-18 C, Dingin=4 C, Ruang=25 C.
## Setiap ID adalah unit asal independen, dibagi menjadi tiga wadah untuk tiga waktu.
## Wadah dari satu ID merupakan subsampel; bukan ulangan independen tambahan.
## Uji homogenitas per waktu bukan uji lengkap kesamaan matriks kovarians antarkelompok.
## Uji lanjut menilai penurunan Hari0 dikurangi Hari14, bukan seluruh pasangan waktu.
## Tukey mengoreksi tiga perbandingan pasangan kelompok untuk perubahan tersebut.
## Ukuran sampel kecil; uji asumsi memiliki daya terbatas. p>0,05 bukan bukti asumsi pasti terpenuhi.
## Independensi antarunit sampel merupakan asumsi desain, tidak dapat diuji dari angka ini.
## Hasil hanya latihan dan tidak membuktikan efek suhu penyimpanan atau umur simpan produk nyata.
##
## R version 4.6.1 (2026-06-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8
## [3] LC_MONETARY=English_United States.utf8 LC_NUMERIC=C
## [5] LC_TIME=English_United States.utf8
##
## time zone: America/Los_Angeles
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 xfun_0.61 cachem_1.1.0
## [6] knitr_1.52 htmltools_0.5.9 rmarkdown_2.32 lifecycle_1.0.5 cli_3.6.6
## [11] sass_0.4.10 jquerylib_0.1.4 compiler_4.6.1 rstudioapi_0.19.0 tools_4.6.1
## [16] evaluate_1.0.5 bslib_0.12.0 yaml_2.3.12 rlang_1.3.0 jsonlite_2.0.0
cat("\n\nHasil tersimpan di:",normalizePath(out),"\n")
##
##
## Hasil tersimpan di: C:\Users\ASUS\AppData\Local\Packages\5319275A.WhatsAppDesktop_cv1g1gvanyjgm\LocalState\sessions\3AEBE5185D7DD61FB4AC3372598BF47CF41835E0\transfers\2026-40\hasil_laboratorium