Main Content

指数モデルのデータへの近似

この例では、信頼領域およびレーベンバーグ・マルカート非線形最小二乗アルゴリズムを使用して指数モデルをデータに当てはめる方法を説明します。

census データセットを読み込みます。

load census

変数 popcdate には、人口サイズと国勢調査の実施年に関するデータがそれぞれ含まれています。

データの散布図を表示します。

scatter(cdate,pop)
xlabel("Year")
ylabel("Population")

プロットには、人口が指数関数に似た形状で年々増加していることが示されています。

既定の信頼領域近似アルゴリズムを使用して、2 項指数モデルを人口データに当てはめます。近似結果と適合度の統計量を返します。

[exp_tr,gof_tr] = fit(cdate,pop,"exp2")
exp_tr = 
     General model Exp2:
     exp_tr(x) = a*exp(b*x) + c*exp(d*x)
     Coefficients (with 95% confidence bounds):
       a =   7.169e-17
       b =     0.02155
       c =           0
       d =     0.02155
gof_tr = struct with fields:
           sse: 1.2412e+04
       rsquare: 0.8995
           dfe: 17
    adjrsquare: 0.8818
          rmse: 27.0209

exp_tr には、信頼領域近似アルゴリズムで計算された係数などの近似結果が含まれます。gof_tr に保存された適合度の統計量に含まれている平方根平均二乗誤差 (RMSE) は 27.0209 です。

exp_tr 内のモデルをデータの散布図と一緒にプロットします。

plot(exp_tr,cdate,pop)
legend(["data","predicted value"])
xlabel("Year")
ylabel("Population")

プロットは、exp_tr 内のモデルが国勢調査データに密接に追従していないことを示しています。

近似を改善するため、係数の計算にレーベンバーグ・マルカート近似アルゴリズムを使用します。

[exp_lm,gof_lm] = fit(cdate,pop,"exp2",Algorithm="Levenberg-Marquardt")
exp_lm = 
     General model Exp2:
     exp_lm(x) = a*exp(b*x) + c*exp(d*x)
     Coefficients (with 95% confidence bounds):
       a =   4.282e-17  (-1.125e-11, 1.126e-11)
       b =     0.02477  (-5.67, 5.719)
       c =  -3.933e-17  (-1.126e-11, 1.126e-11)
       d =     0.02481  (-5.696, 5.745)
gof_lm = struct with fields:
           sse: 475.9498
       rsquare: 0.9961
           dfe: 17
    adjrsquare: 0.9955
          rmse: 5.2912

exp_lm には、レーベンバーグ・マルカート近似アルゴリズムで計算された係数などの近似結果が含まれます。gof_lm に保存された適合度の統計量に含まれている RMSE は 5.2912 です。これは、exp_tr の RMSE より小さい値です。これらの RMSE の相対サイズは、exp_lm に格納されているモデルの方が、exp_tr に格納されているモデルより、正確にデータに当てはまることを示しています。

exp_lm 内のモデルをデータの散布図と一緒にプロットします。

plot(exp_lm,cdate,pop)
legend(["data","predicted value"])
xlabel("Year")
ylabel("Population")

プロットは、exp_lm 内のモデルの方が、exp_tr 内のモデルより、国勢調査データに密接に追従していることを示しています。

参考

関数

関連するトピック