#bagian a
x <- c(12, 45, 52, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 310)
winsorized_mean <- function(x, alpha){
n<-length(x)
k<-floor(n*alpha)
x<-sort(x)
for(i in 1:n){
if(i<=k){
x[i] <- x[k+1]
} else if(i>n-k){
x[i]<-x[n-k]
}
}
total<-0
for(i in 1:n){
total <- total + x[i]
}
total / n
}
#bagian b
total_x<-0
for(i in 1:length(x)){
total_x <- total_x + x[i]
}
mean_biasa<-total_x / length(x)
mean_biasa
## [1] 81.86667
winsorized_mean(x, 0.2)
## [1] 69.73333
boxplot(x, col="lightblue", main="Boxplot Data")
hist(x,
col = "lightgreen",
main = "Histogram Data",
xlab = "Nilai",
border = "black",
breaks = 8)
Dari boxplot, terlihat jelas bahwa nilai 310 merupakan outlier yang jauh menyimpang dari sebagian besar data yang berkisar antara 12 hingga 95. Keberadaan outlier ini menyebabkan mean konvensional tertarik ke atas sehingga tidak lagi mencerminkan kondisi data secara keseluruhan.
Histogram juga memperlihatkan distribusi yang sangat tidak simetris (right-skewed), di mana sebagian besar data menumpuk di sisi kiri sementara ada satu nilai yang jauh ke kanan.
Kesimpulan: Winsorized mean lebih andal digunakan pada data yang mengandung outlier karena tidak mudah terpengaruh oleh nilai-nilai ekstrem.
#bagian a
data <- read.csv("C:/Users/ASUS VIVOBOOK/Downloads/AR & PHYTON/data_quiz1.csv")
X<-as.matrix(data[, c("x1","x2","x3")])
w<-data$w
weighted_CR<-function(X, w){
W<-diag(w)
n_w<-sum(w)
one<-matrix(1, nrow(X), 1)
mean_w<-(t(X)%*%W%*%one)/n_w
D<-X-one%*%t(mean_w)
cov_w<-(t(D)%*%W%*% D) / n_w
sd_w<-sqrt(diag(cov_w))
V<-diag(sd_w)
cor_w<-solve(V) %*% cov_w %*% solve(V)
list(mean=mean_w,
covariance=cov_w,
sd=sd_w,
correlation=cor_w)
}
#bagian b
hasil <- weighted_CR(X, w)
hasil$mean
## [,1]
## x1 73.88530
## x2 65.39059
## x3 17.00938
hasil$covariance
## 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$correlation
## [,1] [,2] [,3]
## [1,] 1.0000000 -0.9531095 -0.9558207
## [2,] -0.9531095 1.0000000 0.9891979
## [3,] -0.9558207 0.9891979 1.0000000
library(ggplot2)
library(gridExtra)
p1 <- ggplot(as.data.frame(X), aes(x1, x2)) + geom_point(col="steelblue") + theme_minimal()
p2 <- ggplot(as.data.frame(X), aes(x1, x3)) + geom_point(col="steelblue") + theme_minimal()
p3 <- ggplot(as.data.frame(X), aes(x2, x3)) + geom_point(col="steelblue") + theme_minimal()
grid.arrange(p1, p2, p3, ncol=2)
library(corrplot)
## corrplot 0.95 loaded
corrplot(hasil$correlation,
method = "color",
type = "upper",
addCoef.col = "black",
tl.col = "black",
tl.srt = 45,
title = "Heatmap Korelasi Berbobot",
mar = c(0, 0, 1, 0))
Dari scatter plot antar pasangan variabel (x1-x2, x1-x3, x2-x3), kita bisa melihat bagaimana pola hubungan antar variabel terbentuk. Jika titik-titiknya cenderung membentuk garis, berarti ada hubungan linear antara kedua variabel tersebut.
Corrplot matriks korelasi berbobot memperjelas seberapa kuat hubungan itu: semakin dekat nilai korelasi ke ±1, semakin kuat hubungannya, dan semakin mendekati 0, semakin lemah.
Karena perhitungan ini menggunakan bobot (w), setiap observasi tidak diperlakukan sama rata seperti yang berbobot lebih besar punya pengaruh lebih besar terhadap hasil akhir.
Kesimpulan: Perhitungan berbobot menghasilkan estimasi mean, kovariansi, dan korelasi yang lebih sesuai dengan kondisi data sebenarnya.