これを手動で(つまり、探索的データ分析の)当てはめるために使用する方法は、そのようなデータで非常にうまく機能します。
パラメーターを正にするために、モデルのパラメーターを少し変更します。
y=ax−b/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.0001、B = 0.1、及び共通の分散σ(xi,yi)xif(yi;a,b)100a=0.0001b=0.1。σ2=4
これは(故意に)厳しい例です。非物理的な(負の)値とその並外れた広がり(通常は± 2水平単位ですが、x軸上で最大5または6の範囲)によって理解できるように。我々はどこにも近い推定に来て、これらのデータに程よいフィット感を得ることができた場合は、A、Bを、そしてσ 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 十分に大きい
xi≈1a(yi+b^x^i−−√).
したがって、我々は、更新してもよい- (傾き、それだけで一つのパラメータ有する通知最小二乗法を使用してこのモデルを当てはめることによっての更新推定値として係数の逆数をとる--andない切片)。a^aa
次に、が十分に小さい場合、逆2次項が支配的であり、(再びエラーの1次)x
xi≈b21−2a^b^x^3/2y2i.
もう一度(だけ傾斜用語で最小二乗を用いて我々は、更新推定得る)Bを嵌合傾きの平方根を介し。bb^
この作品は、理由はこのフィットの粗探索近似プロットすることによって得られるに対して1 / Y 2 I小さいため、X I。さらに良いことに、x iは誤差を伴って測定され、y iはx iとともに単調に変化するため、1 / y 2 iの値が大きいデータに注目する必要があります。ここに、y iの最大の半分を示すシミュレーションデータセットの例を示しますxi1/y2ixixiyixi1/y2iyi 赤で、青で最小の半分、および原点を通る線が赤のポイントに適合します。
と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)推定曲線が赤(実線)で重ねられています:
この適合は非常に良好であるため、実際の曲線と適合曲線とを区別することは困難です。ちなみに、推定誤差分散は、真の値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
と、y
2列の行列に形成さdata = {x,y}
の推定値で始まる、収束するまで)= B = 0:a=b=0
{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]},
Norm[Most[#1] - Most[#2]] >= 0.001 &, 2, 100]