ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fitnlm

非線形回帰モデルの近似

構文

  • mdl = fitnlm(ds,modelfun,beta0)
  • mdl = fitnlm(X,y,modelfun,beta0)
  • mdl = fitnlm(___,modelfun,beta0,Name,Value)

説明

mdl = fitnlm(ds,modelfun,beta0) は、modelfun で指定されたモデルをデータセット配列 ds 内の変数に近似し、非線形モデル mdl を返します。

fitnlm は、beta0 の初期値から開始される反復手順を使用して、モデル係数を推定します。

mdl = fitnlm(X,y,modelfun,beta0) は、列ベクトル y を応答変数として、行列 X の列を予測子変数として使用して、非線形回帰モデルを近似します。

mdl = fitnlm(___,modelfun,beta0,Name,Value) では、1 つまたは複数の Name,Value の引数のペアで指定された追加オプションを使用して、非線形回帰モデルを近似します。

すべて展開する

データセット配列から作成する非線形モデル

carbig データに基づいて自動車の燃費のための非線形モデルを作成します。

データを読み込んで非線形モデルを作成します。

load carbig
ds = dataset(Horsepower,Weight,MPG);
modelfun = @(b,x)b(1) + b(2)*x(:,1).^b(3) + ...
    b(4)*x(:,2).^b(5);
beta0 = [-50 500 -1 500 -1];
mdl = fitnlm(ds,modelfun,beta0)
mdl = 


Nonlinear regression model:
    MPG ~ b1 + b2*Horsepower^b3 + b4*Weight^b5

Estimated Coefficients:
          Estimate    SE         tStat       pValue  
    b1     -49.383     119.97    -0.41164     0.68083
    b2      376.43     567.05     0.66384     0.50719
    b3    -0.78193    0.47168     -1.6578    0.098177
    b4      422.37     776.02     0.54428     0.58656
    b5    -0.24127    0.48325    -0.49926     0.61788


Number of observations: 392, Error degrees of freedom: 387
Root Mean Squared Error: 3.96
R-Squared: 0.745,  Adjusted R-Squared 0.743
F-statistic vs. constant model: 283, p-value = 1.79e-113

行列データから作成する非線形モデル

carbig データに基づいて自動車の燃費のための非線形モデルを作成します。

データを読み込んで非線形モデルを作成します。

load carbig
X = [Horsepower,Weight];
y = MPG;
modelfun = @(b,x)b(1) + b(2)*x(:,1).^b(3) + ...
    b(4)*x(:,2).^b(5);
beta0 = [-50 500 -1 500 -1];
mdl = fitnlm(X,y,modelfun,beta0)
mdl = 


Nonlinear regression model:
    y ~ b1 + b2*x1^b3 + b4*x2^b5

Estimated Coefficients:
          Estimate    SE         tStat       pValue  
    b1     -49.383     119.97    -0.41164     0.68083
    b2      376.43     567.05     0.66384     0.50719
    b3    -0.78193    0.47168     -1.6578    0.098177
    b4      422.37     776.02     0.54428     0.58656
    b5    -0.24127    0.48325    -0.49926     0.61788


Number of observations: 392, Error degrees of freedom: 387
Root Mean Squared Error: 3.96
R-Squared: 0.745,  Adjusted R-Squared 0.743
F-statistic vs. constant model: 283, p-value = 1.79e-113

非線形モデルの近似オプションの調整

carbig データに基づいて自動車の燃費のための非線形モデルを作成します。精度を高めるためにオプション TolFun の値を小さくし、オプション Display を設定して反復を観測します。

データを読み込んで非線形モデルを作成します。

load carbig
X = [Horsepower,Weight];
y = MPG;
modelfun = @(b,x)b(1) + b(2)*x(:,1).^b(3) + ...
    b(4)*x(:,2).^b(5);
beta0 = [-50 500 -1 500 -1];

TolFun の値を小さくするオプションと反復表示を報告するオプションを作成し、これらを使用してモデルを作成します。

opts = statset('Display','iter','TolFun',1e-10);
mdl = fitnlm(X,y,modelfun,beta0,'Options',opts);
                                     Norm of         Norm of
   Iteration             SSE        Gradient           Step 
  -----------------------------------------------------------
           0     1.82248e+06
           1          678600          788810         1691.07
           2          616716     6.12739e+06         45.4738

%%%     Many iterations deleted   %%%

         122         6068.48         1.56393        0.629325
         123         6068.48         1.13809        0.432543
         124         6068.48        0.295962        0.297511
Iterations terminated: relative change in SSE less than OPTIONS.TolFun

モデル文字列構文を使用した非線形回帰の指定

関数ハンドルまたはモデル文字列構文を使用して、非線形回帰モデルを指定し、推定を行います。

標本データを読み込みます。

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

関数ハンドルを使用してレート データの Hougen-Watson モデルを指定します。

mdl = fitnlm(X,y,@hougen,beta0)
mdl = 


Nonlinear regression model:
    y ~ hougen(b,X)

Estimated Coefficients:
          Estimate    SE          tStat     pValue 
    b1      1.2526     0.86701    1.4447    0.18654
    b2    0.062776    0.043561    1.4411    0.18753
    b3    0.040048    0.030885    1.2967    0.23089
    b4     0.11242    0.075157    1.4957    0.17309
    b5      1.1914     0.83671    1.4239     0.1923


Number of observations: 13, Error degrees of freedom: 8
Root Mean Squared Error: 0.193
R-Squared: 0.999,  Adjusted R-Squared 0.998
F-statistic vs. zero model: 3.91e+03, p-value = 2.54e-13

または文字列表現を使用してレート データの Hougen-Watson モデルを指定します。

myfun = 'y~(b1*x2-x3/b5)/(1+b2*x1+b3*x2+b4*x3)';
mdl2 = fitnlm(X,y,myfun,beta0)
mdl2 = 


Nonlinear regression model:
    y ~ (b1*x2 - x3/b5)/(1 + b2*x1 + b3*x2 + b4*x3)

Estimated Coefficients:
          Estimate    SE          tStat     pValue 
    b1      1.2526     0.86701    1.4447    0.18654
    b2    0.062776    0.043561    1.4411    0.18753
    b3    0.040048    0.030885    1.2967    0.23089
    b4     0.11242    0.075157    1.4957    0.17309
    b5      1.1914     0.83671    1.4239     0.1923


Number of observations: 13, Error degrees of freedom: 8
Root Mean Squared Error: 0.193
R-Squared: 0.999,  Adjusted R-Squared 0.998
F-statistic vs. zero model: 3.91e+03, p-value = 2.54e-13

ロバスト近似オプションを使用した非線形回帰の推定

非線形回帰モデルから標本データを生成します。

ここで、b1、b2 および b3 は係数で、誤差項は平均 0、標準偏差 0.5 の正規分布です。

modelfun = @(b,x)(b(1)+b(2)*exp(-b(3)*x));

rng('default') % for reproducibility
b = [1;3;2];
x = exprnd(2,100,1);
y = modelfun(b,x) + normrnd(0,0.5,100,1);

ロバスト近似オプションを設定します。

opts = statset('nlinfit');
opts.RobustWgtFun = 'bisquare';

ロバスト近似オプションを使用して非線形モデルを近似します。ここでは文字列表現を使ってモデルを指定します。

b0 = [2;2;2];
modelstr = 'y ~ b1 + b2*exp(-b3*x)';

mdl = fitnlm(x,y,modelstr,b0,'Options',opts)
mdl = 


Nonlinear regression model (robust fit):
    y ~ b1 + b2*exp( - b3*x)

Estimated Coefficients:
          Estimate    SE         tStat     pValue    
    b1    1.0218      0.07202    14.188    2.1344e-25
    b2    3.6619      0.25429    14.401     7.974e-26
    b3    2.9732      0.38496    7.7232    1.0346e-11


Number of observations: 100, Error degrees of freedom: 97
Root Mean Squared Error: 0.501
R-Squared: 0.807,  Adjusted R-Squared 0.803
F-statistic vs. constant model: 203, p-value = 2.34e-35

重み関数ハンドルを使用した非線形回帰モデルの近似

標本データを読み込みます。

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

観測値を重み付けするための関数ハンドルを指定します。この関数はモデル近似値を入力として受け入れ、重みのベクトルを返します。

 a = 1; b = 1;
 weights = @(yhat) 1./((a + b*abs(yhat)).^2);

指定した観測の重み関数を使用して、レート データに Hougen-Watson モデルを近似します。

mdl = fitnlm(X,y,@hougen,beta0,'Weights',weights)
mdl = 


Nonlinear regression model:
    y ~ hougen(b,X)

Estimated Coefficients:
          Estimate    SE          tStat     pValue 
    b1     0.83085     0.58224     1.427    0.19142
    b2     0.04095    0.029663    1.3805    0.20477
    b3    0.025063    0.019673     1.274    0.23842
    b4    0.080053    0.057812    1.3847    0.20353
    b5      1.8261       1.281    1.4256    0.19183


Number of observations: 13, Error degrees of freedom: 8
Root Mean Squared Error: 0.037
R-Squared: 0.998,  Adjusted R-Squared 0.998
F-statistic vs. zero model: 1.14e+03, p-value = 3.49e-11

一定しない誤差モデルを使用する非線形回帰モデル

標本データを読み込みます。

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

組み合わせた誤差分散モデルを使用して、レート データに Hougen-Watson モデルを近似します。

mdl = fitnlm(X,y,@hougen,beta0,'ErrorModel','combined')
mdl = 


Nonlinear regression model:
    y ~ hougen(b,X)

Estimated Coefficients:
          Estimate    SE          tStat     pValue 
    b1      1.2526     0.86702    1.4447    0.18654
    b2    0.062776    0.043561    1.4411    0.18753
    b3    0.040048    0.030885    1.2967    0.23089
    b4     0.11242    0.075158    1.4957    0.17309
    b5      1.1914     0.83671    1.4239     0.1923


Number of observations: 13, Error degrees of freedom: 8
Root Mean Squared Error: 1.27
R-Squared: 0.999,  Adjusted R-Squared 0.998
F-statistic vs. zero model: 3.91e+03, p-value = 2.54e-13

入力引数

すべて展開する

ds - 入力データデータセット配列

データセット配列として指定される入力データ。予測子変数と応答変数を指定しない場合、既定では、最後の変数が応答変数で、その他の変数が予測子変数になります。

予測子変数と応答変数は数値でなければなりません。

モデル文字列内で応答名と予測子名を指定します。モデル文字列を指定しない場合、名前と値のペア引数 ResponseVar を使用して、別の列を応答変数として設定できます。名前と値のペア引数 PredictorVars を使用して、列のサブセットを予測子として選択できます。

データ型:single | double | logical

X - 予測子変数行列

n 行 p 列の行列として指定される予測子変数。ここで、n は観測値の数、p は予測子変数の数です。X の各列が 1 つの変数を表し、各行が 1 つの観測値を表します。

データ型:single | double | logical

y - 応答変数ベクトル

n 行 1 列のベクトルとして指定される応答変数。ここで、n は観測値の数です。y の各エントリは X の対応する行に対する応答です。

データ型:single | double

modelfun - モデルの関数形式関数ハンドル | 'y ~ f(b1,b2,...,bj,x1,x2,...,xk)' の形式の文字列

モデルの関数形式。以下のいずれかとして指定します。

  • 関数ハンドル @modelfun または @(b,x)modelfun、ここで

    • bbeta0 と同じ要素数の係数ベクトルです。

    • x は、X と同じ列数または ds の予測子変数の列数がある行列です。

    modelfun(b,x) は、x と同じ行数を含む、列ベクトルを返します。ベクトルの各行は、x の対応する行の modelfun の評価結果です。つまり、modelfun はベクトル化関数であり、すべてのデータ行で動作するものであり、1 回の関数呼び出しですべての評価を返します。

  • 'y ~ f(b1,b2,...,bj,x1,x2,...,xk)' の形式の文字列。ここで、f はスカラー係数変数 b1,...,bj およびスカラー データ変数 x1,...,xk のスカラー関数を表します。

beta0 - 係数数値ベクトル

数値ベクトルとして指定される、非線形モデルの係数。NonLinearModel は、beta0 から最適な係数の検索を開始します。

データ型:single | double

名前/値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

例: 'ErrorModel','combined','Exclude',2,'Options',opt は、誤差モデルを組み合わせモデルとして指定し、近似から 2 番目の観測値を除外し、構造体 opt 内で定義されたオプションを使用して反復近似手順を制御します。

'CoefficientNames' - モデル係数の名前{'b1','b2',...,'bk'} (既定の設定) | 文字列のセル配列

モデル係数の名前。文字列のセル配列として指定します。

データ型:char

'ErrorModel' - 誤差分散モデルの形式'constant' (既定の設定) | 'proportional' | 'combined'

誤差分散モデルの形式。以下のいずれかとして指定します。各モデルは、標準平均 0 と単位分散変数 e を、独立コンポーネントである関数値 f と、1 つまたは 2 つのパラメーター a および b と組み合わせて誤差を定義します。

'constant' (既定)
'proportional'
'combined'

Weights を使用しているときに使用できる誤差モデルは 'constant' だけです。

    メモ:   'constant' 以外の誤差モデルを使用している場合、options.RobustWgtFun に値 [] を指定しなければなりません。

例: 'ErrorModel','proportional'

'ErrorParameters' - 誤差モデル パラメーターの初期推定数値配列

選択された ErrorModel の誤差モデル パラメーターの初期推定。数値配列として指定します。

誤差モデルパラメーター既定値
'constant'a1
'proportional'b1
'combined'a, b[1,1]

Weights を使用しているときに使用できる誤差モデルは 'constant' だけです。

    メモ:   'constant' 以外の誤差モデルを使用している場合、options.RobustWgtFun に値 [] を指定しなければなりません。

たとえば、'ErrorModel' の値が 'combined' である場合は、次のように a に対して開始値 1 を指定し、b に対して開始値 2 を指定できます。

例: 'ErrorParameters',[1,2]

データ型:single | double

'Exclude' - 除外する観測値論理インデックス ベクトルまたは数値インデックス ベクトル

近似から除外する観測値。'Exclude' と、近似から除外する観測値を示す論理インデックス ベクトルまたは数値インデックス ベクトルで構成されるコンマ区切りのペアとして指定します。

たとえば、以下のいずれかの例を使用して、6 つの観測値のうち観測値 2 および 3 を除外できます。

例: 'Exclude',[2,3]

例: 'Exclude',logical([0 1 1 0 0 0])

データ型:single | double | logical

'Options' - 反復近似手順を制御するオプション[ ] (既定の設定) | 構造体

反復近似手順を制御するオプション。statset によって作成された構造体として指定します。関連するフィールドは、statset('fitnlm') 呼び出し によって返された構造体の空でないフィールドです。

オプション意味既定の設定
DerivStep有限差分導関数計算で使用する相対差分。正のスカラーまたは options 構造体を使用して関数 Statistics Toolbox™ で推定されるパラメーターのベクトルと同じサイズの、正のスカラーのベクトル。eps^(1/3)
Display近似アルゴリズムで表示される情報量。
  • 'off' — 何の情報も表示しません。

  • 'final' — 最終出力を表示します。

  • 'iter' — 反復出力をコマンド ウィンドウに表示します。

'off'
FunValCheckモデル関数から NaN または Inf のような無効な値をチェックすることを示す文字列。'on'
MaxIter許容される最大反復回数。正の整数。200
RobustWgtFunロバスト近似用の重み関数。入力として正規化された残差を受け取り、出力としてロバストな重みを返す、関数ハンドルとしても使用できます。関数ハンドルを使用する場合、定数 Tune を使用します。「ロバスト オプション」を参照してください。[]
Tuneロバスト近似に使用する調整定数で、重み関数を適用する前に残差を正規化するため使用します。正のスカラー。重み関数が関数ハンドルとして指定されている場合は必須です。既定の設定は、RobustWgtFun により異なります。詳細は、「ロバスト オプション」を参照してください。
TolFun目的関数値の終了許容誤差。正のスカラー。1e-8
TolXパラメーターの終了許容誤差。正のスカラー。1e-8

データ型:struct

'PredictorVars' - 予測子変数文字列のセル配列 | 論理インデックス ベクトルまたは数値インデックス ベクトル

近似で使用する予測子変数。'PredictorVars' と、データセット配列 ds の変数名の文字列のセル配列、あるいはどの列が予測子変数であるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルで構成されるコンマ区切りのペアとして指定します。

文字列は、データセット配列 ds にある名前または名前と値のペア引数 'VarNames' を使用して指定した名前にしてください。

既定の設定は、X 内のすべての変数、または ResponseVar を除く、ds 内のすべての変数です。

たとえば、以下のいずれかの例を使用して、2 番目と 3 番目の変数を予測子変数として指定できます。

例: 'PredictorVars',[2,3]

例: 'PredictorVars',logical([0 1 1 0 0 0])

データ型:single | double | logical | cell

'ResponseVar' - 応答変数データセット配列 ds の最後の列 (既定の設定) | 変数名の文字列 | 論理インデックス ベクトルまたは数値インデックス ベクトル

近似で使用する応答変数。'ResponseVar' と、データセット配列 ds の変数名の文字列、あるいはどの列が応答変数であるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルで構成されるコンマ区切りのペアとして指定します。

モデル文字列を指定すると、応答変数が指定されます。それ以外の場合は、データセット配列を近似すると、'ResponseVar' は、応答として使用しなければならないデータセット変数 fitnlm を示します。

たとえば、以下のいずれかの方法を使用して、6 つの変数のうち 4 番目の変数、つまり yield を応答変数として指定できます。

例: 'ResponseVar','yield'

例: 'ResponseVar',[4]

例: 'ResponseVar',logical([0 0 0 1 0 0])

データ型:single | double | logical | char

'VarNames' - 近似の変数の名前{'x1','x2',...,'xn','y'} (既定の設定) | 文字列のセル配列

近似の変数の名前。'VarNames' と、X の列名を最初に含み、応答変数 y の名前を最後に含む文字列のセル配列で構成されるコンマ区切りのペアとして指定します。

'VarNames' は、データセット配列の変数には適用されません。それは、それらの変数には既に名前があるためです。

たとえば、データ内で、自動車の馬力、加速度、モデル年度が予測子変数であり、ガロンあたりの走行マイル数 (MPG) が応答変数である場合は、以下のように変数に名前を付けることができます。

例: 'VarNames',{'Horsepower','Acceleration','Model_Year','MPG'}

データ型:cell

'Weights' - 観測値の重みones(n,1) (既定の設定) | 非負のスカラー値のベクトル | 関数ハンドル

観測値の重み。非負のスカラー値のベクトルまたは関数ハンドルとして指定します。

  • ベクトルを指定する場合、n 個の要素をもたなければならないので、n は ds または y の行数になります。

  • 関数ハンドルを指定する場合、関数は予測される応答値のベクトルを入力として受け入れ、正の実数重みのベクトルを出力として返さなければなりません。

重み W に対して NonLinearModel は観測 i における誤差分散を MSE*(1/W(i)) により推定します。MSE は平均二乗誤差です。

データ型:single | double | function_handle

出力引数

すべて展開する

mdl - 非線形モデルNonLinearModel オブジェクト

データに対する応答の最小二乗近似を表す非線形モデル。NonLinearModel オブジェクトとして返されます。

構造体 Options に空でないフィールド RobustWgtFun が含まれる場合、このモデルは最小二乗近似ではありませんが、ロバスト近似関数 RobustWgtFun を使用します。

非線形モデル オブジェクト mdl のプロパティとメソッドについては、NonLinearModel クラスのページを参照してください。

詳細

すべて展開する

ロバスト オプション

重み関数既定の設定の調整定数
'andrews'w = (abs(r)<pi) .* sin(r) ./ r1.339
'bisquare' (既定)w = (abs(r)<1) .* (1 - r.^2).^24.685
'cauchy'w = 1 ./ (1 + r.^2)2.385
'fair'w = 1 ./ (1 + abs(r))1.400
'huber'w = 1 ./ max(1, abs(r))1.345
'logistic'w = tanh(r) ./ r1.205
'talwar'w = 1 * (abs(r)<1)2.795
'welsch'w = exp(-(r.^2))2.985
[]非ロバスト近似

アルゴリズム

fitnlm は関数 nlinfit と同じ近似アルゴリズムを使用します。

参照

[1] Seber, G. A. F., and C. J. Wild. Nonlinear Regression. Hoboken, NJ: Wiley-Interscience, 2003.

[2] DuMouchel, W. H., and F. L. O'Brien. “Integrating a Robust Option into a Multiple Regression Computing Environment.” Computer Science and Statistics: Proceedings of the 21st Symposium on the Interface. Alexandria, VA: American Statistical Association, 1989.

[3] Holland, P. W., and R. E. Welsch. “Robust Regression Using Iteratively Reweighted Least-Squares.” Communications in Statistics: Theory and Methods, A6, 1977, pp. 813–827.

参考

|

この情報は役に立ちましたか?