高度に非線形な関数をフィッティングするための戦略


12

生物物理学実験からのデータを分析するために、現在、高度に非線形なモデルを使用して曲線近似を試みています。モデル関数は基本的に次のようになります。

y=ax+bx1/2

ここで、特にの値は非常に興味深いものです。b

この関数のプロット:

関数プロット

(モデル関数はシステムの完全な数学的記述に基づいており、非常にうまく機能するように思われることに注意してください-自動適合はトリッキーなだけです)。

もちろん、モデル関数には問題があります。これまで試したフィッティング戦略は、特にノイズの多いデータの場合、での鋭い漸近線のため失敗します。x=0

ここでの問題の私の理解は、xの小さな誤差が非常に増幅されるため、単純な最小二乗近似(MATLABで線形回帰と非線形回帰の両方を試しました;主にLevenberg-Marquardt)は垂直漸近線に非常に敏感です。。

誰かがこれを回避できる適切な戦略を教えてもらえますか?

統計に関する基本的な知識はある程度持っていますが、それでもかなり限られています。どこから探し始めればいいのか分からないなら、私は学びたいと思っています:)

アドバイスありがとうございます!

編集は、エラーを言及するのを忘れるためにあなたの許しを物乞い。唯一の重要なノイズはにあり、それは加法的です。x

編集2この質問の背景に関する追加情報。上記のグラフは、ポリマーの伸縮挙動をモデル化しています。@whuberがコメントで指摘したように、上記のようなグラフを取得するにが必要です。b200a

人々がこの曲線をこの点までどのように当てはめているかについて:人々は一般に、彼らが良い適合を見つけるまで垂直漸近線を切り取っているようです。ただし、カットオフの選択は依然として任意であり、フィッティング手順の信頼性と再現性が失われます。

3&4固定グラフを編集します。


3
エラーはまたはyまたはその両方に発生しますか?どのような形でノイズが入ると予想されますか(乗法、加法など)?xy
確率論的

2
@onnodb:私の懸念は、これはあなたのモデル自体がどれほど堅牢であるかという根本的な疑問ではないでしょうか?あなたが使う戦略をフィッティングすることはないであろうものをどんなに高感度のまま?このようなbの推定値に高い信頼性はありますか?bb
curious_cat

1
残念ながら、それはまだ機能しません。単にのない可能な組み合わせはありませんし、Bにも質的にあなたが描いたグラフを再現します。(明らかにbが負である 少ないいる狭い間隔に入れ、それを少なくともグラフの傾き、まだ正、以下でなければなりません。しかし、時にその間隔である、それは単にで巨大な負のスパイクを克服するために十分な大きさではありません導入され、原点bがxは1 / 2期を。)あなたは何を描きましたか?データ?他の機能はありますか?abbaabx1/2
whuber

1
感謝しますが、まだ間違っています。後方このグラフの接線に延びる任意の点ここで、X > 0、あなたのY軸を遮るであろう0 3 、B /2 X 1 / 20の下向きのスパイクはbを示すため(x,ax+bx1/2)x>0(0,3b/(2x1/2))0b負の場合、このy切片も負でなければなりません。しかし、あなたの図では、そのようなインターセプトのほとんどが正であり、まで及ぶことは非常に明確です。したがって、式のようにすることを数学的に不可能であり、Yは= X + B X 1 / 2は、あなたの曲線を記述することができいなくても約。最低でも、あなたのような何かにフィットする必要があり、Y = A X + B のx 1 / 2 + Cを15.5y=ax+bx1/2y=ax+bx1/2+c
whuber

1
この作業を行う前に、質問のステートメントを確認したかったのです。そのため、関数を正しく取得することが重要です。私は今、完全な答えをする時間はありませんが、「他の人」が間違っているかもしれないことに注意したいのですが、それは悲しいことに、さらに詳細に依存しています。あなたの場合はエラーが真にされる添加剤、それは私には思えるそれ以外の小さな値でその分散のために、それはまだ、強く異分散にする必要があり、xは本当に小さなだろう。そのエラーについて、定量的に何を伝えることができますか?xx
whuber

回答:


10

これを手動で(つまり、探索的データ分析の)当てはめるために使用する方法は、そのようなデータで非常にうまく機能します。

パラメーターを正にするために、モデルのパラメーターを少し変更します。

y=axb/x.

与えられたに対して、この方程式を満たす一意の実数xがあると仮定しましょう。これをf y ; a b と呼ぶか、簡潔にするために、a b が理解されるとf y )を呼び出します。yxf(y;a,b)f(y)(a,b)

順序付けられたペア集合を観察します。ここで、x i平均がゼロの独立したランダム変量によってf y i ; a b から逸脱します。この議論では、それらはすべて共通の分散を持っていると仮定しますが、これらの結果の拡張(重み付き最小二乗を使用)は可能であり、明白で、実装が容易です。ここで、このようなA型のコレクションのシミュレートされた例である100との値、= 0.0001B = 0.1、及び共通の分散σ(xi,yi)xif(yi;a,b)100a=0.0001b=0.1σ2=4

データプロット

これは(故意に)厳しい例です。非物理的な(負の)値とその並外れた広がり(通常は± 2水平単位ですが、x軸上で最大5または6の範囲)によって理解できるように。我々はどこにも近い推定に来て、これらのデータに程よいフィット感を得ることができた場合は、ABを、そしてσ 2を使用、私たちは本当によくやっています。x±2 56xabσ2

探索的フィッティングは反復的です。 各ステージは、2つのステップからなる:推定(データと以前の推定値に基づいて、及びBのとBの前の予測値は、そこから、xは iを得ることができるX I、次いで、推定)、B。エラーはxにあるため、近似はy iからx iを推定します。xのエラーを最初に順序付けるには、xaa^b^abx^ixibxi(yi)xx 十分に大きい

xi1a(yi+b^x^i).

したがって、我々は、更新してもよい- (傾き、それだけで一つのパラメータ有する通知最小二乗法を使用してこのモデルを当てはめることによっての更新推定値として係数の逆数をとる--andない切片)。a^aa

次に、が十分に小さい場合、逆2次項が支配的であり、(再びエラーの1次)x

xib212a^b^x^3/2yi2.

もう一度(だけ傾斜用語で最小二乗を用いて我々は、更新推定得る)Bを嵌合傾きの平方根を介し。bb^

この作品は、理由はこのフィットの粗探索近似プロットすることによって得られるに対して1 / Y 2 I小さいため、X I。さらに良いことに、x iは誤差を伴って測定され、y ix iとともに単調に変化するため、1 / y 2 iの値が大きいデータに注目する必要があります。ここに、y iの最大の半分を示すシミュレーションデータセットの例を示しますxi1/yi2xixiyixi1/yi2yi 赤で、青で最小の半分、および原点を通る線が赤のポイントに適合します。

図

yの小さい値には少し曲率がありますが、点はほぼ並んでいます。(軸の選択に注意してください:xは測定値であるため、垂直軸にプロットするのが一般的です。)曲率が最小になる赤い点にフィットすることにより、bの合理的な推定値を取得する必要があります。タイトルに表示される0.096の値は、この線の勾配の平方根です。これは、真の値よりもわずか4%少ないだけです!xyxb0.0964

この時点で、予測値は次の方法で更新できます

x^i=f(yi;a^,b^).

反復推定値は、(まだ保証できない)値の小さい範囲を通してサイクルを安定させる(保証されていない)、またはそれらのいずれかまで。

これは、ことが判明し、我々は非常に大きな値の良いセット持っていない限り推定することは困難であるxと、それB(問題の)オリジナルのプロットの垂直漸近線を決定し、question--の焦点である--which 垂直漸近線内にデータがある場合は、非常に正確に固定できます 我々の実行例では、反復は、に収束行う= 0.000196(ほぼ倍正しい値である0.0001と)、B = 0.1073の正しい値に近い(0.1axba^=0.0001960.0001b^=0.10730.1)。このプロットはデータをもう一度表示し、その上に(a)真の曲線が灰色(破線)で、(b)推定曲線が赤(実線)で重ねられています:

Fits

この適合は非常に良好であるため、実際の曲線と適合曲線とを区別することは困難です。ちなみに、推定誤差分散は、真の値4に非常に近い値です。3.734

このアプローチにはいくつかの問題があります。

  • 推定値は偏っています。バイアスは、データセットが小さく、x軸に近い値が比較的少ないときに明らかになります。フィットは体系的に少し低くなっています。

  • 推定手順には、「小さい」値から「大きい」値を伝える方法が必要です。最適な定義を特定するための探索的な方法を提案することもできますが、実際問題として、これらを「調整」定数のままにして、結果の感度を確認するために変更することができます。y iの値に従ってデータを3つの等しいグループに分割し、2つの外側のグループを使用して、任意に設定しました。yiyi

  • 手順は、すべての可能な組み合わせのために動作しませんし、Bまたはデータのすべての可能な範囲。ただし、両方の漸近線を反映するのに十分な曲線がデータセットで表されるときはいつでもうまく機能するはずです:一端の垂直のものと他端の傾斜したもの。ab


コード

以下はMathematicaで書かれています。

estimate[{a_, b_, xHat_}, {x_, y_}] := 
  Module[{n = Length[x], k0, k1, yLarge, xLarge, xHatLarge, ySmall, 
    xSmall, xHatSmall, a1, b1, xHat1, u, fr},
   fr[y_, {a_, b_}] := Root[-b^2 + y^2 #1 - 2 a y #1^2 + a^2 #1^3 &, 1];
   k0 = Floor[1 n/3]; k1 = Ceiling[2 n/3];(* The tuning constants *)
   yLarge = y[[k1 + 1 ;;]]; xLarge = x[[k1 + 1 ;;]]; xHatLarge = xHat[[k1 + 1 ;;]];
   ySmall = y[[;; k0]]; xSmall = x[[;; k0]]; xHatSmall = xHat[[;; k0]];
   a1 = 1/
     Last[LinearModelFit[{yLarge + b/Sqrt[xHatLarge], 
          xLarge}\[Transpose], u, u]["BestFitParameters"]];
   b1 = Sqrt[
     Last[LinearModelFit[{(1 - 2 a1 b  xHatSmall^(3/2)) / ySmall^2, 
          xSmall}\[Transpose], u, u]["BestFitParameters"]]];
   xHat1 = fr[#, {a1, b1}] & /@ y;
   {a1, b1, xHat1}
   ];

(パラレルベクトルによって与えられたデータにこれを適用するxと、y2列の行列に形成さdata = {x,y}の推定値で始まる、収束するまで)= B = 0a=b=0

{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]}, 
                Norm[Most[#1] - Most[#2]] >= 0.001 &,  2, 100]

3
これは驚くべき答えです。本当にうれしいです!私はこれで遊んでいますが、結果は非常に有望に見えます。ただし、理由を完全に理解するにはもう少し時間が必要です。:)また、確認に関する追加の(プライベート)質問について、あなたのWebサイトから連絡できますか?
onnodb

3

@probabilityislogicが投稿した重要な質問をご覧ください

あなたが唯一のyの誤差を持っている、と彼らだ添加し、一定の分散(つまり、あなたの仮定は、あなたがやったように聞こえる何フィット)を持っている場合は、許可すればy∗の重み付き線形フィットを試すことができますy=yxyの重みは、その後に比例することになる、1 / X ...(はい、これは単に周りの問題をシフトされる可能性がありますので、まだ問題があるかもしれませんが、少なくともこの問題の変換で正規化する方が簡単だとわかるはずです)。x=x3/21/x

この操作では、が新しい方程式の切片になることに注意してくださいb

分散がすでに一定でない場合、エラーが加法的でない場合、またはにエラーがある場合、これは状況を変えます。x

-

編集して追加情報を検討します。

次の形式のモデルに到達しました:y=b+ax

これで、エラーがxおよび加法的であることがわかりました。そのスケールで分散が一定であるかどうかはまだわかりません。

x = y /として書き換えますx=y/ab/a=my+c

してみましょう、この誤差項はheteroskedasticであってもよい、(元の場合は、xが一定の広がりを有し、それはheteroskedasticことが、知られている形式の意志)xo=x+ηx

(どこ oxo

xo=c+my+ϵϵ=ζxy

それが物事を改善するかどうかはわかりません!私はそのようなことには方法があると信じていますが、それは本当に私の領域ではありません。

コメントの中で、逆回帰を見てみたいと思うかもしれないが、関数の特定の形式がそれをうまく行かないかもしれないと言った。

その線形形式でかなりロバストなerror-in-xメソッドを試してみることさえあります。

-

y

x


x

2
たとえエラーがxにあるとしても」-それは重要です。逆回帰を確認することもできます。
Glen_b-モニカを復活させる

3
...またはモデル直接適合させることができますx=13(2ya+21/3y2(27a4b22a3y3+3327a8b44a7b2y3)1/3+(27a4b22a3y3+3327a8b44a7b2y3)1/321/3a2) :-).
whuber

@whuber Hmm. Solving for the cubic, clever. If we write the original in terms of xo where xo is x+ζ, this would leave us with x=(thatmonster)+ϵ, (again with ϵ=ζ) which at least notionally can be done with nonlinear least squares. So that looks like it takes care of the error propagation properly. It might actually work if the OP was to use the linear form I was playing with (using some robust-to-errors-in-the-IV-and-hetero estimation) to get good starting values for the parameters and then try to use this nonlinear LS form to polish it.
Glen_b -Reinstate Monica

I believe linearizing the function x(y) and (ironically) applying nonlinear (weighted) least squares would work, especially if the data were restricted to relatively small values of y where the curve is primarily determined by b.
whuber

0

After some more weeks of experimenting, a different technique seems to work the best in this particular case: Total Least Squares fitting. It's a variant of the usual (nonlinear) Least Squares fitting, but instead of measuring fit errors along just one of the axes (which causes problems in highly nonlinear cases such as this one), it takes both axes into account.

There's a plethora of articles, tutorials and books avaiable on the subject, although the nonlinear case is more elusive. There's even some MATLAB code available.


Thanks for sharing this. I accept that it it might produce good-looking results in your case, but I have two concerns. The first you mention: how exactly does one apply total least squares/errors-in-variables regression/orthogonal regression/Deming regression to nonlinear fits? The second is that this approach does not seem appropriate for your data, in which y is measured essentially without error. When that's the case, you should not be allowing for residuals in the y variable and doing so ought to produce unreliable, biased results.
whuber

@whuber Thanks for expressing your concerns! Right now, I'm still working on running simulations to probe the reliability of TLS fitting for this problem. What I've seen thus far, though, is that TLS' consideration of both variables helps greatly in overcoming the high non-linearity of the model. Fits of simulated data are reliable and converge very well. More work needs to be done though, and I'll definitely have to stack your method up to this one, once we have more actual data available --- and look in detail into your concerns.
onnodb

OK--don't forget I have comparable concerns about the method I proposed!
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.