làm gì với các số liệu bất thường (outliers)

Đinh Văn Khương

Senior Member
Trong các thí nghiệm, việc thu được một vài giá trị (tiếng Anh gọi là outliers) rất lớn hay rất nhỏ so với giá trị trung bình (mean) của nghiệm thức vẫn thường xảy ra. Trong nhiều trường hợp, chỉ một vài giá trị outliers có thể làm thay đổi các kết quả xử thí nghiệm và thống kê. Các bạn có kinh nghiệm gì trong việc xử lý những giá trị outliers này từ các nghiên cứu của mình?
 
nguyenvantuan.net said:
Vấn đề đặt ra là xử lí outlier như thế nào. Trong khoa học có vài phương pháp ứng phó với các giá trị outlier. Phương pháp thứ nhất là hoán chuyển chúng sang một đơn vị khác và phân tích lại xem chúng có ảnh hưởng đến kết quả chung. Chẳng hạn như nếu đơn vị đo lường gốc là đồng tiền (như USD) thì chúng ta có thể hoán chuyển sang đơn vị logarít trước khi phân tích. Phương pháp thứ hai là sử dụng các thuật toán phân tích tinh vi để ước tính thông số của mô hình tương quan. Phương pháp thứ ba là khử bỏ chúng (còn gọi là winsorizing) và phân tích lại. Thật ra, còn vài phương pháp khác nữa, nhưng nói chung 3 phương pháp trên thường rất có hiệu quả.

Không biết có tác dụng gì cho bác không.

Em còn thấy mấy cách nữa (thật ra vì dốt thống kê nên không biết nó có trùng với cái nào ở trên không):

  • Phân hạng dữ liệu (nhóm dữ liệu lại với nhau kiểu 0<=x1<1; 1<=x2<2...), dùng trong trường hợp biến định lượng liên tục và có một (ít) outlier nằm ở hai đầu.
  • Dùng weighted mean thay vì mean (có thể kết hợp với phân hạng nếu cần)
(Mong các bác nhẹ tay ạ)
 
Không biết có tác dụng gì cho bác không.


  • Phân hạng dữ liệu (nhóm dữ liệu lại với nhau kiểu 0<=x1<1; 1<=x2<2...), dùng trong trường hợp biến định lượng liên tục và có một (ít) outlier nằm ở hai đầu.
(Mong các bác nhẹ tay ạ)

sau đó sẽ làm gì với chúng (outliers)?

Cảm ơn bạn Thành, cả 3 phương pháp như GS Tuấn trình bày mình cũng đã từng làm rồi. Thông thường mình phương pháp chuyển dạng số liệu rồi kiểm tra lại. Nếu không đạt kết quả (rất nhiều trường hợp thường là như vậy) mình thường chuyển qua phương pháp thứ 3 là khử những giá trị tính từ trung bình +/- 2 lần độ lệch chuẩn (mean +/- 2SD), tuy nhiên trường hợp này áp dụng được khi số liệu có phân bố chuẩn hoặc gần chuẩn. Với những số liệu mà phân bố không chuẩn thì việc áp dụng phương pháp khử outliers này nên thực hiện như thế nào?
 
Không biết có tác dụng gì cho bác không.



  • Dùng weighted mean thay vì mean (có thể kết hợp với phân hạng nếu cần)
(Mong các bác nhẹ tay ạ)

mình nghĩ một hồi mà không hiểu ý này liên quan gì đến xử lý outliers. Thông thường weighted mean được dùng khi mình cần thống kê mô tả tính giá trị trung bình trong trường hợp cỡ mẫu (sample size) không đều nhau.
 
Thông thường với các thí nghiệm đơn lẻ em nhận diện outliers bằng mắt trên histogram, thế là đơn giản và có khi hiệu quả hơn cả. Nếu bắt buộc xử lý dãy các thí nghiệm với số lượng lớn thì về cơ bản vẫn phải dựa trên giả thiết về phân bố chuẩn, hoặc exponential, hoặc các dạng tiệm cận khác nhau. Package outliers có thể có ích [http://cran.r-project.org/web/packages/outliers/outliers.pdf]
 
Thông thường với các thí nghiệm đơn lẻ em nhận diện outliers bằng mắt trên histogram, thế là đơn giản và có khi hiệu quả hơn cả.

uh, có thể nhận diện qua histogram, hồi qui và cả một số graph thông thường như graph dạng box. Nhận diện outliers và extremes thì không khó nhưng xử lý chúng mới là vấn đề không phải lúc nào cũng giải quyết được, đặc biệt khi giữ hoặc loại bỏ outliers có thể làm thay đổi hoàn toàn kết quả thống kê từ p < 0.05 thành p > 0.05 và ngược lại.

Nếu bắt buộc xử lý dãy các thí nghiệm với số lượng lớn thì về cơ bản vẫn phải dựa trên giả thiết về phân bố chuẩn, hoặc exponential, hoặc các dạng tiệm cận khác nhau.

Như mình đã giải thích ở trên, khi tìm được dạng phân bố của số liệu thì việc xử lý outliers sẽ tự tin hơn nhiều so với số liệu phân bố không chuẩn.


mình không đọc được file pdf
 
mình không đọc được file pdf

-Do ký hiệu "]" ở cuối bị nhận nhầm là link, em post lại http://cran.r-project.org/web/packages/outliers/outliers.pdf

-Em không hiểu rõ vấn đề lắm, có thể anh dùng từ "outliers" với nghĩa khác, nhưng theo em hay dùng thì "outliers" là các số liệu kỳ dị do sai sót đo đạc là chính và mọi outlier phải được loại bỏ trước các xử lý downstream (trừ khi chính các outliers là đối tượng cần tìm), và vấn đề chính là nhận diện mà thôi.

Extrem values thì khác, là các giá trị cực biên (hợp lý) của một phân bố. Có thể khảo sát chúng sử dụng dạng tiệm cận extreme value distributions (http://en.wikipedia.org/wiki/Extreme_value_theory) tương ứng của ba lớp chính. Có lẽ từ đó cũng có thể xác định được p-value của số liệu cực biên, loại bỏ các outliers do đo đạc. Khác với outliers cần phải loại bỏ, extreme values là các đối tượng khảo sát.

Em vừa search extreme value package với R http://rss.acs.unt.edu/Rdoc/library/evir/html/00Index.html
 
-Do ký hiệu "]" ở cuối bị nhận nhầm là link, em post lại http://cran.r-project.org/web/packages/outliers/outliers.pdf

-Em không hiểu rõ vấn đề lắm, có thể anh dùng từ "outliers" với nghĩa khác, nhưng theo em hay dùng thì "outliers" là các số liệu kỳ dị do sai sót đo đạc là chính và mọi outlier phải được loại bỏ trước các xử lý downstream (trừ khi chính các outliers là đối tượng cần tìm), và vấn đề chính là nhận diện mà thôi.

Extrem values thì khác, là các giá trị cực biên (hợp lý) của một phân bố. Có thể khảo sát chúng sử dụng dạng tiệm cận extreme value distributions (http://en.wikipedia.org/wiki/Extreme_value_theory) tương ứng của ba lớp chính. Có lẽ từ đó cũng có thể xác định được p-value của số liệu cực biên, loại bỏ các outliers do đo đạc. Khác với outliers cần phải loại bỏ, extreme values là các đối tượng khảo sát.

Em vừa search extreme value package với R http://rss.acs.unt.edu/Rdoc/library/evir/html/00Index.html

Cảm ơn pththao (Thảo??), trong nhiều trường hợp rất khó xác định các outliers có phải là do sai sót kỹ thuật (technical errors) hay không, ví dụ như trong trường hợp nghiên cứu tập tính động vật, rất nhiều loài chung phản ứng rất khác nhau với cùng một nhân tố kích thích (e.g. thức ăn: có cá thể ăn rất nhanh nên chúng bắt hàng trăm con mồi trong khoảng 10 phút, trong khi đó có những cá thể chẳng hề động đậy trong suốt thời gian đó và mức trung bình của cả quần thể là 30 con mồi trong 10 phút).

Có lẽ mình sẽ thử tạo ra (create) một bài toán thí nghiệm đơn giản và cụ thể đưa lên và cùng mọi người thảo luận nếu như có hứng thú.

P/S: mình có thể sử dụng được một số phần mềm thống kê (SPSS, Statistica, SAS, GraphPad Prism etc) trừ R, mặc dù khi đọc command trên R cũng có thể lơ mơ đoán được vài thứ :)
 
Vâng, anh thử mô tả thí nghiệm xem ạ, nếu hiểu được gì thì em tham gia theo dõi.

Dù chưa rõ lắm nhưng ví dụ mà anh nêu trong ngoặc là một mixture, về cơ bản thông tin tóm lược trong mean value không được đầy đủ (và có lẽ mean phải tính weighted theo loài). Một đại lượng có thể thấy ngay rất quan trọng trường hợp này là variance.

Em thì không biết gì khác ngoài R, nhưng nếu anh dùng command lines thì em nghĩ chắc về cơ bản cũng tương đương nhau cả.

PS: Anh cứ gọi Thảo thôi ạ.
 
Vâng, anh thử mô tả thí nghiệm xem ạ, nếu hiểu được gì thì em tham gia theo dõi.

Dù chưa rõ lắm nhưng ví dụ mà anh nêu trong ngoặc là một mixture, về cơ bản thông tin tóm lược trong mean value không được đầy đủ (và có lẽ mean phải tính weighted theo loài). Một đại lượng có thể thấy ngay rất quan trọng trường hợp này là variance.

Em thì không biết gì khác ngoài R, nhưng nếu anh dùng command lines thì em nghĩ chắc về cơ bản cũng tương đương nhau cả.

PS: Anh cứ gọi Thảo thôi ạ.

Hi Thảo, cảm ơn bạn đã tham gia nhiệt tình vào chủ đề này.
Bài toán trong file excel rất đơn giản.

câu hỏi nghiên cứu: liệu rằng thuốc trừ sâu có làm thay đổi tốc độ bắt mồi của
Mayfly hay không?
Giả thuyết H0: thuốc trừ sâu không làm thay đổi tốc độ bắt mồi của mayfly
Giả thuyết H1: thuốc trừ sâu làm thay đổi tốc độ bắt mồi của mayfly

Thiết kế thí nghiệm:

60 cá thể mayfly được phân chi một cách ngẫu nhiên, đều nhau vào 1 trong 2 nghiệm thức:
nghiệm thức 0: môi trường ko có thuốc trừ sâu: 30 cá thể
nghiệm thức 1: môi trường có thuốc trừ sâu: 30 cá thể

sau 1 tuần thí nghiệm trong các điều kiện môi trường trên, các cá thể được quan sát để tính toán tốc độ bắt mồi của chúng.

Con mồi: Daphnia nauplii, với mật độ như nhau trong các nghiệm thức.
Tốc độ bắt mồi được tính bằng số lượng Daphnia nauplii bị mayfly bắt trong vòng 1 phút.

Kết quả thu được như trong bảng excel.
--
Dùng STATISTICA: dùng GLM procedure; oneway ANOVA



Dùng SAS: command line:

proc glm data=mayfly2 ;
class poll ;
model feeding = poll ;
lsmeans poll / ADJUST=TUKEY ;
run;

Kết quả:

1) Không loại bỏ outliers: (sheet 1)

F(1, 58)=4.1960, p=.04505
điều này có nghĩa là reject H0 và chấp nhận H1, feeding rate of Mayfly was reduced in the presence of pesticide.

2) Loại bỏ outliers (sheet 2)

F(1, 46)=3.2767, p=.07681
điều này có nghĩa là chưa đủ bằng chứng để reject H0. So feeding rate of Mayfly did not reduce in the presence of pesticide.
 

Attachments

  • shvn_outlierzip.zip
    25.3 KB · Views: 429
Em chưa vẽ được cái histogram để đánh giá số liệu, tuy nhiên nhìn qua cho thấy số liệu có vẻ long-tailed, phân bố có vẻ rất không chuẩn nên chắc không dùng được Fisher test. Long-tailed cũng là nguyên nhân khó khăn xác định các outliers. Vì phân bố không rõ ràng, nếu dùng classical hypothesis test có lẽ nên dùng non-parametric methods chẳng hạn sign-test hoặc rank-test? Trường hợp này outliers sẽ ảnh hưởng rất nhỏ và có lẽ không cần phải loại bỏ.
 
Em chưa vẽ được cái histogram để đánh giá số liệu, tuy nhiên nhìn qua cho thấy số liệu có vẻ long-tailed, phân bố có vẻ rất không chuẩn nên chắc không dùng được Fisher test. Long-tailed cũng là nguyên nhân khó khăn xác định các outliers. Vì phân bố không rõ ràng, nếu dùng classical hypothesis test có lẽ nên dùng non-parametric methods chẳng hạn sign-test hoặc rank-test? Trường hợp này outliers sẽ ảnh hưởng rất nhỏ và có lẽ không cần phải loại bỏ.

hi Thảo, mình mất khoảng 10 phút để tạo ra các số liệu này và khoảng thời gian tương tự cho hiệu chỉnh lại bài toán cho phù hợp với những ảnh hưởng mà outliers có thể gây ra cho thí nghiệm. Một đặc điểm rất chung của các thí nghiệm về tập tính động vật là số liệu thu được hiếm khi nào có phân bố chuẩn, cực hiếm vì hành vi của động vật biểu hiện rất khác nhau ngay trong cùng một điều kiện.

Mình sẽ chờ đợi thêm xem bạn và các anh chị em khác giỏi về thống kê sinh học có cao kiến gì không?
 
Em tóm tắt cách em hay làm với một thí nghiệm đơn: vẽ histogram hai dãy số liệu trên cùng một hình và đánh giá mức độ tin tưởng của giả thiết thống kê bằng mắt; bước đánh giá bằng mắt quyết định chính yếu "niềm tin" rằng mình hay bác bỏ hay chấp nhận giả thiết trơ; việc chọn và thực hiện test thống kê chỉ là vấn đề đưa ra một con số để thảo luận và củng cố niềm tin quan sát.

Trong trường hợp này histogram của cả hai cho thấy giả thiết mean khác nhau có vẻ không được chấp nhận (không mang theo công cụ vẽ chuẩn nên hình k được rõ, em không upload được). Tiếp theo quan sát dạng histogram, như đã nói, em sẽ chọn non-parametric test như sign- hoặc rank- test.

Thế thôi, em hết ý kiến ạ :D
 
À, phải nói thêm là các qui tắc xác định outliers 3-sigma hoặc 4-sigma là áp dụng cho các phân bố chuẩn và gần chuẩn. Với các phân bố có long-tails thì qui tắc này không dùng được, và thực tế là các số liệu extreme như vậy không phải là các outliers (theo cách mà em vẫn gọi), chúng tuân theo các quy tắc phân bố của extrem values và phải được đối xử bình đẳng. Các test-parameteric đa số cũng dựa trên giả thiết chuẩn hoặc gần chuẩn, hoặc một dạng phân bố đã biết để tính p-value nên về cơ bản cũng không dùng được mà phải dùng các non-parameteric (không có giả thiết về distribution của số liệu, còn gọi là distribution-free) như em đã trình bày.
 
Em tóm tắt cách em hay làm với một thí nghiệm đơn: vẽ histogram hai dãy số liệu trên cùng một hình và đánh giá mức độ tin tưởng của giả thiết thống kê bằng mắt; bước đánh giá bằng mắt quyết định chính yếu "niềm tin" rằng mình hay bác bỏ hay chấp nhận giả thiết trơ; việc chọn và thực hiện test thống kê chỉ là vấn đề đưa ra một con số để thảo luận và củng cố niềm tin quan sát.

ặc ak ak, cách làm này lần đầu tiên mình mới được biết đến.
 
Thực tế là thế, theo kinh nghiệm của em người xử lý số liệu nên bắt đầu với mô tả hình ảnh (visualisation) ở dạng nguyên thuỷ nhất nếu có thể. (Có một câu dẫn của ai đó: "You have to look at the data many times before modelling them."). Khi kết luận có thể phỏng đoán cảm tính từ đầu thì người ta mới chọn, thiết kế test và mô hình. Từ đó việc thiết kế test cũng được hướng đạo, việc đánh giá và loại bỏ các yếu tốt ngoại lại không mong muốn cũng dễ dàng. Trường hợp tín hiệu không rõ ràng trên mô tả hình ảnh (visualisation) thông thường là báo hiệu các kết quả test không thống nhất (robust), trừ khi có một test hoặc mô hình thực sự (super) tốt (rất hiếm).
 
Thực tế là thế, theo kinh nghiệm của em người xử lý số liệu nên bắt đầu với mô tả hình ảnh (visualisation) ở dạng nguyên thuỷ nhất nếu có thể. (Có một câu dẫn của ai đó: "You have to look at the data many times before modelling them."). Khi kết luận có thể phỏng đoán cảm tính từ đầu thì người ta mới chọn, thiết kế test và mô hình. Từ đó việc thiết kế test cũng được hướng đạo, việc đánh giá và loại bỏ các yếu tốt ngoại lại không mong muốn cũng dễ dàng. Trường hợp tín hiệu không rõ ràng trên mô tả hình ảnh (visualisation) thông thường là báo hiệu các kết quả test không thống nhất (robust), trừ khi có một test hoặc mô hình thực sự (super) tốt (rất hiếm).

Không phủ nhận là rất nhiều lần mình đã từng visualisation số liệu trước khi quyết định sử dụng trực tiếp hay chuyển dạng số liệu và cũng nghĩ trong đầu về việc số liệu kiểu này thì sẽ lựa chọn model xử lý kiểu gì. Tuy nhiên, sau đó mình vẫn thường chạy thử để kiểm tra xem cái nào là "best fit" dựa trên thống kê chứ không phải dựa vào "mắt thường" hay "niềm tin" vì như thế quá chủ quan.

Mình không biết có mô hình test nào là supermodel hay không. Có lẽ không vì mỗi cái có thế mạnh riêng vì thậm chí ngay cả với 1 model cụ thể chạy trên cùng 1 software ở các phiên bản khác nhau đôi khi có phiên bản thì chạy được, có phiên bản thì không chạy được. Mình đã từng được nghe một câu chuyện về một anh chàng sau khi xử lý số liệu viết báo và gửi tạp chí, sau khi được phản biện góp ý, cần phải chạy lại 1 model trong đó để kiểm tra lại. Tuy nhiên, khi chạy lại trên software (đã được nâng cấp) thì nó không chạy nữa (thử đủ mọi cách nó không chạy). Thời điểm đó, software phiên bản cũ đã hết hạn sử dụng.

Mình gặp vấn đề tương tự với cái này: http://www.sinhhocvietnam.com/forum/showthread.php?t=15434 , chạy mãi cũng không được và cuối cùng phải đổi model.

Quay trở lại với bài toán giả tưởng mà mình tạo ra, có ai có ý kiến gì về nó không?
 
mới đọc được cái này, có thể bạn cũng có interest với nó:

A protocol for data exploration to avoid common statistical problems.

trên tạp chí: Methods in Ecology & Evolution

Bài báo được trích dẫn 77 lần trong hơn 2 năm qua (theo web of science), cũng là một con số ấn tượng :). Tại sao thế? Tác giả bài báo có ý kiến như sau:

"… (a) it provides people with a kind of “recipe” for doing a preliminary analysis, but also tries not to oversimplify the problems or present it as a one-size-fits-all solution; (b) it uses real and messy data sets, the kind that ecologists can relate to; and (c) it was written with practicing ecologists in mind.”



Cảm ơn bạn williambui đã down load bài báo giúp.

http://www.sinhhocvietnam.com/forum/showthread.php?t=2411&page=281

ĐK
 

Facebook

Thống kê diễn đàn

Threads
11,649
Messages
71,548
Members
56,917
Latest member
sv368net
Back
Top