2013-07-18 49 views
36

Tôi có một số câu hỏi về boxplots trong matplotlib:Boxplots trong matplotlib: Markers và giá trị ngoại biên

Câu hỏi Một. Các điểm đánh dấu mà tôi đã đánh dấu bên dưới là gì với Q1, Q2Q3 đại diện cho? Tôi tin rằng Q1 là tối đa và Q3 là các ngoại lệ, nhưng Q2 là gì?

                                            enter image description here

Câu hỏi B Làm thế nào để xác định matplotlib o utliers? (nghĩa là làm cách nào để biết rằng chúng không phải là giá trị thực sự là maxmin?)

Trả lời

63

một bức tranh trị giá một ngàn chữ. Lưu ý rằng các ngoại lệ (các điểm đánh dấu + trong ô của bạn) chỉ đơn giản là các điểm bên ngoài của dải rộng [(Q1-1.5 IQR), (Q3+1.5 IQR)] bên dưới.

    enter image description here

Tuy nhiên, bức tranh chỉ là một ví dụ cho một tập dữ liệu phân phối bình thường.Điều quan trọng là phải hiểu rằng matplotlib không không ước tính phân bố chuẩn trước và tính toán các phần tư từ các thông số phân phối ước tính như được hiển thị ở trên.

Thay vào đó, phần giữa và phần tư được tính trực tiếp từ dữ liệu. Do đó, ô chữ của bạn có thể trông khác nhau tùy thuộc vào phân phối dữ liệu của bạn và kích thước của mẫu, ví dụ: không đối xứng và có nhiều ngoại lệ hơn.

+2

Vì vậy, '99,3%' dữ liệu của bạn được chứa ** bên trong ** của lề rộng '[(Q1-1.5 IQR), (Q3 + 1.5 IQR)]' phía trên (còn được gọi là râu). Do đó, tất cả các dấu tích bên ngoài biểu tượng chỉ chiếm 0,7% 'dữ liệu của bạn. – zelusp

+1

'IQR' có nghĩa là [Phạm vi Interquartile] (http://www.physics.csbsju.edu/stats/box2.html) – zelusp

23

Hộp đại diện cho phần tư thứ nhất và thứ ba, với đường màu đỏ trung bình (phần tư thứ hai). Các documentation cung cấp cho các râu mặc định ở mức 1,5 IQR:

boxplot(x, notch=False, sym='+', vert=True, whis=1.5, 
     positions=None, widths=None, patch_artist=False, 
     bootstrap=None, usermedians=None, conf_intervals=None) 

whis: [default 1,5]

Xác định chiều dài của râu như một chức năng của dãy tứ phân vị bên trong. Chúng mở rộng đến điểm dữ liệu cực nhất trong phạm vi dữ liệu (whis * (75% -25%)).

Nếu bạn nhầm lẫn về các biểu diễn ô khác nhau, hãy thử đọc the description in wikipedia.

12

Ngoài Seth câu trả lời (kể từ khi tài liệu không phải là rất chính xác về vấn đề này): Q1 (các wiskers) được đặt ở giá trị tối đa dưới 75% + 1,5 IQR

(giá trị tối thiểu là 25% - 1,5 IQR)

Đây là mã mà tính vị trí râu:

 # get high extreme 
     iq = q3 - q1 
     hi_val = q3 + whis * iq 
     wisk_hi = np.compress(d <= hi_val, d) 
     if len(wisk_hi) == 0 or np.max(wisk_hi) < q3: 
      wisk_hi = q3 
     else: 
      wisk_hi = max(wisk_hi) 

     # get low extreme 
     lo_val = q1 - whis * iq 
     wisk_lo = np.compress(d >= lo_val, d) 
     if len(wisk_lo) == 0 or np.min(wisk_lo) > q1: 
      wisk_lo = q1 
     else: 
      wisk_lo = min(wisk_lo) 
+0

Cảm ơn để làm rõ điều này - tôi tìm thấy sự khác biệt trong âm mưu của tôi (so với các tài liệu giá trị của * Q3 + 1,5 * IQR *) và rất vui khi thấy rõ của bạn. Mặc dù vậy, mặc dù vậy, tôi hơi bối rối bởi biểu thức 'hay': các phần' khác' có ý nghĩa, nhưng 'hoặc' dường như là không thể ... ví dụ cho phần Q3, 'len (wisk_hi) == 0' có nghĩa là" nếu chúng ta không tìm thấy phần tử nào bên dưới 'hi_val'" - làm thế nào điều này có thể xảy ra? Q3 được tìm thấy bằng cách tách dữ liệu trên trung bình và lấy trung vị của nửa trên ... theo định nghĩa sẽ có giá trị thấp hơn hi_val - và phần thứ hai của 'hoặc' có nghĩa là gì? Lời khuyên nào được chào đón nhất. – ttsiodras

+0

Tôi chỉ có thể đồng ý với bạn, @ttsiodras, rằng 'q3' phải là một phần của mảng' d' và đáp ứng điều kiện thành 'np.compress', vì vậy nó cũng phải nằm trong mảng tối đa được lấy từ. Có lẽ mã chỉ là "để được lưu", hoặc để làm cho nó rõ ràng hơn cho người đọc rằng 'wist_hi' không thể nhỏ hơn' q3'. –

2

Chỉ trong trường hợp điều này có thể mang lại lợi ích cho bất kỳ ai khác, tôi cần phải đặt chú thích trên một trong các đồ thị ô của tôi để tôi tạo ra .png này trong Inkscape và nghĩ mình sẽ chia sẻ nó.

enter image description here

Các vấn đề liên quan