R’da “winsorize” yapmak

İlk soru: “winsorize” nedir?

Verisetindeki uç değerlerin atılması yerine verisetindeki en yakın değerleri koyarak ortalamaya yaklaştırılmasını sağlayan istatistiki düzeltme tekniği (Yılmaz ve Koğar, 2015). R’da verisetinizi nasıl winsorize edebilirsiniz?

Kullanabileceğiniz iki adet paket mevcut: robustHD ve statar.

robustHD’nin algoritması sebebiyle değişkenlerin merkeze yakınlaştırılmasında sonuçlarda sorun çıkabiliyor ayrıca boş (NA) olan değerler mevcut olduğunda hata veriyor. Bu yüzden Stata’dan esinlenilmiş “statar” paketini tavsiye ederim.

Öncelikle aşağıdaki komutla paketi kuracağız

>install.packages(“statar”)

Sonra da etkin hale getireceğiz.

>library(statar)

winsorize (veya winsorise) fonksiyonu ile de istediğimiz değişkenlerin içerisindeki uç değerleri merkeze yakınlaştıracağız. İdmanlarımızı da R’da hazır halde bulunan airquality veriseti üzerinden yapacağız. Veriseti üstünde bazı işlemler yapacağımız içinde yeni bir veriseti olarak kullanacağız.

>wintest<-airquality

Önce winsorize fonksiyonunu ekler olmadan çalıştıralım.

>winsorize(wintest$Wind)

0.00 % observations replaced at the bottom
0.00 % observations replaced at the top

Yani fonksiyon hiçbir değeri uç olarak görmediği için değiştirme gereği de duymadı.

Peki eklerle kullanırsak sonuç nasıl değişecek?

>winsorize(wintest$Wind, probs=c(0.01,0.99))

0.65 % observations replaced at the bottom
0.65 % observations replaced at the top

probs ekindeki 0.01 ve 0.99 en uçtaki %1 ve %99 değerlerin dışında kalanların merkezi yakınlaştırılmasını sağlıyor.

Fonksiyonda kullandığımız probs ekini değiştirelim.

>winsorize(wintest$Wind, probs=c(0.05,0.95))

3.92 % observations replaced at the bottom
4.58 % observations replaced at the top

Aynı değişkeni winsorize etmekle uğraşmak istemiyorsanız lm fonksiyonu içerisinde winsorize‘yi monte edebilirsiniz.

lm(Ozone~Solar.R+winsorize(wintest$Wind,probs=c(0.05,0.95))+Temp+Month+Day,data=wintest)

Bir diğer seçenek de sütunu tamamiyle winsorize edilmiş değiştirebilirsiniz.

wintest[,3]<-winsorize(wintest$Wind,probs =c(0.05,0.95))

Küçük bir test ile winsorize işleminin gerçekleşip gerçekleşmediğini görebiliriz

> wintest[,3]==airquality[,3]

Yukarıdaki komut R’a wintest ile airquality verisetlerinin 3.sütunlarının birbirlerine eşit olup olmadığını sorguluyor. “FALSE” ibaresini gördüğünz her değer airquality verisetindeki değerin değiştirildiğini ifade ediyor.

Yılmaz, E., & Koğar, H. (2015). Uç Değerle Baş Etmede Kullanılan Farklı Tekniklerin Bazı İstatistiksel Analiz Sonuçları Üzerindeki Etkisi. BaşKent University Journal Of Education, 2(1), 61-67.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.