# ==============================================================================
# TEMPLATE JAWABAN KUIS
# Komputasi Statistika, Kelas D
# Prodi S1 Statistika FSAD ITS - Semester Genap 2025/2026
# Kamis, 12 Maret 2026
# ==============================================================================
# Nama  : Shyella Angel Therecia
# NRP   : 5003251060
# Kelas : D
# ==============================================================================


# ==============================================================================
# Soal 1 [TOTAL 50 poin] - Winsorized Mean
# ==============================================================================

# Data
x <- c(12, 45, 52, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 310)

# --- [a] Buatlah fungsi winsorized_mean(x, alpha) ---

winsorized_mean <- function(x, alpha) {
  # TULIS KODE ANDA DI SINI
  sorted_x <- sort(x)
  n <- length(x)
  k <- floor(n*alpha)
  y <- rep(0,n)
  
  for(i in 1:n){
    if(i<=k){
      y[i] <- sorted_x[k+1]
    }else if(i>n-k){
      y[i] <- sorted_x[n-k]
    }else{
      y[i] <- sorted_x[i]
    }
  }
  total <- 0
  for(i in 1:n){
    total <- total+y[i]
  }
  result <- total/n
  return(result)
}
# --- [b] Hitung ordinary mean (alpha=0) dan Winsorized mean 20% (alpha=0.2) ---

# Ordinary mean
ordinary_mean <- winsorized_mean(x,0)
cat("Ordinary mean (alpha=0):", ordinary_mean, "\n")
## Ordinary mean (alpha=0): 81.86667
# Winsorized mean 20%
# TULIS KODE ANDA DI SINI
winsorized_mean20 <- winsorized_mean(x, 0.2)
cat("Winsorized Mean 20% (alpha = 0.2:", winsorized_mean20, "\n")
## Winsorized Mean 20% (alpha = 0.2: 69.73333
# ==============================================================================
# Soal 1 Visualisasi Data
# ==============================================================================
boxplot(x,
        main = "Winsorized Mean : Data Produksi",
        xlab = "Data Produksi",
        ylab = "Nilai Output",
        col = "lightgreen",
        ylim = c(0, 350)
        )

points(1, mean(x), col = "blue", pch = 16, cex = 1.5)
points(1, 69.73333, col = "red", pch = 16, cex = 1.5)

text(1.2, ordinary_mean, "Ordinary Mean", pos = 4, col = "blue")
text(1.2, winsorized_mean20, "Winsorized Mean(20%)", pos = 4, col = "red")
text(1, 310, "Outlier", pos = 3, col = "red")

# ==============================================================================
# Soal 1 Analisis dan Interpretasi Hasil Visualisasi
# ==============================================================================
#Boxplot menunjukkan bahwa 14 dari 15 mesin memproduksi output dalam rentang 50-100 unit, dengan median sekitar 70 unit. Kotak hijau (box) merepresentasikan 50% data tengah yang berada di kisaran 60-85 unit, mengindikasikan bahwa sebagian besar mesin memiliki kinerja yang relatif konsisten dan normal.

#Terdapat satu outlier ekstrim pada nilai 310 unit yang ditandai dengan lingkaran merah berlabel "Outlier". Nilai ini berada sangat jauh (lebih dari 200 unit) dari data terbesar kedua, menciptakan gap yang jelas pada visualisasi. Outlier ini sesuai dengan keterangan soal bahwa mesin ke-15 mengalami kerusakan, sehingga produksinya tidak merepresentasikan kinerja normal.

#Pada Ordinary Mean (titik biru) = 81.87. Rata-ratanya tertarik ke atas karena pengaruh outlier 310, sehingga nilainya menjadi lebih tinggi dari sebagian besar data.
#Sedangkan pada Winsorized Mean (titik merah) = 69.73. Rata-ratanya jauh lebih rendah dan sangat mendekati median (garis hitam).Ini menunjukkan bahwa proses winsorizing berhasil mengurangi pengaruh outlier.
#Selisih kedua mean sekitar 12 poin menunjukkan besarnya pengaruh outlier terhadap rata-rata biasa.
# ==============================================================================
# Soal 2 [TOTAL 60 poin] - Weighted Multivariate Descriptive Statistics
# ==============================================================================

# --- Baca data CSV ---
df <- read.csv("C:/Users/shyella/Downloads/Quiz 1 Komstat/data_quiz1.csv")
X <- as.matrix(df[, c("x1", "x2", "x3")])
w <- df$w

# --- [a] Buatlah fungsi weighted_corr(X, w) ---

weighted_corr <- function(X, w) {
  n <- nrow(X)
  p <- ncol(X)
  W <- diag(w)
  nw <- 0
  
  for(i in 1:n){
    nw <- nw+w[i]
  }
  one <- matrix(1,n,1)
  xw <- (1/nw) * t(X) %*% W %*%one
  D <- X - one %*% t(xw)
  Sw <- (1/nw) * t(D) %*% W %*% D
  sw <- sqrt(diag(Sw))
  V <- diag(sw)
  Rw <- solve(V) %*% Sw %*% solve(V)
  return(list(
    W = W,
    mean_w = xw,
    cov_w = Sw,
    sd_w = sw,
    corr_w = Rw
  ))
}
# --- [b] Aplikasikan fungsi pada data ---

# Panggil fungsi
hasil <- weighted_corr(X,w)
# Tampilkan vektor mean tertimbang
hasil$mean_w
##        [,1]
## x1 73.88530
## x2 65.39059
## x3 17.00938
# Tampilkan matriks varians-kovarians tertimbang
hasil$cov_w
##           x1        x2        x3
## x1  38.16362 -37.75105 -27.15386
## x2 -37.75105  41.10767  29.16587
## x3 -27.15386  29.16587  21.14757
# Tampilkan vektor standar deviasi tertimbang
hasil$sd_w
##       x1       x2       x3 
## 6.177671 6.411527 4.598649
# Tampilkan matriks korelasi tertimbang
hasil$corr_w
##            [,1]       [,2]       [,3]
## [1,]  1.0000000 -0.9531095 -0.9558207
## [2,] -0.9531095  1.0000000  0.9891979
## [3,] -0.9558207  0.9891979  1.0000000
# ==============================================================================
# Soal 2 Visualisasi Data
# ==============================================================================
library(corrplot)
## corrplot 0.95 loaded
cor_matrix <- hasil$corr_w

colnames(cor_matrix) <- c("Udara", "Air", "RTH")
rownames(cor_matrix) <- c("Udara", "Air", "RTH")

corrplot(cor_matrix,
         method = "color",
         type = "full",
         addCoef.col = "black",
         tl.col = "black",
         tl.srt = 45,
         number.cex = 1.5,
         col = colorRampPalette(c("darkblue", "blue", "white", "red", "darkred"))(100),
         title = "Weighted Correlation Matrix",
         mar = c(0, 0, 2, 0)
         )

# ==============================================================================
# Soal 2 Analisis dan Interpretasi Hasil Visualisasi
# ==============================================================================
#Matriks korelasi menunjukkan hubungan antara tiga variabel lingkungan: Indeks Kualitas Udara, Indeks Kualitas Air, dan Rasio Ruang Terbuka Hijau (RTH) pada 38 kabupaten/kota di Jawa Timur, dengan bobot berdasarkan luas wilayah.

#1. Korelasi Indeks Kualitas Udara dengan Indeks Kualitas Air = -0.95
#Nilai ini mendekati -1, menunjukkan hubungan negatif yang sangat kuat. Artinya, daerah dengan kualitas udara tinggi cenderung memiliki kualitas air yang rendah, dan sebaliknya. Ini seperti hubungan timbal balik yang berlawanan arah.

#2. Korelasi Indeks Kualitas Udara dengan Rasio Ruang Terbuka Hijau = -0.96
#Hubungan negatif sangat kuat juga terjadi antara kualitas udara dan ruang terbuka hijau. Daerah dengan udara bersih cenderung memiliki sedikit ruang terbuka hijau. Hal ini mungkin mencerminkan karakteristik wilayah perkotaan atau industri yang memiliki kualitas udara baik namun minim RTH, karena lahannya digunakan untuk industri atau perkotaan yang padat bangunan, sehingga minim RTH.

#3. Korelasi Indeks Kualitas Air dengan Rasio Ruang Terbuka Hijau = 0.99
#Nilai ini sangat mendekati 1, menunjukkan hubungan positif yang sangat kuat. Daerah dengan kualitas air baik cenderung memiliki ruang terbuka hijau yang luas. Kedua variabel ini saling mendukung dan biasanya ditemukan di daerah pegunungan atau kawasan konservasi yang masih alami..