Aşağıdaki yapıya sahip bir veri kümem var:
a word | number of occurrence of a word in a document | a document id
R'de normal dağılım için nasıl bir test yapabilirim? Muhtemelen bu kolay bir soru ama ben bir R acemiyim.
Aşağıdaki yapıya sahip bir veri kümem var:
a word | number of occurrence of a word in a document | a document id
R'de normal dağılım için nasıl bir test yapabilirim? Muhtemelen bu kolay bir soru ama ben bir R acemiyim.
Yanıtlar:
Sorunuzu doğru anlarsam, o zaman bir belge kümesindeki sözcüklerin bir Normal dağılım izlediğini test etmek için sadece bir shapiro-Wilk testi ve bazı qqplot kullanabilirsiniz. Örneğin,
## Generate two data sets
## First Normal, second from a t-distribution
words1 = rnorm(100); words2 = rt(100, df=3)
## Have a look at the densities
plot(density(words1));plot(density(words2))
## Perform the test
shapiro.test(words1); shapiro.test(words2)
## Plot using a qqplot
qqnorm(words1);qqline(words1, col = 2)
qqnorm(words2);qqline(words2, col = 2)
Qqplot komutları şunları verir:
İkinci veri setinin ağır yazılar tarafından açıkça Normal olmadığını görebilirsiniz ( Daha Fazla Bilgi ).
Shapiro-Walk normallik testinde p değeri ilk veri seti için büyük (> .9), ikinci veri seti için ise çok küçüktür (<.01). Bu, ikinci için boş hipotezi reddetmenize yol açacaktır.
qqline
1 eğim ve mu kesişimine sahip olacaktır .
Veri kümenizin çağrıldığını words
ve bir counts
sütunu olduğunu varsayarsak , dağıtımın görselleştirmesini görmek için histogramı çizebilirsiniz:
hist(words$counts, 100, col="black")
100 bidon sayısı
Normal bir QQ grafiği kullanarak da yapabilirsiniz.
qqnorm(words$counts)
Son olarak, normallik için Shapiro-Wilk testini de kullanabilirsiniz.
shapiro.test(word$counts)
Yine de şu tartışmaya bakın: Normallik Testi: 'Esasen Yararsız?'
Hiçbir test size verilerinizin normal bir dağılıma sahip olduğunu göstermez - yalnızca verileri null'u reddedeceğiniz normalle yeterince tutarsız olduğunda gösterebilir.
Fakat sayılar her durumda normal değildir, pozitif tamsayılardır - normal bir dağılıma ait bir gözlemin tamsayı olmayan bir değer alma olasılığı nedir? (... bu bir olasılık olayı 1).
Bu durumda neden normalliği test ettin? Belli ki doğru değil.
[Bazı durumlarda verilerinizin gerçekten normal olmadığını söyleyebilmeniz önemli olmayabilir. Gerçek veriler hiçbir zaman (ya da neredeyse hiç) aslında normal bir dağılımdan çekilmeyecektir.]
Gerçekten bir test yapmanız gerekiyorsa, Shapiro-Wilk testi ( ?shapiro.test
) yaygın olarak kullanılan iyi bir genel normallik testidir.
Normalliğe bakmanın daha resmi bir yolu, kurtosis ve eğriltmenin sıfırdan önemli ölçüde farklı olup olmadığını test etmektir.
Bunu yapmak için, almamız gereken:
kurtosis.test <- function (x) {
m4 <- sum((x-mean(x))^4)/length(x)
s4 <- var(x)^2
kurt <- (m4/s4) - 3
sek <- sqrt(24/length(x))
totest <- kurt/sek
pvalue <- pt(totest,(length(x)-1))
pvalue
}
kurtosis için ve
skew.test <- function (x) {
m3 <- sum((x-mean(x))^3)/length(x)
s3 <- sqrt(var(x))^3
skew <- m3/s3
ses <- sqrt(6/length(x))
totest <- skew/ses
pt(totest,(length(x)-1))
pval <- pt(totest,(length(x)-1))
pval
}
Skewness için.
Her iki test de bir kuyrukludur, bu yüzden iki kuyruklu olmak için p değerini 2 ile çarpmanız gerekir. P-değeriniz birden büyükse, kurtosis.test yerine 1-kurtosis.test () kullanmanız gerekir.
Başka sorularınız varsa, bana j.bredman@gmail.com adresinden e-posta gönderebilirsiniz.
kurtosis()
ve skewness()
fonksiyonlarına ilişkin yukarıdaki iki fonksiyonun farklılıkları nelerdir ? Numunelerin kullanıldığı sonuçlar farklıdır. rnorm()
nortest
R paketi kullanılarak bu testler yapılabilir:
Anderson-Darling normallik testi yapın
ad.test(data1)
Normallik için Cramér-von Mises testi uygulayın
cvm.test(data1)
Normallik için Pearson ki-kare testi yapın
pearson.test(data1)
Normallik için Shapiro-Francia testi yapın
sf.test(data1)
normtest
Paket kullanılarak başka birçok test yapılabilir . Https://cran.r-project.org/web/packages/normtest/normtest.pdf adresindeki açıklamaya bakın.
zipfR
paketi kontrol edin .