Rousseeuw's and Croux '(1993)Qnスケール推定量の大きなサンプルの計算方法


13

してみましょうQn=Cn.{|XiXj|;i<j}(k)ので、同様に非常に短いサンプルについて{1,3,6,2,7,5}、それが発見から計算することができるkペアワイズ差の第順序静的。

    7 6 5 3 2 1
1   6 5 4 2 1
2   5 4 3 1
3   4 3 2
5   2 1
6   1
7

h = [n / 2] + 1 = 4

k = h(h-1)/ 2 = 8

したがって、Qn=Cn.2

明らかに、80,000レコードで構成されていると言っている大きなサンプルの場合、非常に大きなメモリが必要です。

とにかく2Dではなく1D空間でを計算する方法はありますQnか?

回答ftp://ftp.win.ua.ac.be/pub/preprints/92/Timeff92.pdfへのリンク 。完全には理解できませんが。


1
OK、これを後で読む人の答え:データの堅牢なスケール推定量を計算したいだけの場合1 Rの最新バージョンをインストールする2堅牢なベースパッケージをインストールする3準備完了!ただし、この環境外でコードを開発している場合は、加重高中央値を使用して、SnまたはQnに必要な計算を最小限に抑える必要があります。
K-1

1
論文へのリンクは機能しません。適切な参照(さらに適切な、最も関連性の高い情報の引用)があれば、情報を見つけるのに役立ちます。現状では、リンクが切れたときは役に立たない(よくあることです)。
Glen_b -Reinstateモニカ

2
k = hである必要はありません2 = h(h-1)/ 2 = 6を選択しますか?ただし、最終結果は変わりません。
タイガー

なぜQn = Cn * 2なのか、なぜ2なのか?どのように計算されましたか?
リドックス

回答:


15

更新:問題の核心は、O(nlog(n))時間の複雑さを達成するために、O(n)ストレージの順序で必要になることです。


いいえ、O(nlog(n))は、すべてのn n 1 )の中からk t h要素を選択する((1)を参照)時間の複雑さの理論上の下限ですkthn(n1)2可能|xixj|:1i<jn

O(1)スペースを取得できますが、時間O n 2xixjすべての組み合わせを単純にチェックするだけです。O(n2)

良いニュースは、あなたが使用できることであるτ規模の推定を機能で実装、(改良版といくつかのタイミングの比較のために(2)と(3)を参照) scaleTau2()Rパッケージrobustbase。単変量τ推定量は、スケールの2段階(つまり、再重み付け)推定量です。95パーセントのガウス効率、50パーセントのブレークダウンポイント、O(n)時間とO(1)スペースの複雑さを備えています(さらに、簡単に「オンライン」にすることができ、繰り返し使用する場合の計算コストの半分を削減します)Rこのオプションを実装するにはコードを掘り下げる必要がありますが、それはやや簡単です)。

  1. X + Yの選択とランキングの複雑さ、およびソートされた列を持つマトリックスGN FredericksonとDB Johnson、Journal of Computer and System Sciences Volume 24、Issue 2、1982年4月、ページ197-208。
  2. Yohai、V.およびZamar、R.(1988)。効率的なスケールの最小化による回帰の高いブレークダウンポイント推定。Journal of the American Statistics Association 83 406–413。
  3. Maronna、R.およびZamar、R.(2002)。高次元データセットの位置と分散の堅牢な推定。テクノメトリックス44 307–317

編集これを使用するには

  1. 起動しますR(無料で、ここからダウンロードできます
  2. 次を入力してパッケージをインストールします。
install.packages("robustbase")
  1. 次を入力してパッケージをロードします。
library("robustbase")
  1. データファイルを読み込み、関数を実行します。
mydatavector <- read.table("address to my file in text format", header=T)
scaleTau2(mydatavector)

2
@ user603:参照していたタウ。ちなみに、統計と計算の効率とブレークダウンポイントが優れているのに、なぜ普及していないのでしょうか。
クオーツ

2
a)オンラインでマッドとメジアンを計算できます。そこからTauを計算するのは簡単です。b)故障はロバストネスではなく、タウは外れ値の存在にひどいバイアスを持っています。Qnペーパーの
user603


1
論文によれば、バイアス曲線は、特定の割合の汚染によって推定器がどれだけ変化するかを示しています。シミュレーションした例ではS nにバイアスがかけられ(正規分布+非常に高い/低い値の20%)、バイアスのレベルは同等でした。何か間違っているかもしれませんが、S nQ nは同じ問題に苦しんでいるようです。QnSnSnQn
ドイツ語Demidov

1
@ user603申し訳ありませんが、サイズ100のサンプルでは効果が見られませんでした。サンプルサイズが大きいと問題がはっきりとわかります。それらはすべてひどいバイアスを持っていますが、が最大のバイアスを持っています。τ
ドイツ語Demidov

0

(非常に短い答え)コメント用のテキストは言う

コメントで質問に答えないでください。

ので、ここでそれが行く::一見非常によく動作しますオンラインアルゴリズムに関する論文があります 適用する見積もりオンラインQn

編集

(ユーザーuser603による)。この記事でリンクされているアルゴリズムは、Q nの移動ウィンドウバージョンです。Qn

大きなサンプルを幅n < Nの時間ウィンドウに分割すると、{ x i } t i = t n + 1になり、各時間ウィンドウにQ nを適用してN n + 1が得られます。Q nの値。これらの値を示します{ Q i n } N n + 1 i ={xi}i=1Nn<N{xi}i=tn+1tQnNn+1Qn{Qni}i=1Nn+1

Qni|Qni1 O(nlog(n))Qni

Qn{xi}i=1NO(n2)(ただし、多くの場合、はるかに小さいサイズです)。


あなたがコメントで答えるべきではありませんが、あなたも答えとしてコメントを投稿するべきではない、とあなたの答えは唯一のリンクがある場合、それはだな答えはありません(ただし、コメントかもしれません)。コメントではなく回答にしたい場合は、適切に参照されたリンクからの引用や重要な詳細の独自の説明など、何らかの方法で関連情報を回答に含める必要があります。可能であれば、必要な詳細を提供してください。あるいは、これをコメントに変換することもできます。
Glen_b -Reinstateモニカ

@Glen_b:先に進み、変換します。説明をありがとう。
serv-inc

1
@ user603おそらく、私のコメントのリンクのように、重要な情報を上記の回答に編集することができます-現状では、それはSEネットワークの回答ガイドラインに含まれていません。
Glen_b -Reinstateモニカ

問題ありません (それは、後半にここに本当に)
user603

@ user603ありがとう。今はここに置いておきます
Glen_b -Reinstate Monica

0

これはQnの私の実装です...

私はこれをCでプログラミングしていましたが、結果は次のとおりです。

void bubbleSort(double *datos, int N)
{
 for (int j=0; j<N-1 ;j++)     
  for (int i=j+1; i<N; i++)    
   if (datos[i]<datos[j])      
   {
    double tmp=datos[i];
    datos[i]=datos[j];
    datos[j]=tmp;
   }
}

double  fFactorial(long N)    
{
 double factorial=1.0;

 for (long i=1; i<=N; ++i)
  factorial*=(double)i;

 return factorial;  
}

double fQ_n(double *datos, int N)  // Rousseeuw's and Croux (1993) Qn scale estimator
{
 bubbleSort(datos, N);

 int m=(int)((fFactorial((long)N))/(fFactorial(2)*fFactorial((long)N-2)));

 double D[m];
 //double Cn=2.2219;      //not used now :) constant value https://www.itl.nist.gov/div898/software/dataplot/refman2/auxillar/qn_scale.htm

 int k=(int)((fFactorial((long)N/2+1))/(fFactorial(2)*fFactorial((long)N/2+1-2)));

 int y=0;

 for (int i=0; i<N; i++)
  for (int j=N-1; j>=0; j--)
   if (i<j)
   {
    D[y]=abs(datos[i]-datos[j]);
    y++;
   }

 bubbleSort(D, m);

 return D[k-1];
}

int main(int argc, char **argv)    
{
 double datos[6]={1,2,3,5,6,7};
 int N=6;

 // Priting in terminal the final solution
 printf("\n==[Results] ========================================\n\n");

 printf(" Q_n=%0.3f\n",fQ_n(datos,N));

 return 0;
}

1
多くの場合、実装には問題の実質的な内容が混在していますが、コードではなく、統計、機械学習などに関する情報を提供するサイトであると想定されています。コードを提供することもできますが、コードから回答を認​​識して抽出するのに十分なほどこの言語を読んでいない人のために、テキストで実質的な回答を詳しく説明してください。
GUNG -復活モニカ

これは素朴なO(n ** 2)アルゴリズムです
。– user603
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.