Verilerin R'deki Poisson Dağılımını takip edip etmediğini nasıl bilebilirim?


25

Ben lisans öğrencisiyim ve olasılık dersim için bir projem var. Temel olarak, bir dizi yıl ülkemi etkileyen kasırgalar hakkında bir veri setim var.

Olasılık Kitabımda, (R ile Olasılık ve İstatistik) verinin Poisson dağılımını takip edip etmediğini kontrol etmenin (tam değil) bir örneği var, bu 3 kriterin takip edildiğini kanıtlamaya çalışıyorlar: (Kitabımdan, sayfa 120 (ölçüt) sayfa 122-123 örneği)

1- Örtüşmeyen aralıklardaki sonuçların sayısı bağımsızdır. Başka bir deyişle, zaman aralığındaki sonuç sayısı (0, t] zaman aralığındaki sonuç sayısından bağımsızdır (t, t + h], h> 0

2- İki veya daha fazla sonucun yeterince kısa bir aralıkta olasılığı neredeyse sıfırdır. Başka bir deyişle, h'nin yeterince küçük olması şartıyla, aralıkta iki veya daha fazla sonuç elde etme olasılığı (t, t + h], aynı zaman aralığında bir veya sıfır sonuç alma olasılığına kıyasla önemsizdir.

3- Yeterince kısa bir aralıkta veya küçük bir bölgede tam olarak bir sonucun olasılığı, aralığın veya bölgenin uzunluğuyla orantılıdır. Başka bir deyişle, bir sonucun h uzunluğundaki bir aralıkta olasılığı lambda * h'dir.

Ancak 3. kriter “bir egzersiz olarak” bırakıldı.

A- Birisi bana, veri setimin Poisson dağılımını takip edip etmediğini görmenin daha kolay bir yolu olup olmadığını söyleyebilir mi?

B- Birisi bana 1. ve 3. Kriterleri bir tür örnekle açıklayabilir mi (eğer R, fantastik ise)?

Teşekkürler!

Not: Uzun yazı için özür dilerim. Ayrıca, aşağıdaki gibi bir tablo olması için verileri dönüştürmem gerekiyor:

  number of hurricanes       | 0 | 1 | 2  etc.
  -----------------------------------------
  total years that have      |   |   |
  that number of hurricanes  |   |   |

Kitabınızdaki kriterler aralık verileri içindir; bu kasırgaların indiği tarihler olsaydı faydalı olurdu ... üstelik bu kriterler sabit oranlı Poisson süreçleri içindi (ki umarım kasırgalar için değil). Sayım verilerinizin Poisson dağılımını takip edip etmediğini kontrol etmek için ilk temel yaklaşım ki-kare testidir.
Elvis

Yanıtlar:


33

Bir dağılımın Poisson dağılımından biraz farklı olması için sonsuz sayıda yol vardır; Eğer veri kümesi olduğunu tespit edemez olan bir Poisson dağılımına çekilen. Yapabileceğiniz şey, bir Poisson ile görmeniz gerekenlerle tutarsızlığı aramaktır, ancak bariz tutarsızlık eksikliği onu Poisson yapmaz.

Bununla birlikte, söz konusu üç kriteri kontrol ederek burada bahsettiğiniz şey, verilerin Poisson dağılımından istatistiksel yöntemlerle (yani verilere bakarak) gelip gelmediğini kontrol etmek değil, aynı zamanda verilerin ürettiği işlemin verileri yerine getirip getirmediğini değerlendirerek değildir. Poisson işleminin şartları; Koşulların tümü tutulduysa veya neredeyse tutulduysa (ve bu veri üretme sürecinin bir değerlendirmesi), bir Poisson işlemine yakın veya yakın bir şey olabilir; Poisson Dağılımı.

Ancak şartlar çeşitli şekillerde geçerli değildir ... ve en doğru olanı en fazla sayı 3'tür. Bu temelde Poisson sürecini öne sürmenin belirli bir nedeni yoktur, ancak ihlaller ortaya çıkan verilerin çok uzak olmasına rağmen çok kötü olmayabilir. Poisson’tan.

Dolayısıyla, verilerin kendisini incelemekten gelen istatistiksel argümanlara geri dönüyoruz. Veriler, dağılımın bunun gibi bir şeyden ziyade Poisson olduğunu nasıl gösterebilir?

Başlangıçta belirtildiği gibi, yapabileceğiniz şey, verilerin Poisson olan temel dağılımı ile açık bir şekilde tutarsız olmadığını kontrol etmektir, ancak bu bir Poisson'dan alındıklarını söylemez (zaten olduklarından emin olabilirsiniz) değil).

Bu kontrolü uygunluk testlerinin iyiliği ile yapabilirsiniz.

Bahsedilen ki-kare böyle, ama ki bu durum için ki-kare testini kendim önermem **; ilginç sapmalara karşı gücü düşüktür. Amacınız iyi bir güce sahip olmaksa, o yolu alamayacaksınız (gücü umursamıyorsanız, neden test edersiniz?). Başlıca değeri sadelik ve pedagojik değere sahip; Bunun dışında, bir uyum testi iyiliği olarak rekabetçi değildir.

** Daha sonra düzenleme eklendi: Şimdi bunun bir ev ödevi olduğu açıkça görülüyor , verileri kontrol etmek için ki-kare testi yapmanız beklendiği ihtimali Poisson ile tutarsız değil. İlk Poissonness grafiğinin altında yapılan örnek chi-kare uyum testi örneğime bakın.


İnsanlar sık ​​sık bu testleri yanlış bir nedenle yaparlar (örneğin, 'bu nedenle verilerin Poisson olduğunu varsayan verilerle başka bir istatistiksel şey daha yapmaları tamam') demek istedikleri için. Asıl soru 'bu ne kadar yanlış gidebilir?' ... ve uyum testlerinin iyiliği bu soruya pek yardımcı olmuyor. Genellikle, bu sorunun cevabı en iyi ihtimalle, örneklem büyüklüğünden bağımsız (/ neredeyse bağımsız) bir şeydir - - ve bazı durumlarda, örneklem büyüklüğüyle uzaklaşma eğiliminde olan sonuçlardan biri ... uyumluluk testi iyiliği ile işe yaramazken küçük numuneler (varsayım ihlalleri riskinin genellikle en büyük olduğu yer).

Bir Poisson dağılımını test etmeniz gerekiyorsa, birkaç makul alternatif vardır. Bunlardan biri, AD istatistiğine dayanarak, ancak null altında benzetilmiş bir dağılım kullanarak Anderson-Darling testine benzer bir şey yapmak olacaktır (ayrık dağılımın ikiz problemlerini hesaba katmak ve parametreleri tahmin etmeniz gerekir).

Daha basit bir alternatif, uyum iyiliği için Pürüzsüz Test olabilir - bunlar, boştaki olasılık fonksiyonuna göre dik olan bir polinom ailesi kullanarak verileri modelleyerek bireysel dağılımlar için tasarlanmış bir testler topluluğudur. Düşük dereceli (ilginç) alternatifler, bazın üzerindeki polinomların katsayılarının sıfırdan farklı olup olmadıklarını test ederek test edilir ve bunlar genellikle testten en düşük sıra terimlerini çıkartarak parametre tahmini ile ilgilenebilir. Poisson için böyle bir test var. İhtiyacın olursa referans bulabilirim.

Bir Poissonness çiziminde korelasyonu (veya daha çok bir Shapiro-Francia testi, belki de ) kullanabilirsiniz - örn. vs (bkz. Hoaglin, 1980) - test istatistiği olarak.n(1r2)log(xk)+log(k!)k

İşte R'de yapılan bu hesaplamanın bir örneği (ve arsa):

y=rpois(100,5)
n=length(y)
(x=table(y))
y
 0  1  2  3  4  5  6  7  8  9 10 
 1  2  7 15 19 25 14  7  5  1  4 

k=as.numeric(names(x))
plot(k,log(x)+lfactorial(k))

görüntü tanımını buraya girin

İşte bir Poisson için uygunluk testi için kullanabileceğim istatistik:

n*(1-cor(k,log(x)+lfactorial(k))^2)
[1] 1.0599

Tabii ki, p-değerini hesaplamak için, test istatistiğinin boş değerin altındaki dağılımını da simüle etmeniz gerekir (ve değerler aralığında sıfır sayma ile nasıl başa çıkılabileceğini tartışmamıştım). Bu oldukça güçlü bir test yapmalı. Çok sayıda başka alternatif testler var.

İşte, geometrik bir dağılımdan 50 büyüklüğünde bir örnek üzerinde Poissonness grafiği yapmanın bir örneği: (p = .3):

görüntü tanımını buraya girin

Gördüğünüz gibi, doğrusal olmayanlığı belirten net bir 'bükülme' gösteriyor


Poissonness arsası için referanslar şöyle olacaktır:

David C. Hoaglin (1980),
"Poissonness Plot",
Amerikan İstatistiği
Vol. 34, No. 3 (Ağu.,), Sayfa 146-149

ve

Hoaglin, D. ve J. Tukey (1985),
"9. Kesikli Dağılımların Şeklinin Kontrol Edilmesi",
Veri Tablolarını, Trendleri ve Şekilleri Keşfetme ,
(Hoaglin, Mosteller ve Tukey ed)
John Wiley & Sons

İkinci referans, küçük sayılar için arsada bir düzenleme içerir; Muhtemelen dahil etmek istersiniz (ama elime referansım yok).


Ki kare iyilik testi testi örneği:

Ki-kare uyum iyiliği yerine getirilmesinin yanı sıra, genellikle birçok sınıfta yapılması beklendiği gibi (yapmam tarzım olmasa da):

1: verilerinizle başlayarak (yukarıdaki 'y' de rastgele oluşturduğum veriler olarak alacağım), sayım tablosunu oluşturur:

(x=table(y))
y
 0  1  2  3  4  5  6  7  8  9 10 
 1  2  7 15 19 25 14  7  5  1  4 

2: ML tarafından takılan bir Poisson varsayarak her hücrede beklenen değeri hesaplayın:

 (expec=dpois(0:10,lambda=mean(y))*length(y))
 [1]  0.7907054  3.8270142  9.2613743 14.9416838 18.0794374 17.5008954 14.1173890  9.7611661
 [9]  5.9055055  3.1758496  1.5371112

3: son kategorilerin küçük olduğuna dikkat edin; bu, ki-kare dağılımını, test istatistiklerinin dağılımına bir yaklaşım olarak daha az iyi yapar (ortak bir kural, en az 5 olması beklenen değerleri istersiniz, ancak çok sayıda makale bu kuralın gereksiz yere kısıtlayıcı olduğunu göstermiştir; yakın, ancak genel yaklaşım daha katı bir kurala uyarlanabilir). Bitişik kategorileri daraltın, böylece en az beklenen değerler en az 5'in çok altında olmayacak şekildedir (10'dan fazla kategoriden 1'ine yakın bir beklenen sayıma sahip bir kategori çok kötü değildir, ikisi oldukça sınırdadır). Ayrıca "10" ötesindeki olasılığı henüz hesaba katmadığımızı da unutmayın, bu nedenle şunu da eklemeliyiz:

expec[1]=sum(expec[1:2])
expec[2:8]=expec[3:9]
expec[9]=length(y)-sum(expec[1:8])
expec=expec[1:9]
expec
sum(expec) # now adds to n

4: benzer şekilde, gözlemlenen kategorileri daralt:

(obs=table(y))
obs[1]=sum(obs[1:2])
obs[2:8]=obs[3:9]
obs[9]=sum(obs[10:11])
obs=obs[1:9]

5: Ki-kare ve Pearson kalıntılarına (katkı imzalı katkısı ile birlikte (isteğe bağlı olarak) bir tabloya koyun ; o kadar iyi uymuyor:(OiEi)2/Ei

print(cbind(obs,expec,PearsonRes=(obs-expec)/sqrt(expec),ContribToChisq=(obs-expec)^2/expec),d=4)
  obs  expec PearsonRes ContribToChisq
0   3  4.618   -0.75282      0.5667335
1   7  9.261   -0.74308      0.5521657
2  15 14.942    0.01509      0.0002276
3  19 18.079    0.21650      0.0468729
4  25 17.501    1.79258      3.2133538
5  14 14.117   -0.03124      0.0009761
6   7  9.761   -0.88377      0.7810581
7   5  5.906   -0.37262      0.1388434
8   5  5.815   -0.33791      0.1141816

6: , gözlemlenen toplamla eşleşen beklenen toplamda 1df, parametreyi tahmin etmek için 1 tane daha:X2=i(EiOi)2/Ei

(chisq = sum((obs-expec)^2/expec))
[1] 5.414413
(df = length(obs)-1-1) # lose an additional df for parameter estimate
[1] 7
(pvalue=pchisq(chisq,df))
[1] 0.3904736

Hem teşhis hem de p değeri, burada beklediğimiz gibi hiçbir uyumsuzluk göstermedi, çünkü yaptığımız veriler aslında Poisson idi.


Düzenleme: İşte Rick Wicklin'in Poissonness arsalarını tartışan ve SAS ve Matlab'daki uygulamalardan bahseden bir bağlantısı.

http://blogs.sas.com/content/iml/2012/04/12/the-poissonness-plot-a-goodness-of-fit-diagnostic/


Düzen2: Haklıysam, 1985 referansından değiştirilen Poissonness grafiği *:

y=rpois(100,5)
n=length(y)
(x=table(y))
k=as.numeric(names(x))
x=as.vector(x)
x1 = ifelse(x==0,NA,ifelse(x>1,x-.8*x/n-.67,exp(-1)))
plot(k,log(x1)+lfactorial(k))

* Aslında kesişme noktasını da ayarlıyorlar, ancak ben burada yapmadım; arsanın görünümünü etkilemez, fakat referanstan başka bir şey uygularsanız (güven aralıkları gibi) yaklaşımlarından tamamen farklı bir şekilde uygularsanız dikkatli olmalısınız.

(Yukarıdaki örnekte, görünüm ilk Poissonness grafiğinden neredeyse hiç değişmiyor.)


2
Cevabınız için teşekkürler! Ama söylemeliyim ki, sizin konuştuğunuz hiçbir konu bilmiyorum QQplot'ın bunun için bir avuç olup olmayacağını merak ediyorum Ne düşünüyorsun? Verdiğim alternatiflerden hangisini kullanmam gerektiğini düşünüyorsun? iyilik uygun mu? Bilgi ve / veya konuştuğunuz testleri nerede bulabilirim? (Godness için Smooth Test'in uyumu) ​​Ayrıca, birinin blog kodu için R kodu olup olmadığını biliyor muydunuz? (Matlab veya SAS'ı tanımıyorum). Ve cevabınız için çok teşekkürler!
Shariff

Ayrıca, hangi dağıtımın verilerimin "sığabileceğini" düşünüyorsunuz? (ödevimin bir parçası değil, ama bilmek güzel olacak :))
Shariff

Poisson için parametreyi varsaymadan nasıl bir QQplot oluşturacaksınız? (Parametre çok küçük değilse, Poisson dönüşümüyle birlikte çalışabileceğinizi varsayalım. Veya bilinmeyen bir parametre için MLE kullanabilirsiniz, ancak daha sonra arsa "olduğundan" daha iyi görünme eğilimindedir; bunu yaptığınızda yargılama). Poissonness grafiğinin QQplot gibi bir şey yapması ve benzer şekilde yorumlanması amaçlanmıştır. Tanısal bir değerlendirme yapmak istiyorsanız, arsa önerebilirim (tercihen eğer ikimizden birini bulabilirsek, belirtilen ayarlamalarla).
Glen_b

Hangi dağıtım verisinin sığmadığını söyleyemem - ama çok fazla olmadığı sürece, birçok dağıtım verileri makul bir şekilde oluşturmuş olabilir.
Glen_b

peki, belki QQplot'a ait veriler için gözlemlenen değerlerin tahmini bir lambdasını kullanabilirim ama biraz okudum ve QQplot'lar sürekli veri için daha iyi (ayrı veriler için çok iyi değil) gibi gözüküyorum. Kodu çevirebilir misin? Gerçekten takdir edilecektir! Kodunuz varsa bana bildirin! (Elbette size kodun kredisini vereceğim :))
Shariff

5

Ki-kare uyum iyiliği testini yapın. Sayım verileri durumunda goodfit(), vcd paketine dahil edilenleri kullanabiliriz . P değeri 0,05'ten büyükse h0'yı reddedemeyeceğimizi unutmayın: işlem bir Poisson işlemidir. Yoksa, bu bir Poisson süreci değildir.

# load the vcd package
library(vcd) ## loading vcd package

# generate two processes for test
set.seed(2014);y=rpois(200,5)
set.seed(2014);y=rnorm(100, 5, 0.3) # goodfit asks for non-negative values
# output the results
gf = goodfit(y,type= "poisson",method= "ML")
plot(gf,main="Count data vs Poisson distribution")
summary(gf)

# to automatically get the pvalue
gf.summary = capture.output(summary(gf))[[5]]
pvalue = unlist(strsplit(gf.summary, split = " "))
pvalue = as.numeric(pvalue[length(pvalue)]); pvalue

# to mannualy compute the pvalue
chisq = sum(  (gf$observed-gf$fitted)^2/gf$fitted )

df = length(gf$observed)-1-1
pvalue = pchisq(chisq,df)
pvalue

3
Anonim bir kullanıcı şu yorumu yaptı (düzenleme denemesi olarak): " pchisqyalnızca kümülatif olasılığı ( ) hesaplarken p değeri "; ; & "El ile p değerini hesapladığınızda ortaya çıkan sonuç, goodfit işlevinin sağladığı p değerinden farklıdır. Bunun neden böyle olduğunu bilmiyorum." P(Xx)P(Xx)pvalue=1-pchisq(chisq,df)
gung - Reinstate Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.