==============================================================================

JAWABAN KUIS DAN VISUALISASI DATA

Komputasi Statistika, Kelas D

Prodi S1 Statistika FSAD ITS - Semester Genap 2025/2026

Rabu, 18 Maret 2026

==============================================================================

Nama : Nabila Adina Zahra

NRP : 5003251140

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) {
  n <- length(x)
  k <- floor(n * alpha)
  x_sort <- sort(x)
  
  if (k > 0) {
    lower_bound <- x_sort[k + 1]
    upper_bound <- x_sort[n - k] 
    x_sort[1:k] <- lower_bound
    x_sort[(n - k + 1):n] <- upper_bound
  }
  return(mean(x_sort))
}

# --- [b] Hitung mean ---
ord_mean <- winsorized_mean(x, 0)
print(paste("ordinary mean (a=0):", ord_mean))
## [1] "ordinary mean (a=0): 81.8666666666667"
winsorized_20 <- winsorized_mean(x, 0.2)
print(paste("winsorized mean 20% (a=0.2):", winsorized_20))
## [1] "winsorized mean 20% (a=0.2): 69.7333333333333"
# VISUALISASI DATA
x_asli <- c(12, 45, 52, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 310)
x_winsor <- c(58, 58, 58, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 95)

df_x <- data.frame(
  nilai = c(x_asli, x_winsor),
  metode = rep(c("Ordinary (81.87"), "Winsorized (69.73)", 15)
)
# BOXPLOT
boxplot(nilai ~ metode,
        data = df_x,
        main = "Deteksi Outlier Produksi Mesin",
        xlab = "Metode perhitungan",
        ylab = "Output Data",
        col = "lightblue",
        horizontal = FALSE)

#Analisis dan interpretasi boxplot : Boxplot ini menunjukkan bahwa terdapat outlier pada data asli yaitu 310 yang membuat rata-rata menjadi 81.87. Setelah dilakukan winsorizing, outlier tersebut hilang dan menghasilkan rata-rata 69.73 yang lebih stabil.
# ==============================================================================
# Soal 2 [TOTAL 60 poin] - Weighted Multivariate Descriptive Statistics
# ==============================================================================
# --- Persiapan Data ---
# Pastikan path file benar sesuai komputer kamu
df <- read.csv("C:/Users/Acer/Downloads/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) {
  a <- nrow(X)
  b <- ncol(X)
  n_w <- sum(w)
  
  # 1. Hitung Mean Tertimbang
  x_bar_w <- numeric(b)
  for(j in 1:b){
    x_bar_w[j] <- sum(w * X[, j]) / n_w
  }
  
  # 2. Hitung Matriks Varians-Kovarians Tertimbang (S_w)
  S_w <- matrix(0, nrow = b, ncol = b)
  for(j in 1:b){
    for(k in 1:b){
      jumlah_terbobot = 0
      for(i in 1:a){
        jumlah_terbobot = jumlah_terbobot + w[i] * (X[i, j] - x_bar_w[j]) * (X[i, k] - x_bar_w[k])
      }
      S_w[j, k] <- jumlah_terbobot / n_w
    }
  }
  
  # 3. Hitung Matriks Korelasi (R_w)
  s_w <- sqrt(diag(S_w))
  R_w <- matrix(0, nrow = b, ncol = b)
  for(j in 1:b){
    for(k in 1:b){
      R_w[j, k] <- S_w[j, k] / (s_w[j] * s_w[k])
    }
  }
  
  return(list(
    x_bar_w = x_bar_w,
    S_w = S_w,
    s_w = s_w,
    R_w = R_w
  ))
}

# --- [b] Aplikasikan fungsi pada data ---
hasil <- weighted_corr(X, w)

# Tampilkan Hasil
print("Vektor mean tertimbang:")
## [1] "Vektor mean tertimbang:"
print(hasil$x_bar_w)
## [1] 73.88530 65.39059 17.00938
print("Matriks Kovarian Tertimbang:")
## [1] "Matriks Kovarian Tertimbang:"
print(hasil$S_w)
##           [,1]      [,2]      [,3]
## [1,]  38.16362 -37.75105 -27.15386
## [2,] -37.75105  41.10767  29.16587
## [3,] -27.15386  29.16587  21.14757
print("Vektor Standar Deviasi Tertimbang (s_w):")
## [1] "Vektor Standar Deviasi Tertimbang (s_w):"
print(hasil$s_w)
## [1] 6.177671 6.411527 4.598649
print("Matriks korelasi tertimbang:")
## [1] "Matriks korelasi tertimbang:"
print(hasil$R_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
#install.packages("corrplot")
library(corrplot)
## corrplot 0.95 loaded
# Visualisasi Data menggunakan corrplot
cor_matrix <- hasil$R_w

corrplot(cor_matrix,
         method = "color",
         type = "upper",
         addCoef.col = "black",
         tl.col = "black",
         main = "Matriks Korelasi Tertimbang Lingkungan Jatim")

#Analisis dan interpretasi : Berdasarkan Matriks Korelasi Tertimbang, terdapat korelasi positif yang sangat kuat (0.99) antara Indeks Kualitas Air dan Rasio RTH di Jawa Timur. Hal ini menunjukkan bahwa ketersediaan lahan hijau memiliki peran krusial terhadap terjaganya kualitas air di wilayah tersebut setelah memperhitungkan bobot luas geografis masing-masing daerah.