Bu R markdown
, R ile Ki-Kare testi yapımı üzerine hazırlanmıştır. Yapmak istediğim, hem ki-kare testinin adımlarını R üzerinden göstermektir.
Her zamanki gibi tidyverse
kütüphanesini çağırıyorum.
library(tidyverse)
\[X^2_{c-1} = \sum_{j = 1}^{c}\dfrac{(o_j-e_j)^2}{e_j}\]
\[c: sınıf\ sayısı\] \[o_j: j.\ sınıf\ içerisindeki\ örnek\ birim\ sayısı\] \[n: örnek\ hacmi\] \[e_j: j.\ sınıf\ için\ beklenen\ frekans\] \[p_j: H_0\ hipotezi\ (yokluk\ hipotezi)\ doğru\ iken,\ rastgele\ seçilen\ herhangi \ bir \ birimi\ j. \ sınıfta\ bulunma\ olasılığı\]
\[e_j = n \times p_j\]
Anket çalışması yapan 200 kişilik bir ekipte, her bir anketörün yaptığı anket sayısı aşağıda verilmiştir. Dağılımın Poisson dağılımına uygun olup olmadığını ki-kare testi ile araştırınız.
anket sayısı | anketör sayısı |
---|---|
0 | 44 |
1 | 64 |
2 | 48 |
3 | 23 |
4 | 12 |
5 | 5 |
6 | 2 |
7 | 1 |
8 | 1 |
Yukarıdaki veriyle bir tibble oluşturalım.
anket <- tribble(
~anket_sayisi, ~anketor,
0, 44,
1, 64,
2, 48,
3, 23,
4, 12,
5, 5,
6, 2,
7, 1,
8, 1
)
anket
## # A tibble: 9 x 2
## anket_sayisi anketor
## <dbl> <dbl>
## 1 0 44
## 2 1 64
## 3 2 48
## 4 3 23
## 5 4 12
## 6 5 5
## 7 6 2
## 8 7 1
## 9 8 1
Öncelikle Hipotezimi oluşturalım:
\[H_0: Dağılım\ poison\ dağılımına\ uygundur. \] \[H_A: Dağılım\ poison\ dağılımına\ uygun\ değildir. \]
Beklenen değerleri bulmak için öncelikle, Poisson dağılımının parametresi olan \(\lambda\) yani ortalamayı bulmamız gerekli. Bunun için;
lambda <- sum((anket$anket_sayisi * anket$anketor)) / 200
lambda
## [1] 1.645
Poisson Dağılımı fonksiyonu:
\[ P(X = x) = \dfrac{\lambda^x*e^{-x}}{x!}\] Yukarıdaki fonksiyonda x değerlerini yani anket_sayisi
değerlerini yerine koyalım ve ardından 200 ile çarparak beklenen değerleri bulalım.
anket$beklenen_deger <- sapply(anket$anket_sayisi, function(x) dpois(x,lambda = lambda) * 200)
anket
## # A tibble: 9 x 3
## anket_sayisi anketor beklenen_deger
## <dbl> <dbl> <dbl>
## 1 0 44 38.60251256
## 2 1 64 63.50113316
## 3 2 48 52.22968202
## 4 3 23 28.63927564
## 5 4 12 11.77790211
## 6 5 5 3.87492979
## 7 6 2 1.06237659
## 8 7 1 0.24965850
## 9 8 1 0.05133603
Not: Ki-kare testi yapılıyorsa gözlenen/beklenen frekans sayısı 5’ten küçükse bunları sınıflandırıyoruz.
next_row <- filter(anket, beklenen_deger <= 5) %>%
colSums()
anket <- anket %>%
filter(beklenen_deger > 5) %>%
rbind(next_row)
anket
## # A tibble: 6 x 3
## anket_sayisi anketor beklenen_deger
## * <dbl> <dbl> <dbl>
## 1 0 44 38.602513
## 2 1 64 63.501133
## 3 2 48 52.229682
## 4 3 23 28.639276
## 5 4 12 11.777902
## 6 26 9 5.238301
Bulduğumuz değerleri Ki-Kare fonksiyonunda yerine koyalım,
anket <- anket %>%
mutate(chisq = ((anketor - beklenen_deger) ^ 2) / beklenen_deger)
anket
## # A tibble: 6 x 4
## anket_sayisi anketor beklenen_deger chisq
## <dbl> <dbl> <dbl> <dbl>
## 1 0 44 38.602513 0.754688458
## 2 1 64 63.501133 0.003919113
## 3 2 48 52.229682 0.342529560
## 4 3 23 28.639276 1.110413202
## 5 4 12 11.777902 0.004188138
## 6 26 9 5.238301 2.701330134
Ki-Kare değerlerini topladığmızda kritik değeri buluyoruz
sum(anket$chisq)
## [1] 4.917069
\(X_{0,05;5}^2 = 11,07\)
Ki-Kare tablosuna baktığımızda tablo değerinin kritik değerden büyük olduğu için \((11,07(ChiSquare-table) > 4.917)\), \(H_0\) hipotezini red edemiyoruz.