#code1

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

# Fungsi sorting manual
sort_manual <- function(x) {
  n <- length(x)
  for (i in 1:(n-1)) {
    for (j in (i+1):n) {
      if (x[i] > x[j]) {
        temp <- x[i]
        x[i] <- x[j]
        x[j] <- temp
      }
    }
  }
  return(x)
}

# Fungsi winsorized mean
winsorized_mean <- function(x, alpha) {
  x <- sort_manual(x)
  n <- length(x)
  k <- floor(n * alpha)
  total <- 0
  
  for (i in 1:n) {
    if (i <= k) {
      total <- total + x[k+1]
    } else if (i <= n-k) {
      total <- total + x[i]
    } else {
      total <- total + x[n-k]
    }
  }
  
  return(total/n)
}

#hasilperhitungan

mean_biasa <- winsorized_mean(x, 0)
winsor_20 <- winsorized_mean(x, 0.2)

mean_biasa
## [1] 81.86667
winsor_20
## [1] 69.73333

#visualisasi

boxplot(x, main="Boxplot Data Produksi", col="lightblue")

#interpretasi

Nilai rata-rata biasa terlihat lebih besar karena dipengaruhi oleh adanya nilai ekstrem, yaitu 310, yang cukup jauh dibandingkan data lainnya. Setelah dilakukan winsorizing sebesar 20%, nilai ekstrem tersebut disesuaikan dengan nilai terdekat yang lebih wajar, sehingga rata-rata yang dihasilkan menjadi lebih stabil dan lebih mencerminkan kondisi sebagian besar data.

#code2

df <- read.csv("data_quiz1.csv")

X <- as.matrix(df[, c("x1", "x2", "x3")])
w <- df$w

weighted_corr <- function(X, w) {
  n <- length(w)
  W <- diag(w)
  satu <- matrix(1, n, 1)
  
  nw <- sum(w)
  
  # mean tertimbang
  xbar <- (t(X) %*% W %*% satu) / nw
  
  # deviasi
  D <- X - satu %*% t(xbar)
  
  # covariance
  Sw <- (t(D) %*% W %*% D) / nw
  
  # standar deviasi
  sw <- sqrt(diag(Sw))
  
  # korelasi
  Rw <- solve(diag(sw)) %*% Sw %*% solve(diag(sw))
  
  return(list(
    mean = xbar,
    cov = Sw,
    sd = sw,
    cor = Rw
  ))
}

#hasil

hasil <- weighted_corr(X, w)

hasil$mean
##        [,1]
## x1 73.88530
## x2 65.39059
## x3 17.00938
hasil$cov
##           x1        x2        x3
## x1  38.16362 -37.75105 -27.15386
## x2 -37.75105  41.10767  29.16587
## x3 -27.15386  29.16587  21.14757
hasil$sd
##       x1       x2       x3 
## 6.177671 6.411527 4.598649
hasil$cor
##            [,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

pairs(X, main="Scatter Plot Antar Variabel")

library(corrplot)
## corrplot 0.95 loaded
corrplot(hasil$cor, method="circle")

#interpretasi

Berdasarkan hasil perhitungan, terlihat bahwa hubungan antar variabel cukup kuat. Variabel kualitas udara (x1) dan kualitas air (x2) memiliki korelasi negatif yang tinggi, yang menunjukkan bahwa ketika nilai salah satu variabel meningkat, variabel lainnya cenderung menurun. Di sisi lain, kualitas air (x2) dan ruang terbuka hijau (x3) memiliki korelasi positif yang sangat kuat, sehingga keduanya cenderung meningkat secara bersamaan. Hal ini menunjukkan bahwa indikator kualitas lingkungan memiliki keterkaitan satu sama lain dalam menggambarkan kondisi tiap daerah.