003_stats_fit_leastsquare.mw

回帰とデータ近似

イントロダクション

このワークシートでは、"stats,fit" サブパッケージの関数leastsquare を使った、 線形、多項式、非線形回帰分析の実行例を紹介します。

> restart;

データの定義

データのセット, Xvalues と Yvaluesを別々のリストとして作成します。

> Xvals := [3.80, 4.11, 5.18, 4.52, 5.49, 4.89, 1.11, 5.35, 2.09, 0.60, 6.53, 1.40];
Yvals := [56.1, 56.2, 40.0, 45.9, 45.3, 38.5, 32.4, 31.0, 50.0, 18.2, 30.1, 45.8];

Xvals := [3.80, 4.11, 5.18, 4.52, 5.49, 4.89, 1.11, 5.35, 2.09, .60, 6.53, 1.40]

Yvals := [56.1, 56.2, 40.0, 45.9, 45.3, 38.5, 32.4, 31.0, 50.0, 18.2, 30.1, 45.8]

線形回帰

この例ではデータに対し線形方程式を近似します。

> with(plots):
with(stats[fit]):

Warning, the name changecoords has been redefined

> points:=pointplot(zip((x,y)->[x,y],Xvals,Yvals)):

> eq:=leastsquare[[x,y],y=a*x+b,{a,b}]([Xvals,Yvals]);

eq := y = .8275958630*x+37.68335454

> curve:=plot(rhs(eq),x=0..6):

> display([points,curve]);

[Plot]

多項式回帰

以下の数式は、Maple で多項式回帰を行った例を示しています。 上で定義されたデータを使って、与えられた形式の近似方程式を作成し、グラフにプロットします。

> eq:=leastsquare[[x,y],y=a*x^2+b*x+c,{a,b,c}]([Xvals,Yvals]);

eq := y = -3.217983335*x^2+22.56550445*x+12.84503141

> curve:=plot(rhs(eq),x=0..6):

> display([points,curve]);

[Plot]

> eq:=leastsquare[[x,y],y=a*x^4+b*x^3+c*x+d,{a,b,c,d}]([Xvals,Yvals]);

eq := y = .1957746276*x^4-1.899168720*x^3+31.02154536*x+1.498290058

> curve:=plot(rhs(eq),x=0..6):

> display([points,curve]);

[Plot]

非線形回帰

以下の例は上で定義されたデータを非線形方程式に近似します。方程式は対数および指数関数の形をしています。

> eq:=leastsquare[[x,y],y=a+b*exp(x),{a,b}]([Xvals,Yvals]);

eq := y = 43.05427413-0.1632296071e-1*exp(x)

> curve:=plot(rhs(eq),x=0..6):

> display([points,curve]);

[Plot]

> eq:=leastsquare[[x,y],y=a*ln(x)+b,{a,b}]([Xvals,Yvals]);

eq := y = 5.474268515*ln(x)+34.67301475

> curve:=plot(rhs(eq),x=0..6):

> display([points,curve]);

[Plot]

注意:この例は、Maple の組み込み関数の機能を紹介したものです。Maple はプログラミング言語でもあるため、異なったアルゴリズムや方法で計算することも可能です。