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

Tugas

Komputasi Statistika, Kelas D

Prodi S1 Statistika FSAD ITS - Semester Genap 2025/2026

Kamis, 12 Maret 2026

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

Nama : Ancova Wilcah D.A.

NRP : 5003251041

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) {
 x = sort(x)
 n = length(x)
 k = floor(n*alpha)
 mean_manual = function(x){
   total = 0
   for(i in 1:n){
     total = total + x[i]
   }
   return(total/n)
 }
 Y = x
 for(i in 1:n){
   if(i <= k){
     Y[i] = x[k+1]
   }else if(i > k && i <= (n-k)){
     Y[i] = x[i]
   }else if(i > (n-k)){
     Y[i] = x[n-k]
   }
 }
 return(mean_manual(Y))
}

— [b] Hitung ordinary mean (alpha=0) dan Winsorized mean 20% (alpha=0.2) —

Ordinary mean

ordinary_mean = winsorized_mean(x, 0)
ordinary_mean
## [1] 81.86667

Winsorized mean 20%

win_20 = winsorized_mean(x, 0.2)
win_20
## [1] 69.73333

— Visualisasi Data Box Plot —

library(ggplot2)

# Ubah ke data frame
df <- data.frame(X = x)

# Boxplot
ggplot(df, aes(y = X)) +
  geom_boxplot(fill = "blue") +
  labs(
    title = "Boxplot Data Nilai",
    y = "Nilai"
  ) +
  theme_minimal()

# — Interpretasi —

Dari boxplot yang dibuat, terlihat bahwa data asli memiliki satu nilai yang sangat jauh dari data lainnya, yaitu sekitar 310, sehingga muncul sebagai outlier. Nilai ini menyebabkan sebaran data menjadi tidak seimbang karena sebagian besar data berada di rentang yang jauh lebih kecil.

Setelah dilakukan winsorization sebesar 20%, nilai ekstrem tersebut tidak lagi muncul sebagai outlier karena sudah diganti dengan nilai batas tertentu. Hal ini membuat sebaran data menjadi lebih rapat dan tidak terlalu condong ke satu sisi.

Dengan kondisi ini, dapat dilihat bahwa winsorized mean lebih mewakili pusat data dibandingkan mean biasa, karena pengaruh nilai ekstrem sudah dikurangi.

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

Soal 2 [TOTAL 60 poin] - Weighted Multivariate Descriptive Statistics

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

— Baca data CSV —

df <- read.csv("data_quiz1.csv")
X <- as.matrix(df[, c("x1", "x2", "x3")])
w <- df$w
X
##       x1 x2   x3
##  [1,] 86 55 10.2
##  [2,] 78 64 15.8
##  [3,] 83 58 11.5
##  [4,] 75 68 17.3
##  [5,] 80 60 13.6
##  [6,] 74 66 16.8
##  [7,] 66 74 23.5
##  [8,] 77 62 14.7
##  [9,] 69 72 21.2
## [10,] 73 67 19.4
## [11,] 79 59 12.8
## [12,] 81 57 11.3
## [13,] 72 65 16.1
## [14,] 67 73 22.3
## [15,] 58 80 28.5
## [16,] 68 70 19.8
## [17,] 71 67 18.4
## [18,] 76 63 15.2
## [19,] 79 61 13.9
## [20,] 82 56 10.8
## [21,] 77 62 14.5
## [22,] 75 65 16.0
## [23,] 74 66 16.5
## [24,] 73 68 18.1
## [25,] 61 78 26.3
## [26,] 70 63 15.3
## [27,] 76 58 12.5
## [28,] 74 64 15.0
## [29,] 82 55 10.0
## [30,] 63 75 25.8
## [31,] 65 72 24.2
## [32,] 57 82 30.1
## [33,] 64 74 24.5
## [34,] 62 77 27.0
## [35,] 60 79 28.8
## [36,] 61 78 27.5
## [37,] 54 85 32.5
## [38,] 84 60 11.8
w
##  [1] 14.34 14.19 12.49 11.45 17.45 15.24 34.73 17.97 33.13 35.93 15.55 16.54
## [13] 17.25 14.93  7.24  9.85 11.10 12.89 11.14  7.06 13.96 23.13 19.74 17.53
## [25] 12.56 13.01 12.28  7.95 20.84  0.67  0.33  1.11  0.55  0.39  0.20  0.36
## [37]  3.36  1.94

— [a] Buatlah fungsi weighted_corr(X, w) —

weighted_corr <- function(X, w) {
  W = diag(w)
  sum_manual <- function(w){
    total = 0
    n = length(w)
    for(i in 1:n){
      total = total + w[i]
    }
    return(total)
  }
  x_bar_w = 1/sum_manual(w)*(t(X)%*%W%*%matrix(1,nrow(X),1))
  D = X - matrix(1,nrow(X),1)%*%t(x_bar_w)
  S_w = 1/sum_manual(w)*(t(D)%*%W%*%D)
  s_w = sqrt(diag(S_w))
  R_w = solve(diag(s_w))%*%S_w%*%solve(diag(s_w))
  return(list(
    W = W,
    x_bar_w = x_bar_w,
    S_w = S_w,
    s_w = s_w,
    R_w = R_w
  ))
}

— [b] Aplikasikan fungsi pada data —

Panggil fungsi

result = weighted_corr(X, w)

Tampilkan vektor mean tertimbang

Mean = result$x_bar_w
Mean
##        [,1]
## x1 73.88530
## x2 65.39059
## x3 17.00938

Tampilkan matriks varians-kovarians tertimbang

varkovar = result$S_w
varkovar
##           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

sd = result$s_w
sd
##       x1       x2       x3 
## 6.177671 6.411527 4.598649

Tampilkan matriks korelasi tertimbang

kor = result$R_w
kor
##            [,1]       [,2]       [,3]
## [1,]  1.0000000 -0.9531095 -0.9558207
## [2,] -0.9531095  1.0000000  0.9891979
## [3,] -0.9558207  0.9891979  1.0000000

— Visualisasi Data Scatter Plot x1 vs x2 —

ggplot(df, aes(x = x1, y = x2)) +
  geom_point(color = "darkgreen", size = 2.5, shape = 16) +
  labs(
    title = "Scatter Plot antara Variabel x1 dan x2",
    x = "Variabel x1",
    y = "Variabel x2"
  ) +
  theme_minimal()

— Interpretasi —

Dari plot antara x1 dan x2, titik-titik data menunjukkan kecenderungan tertentu. Jika titik-titik membentuk pola yang cenderung naik, maka dapat dikatakan bahwa terdapat hubungan positif antara x1 dan x2, artinya ketika nilai x1 meningkat, nilai x2 juga cenderung ikut meningkat.

— Visualisasi Data Scatter Plot x1 vs x3 —

ggplot(df, aes(x = x1, y = x3)) +
  geom_point(color = "purple", size = 2.5, shape = 17) +
  labs(
    title = "Hubungan antara x1 dengan x3",
    x = "Nilai x1",
    y = "Nilai x3"
  ) +
  theme_minimal()

— Interpretasi —

Pada hubungan antara x1 dan x3, pola sebaran titik terlihat cukup terarah. Jika titik-titik tidak membentuk pola yang jelas, maka hubungan antara kedua variabel ini cenderung lemah atau tidak signifikan.

— Visualisasi Data Scatter Plot x2 vs x3 —

ggplot(df, aes(x = x2, y = x3)) +
  geom_point(color = "brown", size = 2.5, shape = 15) +
  labs(
    title = "Visualisasi sebaran x2 terhadap x3",
    x = "Variabel x2",
    y = "Variabel x3"
  ) +
  theme_minimal()

# — Interpretasi —

Scatter plot antara x2 dan x3 menunjukkan bahwa misalnya ada kecenderungan tertentu atau tidak. Jika titik-titik terlihat membentuk garis tertentu, maka ada indikasi hubungan antara kedua variabel. Sebaliknya, jika menyebar acak, maka hubungan antar variabel ini lemah.