Bu yazıda R Programlama dili ile, Normallik varsayımı kontrolü ve normal dağılım göstermeyen veriler için dönüşüm uygulamayı göreceğiz.
Normallik
Pek çok çalışmada normallik varsayımı kontrol edildikten sonra yapılacak analizlerin çeşitlerine karar verilir. Veri setinin normal dağılması durumunda dağılımın şekli aşağıda görüldüğü gibi simetrik bir çan eğrisine benzemektedir.
Normal dağılıma uyan bir veri setinde ortalama, ortanca ve tepe değerleri birbirine eşit veya çok yakındır. ‘Merkezi limit teoremine’ göre normal dağılıma sahip olan bir evrenden seçilen ve bağımsız gözlemlerden oluşan örneklemlerin her biri, örneklem büyüklüğü 30 ve üzerinde olmak koşuluyla normal dağılım gösterirler. Teorik olarak 30 ve üzerindeki örneklem büyüklüklerine sahip veri setlerinin normal dağıldıkları varsayılsa da pratikte durum farklıdır. Örnek hacmi 30’dan çok fazla olmasına rağmen normal dağılıma uymayan pek çok veri bulunmaktadır. Bu sebeple analizlerimize karar vermeden önce veri setinin normal dağılıp dağılmadığını mutlaka test etmeliyiz.
Verilerin dağılımlarının, aritmetik ortalama, ortanca, tepe değeri, çarpıklık ve basıklık katsayıları gibi istatistikler üzerinden incelenmesi de mümkündür. Bu kapsamda aritmetik ortalama, ortanca ve tepe değerlerinin eşit ya da yakın olması, çarpıklık ve basıklık katsayılarının ±2 sınırları içinde 0’a yakın olması normal dağılımın varlığına kanıt olarak değerlendirilmektedir.
Neden Normallik Testi Yapılmalı?
Analiz aşamasında veri setine uygulanacak testlerden hangisinin uygun olduğunu belirlemek için normallik testi yapılmalıdır. Eğer veriler normal dağılıma sahip ise parametrik testler, veriler normal dağılıma sahip değil ise parametrik olmayan testler uygun olacaktır.
Parametrik testler; belirli bir hipotetik evren dağılımına ve bu dağılımı belirleyen ortalama, standart sapma gibi parametrelere dayalı algoritmalar içeren yöntem ve tekniklerin ortak adıdır. Parametrik olmayan testler ise genellikle bir evren dağılımından bağımsız olarak, beklenen-gözlenen değer farkları, sıra ve sıra farkları gibi daha temel ve betimsel kestirimlere dayalı algoritmalar içeren esnek yöntem ve tekniklerdir.
Parametrik testlerin istatistiksel gücü ve etki büyüklüğü, parametrik olmayan testlere göre daha yüksektir. Birinci(alpha)ve ikinci tip(beta) hatalara karşı daha dirençlidir.
Gruplar arasında karşılaştırma yapılacak veri setlerinde normal dağılım testleri sonucuna göre en az bir grup normal dağılıma sahip değil ise parametrik olmayan testlerden yararlanılmaktadır.
R Uygulaması
Veri:
Analizde kullanılan veri simülasyon verisidir. Yorumlarda daha anlaşılır olabilmek için veriye senaryo yazılmıştır.
Veri Senaryosu: Bir online alışveriş sitesi; web sitelerinin tasarımını değiştirmek istemektedir. Bunun için yapılan çalışma sonucunda üç farklı web site tasarımı arasında seçim yapılmasına karar verilmiştir.
Müşteri etkinliği ve site tasarımları arasındaki ilişkiyi anlamak için, her bir site tasarımı belli bir süre uygulanacak ve müşteri etkinliği izlenecektir. Üç farklı site tasarımıyla birlikte; gönderilen öneri bildirimlerinin sıklığı, indirimli ürünlerin oranı ve müşteri geçmişi üzerinden (arama geçmişi, satın alma geçmişi, liste geçmişleri) tahminler yapan yapay zekanın tahmin oranı da bu izlenmeye dahil tutulacaktır. Yapılan çalışmanın bir kısmı aşağıdaki gibidir.
veri <-read.csv("https://raw.githubusercontent.com/gungorrbaris/TR-regression-analysis-R/main/data/data.csv", sep="")
knitr::kable(head(veri,n=5), align = "c")
y | yapay_zeka | indirimli_urun | bildirim | site_tasarimi |
---|---|---|---|---|
52.03710 | 12.19230 | 2.2533662 | 4.266214 | 1 |
45.31281 | 10.46099 | 0.5147431 | 2.632571 | 1 |
57.55408 | 12.20494 | 2.5136276 | 4.044828 | 1 |
53.08547 | 11.42794 | 0.9101550 | 2.595185 | 1 |
50.80389 | 11.11258 | 1.5749445 | 3.071317 | 1 |
Burada:
y = Müşteri Etkinliği -> Bağımlı Değişken
Yapay Zeka Oranı -> Nicel Bağımsız Değişken
İndirimli Ürün Oranı -> Nicel Bağımsız Değişken
Bildirim Sıklığı -> Nicel Bağımsız Değişken
Site Tasarımı -> Nitel Bağımsız Değişkendir.
Burada Bağımlı değişken olan Müşteri etkinliği için normal dağılım kontrolü yapılmalıdır.
Normallik Testi
Normallik Testi için birçok yöntem vardır. Bunlardan bazıları:
- Q-Q Plot ile normallik kontrolü,
- Kolmogrov-Smirnov Testi ile normallik kontrolü,
- Shapiro-Wilk Testi ile normallik kontrolü,
- Anderson-Darling Testi ile normallik kontrolü.
Q-Q plot ile:
Normal Q-Q grafiğinde amaç, elde edilen doğrusal çizginin altındaki ve üstündeki noktaların, değişkenin birim değerlerinin kuramsal dağılımından hangi düzeyde bir sapma gösterdiğini belirlemektir. Değerler (noktalar) 45 derecelik eğimle oluşan çizgi etrafında dağılmalıdır.
H0: Verilerin dağılışı ile normal dağılım arasında fark
yoktur.
H1: Verilerin dağılışı ile normal dağılım
arasında fark vardır.
qqnorm(veri$y, main = "Müşteri etkinliği (Bağımlı Değişken) için Q-Q Plot")
qqline(veri$y)
Grafiğe Bakıldığında:
- Gözlem noktaları 45 derecelik bir açı etrafında dağılmış olsaydı bağımlı değişken (y) normal dağılmış olurdu. Değişkenin normal dağılım göstermediğini rahatlıkla söyleyebiliriz.
Kolmogrov-Smirnov testi ile:
Verimizdeki gözlem sayısı (n=100 > 50) olduğu için Kolmogrov-Smirnov testi ile normallik kontrolü yapabiliriz.
H0: Verilerin dağılışı ile normal dağılım arasında fark
yoktur.
H1: Verilerin dağılışı ile normal dağılım
arasında fark vardır.
library(nortest)
lillie.test(veri$y)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: veri$y
## D = 0.2028, p-value = 6.279e-11
Test sonucuna bakıldığında: - p = 0 < α = 0,05 olduğundan H0 RED. Yani bağımlı değişken (y) normal dağılım göstermiyor.
Shapiro-Wilk Testi ile:
H0: Verilerin dağılışı ile normal dağılım arasında fark
yoktur.
H1: Verilerin dağılışı ile normal dağılım
arasında fark vardır.
shapiro.test(veri$y)
##
## Shapiro-Wilk normality test
##
## data: veri$y
## W = 0.59252, p-value = 3.111e-15
Test sonucuna bakıldığında: - p = 0 < α = 0,05 olduğundan H0 RED. Yani bağımlı değişken (y) normal dağılım göstermiyor.
Anderson-Darling Testi ile:
H0: Verilerin dağılışı ile normal dağılım arasında fark
yoktur.
H1: Verilerin dağılışı ile normal dağılım
arasında fark vardır.
ad.test(veri$y)
##
## Anderson-Darling normality test
##
## data: veri$y
## A = 9.4601, p-value < 2.2e-16
Test sonucuna bakıldığında: - p = 0 < α = 0,05 olduğundan H0 RED. Yani bağımlı değişken (y) normal dağılım göstermiyor.
QQ Plot ve üç farklı test ile bağımlı değişkenin normalliğine bakıldı. Fakat hiçbirinin sonucunda değişkenin normal dağılmadığı görülmektedir.
Böyle durumlarda, analize devam edebilmek için veriye dönüşüm uygulayabiliriz.
Dönüşüm
Ln Dönüşümü:
ln_y <- log(veri$y)
Kolmogrov-Smirnov testi:
H0: Verilerin dağılışı ile normal dağılım arasında fark
yoktur.
H1: Verilerin dağılışı ile normal dağılım
arasında fark vardır.
library(nortest)
lillie.test(ln_y)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: ln_y
## D = 0.11251, p-value = 0.003298
Test sonucuna bakıldığında: - p = 0 < α = 0,05 olduğundan H0 RED. Yani ln dönüşümü uygulanmış bağımlı değişken (ln_y) normal dağılım göstermiyor.
Ln dönüşümü işe yaramadı. Farklı bir dönüşüm uygulayalım.
1/y Dönüşümü:
y2 <- 1/veri$y
Q-Q plot:
qqnorm(y2, main = "Müşteri etkinliği için (1/y) Q-Q Plot")
qqline(y2)
Grafiğe bakıldığında: - Gözlemlerin dağılımı net belli olmuyor. Test ile control etmek daha mantıklı olacaktır.
Kolmogrov-Smirnov Testi:
H0: Verilerin dağılışı ile normal dağılım arasında fark
yoktur.
H1: Verilerin dağılışı ile normal dağılım
arasında fark vardır.
lillie.test(y2)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: y2
## D = 0.059555, p-value = 0.5171
Test sonucuna bakıldığında:
- p = 0.5171 > α = 0,05 olduğundan H0 REDDEDİLEMEZ. Yani 1/y dönüşümü uygulanan bağımlı değişken (y2) normal dağılıma uygundur.
Normallik varsayımı isteyen analizlerde, bu şekilde dönüşüm uygulanmış veri ile analize devam edilebilir.
Kaynakça
-
R ileTemel İstatistiksel Yöntemler - Öniz Toktamış, Semra Türkan
-
https://spssanalizrapor.wordpress.com/2021/10/13/normallik-testi-ve-varsayimlari/
-
https://www.statology.org/test-for-normality-in-r/