x <- c(12, 45, 52, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 310)
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))
}
ordinary_mean = winsorized_mean(x, 0)
ordinary_mean
## [1] 81.86667
win_20 = winsorized_mean(x, 0.2)
win_20
## [1] 69.73333
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.
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
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
))
}
result = weighted_corr(X, w)
Mean = result$x_bar_w
Mean
## [,1]
## x1 73.88530
## x2 65.39059
## x3 17.00938
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
sd = result$s_w
sd
## x1 x2 x3
## 6.177671 6.411527 4.598649
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
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()
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.
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()
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.
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.