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

# Fungsi untuk sorting
sort_function <- function(data){
  sorted_data <- sort(data)
  return(sorted_data)
}

# Fungsi untuk menghitung mean
mean_function <- function(data){
  mean_value <- mean(data)
  return(mean_value)
}

# Mengurutkan data
data <- sort_function(data)

# Fungsi Winsorization
winsor_function <- function(data, alpha){
  
  data_sort <- sort_function(data)
  
  n <- length(data_sort)
  k <- floor(n * alpha)
  
  winsor_data <- data_sort
  
  # Winsorize bagian bawah
  for(i in 1:k){
    winsor_data[i] <- data_sort[k+1]
  }
  
  # Winsorize bagian atas
  for(i in (n-k+1):n){
    winsor_data[i] <- data_sort[n-k]
  }
  
  return(winsor_data)
}

# Fungsi untuk Winsorized mean
winsor_mean <- function(data, alpha){
  
  data_winsor <- winsor_function(data, alpha)
  mean_w <- mean_function(data_winsor)
  
  return(list(
    winsor_data = data_winsor,
    winsor_mean = mean_w
  ))
}

# Hasil Winsorized dengan alpha 0.2 dan 0
result_02 <- winsor_mean(data, 0.2)
result_00 <- winsor_mean(data, 0)

# Menampilkan hasil
cat("Winsorized data alpha 0.2 :", result_02$winsor_data, "\n")
## Winsorized data alpha 0.2 : 58 58 58 58 61 63 67 70 72 75 78 82 82 82 82
cat("Winsorized mean alpha 0.2 :", result_02$winsor_mean, "\n\n")
## Winsorized mean alpha 0.2 : 69.73333
cat("Winsorized data alpha 0 :", result_00$winsor_data, "\n")
## Winsorized data alpha 0 : 12 45 52 58 61 63 67 70 72 75 78 82 88 95 310 310
cat("Winsorized mean alpha 0 :", result_00$winsor_mean, "\n")
## Winsorized mean alpha 0 : 96.125