Phát hiện các ngoại lệ trong dữ liệu đếm


21

Tôi có những gì tôi ngây thơ nghĩ là một vấn đề khá đơn giản liên quan đến việc phát hiện ngoại lệ cho nhiều bộ dữ liệu đếm khác nhau. Cụ thể, tôi muốn xác định xem một hoặc nhiều giá trị trong một chuỗi dữ liệu đếm cao hơn hoặc thấp hơn dự kiến ​​so với phần còn lại của số đếm trong phân phối.

Yếu tố gây nhiễu là tôi cần phải thực hiện điều này cho 3.500 bản phân phối và có khả năng một số trong số chúng sẽ phù hợp với một poisson quá mức bị thổi phồng bằng 0, trong khi những cái khác có thể phù hợp nhất với nhị thức âm hoặc ZINB, trong khi những cái khác có thể được phân phối bình thường. Vì lý do này, điểm Z đơn giản hoặc âm mưu phân phối không phù hợp với phần lớn dữ liệu. Dưới đây là một ví dụ về dữ liệu đếm mà tôi muốn phát hiện các ngoại lệ.

counts1=[1 1 1 0 2 1 1 0 0 1 1 1 1 1 0 0 0 0 1 2 1 1 2 1 1 1 1 0 0 1 0 1 1 1 1 0 
         0 0 0 0 1 2 1 1 1 1 1 1 0 1 1 2 0 0 0 1 0 1 2 1 1 0 2 1 1 1 0 0 1 0 0 0 
         2 0 1 1 0 2 1 0 1 1 0 0 2 1 0 1 1 1 1 2 0 3]
counts2=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 
         1 1 0 0 0]
counts3=[14 13 14 14 14 14 13 14 14 14 14 14 15 14 14 14 14 14 14 15 14 13 14 14 
         15 12 13 17 13 14 14 14 14 15 14 14 13 14 13 14 14 14 14 13 14 14 14 15 
         15 14 14 14 14 14 15 14 1414 14 15 14 14 14 14 14 14 14 14 14 14 14 14 13 16]
counts4=[0 3 1.......]
and so on up to counts3500.

Ban đầu tôi nghĩ rằng tôi sẽ cần phải viết một vòng lặp bằng Python hoặc R sẽ áp dụng một tập các mô hình cho mỗi phân phối và chọn mô hình phù hợp nhất theo AIC hoặc khác (có thể là fitdistrplus trong R?). Sau đó tôi có thể hỏi các cực trị của phân phối đã cho là gì (số đếm rơi vào đuôi, ví dụ: số "4" có phải là ngoại lệ trong phân phối Counts1 ở trên không?). Tuy nhiên, tôi không chắc đây là một chiến lược hợp lệ và nó xảy ra với tôi có thể có một phương pháp đơn giản để xác định các ngoại lệ trong dữ liệu đếm mà tôi không biết. Tôi đã tìm kiếm rộng rãi và không tìm thấy gì có vẻ phù hợp với vấn đề của mình với số lượng phân phối mà tôi muốn xem xét.

Mục tiêu cuối cùng của tôi là phát hiện sự tăng hoặc giảm đáng kể về số lượng cho mỗi phân phối số lượng, sử dụng phương pháp phù hợp nhất về mặt thống kê.

Câu trả lời:


23

Bạn không thể sử dụng khoảng cách quan sát từ dữ liệu phù hợp cổ điển để phát hiện các ngoại lệ một cách đáng tin cậy vì quy trình phù hợp mà bạn sử dụng có thể bị kéo về phía ngoại lệ (đây được gọi là hiệu ứng che lấp). Một cách đơn giản để phát hiện các ngoại lệ một cách đáng tin cậy là sử dụng ý tưởng chung mà bạn đề xuất (khoảng cách từ phù hợp) nhưng thay thế các công cụ ước tính cổ điển bằng các công cụ mạnh mẽ ít bị ảnh hưởng bởi các ngoại lệ. Dưới đây tôi trình bày một minh họa chung về ý tưởng và sau đó thảo luận về giải pháp cho vấn đề cụ thể của bạn.

Một minh họa: xem xét 20 quan sát sau đây được rút ra từ một (làm tròn đến chữ số thứ hai):N(0,1)

x<-c(-2.21,-1.84,-.95,-.91,-.36,-.19,-.11,-.1,.18,
.3,.31,.43,.51,.64,.67,.72,1.22,1.35,8.1,17.6)

(hai cái cuối cùng thực sự phải là 0,81 và 1,76 nhưng đã vô tình bị nhầm lẫn).

Sử dụng quy tắc phát hiện ngoại lệ dựa trên so sánh thống kê

|xtôi-ave(xtôi)|sd(xtôi)

đến quantiles của một phân phối chuẩn sẽ không bao giờ dẫn bạn đến nghi ngờ rằng 8,1 là một outlier, dẫn bạn ước tính của loạt 'cắt' là 2 (để so sánh các liệu, ví dụ như untrimmed, ước tính là 4,35).sdsdsd

Nếu bạn đã sử dụng một thống kê mạnh mẽ thay thế:

|xtôi-trung gian(xtôi)|điên(xtôi)

và so sánh các điểm mạnh mẽ kết quả với các lượng tử của một bình thường, bạn sẽ đánh dấu chính xác hai quan sát cuối cùng là các ngoại lệ (và ước tính chính xác của chuỗi được cắt là 0,96).sdzsd

(vì lợi ích của sự hoàn chỉnh Tôi phải chỉ ra rằng một số người, ngay cả trong thời đại này qua ngày khác, thích bám vào dự toán --untrimmed-- liệu của 4,35 thay vì sử dụng các ước tính chính xác hơn dựa trên cắt tỉa nhưng điều này là không thể hiểu được đối với tôi )

Đối với các bản phân phối khác, tình huống không có gì khác biệt, chỉ đơn thuần là bạn sẽ phải chuyển đổi trước dữ liệu của mình trước. Ví dụ: trong trường hợp của bạn:

Giả sử là dữ liệu đếm ban đầu của bạn. Một mẹo nhỏ là sử dụng phép biến đổi:X

Y= =2X

và để loại trừ một quan sát là ngoại lệ nếu (quy tắc này không đối xứng và tôi sẽ rất thận trọng khi loại trừ các quan sát từ 'đuôi' bên trái của biến đếm theo a ngưỡng dựa trên dữ liệu. Quan sát tiêu cực, Rõ ràng, nên khá an toàn để loại bỏ)Y>trung gian(Y)+3

Điều này dựa trên ý tưởng rằng nếu là poisson, thìX

YN(trung gian(Y),1)

Phép tính gần đúng này hoạt động hợp lý tốt đối với dữ liệu phân phối poisson khi (tham số của phân phối poisson) lớn hơn 3.λ

Khi nhỏ hơn 3 (hoặc khi mô hình chi phối phân phối phần lớn dữ liệu có chế độ gần bằng 0 hơn so với poisson , như trong ZINB rv's), phép tính gần đúng có xu hướng sai ở phía bảo thủ (từ chối ít dữ liệu hơn như các ngoại lệ).λ = 3λλ= =3

Để xem lý do tại sao điều này được coi là 'bảo thủ', hãy xem xét rằng ở giới hạn (khi dữ liệu là nhị thức với rất nhỏ ), không có quan sát nào được gắn cờ là ngoại lệ theo quy tắc này và đây chính xác là hành vi chúng tôi muốn: gây ra che giấu, ngoại lệ phải có khả năng lái các tham số ước tính cách xa giá trị thực của chúng. Khi dữ liệu được rút ra từ một bản phân phối có hỗ trợ giới hạn (chẳng hạn như nhị thức), điều này đơn giản là không thể xảy ra ...p

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.