外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />| 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか? Brady から 2 つのアドインを見つけましたが、それらは外れ値の行を除外するものではなく、Summary 関数の拡張にのみ関連しています。 |
代入アドイン
拡張集計アドイン
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?ありがとう、それはとても理にかなっています。 Huber に言及している AMC の概要の部分を誤解していたようです... Huber M 推定を意味していると思いましたが、反復的にウィンザー化しているだけであることに同意します。
そのリンクをありがとう。 役に立ちます。
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?ウィキの記事を読んでみる価値はあるでしょう。Winsorization は、トリミングに似た単なるプロセスです。
ウィキペディア:
Winsorising または Winsorisation は、統計データの極端な値を制限して、誤った異常値の影響を減らすことによる統計の変換です。
パーセンタイルのみが必要です。ここでは 1.5sigma を使用しました。
参照されている記事では、中央値を使用してウィンザー化し、ウィンザー化したデータを使用して中心と広がりをより適切に予測しています。次に、中心と広がりをさらに正確に予測するために、再びウィンザライズします。ここでは、ロバストで正確な平均/標準偏差を取得するために winsorize します。
同調定数は、Huber の M 推定値で使用されます。このプロセスは逆です。代わりに、M 推定を使用して堅牢で正確な平均/標準偏差を作成し、データをウィンザー化します。K が無限大に近づくと、M 推定平均 = 平均になります。K が 0 に近づくと、M 推定平均 = 中央値になります。
このプレゼンテーションの 16 ページをご覧ください。 http://www.bauer.uh.edu/rsusmel/phd/ec1-25.pdf
したがって、あなたの質問に答えるために、調整定数 K は b/c では使用されません。Huber の M 推定値は使用しませんでした。
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?このスレッドのコードが基づいている AMC 技術概要の例では、チューニング定数 k は何ですか?チューニング定数に関連する理論式は見たことがありますが、windsorizing +/- n*sigma および sigma_new = x * stddev(data) を説明するものは見たことがありません。 x は同調定数に関連しています。
ありがとう、
マイク
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?基本的に、私たちが行っていることは、中央値/MAD の過大評価を説明することです。サンプル データ セットでは、ウィンゾライズ プロセスで中央値/MAD を使用すると、外れ値が調整されすぎます。
x_orig = [ 4.5 、 4.9 、 5.6 、 4.2 、 6.2 、 5.2 、 9.9 ] ;
中央値と狂った見積もり:
平均= 5.2;シグマ = 1.05;
これらの推定値を使用すると、データは次のように変わります。
x_firstpass = [ 4.5 、 4.9 、 5.6 、 4.2 、 6.2 、 5.2 、 6.775 ] ;
このデータは、平均とシグマのより良い概算を提供します。
調整平均 = 5.34;シグマ = 1.04;
より良い推定値を使用してデータセットをウィンザライズすると、次のようになります。
x_secondpass = [ 4.5 、 4.9 、 5.6 、 4.2 、 6.2 、 5.2 、 6.905 ] ;
ただし、x_orig の代わりに x を使用すると、コードは外れ値ポイント 9.9 を見つけてそれに応じて調整できません。平均 = 5.34 およびシグマ = 1.04 の場合、b/c 6.775 は外れ値ではありません。
したがって:
x_secondpass = [ 4.5 、 4.9 、 5.6 、 4.2 、 6.2 、 5.2 、 6.775 ] ;
mean と sigma は同じになります。
調整平均 = 5.34;シグマ = 1.04;
シグマ - sigma_old = 0
私たちのコンバージェンスはそれが完了したと信じます。
tl:dr - 最適なゼロ点を見つけようとしている場合、コードは双方向に実行できるほど堅牢である必要があります。
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?x=x_orig が正確にわかりません。
これは無限ループを作成するようです。しかし、それは機能するので、私はそれについて議論することはできません.
ありがとう!
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?このコードは私のためにそれをしました!!ありがとう!!!
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?ありがとう!
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?はいはい。調整された平均値とシグマを変更して、元のデータセットでウィンザー化プロセスを実行したいと思います。x=xorig を追加することは正しいです。私が言ったように、私はすぐにそれをコーディングしました。
紙のマッチングについて:
データセットには 1 つの自由度 (外れ値を近似する値) しかないため、ウィンザー化に基づいてシグマと平均の両方が固定されます。この事実を考えると、5.36 の平均と 1.15 のシグマを取得する方法はありません。 5.386 と 1.145 を 2 桁目に四捨五入すると、5.39 と 1.15 になります。 したがって、mこれは単純なタイプミスであり、数学的エラー。その時点までの論文の正確性と、それが王立化学会の分析方法委員会からのものであることを考えると、私は彼らに疑いの余地を与えます.
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?それは基本的に私が持っていたものですが、すべてが配列形式であったため、反復ごとにデータを検査できました。 あなたのほうがきれいなので、少し変更したことを気にしないでください。 for() ループを Loc 関数に置き換えました。これは、他の誰かが大規模なデータ セットに対してこれを使用している場合により効率的である可能性があるためです。 (免責事項、私はこの関数を 1 回か 2 回しか使用していません...うまくいけば、それが正しい選択です。)
あなたの関数と私の関数を実行したところ、平均 5.339、シグマ 1.044 で 1 回の反復で収束したことがわかりました。 この論文は、それには数回の反復が必要であることを示しているようです。 このデータセットに対しても意味があると思いましたが、一般化していたのかもしれません。 彼らはさらに、フーバーの推定平均は 5.36 で、シグマは 1.15 であると言っています。 その推定平均を再現することはできませんでしたが、反復ごとに 'x' データを x_orig (元のデータ) に置き換えたところ、平均 5.386、シグマ 1.1459 が得られました。以下のコードの行で、これを有効/無効にすることができます。 これは何かを反復する正しい方法とは思えませんが、これを計算するのにどこが間違っていたのかはよくわかりません。 sig digits のエラーを許してください。ただし、ここで変数の内容について詳しく説明したいと思います。
紙から:

名前のデフォルトはここ( 1 ) ;
ログのクリア() ;
//紙のデータセット
x_orig = [ 4.5 、 4.9 、 5.6 、 4.2 、 6.2 、 5.2 、 9.9 ] ;
バツ= [ 4.5 、 4.9 、 5.6 、 4.2 、 6.2 、 5.2 、 9.9 ] ;
//中央値とロバスト シグマ (MAD) を決定する
平均=分位点( .5 、バツ) ;
y =腹筋(バツ-平均) ;
狂った=分位点( .5 、 y ) ;
シグマ=狂った* 1.5 ;
シグマオールド= 0 ;
//収束
その間(腹筋(シグマ-シグマオールド) > 2e-16 、
//x = x_orig; // これをオン/オフしてみてください
バツ[ロク(バツ> (平均+ 1.5 *シグマ))] =平均+ 1.5 *シグマ;
バツ[ロク(バツ< (平均- 1.5 *シグマ))] =平均- 1.5 *シグマ;
ミーノルド=平均;
シグマオールド=シグマ;
平均=平均(バツ) ;
シグマ= 1.134 *標準偏差(バツ) ;
見せる(平均、シグマ) ;
) ;
ありがとう、
マイク
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?CHフィールド: 元の質問に答えるには: はい、外れ値のフィルタリングを自動化する方法があります。実際、非常に多くの (無限ではないにしても) 方法があります。
のムシャープscript (5.735 の JMP Robust Mean/Huber Center を使用した 5.785 の元のデータ平均) は、5.339 の Winsorized 平均を生成します。本当にウサギの穴に落ちたい場合は、12A One-Step Hampel W-Estimator (Andrews,DF, et. al (1972) が推奨するロバストな平均);ロバストな場所の推定: 調査と前進; Princeton University Press) は、同じデータで 5.256 を生成します。
これらすべての場所の尺度が同じデータ上で非常に異なることは心配ですか?あまり。奇跡を起こす聖グレゴリーのように、「違うものは同じではない」と言いました。思慮深い研究者は、少なくとも何らかの合理的な拒絶手順なしでは平均値を使用しません。その合理的な手順が、スクリプトから呼び出すことができる JMP 関数で簡単に実装できれば素晴らしいことですが、それがオプションではない場合、Winsorizing スクリプトはムシャープ使用されている方法を特定し、以前の「味の悪さと悪い習慣」の警告にも注意を払う限り、優れた代替手段になります。
充実した一日を!
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?これは、紙の正確なコードに続く私の簡単なコードです。
//紙のデータセット
x = [4.5,4.9,5.6,4.2,6.2,5.2,9.9];
//中央値とロバスト シグマ (MAD) を決定する
平均 = 分位数 (.5,x);
y = abs(x - 平均);
MAD = 分位 (.5,y);
シグマ = MAD*1.5;
シグマ= 0;
//収束
while(abs(sigma - sigmaold) > 2e-16,
for(i=1,i<=nrows(x),i++,
もし(x <平均-1.5*シグマ、
バツ= 平均-1.5*シグマ
);
もし(x >平均+1.5*シグマ、
バツ= 平均+1.5*シグマ
);
);
meanold = 平均;
sigmaold = シグマ;
平均=平均(x);
シグマ = 1.134*std dev(x);
);
//評価
印刷 (x);
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?msharp がリンクしている AMC の論文に記載されている Huber メソッドに従いました。スクリプトを作成することはそれほど悪くはありませんでしたが、難しいのは、アルゴリズムを正しく解釈したかどうかを知ることです。(たとえば N 回) 反復処理を行い、データ配列を新しい平均ハット +/- 1.5 x シグマハット値で更新すると、i 番目の反復では i-1 のデータ配列を使用するように見えますが、これは私にはうまくいきません。 更新された平均ハットとシグマハットを使用しながら、元のデータ (i=0) を常に更新することで、より良い結果が得られます。より良い結果ですが、間違っているようです。 このアルゴリズムを実装した経験のある人はいますか?
ちなみに、このページによると(配布レポート)、配布プラットフォームでの JMP のロバストな平均/標準偏差は、Huber M 推定を使用していますが、それらがどのようにウィンザー化されているかはわかりません。 私のスクリプトは、場合によっては同様の結果を生成しますが、そうでない場合もあります。 しかし、上で述べたように、私はそれを正しく行っているかどうかわかりません。
ありがとう、
マイク
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?ロバスト平均とロバスト標準偏差を計算する方法は多数あります。私が参照する記事では、中央値 (定義上、ロバスト平均) と MAD (ロバスト標準偏差) の計算方法が示されています。これらは最も基本的なものです。ただし、中心と広がりを計算し、外れ値データによる変化に強いメトリックは、堅牢な平均または堅牢な標準偏差と見なすことができ、中央値/MAD アプローチよりも複雑なアルゴリズムが存在することは確かです。
この記事を共有することにした理由は、理解しやすい中央値/MAD を使用して Winsorizing プロセスの基本を示しているからです。プロセスをゼロからプログラムする場合は、ここから始めます。
私は JMP プログラマーではないので、彼らが使用する実際の方法はわかりません。しかし、彼らがその論文で説明されている方法を使用しているとは思えません。その論文は、基本を理解するのに本当に役立ちます。この論文自体がほとんどの欠点を述べていますが、プログラマーにとって最も目立つのは収束の遅さです。
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?にCHフィールド:よくわかりました。簡単にスクリプト化できない堅牢な手順はこれだけではありません。DistributionプラットフォームからのRobust MeansとRobust Standard Deviationも、JSLで使用できる機能ではありません。昨年のサンタのクリスマスリストをご覧ください...
にムシャープ: ロバスト平均とロバスト標準偏差の参考文献を JMP に依頼したところ、開発者は Huber, PJ(1973) に案内してくれました。 「ロバストな回帰: 漸近論、予想、およびモンテカルロ」; The Annals of Statistics, Vol 1, No. 5, pp799-821 では、引用した参考文献とは大幅に異なる手順が詳述されています。Peter Huber は Robust Statistics の巨人であり、このテーマに関する彼の最近の本 (Robust Statistics 2004) では、M 推定値 (Annals の論文でも詳述されています) を称賛しているため、JMP が本当に Winsorizing を行っているかどうかはわかりません。あなたが参照します。本当か?
Huber M の見積もりは、最初からスクリプトを作成するのが楽しすぎるようには見えません。したがって、クリスマス リストの要求。
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?一般に、原因を知らずに外れ値をフィルター処理することは、趣味が悪く、悪い習慣であると考えられています。原因がわかっている場合でも、データセットに適用されないフィルター条件を使用すると、データセットに外れ値を残すだけでなく、さらに多くのエラーが発生します。重要な質問をする必要があります。データは対称ですか?歪んだ?普通?マスキングはありますか?あなたのデータセットは本当に 2 つの異なる分布ですか?それらを分割する方が良いでしょうか?実際にデータを見ずに、データを本当に知ることは不可能です。外れ値フィルタリングを自動化すると、間違った結論につながります。「p-hacking」と同じくらい悪い習慣です。
もちろん、これはプロセスを自動化する理由がないという意味ではありません。たとえば、外れ値フィルタリング基準を使用して、データが時間の経過とともに表示/監視される管理図の管理限界の更新を自動化します。
自動化する場合は、スクリプトを作成する必要があります。あなたが見ることができますhttp://www.rsc.org/images/robust-statistics-technical-brief-6_tcm18-214850.pdf Huber メソッドが実際に行っていることの詳細については、 を参照してください。お役に立てれば。
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?JMP のほとんどすべてのアクションは、赤い三角形に移動し、[SCRIPT] > [COPY SCRIPT] に移動してスクリプト化できます。
このようにして、これらのスクリプトの断片を結合して、より大きな自動化プログラムにすることができます。
これは、すべての JMP アクション/関数などに当てはまります。以下のロバスト アウトライア フィルター関数の例外を除きます。
COL > モデリング ユーティリティ > 外れ値の探索
特定のパラメーター セットで K=3 の Huber フィルターを自動化したいと考えています。これを何度も繰り返します。
作業を軽減するために自動化したいと考えています。
Re: 外れ値フィルタリングの Winsor プロセスを自動化/スクリプト化する方法はありますか?あなたの質問は私を混乱させます。外れ値のウィンザリングは、通常、極端な値を除外するのではなく、指定されたパーセンタイルに設定することとして定義されます。これは、信号処理におけるクリッピングに似ています。外れ値の行を除外することは、通常、Winsorising ではありません。
とはいえ、あなたの心が望むアルゴリズムのアプローチはすべてスクリプト化できます。それを行うスクリプトを作成する場合は、行列を使用します。特に大規模なデータセットでは、それらははるかに高速に実行されます。