スプラインを使用して密度関数の局所極値を見つける


15

確率密度関数の局所的な最大値を見つけようとしています(Rのdensity方法を使用して見つけました)。大量のデータがあるため、単純な「周辺を見る」方法(ポイントを見て周辺の最大値であるかどうかを確認する方法)を実行できません。さらに、フォールトトレランスやその他のパラメータを使用して「辺りを見る」のではなく、スプライン補間のようなものを使用してから1次導関数の根を見つける方がより効率的で一般的です。

だから、私の質問:

  1. からの関数が与えられた場合splinefun、どのメソッドが局所最大値を見つけますか?
  2. を使用して返される関数の導関数を見つける簡単/標準的な方法はありsplinefunますか?
  3. 確率密度関数の極大値を見つけるためのより良い/標準的な方法はありますか?

参考のために、以下は私の密度関数のプロットです。私が使用している他の密度関数の形式は似ています。私はRには慣れていないが、プログラミングには慣れていないので、必要なものを達成するための標準ライブラリまたはパッケージがあるかもしれません。 密度関数

ご協力いただきありがとうございます!!


大量のデータが「周辺を見る」方法で問題になる理由はわかりません。density()すべてのデータの密度を推定するのではなく、n値の密度を推定します。ここで、nはデフォルト値n = 512のユーザー指定パラメーターです
。– onestop

これに対する私のnは2 ^ 15であり、データにはポイントごとのレベルで多くの分散があるようです。近傍法(を介してmsExtrema {msProcess})に似た方法を使用して最大/最小ファインダーを作成しようとしましたが、許容値設定で再生することにより、すべてではなく、いくつかの最大値のみを識別できました。
アーロンレビン

2
のコードを見ると、これはパッケージからのmsExtrema単純なラッパーです。ローカル最小値ではなく、ローカル最大値のみが必要な場合は、直接使用する方が良いでしょう。デフォルトを使用してもすべての極大値が見つからない理由がわかりません。また、2 ^ 15 = 32768は、効率が大きな心配になるほど大きくないはずです。peakssplus2Rspan=3
ワンストップ

splinefunによって返される関数には、デフォルトで0の引数「deriv」があります。一次導関数にderiv = 1を設定します。
シアン

1
うーん、peaksバグmax.colがあるようです。デフォルト設定のを使用して呼び出します。これは、ties.method = "random"タイをランダムに解除するだけでなく、タイを宣言するための相対許容誤差1e-5を設定します。前者は紛らわしく、後者は間違いなくここで欲しいものではありません。peaks()また、strict不十分に文書化されたパラメータを取り、関数のコードを見て、何もしません。ああ、ユーザー提供のソフトウェアライブラリの喜び!ただし、プログラミングに
慣れ

回答:


14

あなたがしたいことは、ケモメトリックスのピーク検出と呼ばれます。そのために使用できるさまざまな方法があります。ここでは、非常に単純なアプローチのみを示します。

require(graphics)
#some data
d <- density(faithful$eruptions, bw = "sj")

#make it a time series
ts_y<-ts(d$y)

#calculate turning points (extrema)
require(pastecs)
tp<-turnpoints(ts_y)
#plot
plot(d)
points(d$x[tp$tppos],d$y[tp$tppos],col="red")

すべてのソリューションの中で、これが最も効果的でした。1.追加の質問:ターンポイントで許容値を切り替える方法はありますか?密度関数のロングテール部分に多くの山と谷を見つけました。2.追加の質問#2:耐性を決定する良い方法は何ですか?
アーロンレビン

ad 1.そうは思いません。時系列のランダム性をテストするためのものであるため、関数はそれを必要としません。ピークの関連性/重要性を自分でテストしてみてください。たとえば、近所に対してt検定を行うことができます(近所の大きさを決めることができます)。または、(質量)分光分析またはその他の分析化学メソッドからのデータを評価するために、Rパッケージでより洗練された関数を探すことができます。
ローランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.