# ==============================================================================
# TEMPLATE JAWABAN KUIS
# Komputasi Statistika, Kelas D
# Prodi S1 Statistika FSAD ITS - Semester Genap 2025/2026
# Kamis, 12 Maret 2026
# ==============================================================================
# Nama : Desy Adverina Faza
# NRP : 5003251148
# 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)
print(x)
## [1] 12 45 52 58 61 63 67 70 72 75 78 82 88 95 310
urut = function(x){
n = length(x)
temp = NULL
for(i in 1:(n-1)){
for (j in (i+1):n){
if(x[j] < x[i]){
temp = x[i]
x[i] = x[j]
x[j] = temp
}
}
}
return(x)
}
urut(x)
## [1] 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) {
# urutkan data
x <- urut(x)
n <- length(x)
k <- (n * alpha)
y <- x
sum <- 0
for(i in 1:n){
if(i<=k){
y[i] = x[k+1]
}else if(i <= (n-k)){
y[i] = x[i]
}else{
y[i] = x[n-k]
}
sum = sum + y[i]
}
mean_manual <- sum / n
return(mean_manual)
}
winsorized_mean(x,0)
## [1] 81.86667
winsorized_mean(x,0.2)
## [1] 69.73333
# --- [b] Hitung ordinary mean (alpha=0) dan Winsorized mean 20% (alpha=0.2) ---
# Ordinary mean
winsorized_mean(x,0)
## [1] 81.86667
# Winsorized mean 20%
winsorized_mean(x, 0.2)
## [1] 69.73333
##### Visualisasi Data Soal 1
mean_alphanol<- winsorized_mean(x,0)
mean_alphanolkoma2 <- winsorized_mean(x,0.2)
# Boxplot atau judul visual
boxplot(x, col="thistle", main="Perbandingan Mean dan Winsorized Mean")
# menampilkan garis mean
abline(h = mean_alphanol, col="blue", lwd=2)
abline(h = mean_alphanolkoma2, col="orange", lwd=2)
# penjelasan warna dan garis yag sudah di lakukan
legend("topright",
legend = c("Mean Biasa", "Winsorized Mean"),
col = c("blue", "orange"),
lwd = 2)

#INTERPRESTASI
# INTERPRETASI OTOMATIS
if(mean_alphanol > mean_alphanolkoma2){
cat("Nilai mean biasa lebih tinggi dibandingkan Winsorized mean.\n")
cat("Hal ini menunjukkan adanya outlier besar yang meningkatkan rata-rata.\n")
cat("Winsorized mean cenderung lebih stabil karena mengurangi pengaruh outlier.\n")
} else if(mean_alphanol < mean_alphanolkoma2){
cat("Nilai mean biasa lebih rendah dibandingkan Winsorized mean.\n")
cat("Hal ini mengindikasikan adanya outlier kecil yang menurunkan rata-rata.\n")
cat("Winsorized mean memberikan gambaran yang lebih representatif.\n")
} else {
cat("Nilai mean biasa dan Winsorized mean sama.\n")
cat("Hal ini menunjukkan tidak adanya pengaruh outlier yang signifikan.\n")
}
## Nilai mean biasa lebih tinggi dibandingkan Winsorized mean.
## Hal ini menunjukkan adanya outlier besar yang meningkatkan rata-rata.
## Winsorized mean cenderung lebih stabil karena mengurangi pengaruh outlier.
# ==============================================================================
# Soal 2 [TOTAL 60 poin] - Weighted Multivariate Descriptive Statistics
# ==============================================================================
# --- Baca data CSV ---
#install corrplot untuk visualisai
library(corrplot)
## corrplot 0.95 loaded
df <- read.csv("C:/Users/Lenovo/Downloads/data_quiz1.csv")
X <- as.matrix(df[, c("x1", "x2", "x3")])
w <- df$w
df
## kota x1 x2 x3 w
## 1 Kab. Pacitan 86 55 10.2 14.34
## 2 Kab. Ponorogo 78 64 15.8 14.19
## 3 Kab. Trenggalek 83 58 11.5 12.49
## 4 Kab. Tulungagung 75 68 17.3 11.45
## 5 Kab. Blitar 80 60 13.6 17.45
## 6 Kab. Kediri 74 66 16.8 15.24
## 7 Kab. Malang 66 74 23.5 34.73
## 8 Kab. Lumajang 77 62 14.7 17.97
## 9 Kab. Jember 69 72 21.2 33.13
## 10 Kab. Banyuwangi 73 67 19.4 35.93
## 11 Kab. Bondowoso 79 59 12.8 15.55
## 12 Kab. Situbondo 81 57 11.3 16.54
## 13 Kab. Probolinggo 72 65 16.1 17.25
## 14 Kab. Pasuruan 67 73 22.3 14.93
## 15 Kab. Sidoarjo 58 80 28.5 7.24
## 16 Kab. Mojokerto 68 70 19.8 9.85
## 17 Kab. Jombang 71 67 18.4 11.10
## 18 Kab. Nganjuk 76 63 15.2 12.89
## 19 Kab. Madiun 79 61 13.9 11.14
## 20 Kab. Magetan 82 56 10.8 7.06
## 21 Kab. Ngawi 77 62 14.5 13.96
## 22 Kab. Bojonegoro 75 65 16.0 23.13
## 23 Kab. Tuban 74 66 16.5 19.74
## 24 Kab. Lamongan 73 68 18.1 17.53
## 25 Kab. Gresik 61 78 26.3 12.56
## 26 Kab. Bangkalan 70 63 15.3 13.01
## 27 Kab. Sampang 76 58 12.5 12.28
## 28 Kab. Pamekasan 74 64 15.0 7.95
## 29 Kab. Sumenep 82 55 10.0 20.84
## 30 Kota Kediri 63 75 25.8 0.67
## 31 Kota Blitar 65 72 24.2 0.33
## 32 Kota Malang 57 82 30.1 1.11
## 33 Kota Probolinggo 64 74 24.5 0.55
## 34 Kota Pasuruan 62 77 27.0 0.39
## 35 Kota Mojokerto 60 79 28.8 0.20
## 36 Kota Madiun 61 78 27.5 0.36
## 37 Kota Surabaya 54 85 32.5 3.36
## 38 Kota Batu 84 60 11.8 1.94
# --- [a] Buatlah fungsi weighted_corr(X, w) ---
weighted_corr <- function(X, w) {
n <- nrow(X)
p <- ncol(X)
W <- diag(w)
nw <- sum(w)
one <- matrix(1, n, 1)
x_bar_w <- (1/nw) * t(X) %*% W %*% one
D <- X - one %*% t(x_bar_w)
S_w <- (1/nw) * t(D) %*% W %*% D
s_w <- sqrt(diag(S_w))
V <- diag(s_w)
R_w <- solve(V) %*% S_w %*% solve(V)
colnames(R_w) <- colnames(X)
rownames(R_w) <- colnames(X)
return(list(
W = W,
x_bar_w = x_bar_w,
S_w = S_w,
s_w = s_w,
R_w = R_w
))
}
analisis_korelasi = function(R) {
for (i in 1:(ncol(R)-1)) {
for (j in (i+1):ncol(R)) {
r = R[i,j]
# Menentukan kekuatan dan arah hubungan
if (r > 0) {
arah <- "searah (positif)"
} else if (r < 0) {
arah <- "berlawanan (negatif)"
} else {
arah <- "tidak ada hubungan"
}
cat("Hubungan antara", colnames(R)[i], "dan", colnames(R)[j],
"adalah", arah,"(Nilai r =", round(r,2), ")\n")
}
}
}
# --- [b] Aplikasikan fungsi pada data ---
# Panggil fungsi
hasil <- weighted_corr(X, w)
# Tampilkan vektor mean tertimbang
hasil$x_bar_w
## [,1]
## x1 73.88530
## x2 65.39059
## x3 17.00938
# Tampilkan matriks varians-kovarians tertimbang
hasil$S_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$s_w
## x1 x2 x3
## 6.177671 6.411527 4.598649
# Tampilkan matriks korelasi tertimbang
hasil$R_w
## x1 x2 x3
## x1 1.0000000 -0.9531095 -0.9558207
## x2 -0.9531095 1.0000000 0.9891979
## x3 -0.9558207 0.9891979 1.0000000
# Visualisasi korelasi tertimbang
corrplot(hasil$R_w,
method = "color",
type = "upper",
tl.col = "black",
tl.srt = 45,
addCoef.col = "black",
col = colorRampPalette(c("darkgreen", "white", "purple"))(200),
title = "Heatmap Korelasi Tertimbang")

#INTERPRETASI
analisis_korelasi(hasil$R_w)
## Hubungan antara x1 dan x2 adalah berlawanan (negatif) (Nilai r = -0.95 )
## Hubungan antara x1 dan x3 adalah berlawanan (negatif) (Nilai r = -0.96 )
## Hubungan antara x2 dan x3 adalah searah (positif) (Nilai r = 0.99 )