multi_reg
例:オリジナル数値点列[x0]と[y0]が式y=A*x^B*ln(x)で、多重回帰近似の場合の手順を示します。
- 機能:
- 多重回帰近似
- 書式:
- multi_reg([ix初組],[iy],x組数,[係数])
- 解説:
- まず、オリジナル数値点列[x0],[y0]を用いて次の回帰式を満足する数値組[iy],[ix],[ix+1]...を作っておきます。
Y = C1*X1 + C2*X2 +・・・・・・+ Cm*Xm
Y = Y(x0, y0); 数値組[iy]
X1 = X1(x0, y0); 数値組[ix]
X2 = X2(x0, y0); 数値組[ix+1]
・・・・・・・
Xm = Xm(x0, y0); 数値組[ix+x組数-1]
次に、本多重回帰近似関数を使って回帰係数C1,C2,C3...を求め、上記回帰式に代入すれば、任意xに対する近似値yが計算できます。
[ix初組] ・・・・・・・・・・・・・・・ X1,X2,...を表す番号連続数値組の先頭数値組番号
[iy] ・・・・・・・・・・・・・・・ Yの入力数値組
x組数 ・・・・・・・・・・・・・・・ Xの数値組の数mの指定
[係数] ・・・・・・・・・・・・・・・ 係数(C1,C2,...)の出力数値組
@両側の対数を取り、式を整理します。
y/ ln(x) = A*x^B
ln(y/ ln(x)) = ln(A)+B*ln(x)
従って、 Y=ln(y/ ln(x))、 C1=ln(A)、 X1=1、 C2=B、 X2=ln(x) とすれば、 Y = C1*X1 + C2*X2 が得られます。
注意:ln(y) - ln(ln(x)) = ln(A)+B*ln(x) にも変換できますが、(x>1)の条件があり、上式の(x > 0 且つ x != 1)条件より範囲が狭くなります。
A回帰計算に必要な数値組[iy]、[ix]、[ix+1]を作ります。
[iy] = Y = ln([y0]/ ln([x0]));
[ix] = X1 = 1; ← 数値セルが全部1の数値組
[ix+1] = X2 = ln([x0]);
Bmulti_reg([ix],[iy],2,[oc]); でさらに係数C1、C2を得てからA、Bを求めます。
[iy] = C1*[ix] + C2*[ix+1]
A = e^C1 = e^[oc][1]
B = C2 = [oc][2]
具体計算例:
val_fx(2*x^0.9*ln(x), [1],[2],0.1,3,-20); "オリジナル数値点列作成"
[10]- = ln([2]/ln([1])); "[iy]"
for(1,20,1) { [11][@] = 1 } "[ix]"
[12] = ln([1]); "[ix+1]"
multi_reg([11],[10],2,[20]); "[iy] = c1*[ix] + c2*[ix+1]"
exp([20][1]); "A = 2.00000000"
[20][2]; "B = 0.90000000"
return |