Main Content

predict

非線形回帰モデルの応答予測

説明

ypred = predict(mdl,Xnew) は、Xnew 内の点に対する非線形回帰モデル mdl の予測応答を返します。

[ypred,yci] = predict(mdl,Xnew) は、Xnew における応答の信頼区間も返します。

[ypred,yci] = predict(mdl,Xnew,Name,Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、信頼区間の信頼水準や予測タイプを指定できます。

すべて折りたたむ

自動車の燃費の非線形モデルを重量の関数として作成し、応答を予測します。

carsmall データから、重量の関数として自動車の燃費の指数モデルを作成します。すべての変数がほぼ同じサイズになるように、1000 のファクタで重み付けをスケーリングします。

load carsmall
X = Weight;
y = MPG;
modelfun = 'y ~ b1 + b2*exp(-b3*x/1000)';
beta0 = [1 1 1];
mdl = fitnlm(X,y,modelfun,beta0);

データに対する予測された応答を作成します。

Xnew = X;
ypred = predict(mdl,Xnew);

元の応答と予測された応答をプロットして、相違点を確認します。

plot(X,y,'o',X,ypred,'x')
legend('Data','Predicted')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Predicted.

自動車の燃費の非線形モデルを重量の関数として作成し、いくつかの応答の信頼区間を調べます。

carsmall データから、重量の関数として自動車の燃費の指数モデルを作成します。すべての変数がほぼ同じサイズになるように、1000 のファクタで重み付けをスケーリングします。

load carsmall
X = Weight;
y = MPG;
modelfun = 'y ~ b1 + b2*exp(-b3*x/1000)';
beta0 = [1 1 1];
mdl = fitnlm(X,y,modelfun,beta0);

最小、平均および最大のデータ点の予測応答を作成します。

Xnew = [min(X);mean(X);max(X)];
[ypred,yci] = predict(mdl,Xnew)
ypred = 3×1

   34.9469
   22.6868
   10.0617

yci = 3×2

   32.5212   37.3726
   21.4061   23.9674
    7.0148   13.1086

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

y=b1+b2exp(-b3x)+ϵ

ここで、b1b2 および 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];
mdl = fitnlm(x,y,modelfun,b0,'Options',opts);

近似した回帰モデルと 95% の同時信頼限界をプロットします。

xrange = [min(x):.01:max(x)]';
[ypred,yci] = predict(mdl,xrange,'Simultaneous',true);

figure()
plot(x,y,'ko') % observed data
hold on
plot(xrange,ypred,'k','LineWidth',2)
plot(xrange,yci','r--','LineWidth',1.5)

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers

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

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

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

a = 1; b = 1;
weights = @(yhat) 1./((a + b*abs(yhat)).^2);
mdl = fitnlm(X,y,@hougen,beta0,'Weights',weights);

観測値の重みの関数を使用して、反応物レベル [100,100,100] で新しい観測値について 95% の予測区間を計算します。

[ypred,yci] = predict(mdl,[100,100,100],'Prediction','observation', ...
    'Weights',weights)
ypred = 1.8149
yci = 1×2

    1.5264    2.1033

入力引数

すべて折りたたむ

非線形回帰モデル オブジェクト。fitnlm を使用して作成される NonLinearModel オブジェクトとして指定します。

新しい予測子の入力値。table、データセット配列または行列を指定します。Xnew の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

  • Xnew が table またはデータセット配列である場合、mdlPredictorNames プロパティと同じ予測子名をもつ予測子が含まれていなければなりません。

  • Xnew が行列である場合、mdl の作成に使用した予測子入力と同じ個数の変数 (列) が同じ順序で含まれていなければなりません。当てはめたモデルで予測子としては使用しなかった予測子変数も Xnew に含めなければならないことに注意してください。また、mdl の作成に使用する変数は、すべて数値でなければなりません。数値予測子をカテゴリカルとして扱うには、mdl を作成するときに名前と値のペアの引数 'CategoricalVars' を使用して予測子を指定します。

データ型: single | double | table

名前と値の引数

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

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

例: [ypred,yci] = predict(Mdl,Xnew,'Alpha',0.01,'Simultaneous',true) は、すべての予測子の値について同時に計算した、信頼水準が 99% である信頼区間 yci を返します。

信頼区間の有意水準。'Alpha' と範囲 [0,1] の数値から構成されるコンマ区切りのペアとして指定します。yci の信頼水準は 100(1 – Alpha)% に等しい値です。Alpha は、真の値が信頼区間に含まれない確率です。

例: 'Alpha',0.01

データ型: single | double

予測タイプ。'Prediction''curve' または 'observation' から構成されるコンマ区切りのペアとして指定します。

予測子変数 X と応答変数 y に対する回帰モデルは、次の形式になります。

y = f(X) + ε,

ここで、f は当てはめた回帰関数、ε はランダムなノイズ項です。

  • 'Prediction''curve' である場合、predictXnew で当てはめた応答 f(Xnew) に対する信頼限界を予測します。

  • 'Prediction''observation' である場合、predictXnew における応答観測値 y に対する信頼限界を予測します。

ノイズ項により変動性が追加されるので、y の範囲は f(X) の範囲より広くなります。

例: 'Prediction','observation'

同時信頼限界を計算するためのフラグ。'Simultaneous' と true または false から構成されるコンマ区切りのペアとして指定します。

  • truepredict は、シェッフェの方法を使用して、Xnew 内のすべての予測子の値に対応する応答値の曲線に対して信頼限界を計算します。上限と下限の間の範囲には、真の応答値から構成される曲線が 100(1 – α)% の信頼度で含まれます。

  • falsepredict は、Xnew 内の各観測値における応答値に対して信頼限界を計算します。特定の予測子の値における応答値の信頼区間には、真の応答値が 100(1 – α)% の信頼度で含まれます。

応答値の曲線全体を範囲内に含める方が、単一の予測子の値における応答値を範囲内に含める場合より条件が厳しいので、同時区間は個別の区間より広くなります。

例: 'Simultaneous',true

正の実数値の重みのベクトルまたは関数ハンドル。

  • ベクトルを指定する場合、Xnew にある観測値 (行) の数と同じ数の要素を指定しなければなりません。

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

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

出力引数

すべて折りたたむ

Xnew で予測した応答の値。数値ベクトルとして返されます。

応答の信頼区間。各行が 1 つの区間に対応する 2 列の行列として返されます。信頼区間の意味は、名前と値のペアの引数 'Alpha''Prediction' および 'Simultaneous' の設定によって異なります。

ヒント

  • ノイズが追加された予測では、random を使用します。

  • テーブルまたはデータセット配列から作成されたモデルで使いやすい構文にするには、feval を試みてください。

参照

[1] Lane, T. P. and W. H. DuMouchel. “Simultaneous Confidence Intervals in Multiple Regression.” The American Statistician. Vol. 48, No. 4, 1994, pp. 315–321. Available at https://doi.org/10.1080/00031305.1994.10476090

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

バージョン履歴

R2012a で導入