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

TUGAS DATA VISUALIZATION

Komputasi Statistika, Kelas D

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

Nama : Bagoes Nugroho Dwi Ariyanto

NRP : 5003251017

Kelas : D

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

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

Soal 1 - Winsorized Mean

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

Data

x <- c(12, 45, 52, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 310)
df <- data.frame(X = x)
df
##      X
## 1   12
## 2   45
## 3   52
## 4   58
## 5   61
## 6   63
## 7   67
## 8   70
## 9   72
## 10  75
## 11  78
## 12  82
## 13  88
## 14  95
## 15 310

— [a] 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%

winsorized_mean20 <- winsorized_mean(x, 0.2)
winsorized_mean20
## [1] 69.73333

— [c] Data Visualization —

library(ggplot2)
ggplot(df, aes(X)) +
  geom_histogram(binwidth = 10, fill = "orange") +
  labs(
    title = "Distribusi Output Produksi Mesin",
    x = "Output",
    y = "Frekuensi"
  ) +
  theme_minimal()

— [d] Interpretasi Hasil Visualisasi —

Berdasarkan hasil visualisasi histogram, dapat dilihat bahwa nilai 310 merupakan outlier yang sangat jauh dari nilai nilai lainnya

Nilai ini dapat mempengaruhi rata rata biasa (ordinary mean) sehingga menghasilkan estimasi yang bias. Dengan menggunakan Winsorized mean 20%, nilai ekstrem diganti dengan nilai non-ekstrem terdekat sehingga menghasilkan ukuran tendensi sentral yang lebih stabil

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

Soal 2 - Weighted Multivariate Descriptive Statistics

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

— Baca data CSV —

df <- read.csv("data_quiz1.csv")
X <- as.matrix(df[, c("x1", "x2", "x3")])
data_frame <- data.frame(X)
data_frame
##    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 <- df$w

— [a] 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

vector_mean <- result$x_bar_w
vector_mean
##        [,1]
## x1 73.88530
## x2 65.39059
## x3 17.00938

Tampilkan matriks varians-kovarians tertimbang

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

vector_sd <- result$s_w
vector_sd
##       x1       x2       x3 
## 6.177671 6.411527 4.598649

Tampilkan matriks korelasi tertimbang

matrix_kor <- result$R_w
matrix_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

— [c] Visualisasi Data dan Interpretasi—

Scatter plot x1 dan x2

ggplot(df, aes(x = x1, y = x2)) +
  geom_point(color = "blue") +
  labs(
    title = "Hubungan Kualitas Udara dan Kualitas Air",
    x = "Indeks Kualitas Udara",
    y = "Indeks Kualitas Air"
  ) +
  theme_minimal()

Interpretasi

Scatter plot antara indeks kualitas udara dan indeks kualitas air menunjukkan hubungan antara kedua indikator lingkungan tersebut. Jika titik-titik cenderung membentuk pola menurun, maka terdapat korelasi negatif yang menunjukkan bahwa daerah dengan kualitas udara yang baik memiliki kualitas air yang menurun.

Scatter Plot Antara x1 dan x3

ggplot(df, aes(x = x1, y = x3)) +
  geom_point(color = "darkgreen") +
  labs(
    title = "Hubungan Kualitas Udara dan Ruang Terbuka Hijau",
    x = "Indeks Kualitas Udara",
    y = "Rasio Ruang Terbuka Hijau"
  ) +
  theme_minimal()

Interpretasi

Scatter plot antara indeks kualitas udara dan rasio ruang terbuka hijau menunjukkan bahwa daerah dengan rasio ruang terbuka hijau yang lebih tinggi memiliki kualitas udara yang lebih buruk.

Scatter Plot Antara x2 dan x3

ggplot(df, aes(x = x2, y = x3)) +
  geom_point(color = "orange") +
  labs(
    title = "Hubungan Kualitas Air dan Ruang Terbuka Hijau",
    x = "Indeks Kualitas Air",
    y = "Rasio Ruang Terbuka Hijau"
  ) +
  theme_minimal()

Interpretasi

Scatter plot antara indeks kualitas air dan rasio ruang terbuka hijau menunjukkan hubungan antara keberadaan ruang hijau dan kualitas air. Jika pola hubungan positif terlihat, maka ruang terbuka hijau dapat berperan dalam menjaga kualitas air melalui fungsi resapan dan pengendalian lingkungan.

Heatmap Correlation X

library(corrplot)
## corrplot 0.95 loaded
corrplot(matrix_kor,
         method = "color",
         type = "upper", 
         addCoef.col = "black")

Interpretasi

Berdasarkan heatmap korelasi tertimbang, dapat dilihat hubungan antar indikator kualitas lingkungan, yaitu indeks kualitas udara, indeks kualitas air, dan rasio ruang terbuka hijau.

Jika korelasi antar variabel bernilai positif dan cukup besar, maka dapat disimpulkan bahwa peningkatan satu indikator lingkungan cenderung diikuti oleh peningkatan indikator lainnya. Hal ini menunjukkan bahwa kualitas lingkungan hidup pada suatu daerah memiliki keterkaitan antar komponennya.

Sebaliknya, jika nilai korelasi kecil, maka hubungan antar indikator tersebut relatif lemah.