5

平均ピークを見つけたいデータのセットがあります。Numbers.appでいくつかのテストを行って、何を求めているかを確認しました。データセットのグラフを作成すると、データの曲線を描画し、その曲線のピークが見える「多項式トレンドライン」と呼ばれる機能があります私が求めているポイント/値とまったく同じです。

では、その曲線をプログラムで計算し、曲線上の接線を見つけるにはどうすればよいでしょうか?

私はウィキペディアを見回して、「正規分布」や「多項式回帰」などのトピックを見つけましたが、これは非常に関連していると思われますが、ウィキペディアの方程式をたどるのはいつも難しいので、ここの誰かができることを願っていますプログラムの例を教えてください。

ここに私が求めているものを説明するためのいくつかのチャートがあります. 緑色の点はデータ ポイントで、青色の線は「多項式近似曲線」(次数 6) です。そのトレンドラインの「ピーク」が私が求めているものです。

偶数データセットの例 不均等なデータセットの例

更新された質問:

いくつかの回答の後、問題は曲線のピークを実際に見つける方法ではなく、緑の点からその青い曲線を生成する方法であるため、質問を言い換える必要があることに気付きました。嘘。目標は、一種の「平均最大」を取得することです

別の質問は、「この特定の問題は実際には何と呼ばれているのですか?」ということになると思います。;)

4

6 に答える 6

5

データはそのように見えますが、必ずしも正規分布の後であるとは限りません。

分布フィッティングのトピックは非常に複雑であり、データ分布が何であるかについて明確な先験的な仮定がない限り、私はそこに挑戦しません。分布のタイプについて仮定がある場合は、最小二乗法または最尤法を調べてください。

ただし、ベジェスプラインまたはLOESSを使用してデータを「平滑化」してから、計算された曲線の最大値を見つけることをお勧めします。

導関数を使用するアプローチがここで機能するとは思えません。

于 2010-08-18T12:48:31.730 に答える
2

正規分布について話し、データを関数に当てはめることができるように見えるので、正規分布に当てはめる必要がありますµσこれは、それぞれ分布の平均偏差と標準偏差です ( wikiの最初の式を参照)。

この関数をデータに当てはめると、ピークは で与えられる平均値になりますµ

于 2010-08-18T12:45:47.007 に答える
2

平均と標準偏差/分散の計算から始めることができます。これにより、ディストリビューションに関する情報が得られます。

任意のデータセットの問題を解決できるとは思いません。したがって、いくつかの共通の特徴的な動作が必要になります。

結局のところ、曲線のフィッティングは、方法によっては多少恣意的なものになる可能性があります。問題のドメインに合わせて適切に選択する必要があります。おそらく、最初に外れ値を捨てるために、重み付けまたはデータクレンジングが必要です。

于 2010-08-18T13:04:25.917 に答える
1

Y 対 X をプロットしているとしましょう。すでに各 X に対応する Y の値があります。X=X1 の場合の Y の平均値を Y(X1) とします。

変数 max = 0 を設定します。次に、各 X で Y の値を計算します。Y(X1) > max の場合、max=Y(X) を設定します。すべての Y を通過すると、最大値は Y のピーク値になります。

たとえば、あなたの例では、すべての緑色の点を調べて、それらの最大値を見つけてください。それがピークですよね?それがあなたが望んでいたものかどうか教えてください。どのプログラミング言語を使用していますか? ピークを取得するためだけにディストリビューションなどに入る必要はありません..

于 2010-08-18T12:45:09.753 に答える
1

導関数は、ピークでゼロに等しくなります。

于 2010-08-18T12:39:13.747 に答える
0

私は完全な「R」初心者ですが、自分のデータで同じことを行ってきたので、共有したいと思いました. これが悪い方法である(または「きちんとした」方法ではない)ため、かなりのたるみが生じると確信していますが、少なくとも今のところは、その目的を果たしています。

あなたのようなピーク形状を持つ 50 個のデータ セットがあります (それぞれの先頭の勾配が大きく、下降側の勾配が緩やかです)。最初に、多くの多項式フィットをテストして、「目的に最適」であるが、オーバー フィットしないようにしました... x<-dataset$x ## またはテーブルの列からプルします。たとえば、dataset[,1] y<-dataset$y ## または、テーブルの列から取得します。例: dataset[,2] k=2 ## 多項式であることを知っていたので、3 で開始 while(k<100) { k=k+1 fit=lm(y~poly(x, k,raw=TRUE)) var[k]=summary(fit)$sigma } plot(var)

この場合、11 の多項式が、オーバー フィッティングのない最適なフィッティングでした。その後、ANOVA を実行して確認できますが、すべてスキップします。

ここで、上記の「lm」の係数から多項式を作成しました。fit=lm(y~poly(x,11,raw=TRUE)) fit.coef <- c(summary(fit)$coefficients[1,1], summary(fit)$coefficients[2,1],.. . fit.poly <- 多項式(fit.coef)

次に導関数:

fit.deriv <- deriv(fit.poly)

ピークの傾きは、x (max) の値を元の多項式から導関数に置き換えるだけです。

全部のスロープが欲しかったので…

fit.slope <- predict(fit.deriv,x) ## x here represents all the x values above.  For a single value you can just replace x with the value of x representing the max value in your polynomial

元の質問に役立つと同時に、コードを学び、クリーンアップしたいので、これをより適切に行う方法についてのコメントを招待することを願っています!

ありがとう。

于 2015-06-19T12:42:14.293 に答える