Tính số thùng tối ưu trong biểu đồ


80

Tôi quan tâm đến việc tìm ra phương pháp tối ưu nhất có thể để xác định số lượng thùng tôi nên sử dụng trong biểu đồ. Dữ liệu của tôi nên dao động tối đa từ 30 đến 350 đối tượng và đặc biệt là tôi đang cố gắng áp dụng ngưỡng (như phương pháp của Otsu) trong đó các đối tượng "tốt", mà tôi nên có ít hơn và nên được trải ra nhiều hơn, được tách ra khỏi " các đối tượng xấu, cần có giá trị dày đặc hơn. Một giá trị cụ thể sẽ có điểm từ 1-10 cho mỗi đối tượng. Tôi đã có 5-10 đối tượng với điểm 6-10 và 20-25 đối tượng có điểm 1-4. Tôi muốn tìm một mô hình đóng gói biểu đồ thường cho phép một cái gì đó giống như phương pháp của Otsu vượt qua các đối tượng có điểm thấp. Tuy nhiên, trong quá trình triển khai Otsu, tôi đã thấy, kích thước thùng là 256 và thường tôi có ít điểm dữ liệu hơn 256, mà theo tôi gợi ý rằng 256 không phải là số bin tốt. Với rất ít dữ liệu, tôi nên thực hiện những cách tiếp cận nào để tính toán số lượng thùng cần sử dụng?


Tôi nghĩ rằng quy tắc của Sturges có thể được sử dụng cho n <200; Trong đó n là số lượng quan sát
venkasub

Câu trả lời:


95

Các Freedman-Diaconis quy tắc là rất mạnh mẽ và hoạt động tốt trong thực tế. Độ rộng thùng được đặt thành . Vì vậy, số lượng thùng là , trong đó là số lượng quan sát, tối đa là giá trị tối đa và tối thiểu là giá trị tối thiểu.h= =2×IQR×viết sai rồi-1/3(tối đa-tối thiểu)/hviết sai rồi

Trong cơ sở R, bạn có thể sử dụng:

hist(x, breaks="FD")

Đối với các thư viện âm mưu khác không có tùy chọn này (ví dụ ggplot2:), bạn có thể tính toán băng thông như:

bw <- 2 * IQR(x) / length(x)^(1/3)

### for example #####
ggplot() + geom_histogram(aes(x), binwidth = bw)

2
@nico. Mặc định trong R là break = "Sturges" không phải lúc nào cũng cho kết quả tốt.
Rob Hyndman

4
Làm thế nào để một người tính toán IQR?
Kurt Mueller

1
@KurtMueller IQR có nghĩa là phạm vi liên vùng. Tìm kiếm phần tư thứ nhất và phần tư thứ ba và sự khác biệt là IQR. IQR đã đi kèm với R để bạn có thể sử dụng nó.
xiaodai

4
Nếu tôi không nhầm, câu trả lời nên đọcnum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha

1
nclass.FDđã không tồn tại chín năm trước.
Rob Hyndman

18

Nếu bạn sử dụng quá ít thùng, biểu đồ không thực sự mô tả dữ liệu rất tốt. Nếu bạn có quá nhiều thùng, bạn sẽ có một cái nhìn bị hỏng, điều này cũng không mang lại cảm giác phân phối.

Một giải pháp là tạo một biểu đồ hiển thị mọi giá trị. Hoặc là một biểu đồ chấm hoặc phân phối tần số tích lũy, không yêu cầu bất kỳ thùng nào.

Nếu bạn muốn tạo phân phối tần số với các thùng cách đều nhau, bạn cần quyết định có bao nhiêu thùng (hoặc chiều rộng của mỗi thùng). Quyết định rõ ràng phụ thuộc vào số lượng giá trị. Nếu bạn có nhiều giá trị, biểu đồ của bạn sẽ trông đẹp hơn và có nhiều thông tin hơn nếu bạn có nhiều thùng. Trang wikipedia này liệt kê một số phương pháp để quyết định chiều rộng thùng từ số lượng quan sát. Phương pháp đơn giản nhất là đặt số lượng thùng bằng căn bậc hai của số lượng giá trị bạn đang tạo.

Trang này từ Hideaki Shimazaki giải thích một phương pháp thay thế. Nó hơi phức tạp hơn để tính toán, nhưng dường như làm một công việc tuyệt vời. Phần trên cùng của trang là một ứng dụng Java. Cuộn qua đó để xem lý thuyết và giải thích, sau đó tiếp tục cuộn để tìm liên kết đến các bài viết giải thích phương pháp.


Liên kết đến trang Hideaki bị hỏng. Tôi không chắc đây có phải là điều tương tự không: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

Có lẽ bài báo " Biến thể trên biểu đồ " của Denby và Mallows sẽ được quan tâm:

Màn hình mới này mà chúng tôi gọi là "dhist" (đối với biểu đồ cắt chéo) bảo tồn các tính năng mong muốn của cả biểu đồ có chiều rộng bằng nhau và biểu đồ diện tích bằng nhau. Nó sẽ hiển thị các thùng hẹp cao như biểu đồ ea khi có dữ liệu tăng đột biến và sẽ hiển thị các ngoại lệ bị cô lập giống như biểu đồ thông thường.

Họ cũng đề cập rằng mã trong R có sẵn theo yêu cầu.


5

Tôi không chắc chắn điều này được coi là thực hành tốt, nhưng tôi có xu hướng tạo ra nhiều hơn một biểu đồ với độ rộng thùng khác nhau và chọn biểu đồ sử dụng biểu đồ dựa trên biểu đồ nào phù hợp với cách diễn giải mà tôi đang cố gắng giao tiếp tốt nhất. Trong khi điều này giới thiệu một số tính khách quan trong việc lựa chọn biểu đồ, tôi biện minh cho nó trên cơ sở tôi đã có nhiều thời gian hơn để bảo vệ dữ liệu so với người tôi đưa ra biểu đồ cho nên tôi cần gửi cho họ một thông điệp rất súc tích.

Tôi cũng là một fan hâm mộ lớn của việc trình bày biểu đồ với cùng số điểm trong mỗi thùng thay vì cùng chiều rộng của thùng. Tôi thường thấy chúng đại diện cho dữ liệu tốt hơn nhiều so với chiều rộng thùng không đổi mặc dù chúng rất khó sản xuất.


1
xin lỗi, tôi nên đề cập rằng tôi cần phải làm điều này một cách tự động. tùy chọn "thực hiện nhiều lần cho đến khi tôi tìm thấy cái phù hợp nhất với mục đích của mình" sẽ không hiệu quả với tôi. phải được thực hiện tính toán ...
Tony Stark

4
Tôi đồng ý - ý tưởng rằng có một chiều rộng thùng "tối ưu" là một giả định đơn giản hóa rất lớn.
hadley

5

Bạn có thấy phương pháp Shimazaki-Shinomoto không?

Mặc dù nó có vẻ đắt tiền, nhưng nó có thể cho bạn kết quả tốt. Thật đáng để thử nếu thời gian tính toán không phải là vấn đề của bạn. Có một số triển khai của phương thức này trong java, MATLAB, v.v., trong liên kết sau, chạy đủ nhanh: giao diện web


3

Nếu tôi cần xác định số lượng thùng theo chương trình, tôi thường bắt đầu với một biểu đồ có nhiều thùng hơn mức cần thiết. Khi biểu đồ được lấp đầy, sau đó tôi kết hợp các thùng cho đến khi tôi có đủ các mục nhập cho mỗi thùng cho phương pháp tôi đang sử dụng, ví dụ: nếu tôi muốn mô hình hóa độ không đảm bảo Poisson trong một thử nghiệm đếm với độ không chắc chắn từ phân phối bình thường cho đến khi tôi có nhiều hơn 10 mục.


2

Xin vui lòng xem câu trả lời này như là một bổ sung cho câu trả lời của ông Rob Hyndman .

Để tạo các biểu đồ biểu đồ với các khoảng chính xác hoặc 'độ rộng băng thông' bằng cách sử dụng quy tắc FreedmanTHER Diaconis với ggplot2gói R hoặc gói cơ bản , chúng ta có thể sử dụng một trong các giá trị của hist()hàm cụ thể breaks. Giả sử chúng ta muốn tạo một biểu đồ qsectừ mtcarsdữ liệu bằng cách sử dụng quy tắc Freedman âm Diaconis. Trong R cơ bản, chúng tôi sử dụng

x <- mtcars$qsec
hist(x, breaks = "FD")

Trong khi đó, trong ggplot2gói chúng tôi sử dụng

h <- hist(x, breaks = "FD", plot = FALSE)
qplot(x, geom = "histogram", breaks = h$breaks, fill = I("red"), col = I("white"))

Hay cách khác

ggplot(mtcars, aes(x)) + geom_histogram(breaks = h$breaks, col = "white")

Tất cả đều tạo ra các biểu đồ biểu đồ với khoảng thời gian và số lượng thùng chính xác như dự định.


-5

Tôi có 600 quan sát cho Au g / t. Thùng cỡ 1 cho tôi cái này:nhập mô tả hình ảnh ở đây

Lựa chọn tự động (bỏ qua phạm vi bin) cung cấp cho điều này:nhập mô tả hình ảnh ở đây

Dữ liệu trông O'K trên biểu đồ thứ nhất và thứ hai, như thể không có vấn đề gì với tính toàn vẹn dữ liệu. Chỉ có kích thước bin 0,1 (g / t) trả lời câu hỏi: các phép đo đều không chính xác và không chính xácnhập mô tả hình ảnh ở đây

Phán đoán của tôi: 1. Không có kỹ thuật đo lường nào trên Trái đất để hiển thị giá trị thực của hiện tượng tự nhiên. Tất cả các phép đo là gần đúng, một số gần với giá trị thực. Nó phụ thuộc vào thiết kế lấy mẫu, hiệu chuẩn, trình độ của con người, vv 2. Đây là lý do tại sao phân phối bị lệch chứ không phải đối xứng. 3. Tuy nhiên, hình dạng của phân phối phải giống với phần "giống như chuông", ít nhất là xấp xỉ. Một tiếng chuông tại một thời điểm (trừ khi có một số môi trường địa chất). 4. Phân phối tần suất với thao tác kích thước thùng có thể giúp tiết lộ mô hình về mức độ chính xác và chính xác của các phép đo được thực hiện. Vì vậy, người ta cần một thử nghiệm chọn kích thước thùng chứ không phải là một quy tắc cắt trên đá.


2
Đây là một nhận xét nhiều hơn là một câu trả lời trừ khi bạn đánh vần đạo đức. Tôi muốn nói đạo đức là thế này: Tất cả các quy tắc là quy tắc ngón tay cái, một số có cơ sở thống kê hơn các quy tắc khác, nhưng hầu hết các quy tắc có thể không làm những gì bạn muốn nếu phân phối có độ lệch hoặc kurtosis rất cao. Vì vậy, sử dụng phán đoán của bạn quá.
Nick Cox

2
Bạn đã thêm ý kiến, nhưng tôi không rõ rằng bất kỳ đóng góp chi tiết mới hữu ích cho chủ đề. 1. là tốt với tôi nhưng không phải là vấn đề ở đây. 2. không theo từ 1. vì một số phân phối gần như đối xứng. 3. là không rõ ràng: có nhiều tình huống mà hình dạng khác với tiếng chuông được mong đợi. 4. cũng không rõ ràng vì chất lượng của các phép đo ban đầu thường không rõ ràng từ bất kỳ biểu đồ nào, nhưng thường được kiểm tra tốt nhất với sự chú ý đến cấu trúc rất tốt của phân phối.
Nick Cox

2.Nearly đối xứng không đối xứng. Bạn không thể mang thai gần như: có thai hoặc không.
Sergo Cusiani

2
Chắc chắn, nhưng tính đối xứng chính xác trong dữ liệu rất hiếm khi tôi nói "đối xứng" thì ai đó cũng có thể phản đối điều đó một cách hợp lý. Nó rất dễ gần như đối xứng; đó là lý do tại sao và làm thế nào chúng ta có các biện pháp sai lệch.
Nick Cox

1
Lưu ý, nhưng nhận xét của bạn là chung chung và thiếu bối cảnh mà bạn đưa ra. Đến lượt tôi nói "ngờ vực" không "sai". Nhận xét chính của tôi vẫn là câu trả lời của bạn không thực sự bổ sung nhiều vào chủ đề về cách chọn kích thước thùng hoặc số thùng tương đương. Có một ví dụ khác trong đó khó khăn là một câu hỏi, không thực sự là một câu trả lời.
Nick Cox
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.