0

私は分布から来ていると仮定しているいくつかのデータを持っており、その分布を推定しようとしています。現在、R のパッケージKernSmoothと Gaussian カーネルを使用しており、パッケージのdpik()関数を使用して帯域幅を自動的に選択しています。(AMISEまたはソートを使用していると思います。より良い自動帯域幅選択プロセスがあれば教えてください)しかし、私が興味を持っているのは、分布の最高ピークに対応するx値を見つけることです. ..これは私には非常に単純なことのように思えますが、以前は些細なこととして後回しにしていましたが、フラストレーションがたまり、問題が発生しています。のbkde()KernSmooth の関数は、アルゴリズムが推定した分布をマッピングする (x,y) 座標のセットを返します。データを線形検索して最大のy値を見つけ、対応するx値を簡単に取得できることはわかっていますが、自動化されたプロセスで頻繁に呼び出される可能性のある関数を書いているので、非効率的な。bkde()多くの値を返すため、特に非効率的です。

私の他のアイデアは、それに曲線を当てはめて導関数を取り、それをゼロに設定しようとすることでしたが、それも非効率的なように思えます。たぶんdensity()、ここで使用するより良い機能でしょうか?

これに効率的な方法があれば教えてください...私は実際に見つけた分布について少し推論を行う予定です。両側のテールの特定のパーセンテージを切り取るカットオフ ポイント (つまり、信頼区間) を見つけて、期待値を見つけるなどです。私の漠然とした計画は、いくつかのモンテカルロ手法を使用するか、分布から引き出して、ブートストラップ手法を使用して領域のアイデアを得ることです。これらのいずれかを行うための方法に関するヘルプは大歓迎です。

4

1 に答える 1

2

使用:

> require(KernSmooth)
Loading required package: KernSmooth
KernSmooth 2.23 loaded
Copyright M. P. Wand 1997-2009
> mod <- bkde(faithful$waiting)
> str(mod)
List of 2
 $ x: num [1:401] 22.7 23 23.2 23.4 23.7 ...
 $ y: num [1:401] 3.46e-08 1.17e-07 1.40e-07 1.68e-07 2.00e-07 ...

これは十分に効率的ではありませんか?

> which(mod$y == max(mod$y))
[1] 245

density()は同様のことを行いますが、512 の定期的な間隔で評価される密度の 512 の値を返しますx

両方の関数で、返されるポイントの数を制御できます。およびの引数gridsizeを参照してください。もちろん、アプローチの精度は KDE が推定されるポイントの密度に依存するため、これをあまり低く設定することは望ましくありません。bkde()ndensity()

私の直感によると、上記の単純なソリューションを使用するよりも、より効率的なアプローチを考えて実装するのに非常に多くの時間を費やす可能性があります。

于 2012-06-05T20:00:12.270 に答える