# 
#
# 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