Menghitung Nilai Rataan Winsorized (Winsorized Mean)

winsorized mean

Konsep Dasar

Dalam analisis data, outlier atau nilai ekstrem bisa memiliki dampak signifikan pada hasil statistik yang dihitung. Rata-rata aritmatika merupakan ukuran yang sangat sensitif terhadap outlier terlebih jika ukuran data sedikit. Misalnya, beberapa nilai yang sangat tinggi atau sangat rendah dapat mempengaruhi rata-rata secara tidak proprosional. Dampaknya adalah gambaran yang kurang akurat tentang dataset secara keseluruhan. Untuk mengatasi masalah ini, berbagai teknik telah dikembangkan, salah satunya adalah winsorized mean.

Winsorized mean adalah teknik statistik yang digunakan untuk mengurangi pengaruh outlier dengan menggantikan nilai-nilai ekstrem dalam dataset. Berbeda dengan metode trimming atau pemangkasan, data ekstrim pada winsorized mean tidak dibuang melainkan diganti dengan nilai yang lebih moderat yang berada dalam persentil tertentu dari data. Proses ini membuat winsorized mean lebih robust dan memberikan estimasi yang lebih akurat tentang rata-rata dataset, terutama jika terdapat nilai outlier yang signifikan.

Tahapan Winsorized Mean

Tahapan pada winsorized mean dapat dijelaskan melalui langkah-langkah berikut:

Menentukan Persentase Trimming: Pilih persentase $\alpha$ untuk menentukan batas pada salah satu atau kedua sisi distribusi data. Misalnya, jika kita memilih $\alpha = 0.1$, maka kita akan mengganti 10% dari data terendah dan tertinggi.

Mengurutkan Data: Urutkan data dari yang terkecil hingga terbesar. Misalkan kita memiliki dataset $X$ dengan $n$ elemen yang telah diurutkan sebagai berikut:

$$X = \{x_{(1)}, x_{(2)}, \ldots, x_{(n)}\}$$

Menggantikan Nilai Ekstrem: Ganti nilai-nilai di luar persentil $\alpha$ dan $1 – \alpha$ dengan nilai persentil tersebut. Persentil ke-$\alpha$ dan persentil ke-$1 – \alpha$ dapat dihitung sebagai berikut:

$$x_{\alpha} = x_{(\lceil \alpha n \rceil)} \quad \text{dan} \quad x_{1-\alpha} = x_{(\lfloor (1-\alpha) n \rfloor)}$$

​Semua nilai $x_i$​ yang kurang dari $x_{\alpha}$ akan diganti dengan $x_{\alpha}$​, dan semua nilai $x_i$​ yang lebih dari $x_{1-\alpha}$​ akan diganti dengan $x_{1-\alpha}$​. Hasil dataset yang telah di-winsorized adalah $X’$:

$$X_{\text{winsorized}} = \{x_{\alpha}, \ldots, x_{\alpha}, x_{(\lceil \alpha n \rceil)}, \ldots, x_{(\lfloor (1-\alpha) n \rfloor)}, x_{1-\alpha}, \ldots, x_{1-\alpha}\}$$

Menghitung Rata-Rata: Hitung rata-rata dari data yang telah dimodifikasi (Winsorized mean):

$$\bar{X}_{\text{winsorized}} = \frac{1}{n} \sum_{i=1}^{n} x’_{i}$$

​di mana $x’_{i}$​ adalah elemen-elemen dari dataset $X’$.

Contoh Penghitungan

Misalkan kita memiliki dataset berikut:

$$X={25, 12, 8, 30, 50, 100, 15, 22, 27, 16, 24, 11, 45, 18, 20, 35, 40, 55, 90, 200}$$

Kita akan melakukan Winsorizing dengan persentase trimming sebesar 10% di kedua sisi distribusi data.

Langkah 1: Menentukan Persentase Trimming

Persentase trimming yang dipilih adalah $\alpha = 0.1$ atau 10% untuk kedua sisi.

Langkah 2: Mengurutkan Data

Data yang telah diurutkan adalah:

$$X={8, 11, 12, 15, 16, 18, 20, 22, 24, 25, 27, 30, 35, 40, 45, 50, 55, 90, 100, 200}$$

Langkah 3: Mengganti Nilai Ekstrem

Untuk mengganti nilai-nilai ekstrem, kita perlu menghitung persentil ke-10 dan ke-90 dari data yang diurutkan.

Persentil ke-10 ($x_{0.1}$) dan Persentil ke-90 ($x_{0.9}$​):

$$x_{0.1} = x_{(\lceil 0.1 \times 20 \rceil)} = x_{2} = 12$$ $$x_{0.9} = x_{(\lfloor 0.9 \times 20 \rfloor)} = x_{18} = 90$$

Semua nilai yang lebih kecil dari $12$ akan diganti dengan $12$, dan semua nilai yang lebih besar dari $90$ akan diganti dengan $90$.

Data yang telah di-Winsorized adalah:

$$X’={12, 12, 12, 15, 16, 18, 20, 22, 24, 25, 27, 30, 35, 40, 45, 50, 55, 90, 90, 90}$$

Langkah 4: Menghitung Rata-Rata

Rata-rata winsorized dihitung seperti biasa menggunakan rataan aritmatika pada data $X’$ dan diperoleh nilai $36,4$.

$$\begin{aligned}\bar{X’}&=\frac{1}{20}(12 + 12 + 12 + … + 90 + 90) \\\\&=36,4\end{aligned}$$

Jika kita bandingkan dengan rata-rata biasa maka akan diperoleh nilai sebagai berikut:

$$\begin{aligned}\bar{X}&=\frac{1}{20}(8 + 11 + 12 + … + 100 + 200) \\\\&=42,15\end{aligned}$$

Pada contoh di atas, kita melakukan proses winsorized pada 2 sisi sekaligus. Namun pada praktiknya tidak menutup kemungkinan untuk melakukannya hanya pada 1 sisi saja misalkan pada sisi kanan saja.

Dengan data yang sama, jika kita melakukan trimming pada sisi kanan saja maka data hasil winsorized menjadi:

$$X’={8, 11, 12, 15, 16, 18, 20, 22, 24, 25, 27, 30, 35, 40, 45, 50, 55, 90, 90, 90}$$

Rata-rata winsorized yang diperoleh untuk data ini menjadi $36,4$.

$$\begin{aligned}\bar{X’}&=\frac{1}{20}(8 + 11 + 12 + … + 90 + 90) \\\\&=36,15\end{aligned}$$

Sintaks R dan Python

Bahasa pemrograman seperti R dan python menyediakan paket-paket statistik dimana tersedia fungsi untuk menghitung rataan winsorized. Contoh ringkasnya dapat dilihat pada kode di bawah ini.

Sebagai catatan, implementasi pada Bahasa R menggunakan perhitungan yang sedikit berbeda. terdapat 9 jenis perhitungan yang dapat digunakan dengan menentukan parameter type yang dapat diisi nilai 1,2,… sampai 9.

R

# Instalasi package yang diperlukan
# install.packages("DescTools")

library(DescTools)

# Contoh data
data <- c(25, 12, 8, 30, 50, 100, 15, 22, 27, 16, 24, 11, 45, 18, 20, 35, 40, 55, 90, 200)


# Menghitung Winsorized Mean dengan 10% trimming (persentil-10 sampai persentil-90)
winsorized_mean <- Winsorize(data, 
                             probs = c(0.1, 0.9),   # menentukan batas persentil
                             type=1)                # type=1,2...9

print("Data winsorized:")
print(sort(winsorized_mean))
paste("Rata-rata winsorized:", mean(winsorized_mean))

# Output
"Data winsorized:"
11 11 12 15 16 18 20 22 24 25 27 30 35 40 45 50 55 90 90 90
"Rata-rata winsorized: 36.3"

Python

import numpy as np
from scipy.stats import mstats

# Contoh data
data = np.array([8, 11, 12, 15, 16, 18, 20, 22, 24, 25, 
                 27, 30, 35, 40, 45, 50, 55, 90, 100, 200])

# Menghitung Winsorized Mean dengan 10% trimming (10% di kiri dan 10% di kanan)
winsorized_mean = mstats.winsorize(data, limits=[0.1, 0.1])   
mean_winsorized = np.mean(winsorized_mean)

print("Data Winsorized:", winsorized_mean)
print("Winsorized Mean:", mean_winsorized)

# OUTPUT
# Data Winsorized: [12 12 12 15 16 18 20 22 24 25 27 30 35 40 45 50 55 90 90 90]
# Winsorized Mean: 36.4

Dokumentasi paket DecsTools dapat dilihat di sini dan untuk modul scipy.stats dapat dilihat di sini.

Tulisan Lainnya

You may also like...

Daftar Isi