SOAL 1

# =================
# Memuat Dataset
# ================

df <- data.frame(
  Mahasiswa=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20),
  Waktu_dalam_menit=c(18,22,25,21,19,24,20,23,26,22,21,27,19,23,24,25,20,22,21,23)
)
df
##    Mahasiswa Waktu_dalam_menit
## 1          1                18
## 2          2                22
## 3          3                25
## 4          4                21
## 5          5                19
## 6          6                24
## 7          7                20
## 8          8                23
## 9          9                26
## 10        10                22
## 11        11                21
## 12        12                27
## 13        13                19
## 14        14                23
## 15        15                24
## 16        16                25
## 17        17                20
## 18        18                22
## 19        19                21
## 20        20                23
# =============================
# Mengurutkan data dari terkecil
# ==============================

a <- df$Waktu_dalam_menit

x_sorted <- sort(a)
x_sorted
##  [1] 18 19 19 20 20 21 21 21 22 22 22 23 23 23 24 24 25 25 26 27
# ===============================
# Hitung ECDF
# ===============================

n <- length(a)        #panjang data
i <- 1:n
S_x <- i / n # S(x_i)
S_prev <- (i - 1) / n # S(x_{i-1})
head(data.frame(i, x_sorted, S_x, S_prev))
##   i x_sorted  S_x S_prev
## 1 1       18 0.05   0.00
## 2 2       19 0.10   0.05
## 3 3       19 0.15   0.10
## 4 4       20 0.20   0.15
## 5 5       20 0.25   0.20
## 6 6       21 0.30   0.25
# ===============================
# Hitung distribsi teoritis normal
# ================================

mu_hat <- mean(x_sorted)
sigma_hat <- sd(x_sorted)
cat("Rata-rata adalah: ", mu_hat,"\n")
## Rata-rata adalah:  22.25
cat("Standar Deviasi adalah: ", sigma_hat, "\n")
## Standar Deviasi adalah:  2.446802
z_i <- (x_sorted - mu_hat) / sigma_hat
head(z_i)
## [1] -1.7369608 -1.3282642 -1.3282642 -0.9195675 -0.9195675 -0.5108708
# ==============================
# Hitung CDF Teoritis F0(x)
# ==============================

F0_x <- pnorm(x_sorted, mean = mu_hat, sd = sigma_hat)
head(F0_x)
## [1] 0.04119704 0.09204543 0.09204543 0.17889941 0.17889941 0.30472075
# =================
# Hitung 2 selisih
# =================

diff1 <- abs(S_x - F0_x) # |S(x_i) - F0(x_i)|
diff2 <- abs(S_prev - F0_x) # |S(x_{i-1}) - F0(x_i)|
head(data.frame(
i = i,
x_i = x_sorted,
S_x = S_x,
S_prev = S_prev,
F0_x = F0_x,
diff1 = diff1,
diff2 = diff2
))
##   i x_i  S_x S_prev       F0_x       diff1       diff2
## 1 1  18 0.05   0.00 0.04119704 0.008802959 0.041197041
## 2 2  19 0.10   0.05 0.09204543 0.007954575 0.042045425
## 3 3  19 0.15   0.10 0.09204543 0.057954575 0.007954575
## 4 4  20 0.20   0.15 0.17889941 0.021100593 0.028899407
## 5 5  20 0.25   0.20 0.17889941 0.071100593 0.021100593
## 6 6  21 0.30   0.25 0.30472075 0.004720752 0.054720752
# ===============================================
# Ambil Nilai maksimum sebagai nilai statistik D
# ===============================================

D_statistik <- max(c(diff1, diff2))
cat("Nilai D Statistik: ", D_statistik, "\n")
## Nilai D Statistik:  0.09527925
# =============================================
# Membandingkan dengan nilai tabel kritis
# =============================================

alpha <- 0.05
D_crit <- 1.36 / sqrt(n)
cat("Nilai D Kritis: ", D_crit, "\n")
## Nilai D Kritis:  0.3041052
# =====================================
# Membuat Keputusan
# =====================================

D_statistik <= D_crit   #TRUE: gagal tolak H0; FALSE: tolak H0
## [1] TRUE
# ==============================
# Interpretasi UJI K-S
# =============================

if (D_statistik > D_crit) {
cat("Keputusan (dengan nilai kritis): Tolak H0,
data tidak mengikuti distribusi normal N(mu_hat, sigma_hat).\n")
} else {
cat("Keputusan (dengan nilai kritis): Gagal menolak H0, tidak ada bukti kuat bahwa data
menyimpang dari normal N(mu_hat, sigma_hat).\n")
}
## Keputusan (dengan nilai kritis): Gagal menolak H0, tidak ada bukti kuat bahwa data
## menyimpang dari normal N(mu_hat, sigma_hat).

SOAL 2

library(tidyr)
library(ggplot2)

# ===========================
# Memuat Dataset
# ===========================

df <- data.frame(
  Spesimen = c(1,2,3,4,5,6,7,8),
  Pabrik_A = c(52,55,53,54,56,55,53,54),
  Pabrik_B = c(49,50,51,48,52,50,49,51),
  Pabrik_C = c(47,46,45,44,46,45,47,44)
)
df
##   Spesimen Pabrik_A Pabrik_B Pabrik_C
## 1        1       52       49       47
## 2        2       55       50       46
## 3        3       53       51       45
## 4        4       54       48       44
## 5        5       56       52       46
## 6        6       55       50       45
## 7        7       53       49       47
## 8        8       54       51       44
# =======================
# Mengubah ke format long
# ======================

df_long <- df %>%
  pivot_longer(
    cols = c(Pabrik_A, Pabrik_B, Pabrik_C),
    names_to = "Pabrik",
    values_to = "Nilai"
  )
df_long
## # A tibble: 24 × 3
##    Spesimen Pabrik   Nilai
##       <dbl> <chr>    <dbl>
##  1        1 Pabrik_A    52
##  2        1 Pabrik_B    49
##  3        1 Pabrik_C    47
##  4        2 Pabrik_A    55
##  5        2 Pabrik_B    50
##  6        2 Pabrik_C    46
##  7        3 Pabrik_A    53
##  8        3 Pabrik_B    51
##  9        3 Pabrik_C    45
## 10        4 Pabrik_A    54
## # ℹ 14 more rows
# ==================================
# Visualisasi Boxplot per pabrik
# ==================================


ggplot(df_long, aes(x = Pabrik, y = Nilai, fill = Pabrik)) +
  geom_boxplot() +
  labs(
    title = "Boxplot Nilai per Pabrik",
    x = "Pabrik",
    y = "Nilai"
  ) +
  theme_minimal()

# ==========================================
# Melakukan UJI BARLET dengan alpha = 0.05
# =========================================

bartlet.test <- bartlett.test(Nilai ~ Pabrik, data = df_long)

hasil_bartlett <- bartlett.test(Nilai ~ Pabrik, data = df_long)

cat("=== Uji Bartlett ===\n")
## === Uji Bartlett ===
cat("Statistik Uji  : ", hasil_bartlett$statistic, "\n")
## Statistik Uji  :  0.07139142
cat("Derajat bebas        : ", hasil_bartlett$parameter, "\n")
## Derajat bebas        :  2
cat("p-value    : ", hasil_bartlett$p.value, "\n")
## p-value    :  0.9649339

SOAL 3

library(BSDA)
## Warning: package 'BSDA' was built under R version 4.5.2
## Loading required package: lattice
## 
## Attaching package: 'BSDA'
## The following object is masked from 'package:datasets':
## 
##     Orange
# =================================
# Memuat dataset
# =================================
df <- data.frame(
  Karyawan = c(1,2,3,4,5,6,7,8,9,10,11,12),
  Kantor = c(8,7,9,4,7,5,11,8,9,8,11,6),
  WFH    = c(10,9,8,6,7,10,12,7,10,9,12,7)
)
df
##    Karyawan Kantor WFH
## 1         1      8  10
## 2         2      7   9
## 3         3      9   8
## 4         4      4   6
## 5         5      7   7
## 6         6      5  10
## 7         7     11  12
## 8         8      8   7
## 9         9      9  10
## 10       10      8   9
## 11       11     11  12
## 12       12      6   7
# ============================================
# Menghitung selisih produktivitas berpasangan
# ============================================

df$Selisih <- df$WFH-df$Kantor
df
##    Karyawan Kantor WFH Selisih
## 1         1      8  10       2
## 2         2      7   9       2
## 3         3      9   8      -1
## 4         4      4   6       2
## 5         5      7   7       0
## 6         6      5  10       5
## 7         7     11  12       1
## 8         8      8   7      -1
## 9         9      9  10       1
## 10       10      8   9       1
## 11       11     11  12       1
## 12       12      6   7       1
# =======================================
# Melakukan Uji Tanda (Sign Test)
# =======================================
sign_result <- SIGN.test(x = df$WFH, y = df$Kantor, alternative = "two.sided")
sign_result
## 
##  Dependent-samples Sign-Test
## 
## data:  df$WFH and df$Kantor
## S = 9, p-value = 0.06543
## alternative hypothesis: true median difference is not equal to 0
## 95 percent confidence interval:
##  0.1063636 2.0000000
## sample estimates:
## median of x-y 
##             1 
## 
## Achieved and Interpolated Confidence Intervals: 
## 
##                   Conf.Level L.E.pt U.E.pt
## Lower Achieved CI     0.8540 1.0000      2
## Interpolated CI       0.9500 0.1064      2
## Upper Achieved CI     0.9614 0.0000      2
# =======================================
# Melakukan Uji Wilcoxon Signed-rank
# =======================================

wilcox_test <- wilcox.test(df$WFH, df$Kantor, 
                           alternative = "greater",
                           paired = TRUE,
                           exact = FALSE)

wilcox_test
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  df$WFH and df$Kantor
## V = 58, p-value = 0.01235
## alternative hypothesis: true location shift is greater than 0
# =================================
# Membandingkan kedua hasil
# =================================

cat("\n--- HASIL PERBANDINGAN ---\n")
## 
## --- HASIL PERBANDINGAN ---
cat("Uji Tanda (Sign Test): p-value =", sign_result$p.value, "\n")
## Uji Tanda (Sign Test): p-value = 0.06542969
cat("Wilcoxon Signed-Rank Test: p-value =", wilcox_test$p.value, "\n")
## Wilcoxon Signed-Rank Test: p-value = 0.01235484
if(sign_result$p.value < 0.05){
  cat("→ Sign Test MENOLAK H0: Ada peningkatan produktivitas.\n")
} else {
  cat("→ Sign Test GAGAL menolak H0: Tidak terbukti ada peningkatan.\n")
}
## → Sign Test GAGAL menolak H0: Tidak terbukti ada peningkatan.
if(wilcox_test$p.value < 0.05){
  cat("→ Wilcoxon MENOLAK H0: Ada peningkatan produktivitas.\n")
} else {
  cat("→ Wilcoxon GAGAL menolak H0: Tidak terbukti ada peningkatan.\n")
}
## → Wilcoxon MENOLAK H0: Ada peningkatan produktivitas.