2つの曲線の特徴を比較する方法は?


11

2つの曲線f(x)とg(x)を比較する必要があります。それらは同じxの範囲にあります(たとえば、-30から30)。f(x)には、鋭いピークまたは滑らかなピークと谷がある場合があります。g(x)は、同じピークと谷を持つ場合があります。もしそうなら、私はこれらの機能が目視検査なしでどれくらいうまく一致するかについての測定が欲しいです。この問題を次の方法で解決しようとしました。

  1. 各データポイントを関数の総面積で除算して、両方の関数を正規化します。正規化された関数の面積は1.0です
  2. 各xで、f(x)とg(x)から最小値を取得します。これにより、基本的にf(x)とg(x)の重複領域である新しい関数が提供されます。
  3. ステップ2の結果の関数を統合すると、1.0から合計重複領域が得られます

しかし、これは山と谷が一致するかどうかを教えてくれません。これができるかどうかはわかりませんが、誰かが方法を知っているなら、あなたの助けに感謝します。

==編集==説明のために、画像を含めました。

サンプル曲線

2つの曲線(黒と青)の違いは同じではないかもしれませんが、補完的な形状になります。

背景:関数は、化合物の原子軌道の投影状態密度(PDOS)です。s、p、d軌道の状態があります。材料にsp、pd、またはddハイブリダイゼーション(軌道混合)があるかどうかを判断したい。私が持っている唯一のデータはPDOSです。s軌道(関数f(x))のPDOSが、p軌道(関数g(x))のPDOSと同じエネルギー(x値)のピークと谷を持っているとすると、その材料にはsp混合があります。



1
デジタルオーディオの人々にも同様の問題があるのだろうか?
ダンピチェルマン

おかげで陶酔、私もmathoverflow.netで質問をします
laalee

@laalee Stack Exchangeネットワーク上の複数のサイトで質問をしないでください。また、数学オーバーフローは研究レベルの数学です。Math Stack Exchangeは非研究レベルです。必要に応じて、これをMathまたは他の場所に移行できます。
世界エンジニア

謝罪します。mathoverflowで削除しようとしましたが、方法が見つかりませんでした。削除していただければ幸いです。おかげで
laalee

回答:


4

これは、分析化学、物理学、分光法などで一般的でしばしば困難な問題です。使用されるアプローチは、単純なRMSD比較から非常に洗練された方法まで多岐にわたります。視覚的な検査によってタスクを実行するのが容易でない場合(人間は特徴認識のために絶妙に開発されています)、計算によって実行することは難しいでしょう。

1つのアプローチは、ピークまたは谷の特徴がある場合を除き、関数がゼロ値になるように「ベースライン」を削除しようとすることです。これは、低次多項式を使用したカーブフィッティング、または、ベースラインがどのように見えるべきで、より適切な原則モデルを使用するのが最適です。ピークが非常に鋭い場合は、関数を単純に平滑化し、元の関数から平滑化された関数を差し引くことができます。

ベースラインを削除した後、正規化して残差を生成するか、RMSD(単純なアプローチ)を実行するか、ガウス分布(または適切なモデル)を求める各特徴に適合させることにより、ピーク/谷の特徴を検出します。ピークに適合できる場合は、ピークの位置と半値幅を比較できます。

Pythonを知っているなら、SciPyを見てください。幸運を。


ご回答有難うございます。ただし、ベースラインを見つける方法については明確ではありません。各ケースには異なる機能があり、事前に予測することはできません。
laalee

3

これは「頭の上の」だけなので、問題を完全に誤解している可能性がありますが、関数に二乗平均距離(RMSD)を適用することもできます。ピークと谷だけに興味がある場合は、それらのピークと谷の周囲の領域に適用します(つまり、いずれかの関数の導関数がゼロであるx +/-いくつかのイプシロンに対して)。その範囲のRMSDがゼロに近い場合、あなたは良い一致を持っていると思います。


これは、値の違いを考慮します。形状は似ていますが、ゼロではない場合があります。
laalee

3

思いがけないように、あなたが探している情報は、関数の「テーブルバリエーション」によって伝えられています。この英語の名前がわからないのは非常に残念です。

このテーブルは微分可能な関数fに関連付けられており、f 'の根を見つけてこれらのゼロの間の各区間でf'の符号を決定することによって構築できます。

したがって、f 'g'のゼロがほぼ一致し、これらの関数の符号が一致する場合、それらは同様のプロファイルになります。

私が最初にプログラムしようとすることは次のとおりです。

  1. 小さなεを選択してください
  2. 関数が定義されている間隔で、多数のN個の点x [i]をランダムに描画します。

  3. 各ノードについて、差F [i] = f(x [i] +ε)-f(x [i]-ε)およびG [i] = g(x [i] +ε)-g(x [i]-ε)

  4. 各ノードでF [i]G [i]が両方ともε²より小さいか、両方とも同じ符号を持っている場合、2つの関数はほぼ同じプロファイルを持っていると結論付けます。

動作しますか?


洞察に満ちた答えをしてくれたmichipiliに感謝します。現在、私は締め切りに間に合わせようとしています。しかし、できるだけ早くこれを実装し、お知らせします
-laalee

1

ブルートフォース:この値をステップとしてゼロでない最小のフロート値を見つけ、ドメイン全体を調べ、値が等しいかどうかを確認しますか?

==編集==

うーん... "同じ形状"でg(x)= c * f(x)を意味する場合、このソリューションを修正する必要があります-ドメインの各要素についてf(x)/ g(x)を計算し、結果は各点で同じです(もちろん、g(x)== 0の場合、f(x)== 0であるかどうかを確認し、分割しようとはしません)。

「同じ形状」が「局所最適と曲げ点が同じ」を意味する場合...さて、f(x)とg(x)(ドメイン要素のセットとして)の局所最適と曲げ点を見つけ、それらがセットは等しい。

3番目のオプション:f(x)= g(x)+ c。ドメインの各要素に同じ差f(x)-g(x)があるかどうかを確認してください。最初のケースとほとんど同じですが、分割の代わりに違いがあります。

==まだ別の編集==

さて...上記の編集からの2番目のアプローチが役に立つかもしれません。また、それを最初の派生語の記号と比較してマージできます(シンボリックではなく、df(x)= f(x)-f(x-step)として計算されます)。両方の関数がドメイン全体で同じ導関数の微分を持つ場合、念のために最適点と曲げ点を確認してください。この条件は、あなたが必要とすることをするのに十分であるべきだと思います。


返信いただきありがとうございます。ただし、関数の値は等しくなくても、形状は同じです。
laalee

このコメントを移動して、編集として回答します。見てみな。
フィリップマルチャック

答えてくれたフィリップに感謝します。問題を明確にするために画像を追加しました。
laalee

1

目視検査なしでこれらの機能がどれだけうまく一致するか。

おそらく最も簡単な方法は、ピアソンの相関係数を計算することです。つまり、f(x)をXとして、g(x)をYとして使用します。効果的に「g(x)をf(x)の関数としてプロットし、直線がどれだけうまく形成されるかを確認します」。

相関係数は計算が簡単なため人気があり、多くの場合、手を振るだけで正当化されます。いくつかの用途にとっては初期の良い近似値かもしれませんが、万能薬ではありません。

実際のアプリケーションでより良い結果を得るには、データで何が起こっているのか、つまりデータを生成するプロセスを理解する必要があります。多くの場合、何らかの背景があり、興味深い機能がその背景の上に乗っています。データ全体をブラックボックスに入れると、ほとんどの場合背景を比較することになります。ブラックボックスは、データのどの部分が興味深い部分であるかを知りません。そのため、より良い結果を得るには、多くの場合、背景を何らかの方法で削除してから、残っているものを比較することをお勧めします。直線または曲線または平均のフィッティングとそれらによる減算または除算、ローパス、バンドまたはハイパスフィルタリング、非線形関数によるデータの供給...

単一の正しい答えはありません。メソッドを試行すると、さまざまな結果が得られます。しかし、一部の結果は一部の結果よりも優れています。理論的推論は正しい方向で始めるのに役立つかもしれませんが、パラメーターを設定してメソッドを微調整する方法は、実際に試して実際の結果を比較することによってのみ最終的に見つけることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.