MATPLOTLIBのTukey Boxplots - コード内の異常値論理? -- python フィールド と matplotlib フィールド と boxplot フィールド と iqr フィールド と tukey フィールド 関連 問題

Tukey Boxplots in Matplotlib - outlier logic in the code?












1
vote

問題

日本語

関連する質問、 MATPLOTLIB ウィスカの位置を計算するためのコードを見ました。外れ値を検出し、

を検出します <事前> <コード> # 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)

今、 else の部品は完全なセンスを作ります - Tukey Boxplots 、私たちは上位四分の1.5 IQR以内の最高のデータを見つけます。確かに、 max(wish_hi) - <コード> Q3+1.5*IQR 。

<コード> or の部分...わからないこと。 <コード> if len(wisk_hi) == 0 は...

に変換します。 <事前> <コード> if we find no elements below the `hi_val` ...

この状態はどのように適用されますか? Q3は中央値にデータを分割し、次に上半分の中央値を取り、その後1.5 * IQR を追加してからを追加します。この値よりも強い?

これが空のデータセットについての場合、<コード> or の2番目の部分は意味がありません(Q3またはIQRはデータなしでは意味がないため)。

おそらく明白なものを欠いている - 助け?

英語

While reading the answers to a related question in StackOverflow, I saw the code used in matplotlib to compute the wiskers positions and detect outliers:

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

Now, the else part makes perfect sense - as per the specification of Tukey boxplots, we find the highest datum within 1.5 IQR of the upper quartile. Indeed, that is max(wish_hi) - the largest data entry that is below Q3+1.5*IQR.

The or part however... that I don't understand. The if len(wisk_hi) == 0 translates to...

if we find no elements below the `hi_val` ... 

How can this condition apply? Q3 is found by splitting the data on the median, then taking the median of the upper half, and then adding 1.5*IQR on top of that - how can there NOT be data lower than this value?

If this is about an empty dataset, then the second part of the or doesn't make sense either (since Q3 or IQR don't make sense without data).

Probably missing something obvious - help?

</div
              

回答リスト

1
 
vote
vote
ベストアンサー
 

並脈域範囲をバイアスすることができます。 「上部の隣接値はQ3より小さくすることができ、ウィスカーをQ3から箱に引き出すことができます。下側の隣接値はQ1よりも大きくなり、ウィスカーをQ1から箱に引き出すことができます。」 (ソース)

IQR = Q3 - Q1

下限:Q1 - 1.5(Q3 - Q1)

上限:Q3 + 1.5(Q3 - Q1)

リンク内のデータをチェックアウトします。

 

The interquartile range can be biased. "The upper adjacent value can be less than Q3, which forces the whisker to be drawn from Q3 into the box. The lower adjacent value can also be greater than Q1, which forces the whisker to be drawn from Q1 into the box." (source)

IQR = Q3 - Q1

Lower limit: Q1 - 1.5 (Q3 - Q1)

Upper limit: Q3 + 1.5 (Q3 - Q1)

Check out the data in the link.

</div
 
 
   
   
0
 
vote

以下の出力例(実際にはMATPLOTLIBテストデータから駆動される)は問題を示しています:

<事前> <コード> $ ipython2 Python 2.7.11 (default, Mar 31 2016, 06:18:34) IPython 4.2.0 -- An enhanced Interactive Python. In [1]: import numpy as np In [2]: import matplotlib In [3]: a=[3, 9000, 150, 88, 350, 200000, 1400, 960] In [4]: sa=list(sorted(a)) In [5]: sa Out[5]: [3, 88, 150, 350, 960, 1400, 9000, 200000] In [6]: globals().update(matplotlib.cbook.boxplot_stats(a)[0]) In [7]: q3 Out[7]: 3300.0 In [8]: iqr Out[8]: 3165.5 In [9]: q3+1.5*iqr Out[9]: 8048.25

...だから<コード> q3+1.5*iqr よりも小さい最大要素は... 1400!

コードにそのテストが含まれていない場合、上ウィスカーはQ3(3300)から1400に下がる必要があります。

 

The example output below (driven from matplotlib test data, in fact) shows the problem:

$ ipython2 Python 2.7.11 (default, Mar 31 2016, 06:18:34)  IPython 4.2.0 -- An enhanced Interactive Python.  In [1]: import numpy as np  In [2]: import matplotlib  In [3]: a=[3, 9000, 150, 88, 350, 200000, 1400, 960]  In [4]: sa=list(sorted(a))  In [5]: sa Out[5]: [3, 88, 150, 350, 960, 1400, 9000, 200000]  In [6]: globals().update(matplotlib.cbook.boxplot_stats(a)[0])  In [7]: q3 Out[7]: 3300.0  In [8]: iqr Out[8]: 3165.5  In [9]: q3+1.5*iqr Out[9]: 8048.25 

...so the largest element smaller than q3+1.5*iqr is... 1400!

The upper whisker would have to go DOWN from q3 (3300) to 1400 if the code didn't include that test.

</div
 
 

関連する質問

1  TUKEYHSD添字は範囲外です  ( Tukeyhsd subscript out of bounds ) 
一見単純なANOVAを実行した後、TUKEYHSDでエラーを出しています。 マイデータ構造は、実際のデータに合計5つのグループを持つ、次の形式の形式です。 <事前> <コード> data_frame: A B Group 1 2 G...

0  等しくないグループ観測を伴うLSD.TEST(Agricolae)との最小有意差を計算する  ( Calculate minimum significant difference with lsd test agricolae with unequal ) 
私のデータセットのlsd.testから例に従ようとしています。残念ながら、私のデータセットには不平等なサンプルサイズがあり、これは重み付き平均によって処理されることができることを読みました。誰かがこれを経験していますか?関数の外側を計算する方法はありますか? ...

0  PythonのTukeyのHSDの結果に登場するNAN  ( Nan appearing in results for a tukeys hsd in python ) 
データ内の複数のグループの平均値の平均値に大きな違いがあるかどうかを確認するためにTukeyのHSDテストを実行しようとしています。たとえば、ここでは、グループ 'クラス'によって変数 'acad_se_communicate_needs_needsの平均違い...

1  RのTukeyHSDテスト(双方向ANOVAの後)からの類似結果を抽出する方法は?  ( How to extract comparable results from tukeyhsd test after two way anova in r ) 
私は双方向のANOVA試験を行い、RでHOC後のTukeyテストを実行しました。私はまた、ポストホックテストからの重要な行を抽出しました。 私の質問は次のとおりです。比較可能な行(2つの独立変数のうちの少なくとも1つが一致する)?のみを選択する方法はありますか...

1  MATPLOTLIBのTukey Boxplots - コード内の異常値論理?  ( Tukey boxplots in matplotlib outlier logic in the code ) 
関連する質問、 MATPLOTLIB ウィスカの位置を計算するためのコードを見ました。外れ値を検出し、を検出します <事前> <コード> # get high extreme iq = q3 - q1 hi_val = q3 + wh...

1  複数の要素がある場合は、TUKEYHSDの結果をROWS / COLINIONにエクスポートする方法  ( How can i export tukeyhsd results into rows columns when theres multiple factor ) 
TUKEYHSDの結果をファイルにエクスポートしようとしています。しかし、私が見つけることができる唯一のソリューションは、それが単純な比較であり、私が他の要因を検討したいときではなく、簡単な比較である場合です。 たとえば、これは私がしようとしているANOVA...

0  要因の多くのレベルの名前を変更する -  ( Renaming many levels of a factor r ) 
私は私の要因変数のすべてのレベルの名前の名前を変更しようとしているので、 TukeyHSD を実行できます。 Tukeyプロシージャは、レベルが数字で名前が付けられたときには好きではありません。したがって、私はそれ自体の名前を気にしません。名前を文字にするだけ...

0  TukeyのHSDの後に文字グループ化を割り当てるPython関数はありますか  ( Is there a python function to assign letter grouping after tukeys hsd ) 
ANOVAとTUKEYのHSD を実行した後、文字グループ化名をカテゴリに割り当てようとしています。 例えばです <事前> <コード> # creating data mu, sigma = 15, 3 # mean and standard deviati...

1  DPLYRとMULTCOMPVIEWのR  ( Tukeyhsd and multcompview with dplyr and broom in r ) 
Raised exception class EFOpenError with message Cannot open file ...test.pcf. The process cannot access the file because its bei...

1  MCP2MATRIXのエラー(モデル、LINFCT = LINFCT)  ( Error in mcp2matrixmodel linfct linfct ) 
ポストホックテストのために機能していない理由はわかりません。私は何を間違っていましたか? modmisto&lt; -lme(Cobertura~Tratamento、Random = ~1 |区画= ~1 | Parcela、Data = cover_b...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有