Làm thế nào để biết liệu dữ liệu có tuân theo Phân phối Poisson trong R không?


25

Tôi là một sinh viên chưa tốt nghiệp và tôi có một dự án cho lớp xác suất của mình. Về cơ bản, tôi có một bộ dữ liệu về những cơn bão ảnh hưởng đến đất nước của tôi trong một loạt năm.

Trong Sách xác suất của tôi, (Xác suất và Thống kê với R) có một ví dụ (không đầy đủ) về cách kiểm tra xem dữ liệu có tuân theo phân phối Poisson hay không, họ bắt đầu cố gắng chứng minh rằng 3 tiêu chí này được tuân theo: (Từ sách, trang của tôi 120 (tiêu chí) trang 122-123 ví dụ)

1- Số lượng kết quả trong các khoảng không chồng chéo là độc lập. Nói cách khác, số lượng kết quả trong khoảng thời gian (0, t] không phụ thuộc vào số lượng kết quả trong khoảng thời gian (t, t + h], h> 0

2- Xác suất của hai hoặc nhiều kết quả trong một khoảng thời gian đủ ngắn là gần như bằng không. Nói cách khác, với điều kiện h là đủ nhỏ, xác suất đạt được hai hoặc nhiều kết quả trong khoảng (t, t + h] là không đáng kể so với xác suất đạt được một hoặc không kết quả trong cùng khoảng thời gian.

3- Xác suất của chính xác một kết quả trong một khoảng thời gian đủ ngắn hoặc khu vực nhỏ tỷ lệ thuận với độ dài của khoảng hoặc khu vực. Nói cách khác, xác suất của một kết quả trong một khoảng thời gian h là lambda * h.

Nhưng tiêu chí 3 là "như một bài tập".

A- Ai đó có thể cho tôi biết nếu có một cách "dễ dàng" hơn để xem liệu tập dữ liệu của tôi có tuân theo phân phối Poisson không?

B- Ai đó có thể giải thích cho tôi tiêu chí 1 và 3 với một số loại ví dụ (nếu là với R, tuyệt vời)?

Cảm ơn!

Lưu ý: Xin lỗi cho bài viết dài. Ngoài ra, tôi phải chuyển đổi dữ liệu để có một bảng như sau:

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

Các tiêu chí trong cuốn sách của bạn là cho dữ liệu khoảng; điều đó sẽ hữu ích nếu bạn có những ngày mà cơn bão đột quỵ ... hơn nữa các tiêu chí này dành cho các quá trình Poisson tốc độ không đổi , rõ ràng (hoặc tôi hy vọng vậy) không phải là trường hợp bão. Để kiểm tra xem dữ liệu đếm của bạn có tuân theo phân phối Poisson hay không, cách tiếp cận cơ bản đầu tiên là kiểm tra chi bình phương.
Elvis

Câu trả lời:


33

Có vô số cách để phân phối hơi khác so với phân phối Poisson; bạn không thể xác định rằng một tập hợp dữ liệu được rút ra từ phân phối Poisson. Những gì bạn có thể làm là tìm kiếm sự không nhất quán với những gì bạn sẽ thấy với Poisson, nhưng sự thiếu nhất quán rõ ràng không làm cho nó trở thành Poisson.

Tuy nhiên, những gì bạn đang nói về việc đó bằng cách kiểm tra ba tiêu chí đó không phải là kiểm tra dữ liệu đến từ phân phối Poisson bằng phương tiện thống kê (tức là bằng cách xem dữ liệu), mà bằng cách đánh giá liệu quy trình dữ liệu được tạo ra có thỏa mãn hay không điều kiện của một quá trình Poisson; nếu tất cả các điều kiện được tổ chức hoặc gần như giữ (và đó là xem xét quá trình tạo dữ liệu), bạn có thể có một cái gì đó từ hoặc rất gần với quy trình Poisson, đó sẽ là cách lấy dữ liệu được rút ra từ một thứ gần với Phân phối Poisson.

Nhưng các điều kiện không theo nhiều cách ... và xa nhất là đúng 3. Không có lý do cụ thể nào trên cơ sở đó để khẳng định quy trình Poisson, mặc dù các vi phạm có thể không tệ đến mức dữ liệu kết quả là xa từ Poisson.

Vì vậy, chúng tôi trở lại với các đối số thống kê xuất phát từ việc kiểm tra dữ liệu. Làm thế nào dữ liệu cho thấy rằng phân phối là Poisson, chứ không phải là một cái gì đó giống như nó?

Như đã đề cập lúc đầu, những gì bạn có thể làm là kiểm tra xem dữ liệu rõ ràng không phù hợp với phân phối cơ bản là Poisson hay không, nhưng điều đó không cho bạn biết chúng được rút ra từ Poisson (bạn có thể tin chắc rằng chúng là không phải).

Bạn có thể làm kiểm tra này thông qua các bài kiểm tra sức khỏe phù hợp.

Hình vuông chi được đề cập là một trong số đó, nhưng tôi sẽ không đề xuất kiểm tra chi bình phương cho tình huống này **; nó có sức mạnh thấp chống lại những sai lệch thú vị. Nếu mục tiêu của bạn là có sức mạnh tốt, bạn sẽ không đạt được điều đó (nếu bạn không quan tâm đến sức mạnh, tại sao bạn lại thử nghiệm?). Giá trị chính của nó là ở sự đơn giản, và nó có giá trị sư phạm; ngoài điều đó, nó không cạnh tranh như là một điểm tốt của bài kiểm tra phù hợp.

** Đã thêm vào chỉnh sửa sau: Bây giờ rõ ràng đây là bài tập về nhà, cơ hội mà bạn dự kiến ​​sẽ thực hiện kiểm tra chi bình phương để kiểm tra dữ liệu không phù hợp với Poisson tăng lên khá nhiều. Xem ví dụ về mức độ phù hợp chi bình phương của tôi về kiểm tra sự phù hợp, được thực hiện bên dưới âm mưu Poissonness đầu tiên


Mọi người thường thực hiện các thử nghiệm này vì lý do sai (ví dụ: vì họ muốn nói 'do đó, bạn có thể thực hiện một số điều thống kê khác với dữ liệu giả định rằng dữ liệu là Poisson'). Câu hỏi thực sự là 'điều đó có thể sai đến mức nào?' ... Và sự tốt đẹp của các bài kiểm tra phù hợp không thực sự giúp ích nhiều cho câu hỏi đó. Thường thì câu trả lời cho câu hỏi đó là tốt nhất là một câu độc lập (/ gần như độc lập) với cỡ mẫu CHUYÊN và trong một số trường hợp, một kết quả có xu hướng biến mất với cỡ mẫu ... trong khi kiểm tra mức độ phù hợp là vô ích với các mẫu nhỏ (trong đó rủi ro của bạn từ việc vi phạm các giả định thường lớn nhất).

Nếu bạn phải kiểm tra phân phối Poisson, có một vài lựa chọn thay thế hợp lý. Người ta sẽ làm một cái gì đó giống với thử nghiệm Anderson-Darling, dựa trên thống kê AD nhưng sử dụng phân phối mô phỏng theo null (để giải quyết các vấn đề sinh đôi của phân phối rời rạc và bạn phải ước tính các tham số).

Một giải pháp thay thế đơn giản hơn có thể là Thử nghiệm mượt mà về mức độ phù hợp - đây là một tập hợp các thử nghiệm được thiết kế cho các phân phối riêng lẻ bằng cách mô hình hóa dữ liệu bằng một họ đa thức trực giao với hàm xác suất trong null. Các lựa chọn thay thế bậc thấp (nghĩa là thú vị) được kiểm tra bằng cách kiểm tra xem các hệ số của đa thức trên cơ sở có khác 0 hay không và chúng thường có thể xử lý ước lượng tham số bằng cách bỏ qua các điều khoản bậc thấp nhất từ ​​phép thử. Có một bài kiểm tra như vậy cho Poisson. Tôi có thể đào một tài liệu tham khảo nếu bạn cần nó.

Bạn cũng có thể sử dụng mối tương quan (hoặc, giống như một thử nghiệm Shapiro-Francia, có lẽ ) trong một âm mưu Poissonness - ví dụ như một âm mưu của vs (xem Hoaglin, 1980) - như một thống kê kiểm tra.n(1r2)log(xk)+log(k!)k

Đây là một ví dụ về tính toán đó (và cốt truyện), được thực hiện trong R:

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))

nhập mô tả hình ảnh ở đây

Đây là số liệu thống kê mà tôi đề xuất có thể được sử dụng để kiểm tra mức độ phù hợp của Poisson:

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

Tất nhiên, để tính giá trị p, bạn cũng cần mô phỏng phân phối thống kê kiểm tra theo giá trị null (và tôi đã không thảo luận về cách người ta có thể xử lý số không trong phạm vi giá trị). Điều này sẽ mang lại một bài kiểm tra hợp lý mạnh mẽ. Có rất nhiều thử nghiệm thay thế khác.

Dưới đây là ví dụ về thực hiện biểu đồ Poissonness trên mẫu có kích thước 50 từ phân phối hình học (p = .3):

nhập mô tả hình ảnh ở đây

Như bạn thấy, nó hiển thị một 'nút' rõ ràng, biểu thị tính phi tuyến


Tài liệu tham khảo cho cốt truyện Poissonness sẽ là:

David C. Hoaglin (1980),
"Một âm mưu độc ác",
The Statistician
Vol. 34, số 3 (tháng 8,), trang 146-149

Hoaglin, D. và J. Tukey (1985),
"9. Kiểm tra hình dạng của phân phối rời rạc",
khám phá các bảng dữ liệu, xu hướng và hình dạng ,
(Hoaglin, Mosteller & Tukey eds)
John Wiley & Sons

Tham chiếu thứ hai chứa một điều chỉnh cho âm mưu cho số lượng nhỏ; bạn có thể muốn kết hợp nó (nhưng tôi không có tài liệu tham khảo).


Ví dụ về làm một bài kiểm tra mức độ phù hợp chi bình phương:

Bên cạnh việc thực hiện mức độ phù hợp chi bình phương, cách thức thường được dự kiến ​​sẽ được thực hiện trong rất nhiều lớp học (mặc dù không phải là cách tôi sẽ làm):

1: bắt đầu với dữ liệu của bạn, (mà tôi sẽ lấy là dữ liệu tôi tạo ngẫu nhiên trong 'y' ở trên, tạo bảng tổng số:

(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: tính giá trị mong đợi trong mỗi ô, giả sử Poisson được trang bị ML:

 (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: lưu ý rằng các loại kết thúc là nhỏ; điều này làm cho phân phối chi bình phương kém tốt hơn so với phân phối thống kê kiểm tra (một quy tắc chung là bạn muốn các giá trị dự kiến ​​ít nhất là 5, mặc dù nhiều bài báo đã cho thấy quy tắc đó bị hạn chế một cách không cần thiết; gần gũi, nhưng cách tiếp cận chung có thể được điều chỉnh theo quy tắc chặt chẽ hơn). Thu gọn các danh mục liền kề, để các giá trị dự kiến ​​tối thiểu ít nhất không quá 5 (một danh mục có số lượng dự kiến ​​giảm xuống gần 1 trong số hơn 10 danh mục không quá tệ, hai là đường biên giới khá đẹp). Cũng lưu ý rằng chúng tôi chưa tính đến xác suất vượt quá "10", vì vậy chúng tôi cũng cần kết hợp điều đó:

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: tương tự, các loại sụp đổ trên quan sát:

(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: Đặt vào một bảng, (tùy chọn) cùng với sự đóng góp cho chi bình phương và Pearson dư (căn bậc hai đã ký của đóng góp), những điều này có thể hữu ích khi thử xem nó không phù hợp lắm(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: Tính , với mất 1df cho tổng số dự kiến ​​khớp với tổng số quan sát được và thêm 1 để ước tính tham số: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

Cả chẩn đoán và giá trị p đều không thiếu sự phù hợp ở đây ... mà chúng tôi mong đợi, vì dữ liệu chúng tôi tạo ra thực sự là Poisson.


Chỉnh sửa: đây là một liên kết đến blog của Rick Wicklin, thảo luận về cốt truyện Poissonness, và nói về việc triển khai trong SAS và Matlab

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


Edit2: Nếu tôi có quyền, cốt truyện Poissonness đã sửa đổi từ tài liệu tham khảo năm 1985 sẽ là *:

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))

* Họ thực sự cũng điều chỉnh việc đánh chặn, nhưng tôi đã không làm như vậy ở đây; nó không ảnh hưởng đến sự xuất hiện của cốt truyện, nhưng bạn phải cẩn thận nếu bạn thực hiện bất cứ điều gì khác từ tài liệu tham khảo (chẳng hạn như khoảng tin cậy) nếu bạn thực hiện nó hoàn toàn khác với cách tiếp cận của họ.

(Đối với ví dụ trên, ngoại hình hầu như không thay đổi so với cốt truyện Poissonness đầu tiên.)


2
Cảm ơn bạn đã trả lời! Nhưng tôi phải nói rằng tôi không biết bất kỳ chủ đề nào mà bạn đang nói đến. Tôi đã tự hỏi nếu một QQplot sẽ trở nên hữu ích cho việc này. Bạn nghĩ sao? Từ những lựa chọn thay thế mà bạn đưa ra, mà bạn nghĩ rằng tôi nên sử dụng? sự tốt lành phù hợp? Nơi tôi có thể tìm thấy thông tin và / hoặc các bài kiểm tra mà bạn đang nói đến? (của Smooth Test cho sự phù hợp với thần thái) Ngoài ra, bạn có biết ai đó có mã R cho mã blog không? (Tôi không biết Matlab hoặc SAS). Và, cảm ơn rất nhiều vì câu trả lời của bạn!
Shariff

Ngoài ra, phân phối nào bạn nghĩ rằng dữ liệu của tôi có thể "phù hợp"? (không phải là một phần của bài tập về nhà của tôi, nhưng sẽ rất tuyệt nếu biết :))
Shariff

Làm thế nào bạn có thể tạo ra một QQplot cho Poisson mà không giả sử tham số? (Tôi cho rằng bạn có thể làm việc với một biến đổi của Poisson nếu tham số không quá nhỏ. Hoặc bạn có thể sử dụng MLE cho tham số chưa biết, nhưng sau đó cốt truyện có xu hướng "tốt hơn" so với cách khác - bạn cần điều chỉnh phán xét khi bạn làm điều đó). Cốt truyện Poissonness có nghĩa là hành động giống như một QQplot và được dự định sẽ được giải thích tương tự. Nếu bạn muốn đánh giá chẩn đoán, tôi đề xuất âm mưu đó (tốt nhất là với các điều chỉnh được đề cập nếu một trong hai chúng tôi có thể xác định vị trí của chúng).
Glen_b -Reinstate Monica

Tôi không thể nói dữ liệu phân phối nào tôi chưa thấy có thể phù hợp - nhưng trừ khi có nhiều dữ liệu, nhiều phân phối có thể đã tạo ra dữ liệu một cách hợp lý.
Glen_b -Reinstate Monica

tốt, có lẽ tôi có thể sử dụng lambda ước tính của các giá trị quan sát được cho dữ liệu cho QQplot nhưng tôi đọc một chút và có vẻ như QQplots tốt hơn cho dữ liệu liên tục (không tốt cho dữ liệu rời rạc). Bạn có thể dịch mã? Nó sẽ thực sự được đánh giá cao! Hãy cho tôi biết nếu bạn có mã! (Tôi sẽ cung cấp cho bạn tín dụng cho mã, tất nhiên :))
Shariff

5

Thực hiện các chi tốt bình phương của kiểm tra phù hợp. Trong trường hợp dữ liệu đếm, chúng ta có thể sử dụng goodfit()bao gồm trong gói vcd. Lưu ý rằng nếu giá trị p lớn hơn 0,05, chúng ta không thể từ chối h0: quá trình là quá trình Poisson. Hoặc nếu không, nó không phải là một quá trình Poisson.

# 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
Một người dùng ẩn danh đã đăng nhận xét sau (dưới dạng chỉnh sửa đã cố gắng): " pchisqchỉ tính xác suất tích lũy ( ) trong khi giá trị p là "; ; & "Kết quả khi bạn tính toán giá trị p theo cách thủ công khác với giá trị p mà hàm goodfit cung cấp. Tôi không biết tại sao lại như vậy." P(Xx)P(Xx)pvalue=1-pchisq(chisq,df)
gung - Phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.