# ==============================
# 1. Input data (long format)
# ==============================
perlakuan <- c(
  rep("S1", 6),
  rep("S2", 6),
  rep("S3", 6),
  rep("S4", 6)
)

total <- c(
  # S1 (21–23 °C)
  35, 95, 57, 72, 73, 31,
  # S2 (26–28 °C)
  155, 161, 34, 31, 17, 14,
  # S3 (30–32 °C)
  196, 227, 171, 246, 213, 157,
  # S4 (33–35 °C)
  2, 4, 11, 4, 5, 3
)

data_echa <- data.frame(perlakuan, total)

# ==============================
# 2. ANOVA biasa
# ==============================
res.aov <- aov(total ~ perlakuan, data = data_echa)
summary(res.aov)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## perlakuan    3 125401   41800   25.32 5.16e-07 ***
## Residuals   20  33023    1651                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ==============================
# 3. Hitung KK manual
# ==============================
anova_tab <- summary(res.aov)[[1]]
MSE <- anova_tab["Residuals","Mean Sq"]
grand_mean <- mean(data_echa$total)
KK <- sqrt(MSE) / grand_mean * 100
cat("MSE =", MSE, "\nGrand Mean =", grand_mean, "\nKK =", KK, "%\n")
## MSE = 1651.15 
## Grand Mean = 83.91667 
## KK = 48.42226 %
# ==============================
# 4. Transformasi sqrt
# ==============================
data_echa$total_sqrt <- sqrt(data_echa$total)
res.aov_sqrt <- aov(total_sqrt ~ perlakuan, data = data_echa)
summary(res.aov_sqrt)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## perlakuan    3  437.5   145.8   27.52 2.67e-07 ***
## Residuals   20  106.0     5.3                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
MSE_sqrt <- summary(res.aov_sqrt)[[1]]["Residuals","Mean Sq"]
grand_mean_sqrt <- mean(data_echa$total_sqrt)
KK_sqrt <- sqrt(MSE_sqrt) / grand_mean_sqrt * 100
cat("KK sqrt =", KK_sqrt, "%\n")
## KK sqrt = 29.40656 %
# ==============================
# 5. Transformasi log (log(x+1))
# ==============================
data_echa$total_log <- log(data_echa$total + 1)
res.aov_log <- aov(total_log ~ perlakuan, data = data_echa)
summary(res.aov_log)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## perlakuan    3  41.00   13.67   35.99 2.98e-08 ***
## Residuals   20   7.59    0.38                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
MSE_log <- summary(res.aov_log)[[1]]["Residuals","Mean Sq"]
grand_mean_log <- mean(data_echa$total_log)
KK_log <- sqrt(MSE_log) / grand_mean_log * 100
cat("KK log =", KK_log, "%\n")
## KK log = 16.65403 %
# ==============================
# 6. Plot diagnostik
# ==============================
par(mfrow=c(1,3))
boxplot(total ~ perlakuan, data=data_echa, main="Asli")
boxplot(total_sqrt ~ perlakuan, data=data_echa, main="√x")
boxplot(total_log ~ perlakuan, data=data_echa, main="log(x+1)")

# ---------------------------------------------------
# Analisis RAL Non-Faktorial
# Data: Perkembangan kumbang Elaeidobius kamerunicus
# Faktor: Suhu (4 perlakuan)
# Ulangan: 6
# Analisis: ANOVA → DMRT 5% → KK
# ---------------------------------------------------

# Install paket jika belum ada
# install.packages("agricolae")
# install.packages("car")

library(agricolae)
library(car)
## Loading required package: carData
# ==============================
# 1. Input Data
# ==============================
perlakuan <- rep(c("S1","S2","S3","S4"), each=6)
total <- c(
  # S1 (21–23 °C)
  35,95,57,72,73,31,
  # S2 (26–28 °C)
  155,161,34,31,17,14,
  # S3 (30–32 °C)
  196,227,171,246,213,157,
  # S4 (33–35 °C)
  2,4,11,4,5,3
)
data_echa <- data.frame(perlakuan = factor(perlakuan), total = total)

# ==============================
# 2. Statistik Deskriptif
# ==============================
deskriptif <- aggregate(total ~ perlakuan, data=data_echa,
                        function(x) c(mean=mean(x), sd=sd(x)))
print(deskriptif)
##   perlakuan total.mean   total.sd
## 1        S1  60.500000  24.541801
## 2        S2  68.666667  69.652471
## 3        S3 201.666667  33.773757
## 4        S4   4.833333   3.188521
# Boxplot awal
boxplot(total ~ perlakuan, data=data_echa,
        main="Boxplot Data Asli", ylab="Jumlah Imago")

# ==============================
# 3. Transformasi (jika diperlukan)
# ==============================
# Karena data cenderung tidak homogen, coba transformasi log(x+1)
data_echa$log_total <- log(data_echa$total + 1)

# ==============================
# 4. Cek Asumsi ANOVA
# ==============================
model_log <- aov(log_total ~ perlakuan, data=data_echa)

# Normalitas residual
shapiro_test <- shapiro.test(residuals(model_log))
print(shapiro_test)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model_log)
## W = 0.95041, p-value = 0.2765
# Homogenitas varians (Levene Test)
levene_test <- leveneTest(log_total ~ perlakuan, data=data_echa)
print(levene_test)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value  Pr(>F)  
## group  3  2.6949 0.07347 .
##       20                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ==============================
# 5. ANOVA
# ==============================
anova_model <- aov(log_total ~ perlakuan, data=data_echa)
summary(anova_model)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## perlakuan    3  41.00   13.67   35.99 2.98e-08 ***
## Residuals   20   7.59    0.38                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ==============================
# Hitung KK (Koefisien Keragaman)
# ==============================
# Rumus KK = (sqrt(KT Galat) / mean) * 100%
anova_table <- anova(anova_model)
KT_galat <- anova_table["Residuals","Mean Sq"]
grand_mean <- mean(data_echa$log_total) # pakai data log
KK <- (sqrt(KT_galat) / grand_mean) * 100
cat("Koefisien Keragaman (KK):", round(KK,2), "%\n")
## Koefisien Keragaman (KK): 16.65 %
# Interpretasi KK
if(KK < 10){
  cat("KK termasuk baik (<10%) → data layak untuk interpretasi.\n")
} else {
  cat("KK > 10% → data kurang homogen.\n")
}
## KK > 10% → data kurang homogen.
# ==============================
# 6. Uji Lanjut (DMRT 5%)
# ==============================
dmrt <- duncan.test(anova_model, "perlakuan", group=TRUE, console=TRUE)
## 
## Study: anova_model ~ "perlakuan"
## 
## Duncan's new multiple range test
## for log_total 
## 
## Mean Square Error:  0.3797355 
## 
## perlakuan,  means
## 
##    log_total       std r        se      Min      Max      Q25      Q50      Q75
## S1  4.044762 0.4349339 6 0.2515736 3.465736 4.564348 3.702750 4.175451 4.300664
## S2  3.792826 1.0402981 6 0.2515736 2.708050 5.087596 3.034213 3.510542 4.676229
## S3  5.299667 0.1701923 6 0.2515736 5.062595 5.509388 5.181422 5.324590 5.413503
## S4  1.663408 0.4675352 6 0.2515736 1.098612 2.484907 1.442080 1.609438 1.746179
## 
## Alpha: 0.05 ; DF Error: 20 
## 
## Critical Range
##         2         3         4 
## 0.7421414 0.7789991 0.8024230 
## 
## Means with the same letter are not significantly different.
## 
##    log_total groups
## S3  5.299667      a
## S1  4.044762      b
## S2  3.792826      b
## S4  1.663408      c
# ==============================
# 7. Hasil Kelompok Huruf
# ==============================
print(dmrt$groups)
##    log_total groups
## S3  5.299667      a
## S1  4.044762      b
## S2  3.792826      b
## S4  1.663408      c
# ==============================
# 8. Visualisasi dengan Huruf DMRT
# ==============================
bar.group(dmrt$groups, ylim=c(0,6),
          xlab="Suhu", ylab="Rataan log(x+1)",
          main="Hasil DMRT 5%")

# ---------------------------------------------------
# Analisis RAL Non-Faktorial (Data Asli, tanpa transformasi)
# Data: Perkembangan kumbang Elaeidobius kamerunicus
# Faktor: Suhu (4 perlakuan)
# Ulangan: 6
# Analisis: ANOVA → DMRT 5% → KK
# ---------------------------------------------------

library(agricolae)
library(car)

# ==============================
# 1. Input Data
# ==============================
perlakuan <- rep(c("S1","S2","S3","S4"), each=6)
total <- c(
  # S1 (21–23 °C)
  35,95,57,72,73,31,
  # S2 (26–28 °C)
  155,161,34,31,17,14,
  # S3 (30–32 °C)
  196,227,171,246,213,157,
  # S4 (33–35 °C)
  2,4,11,4,5,3
)
data_echa <- data.frame(perlakuan = factor(perlakuan), total = total)

# ==============================
# 2. Statistik Deskriptif
# ==============================
deskriptif <- aggregate(total ~ perlakuan, data=data_echa,
                        function(x) c(mean=mean(x), sd=sd(x)))
print(deskriptif)
##   perlakuan total.mean   total.sd
## 1        S1  60.500000  24.541801
## 2        S2  68.666667  69.652471
## 3        S3 201.666667  33.773757
## 4        S4   4.833333   3.188521
# Boxplot awal (data asli)
boxplot(total ~ perlakuan, data=data_echa,
        main="Boxplot Data Asli", ylab="Jumlah Imago")

# ==============================
# 3. Cek Asumsi ANOVA
# ==============================
model_asli <- aov(total ~ perlakuan, data=data_echa)

# Normalitas residual
shapiro_test <- shapiro.test(residuals(model_asli))
print(shapiro_test)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model_asli)
## W = 0.92165, p-value = 0.06352
# Homogenitas varians (Levene Test)
levene_test <- leveneTest(total ~ perlakuan, data=data_echa)
print(levene_test)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  3  2.1376 0.1274
##       20
# ==============================
# 4. ANOVA
# ==============================
anova_model <- aov(total ~ perlakuan, data=data_echa)
summary(anova_model)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## perlakuan    3 125401   41800   25.32 5.16e-07 ***
## Residuals   20  33023    1651                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ==============================
# 5. Hitung KK (Koefisien Keragaman)
# ==============================
# Rumus KK = (sqrt(KT Galat) / mean) * 100%
anova_table <- anova(anova_model)
KT_galat <- anova_table["Residuals","Mean Sq"]
grand_mean <- mean(data_echa$total) # pakai data asli
KK <- (sqrt(KT_galat) / grand_mean) * 100
cat("Koefisien Keragaman (KK):", round(KK,2), "%\n")
## Koefisien Keragaman (KK): 48.42 %
# Interpretasi KK
if(KK < 10){
  cat("KK termasuk sangat baik (<10%) → data sangat teliti.\n")
} else if(KK < 20){
  cat("KK cukup baik (10–20%) → data masih bisa diterima.\n")
} else if(KK < 30){
  cat("KK sedang (20–30%) → hasil masih bisa digunakan dengan hati-hati.\n")
} else {
  cat("KK > 30% → ketelitian rendah, data kurang meyakinkan.\n")
}
## KK > 30% → ketelitian rendah, data kurang meyakinkan.
# ==============================
# 6. Uji Lanjut (DMRT 5%)
# ==============================
dmrt <- duncan.test(anova_model, "perlakuan", group=TRUE, console=TRUE)
## 
## Study: anova_model ~ "perlakuan"
## 
## Duncan's new multiple range test
## for total 
## 
## Mean Square Error:  1651.15 
## 
## perlakuan,  means
## 
##         total       std r      se Min Max    Q25   Q50    Q75
## S1  60.500000 24.541801 6 16.5889  31  95  40.50  64.5  72.75
## S2  68.666667 69.652471 6 16.5889  14 161  20.50  32.5 124.75
## S3 201.666667 33.773757 6 16.5889 157 246 177.25 204.5 223.50
## S4   4.833333  3.188521 6 16.5889   2  11   3.25   4.0   4.75
## 
## Alpha: 0.05 ; DF Error: 20 
## 
## Critical Range
##        2        3        4 
## 48.93722 51.36764 52.91223 
## 
## Means with the same letter are not significantly different.
## 
##         total groups
## S3 201.666667      a
## S2  68.666667      b
## S1  60.500000      b
## S4   4.833333      c
# ==============================
# 7. Hasil Kelompok Huruf
# ==============================
print(dmrt$groups)
##         total groups
## S3 201.666667      a
## S2  68.666667      b
## S1  60.500000      b
## S4   4.833333      c
# ==============================
# 8. Visualisasi dengan Huruf DMRT (Data Asli)
# ==============================
bar.group(dmrt$groups,
          ylim=c(0, max(data_echa$total)+20),
          xlab="Suhu", ylab="Rataan Jumlah Imago",
          main="Hasil DMRT 5% (Data Asli)")