Main Content

nlinfit

説明

beta = nlinfit(X,Y,modelfun,beta0) は、modelfun によって指定されたモデルを使用して、X 内の予測子上にある Y において、応答の非線形回帰の推定係数のベクトルを返します。係数の推定には、beta0 で指定された初期値を用いた反復最小二乗推定法が使用されます。

beta = nlinfit(X,Y,modelfun,beta0,options) は、構造体 options のアルゴリズム制御パラメーターを使用して非線形回帰を近似します。前の構文の出力引数のいずれかを返すことができます。

beta = nlinfit(___,Name,Value) は、1 つ以上の名前と値の引数ペアで指定された追加オプションを使用します。たとえば、観測の重みまたは非定数の誤差モデルを指定できます。前の構文の入力引数のいずれかを使用できます。

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(___) は、残差 Rmodelfun のヤコビアン J、推定係数の推定された分散共分散行列 CovB、誤差項の分散の推定 MSE および誤差モデルに関する詳細を含む構造体 ErrorModelInfo もそれぞれ返します。

すべて折りたたむ

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

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

beta0 にある初期値を使用して、レート データに Hougen-Watson モデルを当てはめます。

beta = nlinfit(X,y,@hougen,beta0)
beta = 5×1

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

非線形回帰モデル y=b1+b2exp{-b3x}+ϵ から標本データを生成します。ここで、b1b2 および b3 は係数です。誤差項は、平均が 0、標準偏差が 0.1 の正規分布に従います。

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.1,100,1);

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

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

ロバスト近似オプションを使用して非線形モデルを当てはめます。

beta0 = [2;2;2];
beta = nlinfit(x,y,modelfun,beta0,opts)
beta = 3×1

    1.0041
    3.0997
    2.1483

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

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

既知の観測の重みのベクトルを指定します。

W = [8 2 1 6 12 9 12 10 10 12 2 10 8]';

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

[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',W);
beta
beta = 5×1

    2.2068
    0.1077
    0.0766
    0.1818
    0.6516

係数の標準誤差を表示します。

sqrt(diag(CovB))
ans = 5×1

    2.5721
    0.1251
    0.0950
    0.2043
    0.7735

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

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 モデルを当てはめます。

[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',weights);
beta
beta = 5×1

    0.8308
    0.0409
    0.0251
    0.0801
    1.8261

係数の標準誤差を表示します。

sqrt(diag(CovB))
ans = 5×1

    0.5822
    0.0297
    0.0197
    0.0578
    1.2810

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

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

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

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(X,y,@hougen,beta0,'ErrorModel','combined');
beta
beta = 5×1

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

誤差モデルの情報を表示します。

ErrorModelInfo
ErrorModelInfo = struct with fields:
              ErrorModel: 'combined'
         ErrorParameters: [0.1517 5.6783e-08]
           ErrorVariance: @(x)mse*(errorparam(1)+errorparam(2)*abs(model(beta,x))).^2
                     MSE: 1.6245
          ScheffeSimPred: 6
          WeightFunction: 0
            FixedWeights: 0
    RobustWeightFunction: 0

入力引数

すべて折りたたむ

行列として指定される、非線形回帰関数の予測子変数。通常、X は予測子 (独立変数) の値の計画行列であり、1 行は Y の各値に、1 列は各予測子に対応します。ただし、X は、modelfun で受け入れられる任意の配列にすることができます。

データ型: single | double

非線形回帰関数を近似するための応答値 (従属変数)。X と同じ行数をもつベクトルとして指定します。

データ型: single | double

関数ハンドルとして指定される、非線形回帰モデル関数。modelfun は、係数ベクトルと配列 X の 2 つの入力引数を順序どおりに受け入れ、近似した応答値のベクトルを返さなければなりません。

たとえば、非線形回帰関数 hougen を指定するには、関数ハンドル @hougen を使用します。

データ型: function_handle

ベクトルとして指定される、最小二乗推定アルゴリズムの初期の係数値。

メモ

初期値が適切でないと、求められる解の残差誤差が大きくなることがあります。

データ型: single | double

statset で作成する構造体として指定される、推定アルゴリズムのオプション。nlinfit には以下の statset パラメーターを適用できます。

有限差分の勾配を計算するための相対差分。正のスカラー値または beta と同じサイズのベクトルとして指定します。各係数に異なる相対差分を指定する場合はベクトルを使用します。

推定の処理中の出力表示のレベル。'off''iter' または 'final' のいずれかとして指定します。'iter' を指定すると、各反復ごとに出力が表示されます。'final' を指定すると、最後の反復の後に出力が表示されます。

目的関数から NaNInf などの無効な値を確認するかどうかを示すインジケーター。'on' または 'off' を指定できます。

正の整数として指定される、推定アルゴリズムのための最大反復回数。推定が収束許容誤差内に収まるか、MaxIter で指定された最大反復回数に達するまで、反復が繰り返されます。

ロバスト近似に使用する重み関数。有効な文字ベクトル、string スカラーまたは関数ハンドルを指定します。

メモ

観測の重み W を使用する場合、RobustWgtFun[] の値を指定しなければなりません。

次の表で、使用できる文字ベクトルと string スカラーを説明します。r が正規化された残差を示し、w がロバストな重みを示すとします。インジケーター関数 I[x] は、式 x が true の場合は 1、それ以外の場合は 0 になります。

重み関数既定の設定の調整定数
'' (既定の設定) 非ロバスト近似
'andrews'

w=I[|r|<π]×sin(r)/r

1.339
'bisquare'

w=I[|r|<1]×(1r2)2

4.685
'cauchy'

w=1(1+r2)

2.385
'fair'

w=1(1+|r|)

1.400
'huber'

w=1max(1,|r|)

1.345
'logistic'

w=tanh(r)r

1.205
'talwar'

w=I[|r|<1]

2.795
'welsch'

w=exp{r2}

2.985

あるいは、関数ハンドルを指定して、正規化された残差のベクトルを入力として受け取り、出力としてロバストな重みのベクトルを返すこともできます。関数ハンドルを使用する場合、定数 Tune を使用しなければなりません。

ロバスト近似のための調整定数。正のスカラー値として指定します。調整定数は、ロバストな重み関数を適用する前に残差を正規化するために使用します。既定の調整定数は、RobustWgtFun で指定された関数によって異なります。

関数ハンドルを使用して RobustWgtFun を指定する場合、Tune の値を指定しなければなりません。

正のスカラー値として指定される、残差の二乗和の終了許容誤差。推定が収束許容誤差内に収まるか、MaxIter で指定された最大反復回数に達するまで、反復が繰り返されます。

正のスカラー値として指定される、推定係数 beta の終了許容誤差。推定が収束許容誤差内に収まるか、MaxIter で指定された最大反復回数に達するまで、反復が繰り返されます。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'ErrorModel','proportional','ErrorParameters',0.5 は、誤差パラメーター推定の初期値を 0.5 として、比例誤差モデルを指定します。

誤差項の形式。'ErrorModel' と、誤差モデルを示す 'constant''proportional' または 'combined' から構成されるコンマ区切りのペアとして指定します。各モデルは、標準平均 0 と単位分散変数 e を、独立成分とあわせて使用して誤差を定義します。使用される独立成分は、関数値 f と、1 つまたは 2 つのパラメーター a および b です。

'constant' (既定の設定)y=f+ae
'proportional'y=f+bfe
'combined'y=f+(a+b|f|)e

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

メモ

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

選択した ErrorModel の誤差モデル パラメーターの初期推定。'ErrorParameters' と、スカラー値または 2 要素ベクトルで構成されるコンマ区切りのペアとして指定します。

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

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

例: 'ErrorParameters',[1,2]

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

メモ

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

データ型: double | single

観測値の重み。'Weights' と、正の実数の重みをもつベクトルまたは関数ハンドルで構成されるコンマ区切りのペアとして指定します。観測の重みを使用すると、近似するモデルへの影響力を少なくする観測データの重みを減少させることができます。

  • W がベクトルの場合、Y と同じサイズでなければなりません。

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

メモ

観測の重みを使用する場合、options.RobustWgtFun には [] の値を指定しなければなりません。

データ型: double | single | function_handle

出力引数

すべて折りたたむ

ベクトルとして返される、推定回帰係数。beta における要素の数は、beta0 内の要素の数と等しくなります。

f(Xi,b)modelfun で指定された非線形関数であるとします。ここで、xi は観測値 i (i = 1,...,N) の予測子、b は回帰係数です。beta には、次の重み付き最小二乗を最小化する係数のベクトルが返されます。

i=1Nwi[yif(xi,b)]2.

重み付けがない非線形回帰の場合、重み付けの項はすべて 1 になります。

近似されたモデルの残差。ベクトルとして返します。

  • 名前と値のペア引数 Weights を使用して観測の重みを指定する場合、R には重み付き残差が含まれます。

  • 名前と値のペア引数 ErrorModel を使用して 'constant' 以外の誤差モデルを指定する場合は、R をモデルの近似残差として解釈できなくなります。

非線形回帰モデル modelfun のヤコビアン。N 行 p 列の行列として返します。このとき N は観測数、p は推定係数の数です。

  • 名前と値のペア引数 Weights を使用して観測の重みを指定する場合、J には重み付きモデル関数のヤコビアンが含まれます。

  • 名前と値のペア引数 ErrorModel を使用して 'constant' 以外の誤差モデルを指定する場合は、J をモデル関数のヤコビアンとして解釈できなくなります。

近似された係数 beta の推定された分散共分散行列。p 行 p 列の行列として返されます。p は推定された係数の数です。モデルのヤコビアン J の列がフル ランクである場合、CovB = inv(J'*J)*MSE になります。MSE は平均二乗誤差です。

スカラー値として返される、近似されたモデルの平均二乗誤差 (MSE)。MSE は、誤差項の分散の推定です。モデルのヤコビアン J の列がフル ランクである場合、MSE = (R'*R)/(N-p) になります。ここで N は観測数、p は推定係数の数です。

誤差モデルの近似に関する情報。以下のフィールドを含む構造体として返します。

ErrorModel選択された誤差モデル
ErrorParameters推定された誤差パラメーター
ErrorVarianceN 行 p 列の行列 X を受け入れ、推定された誤差モデルを使用して誤差分散の N 行 1 列のベクトルを返す関数ハンドル。
MSE平均二乗誤差
ScheffeSimPred推定された誤差モデルを使用する場合の、同時予測区間の Scheffé パラメーター
WeightFunctionnlinfit で以前にカスタムの重み関数を使用している場合は値が true の論理値
FixedWeightsnlinfit で以前に固定された重みを使用している場合は値が true の論理値
RobustWeightFunctionnlinfit で以前にロバスト近似を使用した場合は値が true の論理値

詳細

すべて折りたたむ

重み付き残差

"重み付き残差" とは、残差にその対応する観測値の重みの平方根を掛け合わせた値です。

与えられた推定回帰係数 b, に対する観測値 i の残差は次のようになります。

ri=yif(xi,b),

ここで、yi は観測された応答、f(xi,b) は予測子 xi. で当てはめられた応答です。

重み wi (i = 1,...,N) を使用して重み付き非線形回帰で近似する場合、nlinfit は次の重み付き残差を返します。

ri*=wi(yif(xi,b)).

重み付きモデル関数のヤコビアン

"重み付きモデル関数のヤコビアン" は、非線形モデルのヤコビアンと、観測値の重み行列の平方根を乗算します。

推定回帰係数 b, が与えられた場合、非線形関数 f(xi,b) について推定したモデルのヤコビアン J, の要素は次のようになります。

Jij=f(xi,b)bj,

ここで、bjb. の j 番目の要素です。

対角重み付け行列 W, を使用して重み付き非線形回帰で近似する場合、nlinfit は次の重み付きヤコビ行列を返します。

J*=W1/2J.

ヒント

  • 予測の誤差推定を得るには、オプションの出力引数 RJCovB または MSE を、nlpredci への入力として使用します。

  • 推定された係数 beta の誤差推定を得るには、オプションの出力引数 RJCovB または MSE を、nlparci への入力として使用します。

  • ロバストな近似オプション RobustWgtFun を使用する場合、CovB を使用しなければなりません。また、信頼区間でロバスト近似が正しく考慮されるように、nlpredci または nlparci への入力として MSE を使用しなければならない場合もあります。

アルゴリズム

  • nlinfit は、Y または modelfun(beta0,X)NaN 値を欠損データとして処理し、それに対応する観測値を無視します。

  • 非ロバストな推定の場合、nlinfit はレーベンバーグ・マルカート非線形最小二乗アルゴリズム ([1]) を使用します。

  • ロバストな推定の場合、nlinfit反復的に再重み付けした最小二乗 ([2][3]) のアルゴリズムを使用します。このアルゴリズムでは、各反復において直前の反復からそれぞれの観測値の残差に基づき、ロバストな重みが再計算されます。これらの重みは、外れ値の重みを小さくして、近似への影響を減少させる役割を果たします。繰り返しは重みが収束するまで継続されます。

  • 観測の重みに関数ハンドルを指定する場合、実際の重みは近似されたモデルに依存します。その場合、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.

バージョン履歴

R2006a より前に導入