Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

step

項の追加または削除による線形回帰モデルの改良

説明

NewMdl= step(mdl)は、ステップワイズ回帰を使用して 1 つの予測子を追加または削除した、mdlに基づく線形回帰モデルを返します。

NewMdl= step(mdl,Name,Value)では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、項の追加または削除に使用する基準や、実行する最大ステップ数を指定できます。

すべて折りたたむ

線形回帰モデルをあてはめ、stepを使用して項を追加または削除することによりモデルを改良します。この例では、関数stepがカテゴリカル予測子を扱う方法についても説明します。

carsmallデータセットを読み込み、変数WeightModel_YearおよびMPGを使用して table を作成します。

loadcarsmalltbl1 = table(MPG,Weight); tbl1.Year = categorical(Model_Year);

Weightの関数としてMPGの線形回帰モデルを作成します。

mdl1 = fitlm(tbl1,'MPG ~ Weight')
mdl1 = Linear regression model: MPG ~ 1 + Weight Estimated Coefficients: Estimate SE tStat pValue __________ _________ _______ __________ (Intercept) 49.238 1.6411 30.002 2.7015e-49 Weight -0.0086119 0.0005348 -16.103 1.6434e-28 Number of observations: 94, Error degrees of freedom: 92 Root Mean Squared Error: 4.13 R-squared: 0.738, Adjusted R-Squared: 0.735 F-statistic vs. constant model: 259, p-value = 1.64e-28

stepを使用して、'quadratic'までの項が含まれるようにモデルを調整します。最大 5 ステップのステップワイズ回帰を許可するため、'NSteps'として 5 を指定します。評価プロセスと、各ステップで行われた決定を表示するため、'Verbose'として 2 を指定します。

NewMdl1 = step(mdl1,'Upper','quadratic','NSteps',5,'Verbose',2)
pValue for adding Year is 8.2284e-15 pValue for adding Weight^2 is 0.15454 1. Adding Year, FStat = 47.5136, pValue = 8.22836e-15 pValue for adding Weight:Year is 0.0071637 pValue for adding Weight^2 is 0.0022303 2. Adding Weight^2, FStat = 9.9164, pValue = 0.0022303 pValue for adding Weight:Year is 0.19519 pValue for removing Year is 2.9042e-16
NewMdl1 = Linear regression model: MPG ~ 1 + Weight + Year + Weight^2 Estimated Coefficients: Estimate SE tStat pValue __________ __________ _______ __________ (Intercept) 54.206 4.7117 11.505 2.6648e-19 Weight -0.016404 0.0031249 -5.2493 1.0283e-06 Year_76 2.0887 0.71491 2.9215 0.0044137 Year_82 8.1864 0.81531 10.041 2.6364e-16 Weight^2 1.5573e-06 4.9454e-07 3.149 0.0022303 Number of observations: 94, Error degrees of freedom: 89 Root Mean Squared Error: 2.78 R-squared: 0.885, Adjusted R-Squared: 0.88 F-statistic vs. constant model: 172, p-value = 5.52e-41

Yearには 3 つの異なる値が含まれているので、stepは 2 つの指標変数Year_76およびYear_82を作成します。指標変数の 2 乗はそれ自体なので、stepは指標変数の 2 次の項を考慮しません。

'Verbose'が2 なので、stepは評価プロセスを表示します。

  • stepは、YearまたはWeight^2の追加に対するp値を計算します。Yearp値はWeight^2p値および既定のしきい値 0.05 の両方より小さいので、stepYearをモデルに追加します。

  • stepは、Weight:YearまたはWeight^2の追加に対するp値を計算します。Weight^2p値はWeight:Yearp値より小さいので、関数stepWeight^2をモデルに追加します。

  • 2 次の項を追加した後で、stepWeight:Yearの追加に対するp値を再度計算しますが、p値はしきい値より大きくなっています。したがって、stepは項をモデルに追加しません。名前と値のペアの引数'Upper'によって指定された上限のため、stepWeight^3の追加を検討しません。

  • stepは、削除する項を探します。stepは既にWeight^2を検討したので,Yearの削除に対するp値のみを計算します。p値が既定のしきい値 0.10 より小さいので、stepは項を削除しません。

  • 許容される最大ステップ数は 5 ですが、項の追加または削除を行ってもモデルが改善されないので、stepは 2 ステップ後に処理を停止します。

stepは、2 つの指標変数を 1 つの予測子変数として扱い、Yearを一度に追加します。2 つの指標変数を 2 つの異なる予測子変数として扱うには、dummyvarを使用して別々のカテゴリカル変数を作成します。

temp_Year = dummyvar(tbl1.Year); Year_76 = temp_Year(:,2); Year_82 = temp_Year(:,3);

MPGWeightYear_76およびYear_82が含まれている table を作成します。

tbl2 = table(MPG,Weight,Year_76,Year_82);

Weightの関数としてMPGの線形回帰モデルを作成し、stepを使用してモデルを改良します。

mdl2 = fitlm(tbl2,'MPG ~ Weight'); NewMdl2 = step(mdl2,'Upper','quadratic','NSteps',5)
1. Adding Year_82, FStat = 83.1956, pValue = 1.76163e-14 2. Adding Weight:Year_82, FStat = 8.0641, pValue = 0.0055818 3. Adding Year_76, FStat = 8.1284, pValue = 0.0054157
NewMdl2 = Linear regression model: MPG ~ 1 + Year_76 + Weight*Year_82 Estimated Coefficients: Estimate SE tStat pValue __________ __________ _______ __________ (Intercept) 38.844 1.5294 25.397 1.503e-42 Weight -0.006272 0.00042673 -14.698 1.5622e-25 Year_76 2.0395 0.71537 2.851 0.0054157 Year_82 19.607 3.8731 5.0623 2.2163e-06 Weight:Year_82 -0.0046268 0.0014979 -3.0888 0.0026806 Number of observations: 94, Error degrees of freedom: 89 Root Mean Squared Error: 2.79 R-squared: 0.885, Adjusted R-Squared: 0.88 F-statistic vs. constant model: 171, p-value = 6.54e-41

モデルNewMdl2には、NewMdl1に含まれていた項Weight^2の代わりに交互作用項Weight:Year_82が含まれています。

入力引数

すべて折りたたむ

線形回帰モデル。fitlmまたはstepwiselmを使用して作成したLinearModelオブジェクトとして指定します。

stepを使用できるのは、名前と値のペアの引数'RobustOpts'を既定の'off'に設定してfitlmを使用することによりmdlを作成した場合だけです。

名前と値の引数

例:'Criterion','aic','Upper','quadratic','Verbose',2は、赤池情報量基準を使用し、(最大で) 2 次の項をモデルに含め、評価プロセスおよび各ステップで行われた決定を表示するようstepに指示します。

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

項を追加または削除する基準。'Criterion'と以下のいずれかの値から構成されるコンマ区切りのペアとして指定します。

  • 'sse'— 項の追加または削除によって生じる残差平方和の変化に対する F 検定の p 値。

  • 'aic'— 赤池情報量基準 (AIC) の値の変化

  • 'bic'— ベイズ情報量基準 (BIC) の値の変化

  • 'rsquared'— R2の値の増加

  • 'adjrsquared'— 自由度調整済み R2の値の増加

例:'Criterion','bic'

モデルから削除できない項を表すモデル仕様。'Lower'と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。

  • モデルを指定する文字ベクトルまたは string スカラー。

    モデル タイプ
    'constant' モデルは定数 (切片) 項だけを含みます。
    'linear' 切片と各予測子の線形項がモデルに含まれます。
    'interactions' 切片、各予測子の線形項、および異なる予測子のペアすべての積がモデルに含まれます (二乗項はありません)。
    'purequadratic' 切片項と各予測子の線形項および二乗項がモデルに含まれます。
    'quadratic' 切片項、各予測子の線形項、二乗項、および異なる予測子のペアすべての積がモデルに含まれます。
    'polyijk' モデルは多項式であり、1 番目の予測子における次数iまでのすべての項、2 番目の予測子における次数jまでのすべての項が含まれます。3 番目以降の項についても同様です。0 ~ 9 の数値を使用して、各予測子の最大次数を指定します。モデルには交互作用項が含まれますが、各交互作用項の次数は、指定された次数の最大値を超えません。たとえば、'poly13'には、切片、x1、x2、x22、x23、x1*x2および x1*x22の各項が含まれます。x1および x2はそれぞれ 1 番目および 2 番目の予測子です。
  • モデル内の項を指定する t 行 (p + 1) 列の行列、つまり項の行列。t は項の数、p は予測子変数の数であり、+1 は応答変数に相当します。項行列は、予測子の個数が多いときに項をプログラムで生成する場合に便利です。

  • 次の形式の文字ベクトルまたは string スカラー

    'Y ~ terms',

    ここで、termsウィルキンソンの表記法で表されます。式の変数名は、有効な MATLAB®識別子でなければなりません。

例:'Lower','linear'

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

実行する最大ステップ数。'NSteps'と正の整数から構成されるコンマ区切りのペアとして指定します。

例:'NSteps',5

データ型:single|double

項を追加する基準のしきい値。'PEnter'と次の表に記載されているスカラー値から構成されるコンマ区切りのペアとして指定します。

規範 既定値 判定
'SSE' 0.05 F 統計量の p 値がPEnter(入力に対する p 値) より小さい場合、項をモデルに追加します。
'AIC' 0 モデルの AIC の変化がPEnterより小さい場合,項をモデルに追加します。
'BIC' 0 モデルの BIC の変化がPEnterより小さい場合,項をモデルに追加します。
'Rsquared' 0.1 モデルの決定係数値の増加がPEnterより大きい場合、項をモデルに追加します。
'AdjRsquared' 0 モデルの自由度調整済み決定係数値の増加がPEnterより大きい場合、項をモデルに追加します。

詳細は、名前と値のペアの引数Criterionを参照してください。

例:'PEnter',0.075

項を削除する基準のしきい値。'PRemove'と次の表に記載されているスカラー値から構成されるコンマ区切りのペアとして指定します。

規範 既定値 判定
'SSE' 0.10 F 統計量の p 値がPRemove(削除する p 値) より大きい場合、項をモデルから削除します。
'AIC' 0.01 モデルの AIC の変化がPRemoveより大きい場合、項をモデルから削除します。
'BIC' 0.01 モデルの BIC の変化がPRemoveより大きい場合、項をモデルから削除します。
'Rsquared' 0.05 モデルの決定係数値の増加がPRemoveより小さい場合、項をモデルから削除します。
'AdjRsquared' -0.05 モデルの自由度調整済み決定係数値の増加がPRemoveより小さい場合、項をモデルから削除します。

各ステップで、関数stepは項が現在のモデル内の他の項に対して冗長 (線形従属) であるかどうかもチェックします。項が現在のモデル内の他の項に線形従属している場合、関数stepは従属する項を基準値に関係なく削除します。

詳細は、名前と値のペアの引数Criterionを参照してください。

例:'PRemove',0.05

あてはめにおける最大の項集合を記述するモデル仕様。'Upper'と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。

  • モデルを指定する文字ベクトルまたは string スカラー。

    モデル タイプ
    'constant' モデルは定数 (切片) 項だけを含みます。
    'linear' 切片と各予測子の線形項がモデルに含まれます。
    'interactions' 切片、各予測子の線形項、および異なる予測子のペアすべての積がモデルに含まれます (二乗項はありません)。
    'purequadratic' 切片項と各予測子の線形項および二乗項がモデルに含まれます。
    'quadratic' 切片項、各予測子の線形項、二乗項、および異なる予測子のペアすべての積がモデルに含まれます。
    'polyijk' モデルは多項式であり、1 番目の予測子における次数iまでのすべての項、2 番目の予測子における次数jまでのすべての項が含まれます。3 番目以降の項についても同様です。0 ~ 9 の数値を使用して、各予測子の最大次数を指定します。モデルには交互作用項が含まれますが、各交互作用項の次数は、指定された次数の最大値を超えません。たとえば、'poly13'には、切片、x1、x2、x22、x23、x1*x2および x1*x22の各項が含まれます。x1および x2はそれぞれ 1 番目および 2 番目の予測子です。
  • モデル内の項を指定する t 行 (p + 1) 列の行列、つまり項の行列。t は項の数、p は予測子変数の数であり、+1 は応答変数に相当します。項行列は、予測子の個数が多いときに項をプログラムで生成する場合に便利です。

  • 次の形式の文字ベクトルまたは string スカラー

    'Y ~ terms',

    ここで、termsウィルキンソンの表記法で表されます。式の変数名は、有効な MATLAB 識別子でなければなりません。

例:'Upper','quadratic'

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

情報の表示に関する制御。'Verbose'と以下のいずれかの値から構成されるコンマ区切りのペアとして指定します。

  • 0— すべての表示を抑制します。

  • 1— 各ステップで実行されるアクションを表示します。

  • 2— 評価プロセスと、各ステップで実行されるアクションを表示します。

例:'Verbose',2

出力引数

すべて折りたたむ

線形回帰モデル。LinearModelオブジェクトとして返されます。

入力引数mdlを上書きするには、新しいモデルをmdlに代入します。

mdl = step(mdl);

詳細

すべて折りたたむ

項の行列

項行列Tは、モデル内の項を指定する t 行 (p + 1) 列の行列です。t は項の数、p は予測子変数の数であり、+1 は応答変数に相当します。T(i,j)の値は、項iの変数jの指数です。

たとえば、3つの予測子変数x1x2x3と応答変数yx1x2x3yという順序で入力に含まれていると仮定します。Tの各行は 1 つの項を表します。

  • [0 0 0 0]— 定数項 (切片)

  • [0 1 0 0]x2(x1^0 * x2^1 * x3^0と等価)

  • [1 0 1 0]x1*x3

  • [2 0 0 0]x1^2

  • [0 1 2 0]x2*(x3^2)

各項の最後の0は、応答変数を表します。一般に、項行列内のゼロの列ベクトルは、応答変数の位置を表します。行列と列ベクトルに予測子と応答変数がある場合、各行の最後の列に応答変数を示す0を含めなければなりません。

モデル仕様の式は'y~terms'という形式の文字ベクトルまたは string スカラーです。

  • yは応答名です。

  • termsは、ウィルキンソンの表記法を使用してモデル内の予測子の項を表します。

予測子と応答変数を表現するには、table 入力tblの変数名、またはVarNamesを使用して指定された変数名を使用します。VarNamesの既定値は{'x1','x2',...,'xn','y'}です。

以下に例を示します。

  • 'y ~ x1 + x2 + x3'は、切片がある 3 変数の線形モデルを指定します。

  • 'y ~ x1 + x2 + x3 – 1'は、切片がない 3 変数の線形モデルを指定します。既定では式に定数 (切片) 項が含まれることに注意してください。モデルから定数項を除外するには、–1を式に含めなければなりません。

–1を使用して項を明示的に削除しない限り、式は定数項を含みます。

ウィルキンソンの表記法

ウィルキンソンの表記法は、モデルに存在する項を記述します。この表記法は、モデルに存在する項に関係するものであり、それらの項の乗数 (係数) に関係するものではありません。

ウィルキンソンの表記法では、以下の記号を使用します。

  • +は、次の変数を含むことを意味します。

  • は、次の変数を含まないことを意味します。

  • :は、項の積である交互作用を定義します。

  • *は、交互作用と、より低い次数の項すべてを定義します。

  • ^は、*を繰り返した場合とまったく同じ方法で予測子をべき乗にします。このため、^には、より低い次数の項も含まれます。

  • ()は、項をグループ化します。

次の表に、ウィルキンソンの表記法の代表的な例を示します。

ウィルキンソンの表記法 標準表記の項
1 定数 (切片) 項
x1^kkは正の整数 x1,x12, ...,x1k
x1 + x2 x1,x2
x1*x2 x1,x2,x1*x2
x1:x2 x1*x2のみ
–x2 x2は含めない
x1*x2 + x3 x1,x2,x3,x1*x2
x1 + x2 + x3 + x1:x2 x1,x2,x3,x1*x2
x1*x2*x3 – x1:x2:x3 x1,x2,x3,x1*x2,x1*x3,x2*x3
x1*(x2 + x3) x1,x2,x3,x1*x2,x1*x3

詳細は、ウィルキンソンの表記法を参照してください。

アルゴリズム

  • "ステップワイズ回帰"は、応答変数の説明としての各項の統計的な重要性に基づき、線形または一般化線形モデルの項を追加したり削除するための体系的な方法です。この方法は、まずmodelspecを使用して指定される初期モデルから開始して、徐々により大きいまたはより小さいモデルの説明能力を比較していきます。

    関数stepは、変数増減法のステップワイズ回帰を使用して、最終的なモデルを決定します。各ステップで、名前と値のペアの引数'Criterion'の値に基づいて、モデルに追加する項またはモデルから削除する項が探索されます。

    線形回帰モデルでは、'Criterion'の既定値は'sse'です。この場合、LinearModelstepstepwiselmは、各ステップで F 統計量の p 値を使用して、ある項が存在する場合と存在しない場合のモデルを検定します。ある項が現在はモデルにない場合、帰無仮説は、項がモデルに追加された場合に係数ゼロをもつということです。帰無仮説を棄却する十分な証拠がある場合、その項がモデルに追加されます。逆に、ある項がモデルに現在ある場合、帰無仮説は、その項が係数ゼロをもつことです。帰無仮説を棄却する十分な証拠がない場合、その項がモデルから削除されます。

    'Criterion''sse'である場合、ステップワイズ回帰では以下のステップが実行されます。

    1. 初期モデルをあてはめます。

    2. 使用可能な一連の項の中でモデルに含まれていないものを調べます。いずれかの項に対する p 値が開始許容誤差より小さい場合 (つまり、モデルに追加すると係数がゼロになる可能性が低い場合)、p 値が最小である項を追加し、このステップを繰り返します。それ以外の場合、ステップ 3 を実行します。

    3. モデルに含まれている使用可能な項のいずれかに対する p 値が終了許容誤差より大きい場合 (つまり、係数がゼロになるという仮説を棄却できない場合)、p 値が最大である項を削除してステップ 2 に戻ります。それ以外の場合、このプロセスを終了します。

    高い次数の項は、その項のサブセットである低い次数の項のすべてもモデルに含まれている場合を除き、どの段階でも追加されません。たとえば、X1X2^2の両方が既にモデルに含まれている場合を除き、X1:X2^2という項の追加は試行されません。同様に、高い次数の項がモデルに残っている場合、そのサブセットである低い次数の項は削除されません。たとえば、X1:X2^2がモデルに残っている場合、X1またはX2^2の削除は試行されません。

    一般化線形モデルでは、'Criterion'の既定値は'Deviance'です。GeneralizedLinearModelstepstepwiseglmは、同様の手順に従って項を追加または削除します。

    名前と値のペアの引数'Criterion'を使用して、他の基準を指定できます。たとえば、赤池情報量基準、ベイズ情報量基準、決定係数または自由度調整済み決定係数の値の変化を、項の追加または削除の基準として指定できます。

    初期モデルに含まれている項と、項の追加および削除を行う順序によって、同じ一連の項から異なるモデルが構築される可能性があります。どのステップでもモデルが改良されなくなると、この関数は終了します。ただし、異なる初期モデルまたはステップの順序を使用しても、近似が向上するという保証はありません。この意味において、ステップワイズ モデルは、局所的には最適でも大域的には最適ではないことがあります。

  • stepでは、カテゴリカル予測子が次のように扱われます。

    • L 個のレベル (カテゴリ) があるカテゴリカル予測子をもつモデルには、L – 1個の指標変数が含まれています。1 番目のカテゴリが基準レベルとして使用されるので、基準レベルに対する指標変数はモデルに含まれません。カテゴリカル予測子のデータ型がcategoricalである場合、categoriesを使用してカテゴリの順序をチェックし、reordercatsを使用してカテゴリを並べ替えることにより、基準レベルをカスタマイズできます。指標変数の作成の詳細については、ダミー変数の自動作成を参照してください。

    • stepは、L – 1個の指標変数のグループを単一の変数として扱います。指標変数を個別の予測子変数として扱うには、dummyvarを使用して指標変数を手動で作成します。そして、モデルをあてはめるときに、カテゴリカル変数の基準レベルに対応するものを除く指標変数を使用します。カテゴリカル予測子Xについてdummyvar(X)のすべての列と切片項を予測子として指定した場合、計画行列はランク落ちとなります。

    • L 個のレベルをもつカテゴリカル予測子と連続予測子の間の交互作用項は、L – 1個の指標変数と連続予測子の要素単位の積から構成されます。

    • L 個のレベルをもつカテゴリカル予測子と M 個のレベルをもつカテゴリカル予測子の間の交互作用項は、2 つのカテゴリカル予測子のレベルについて可能なすべての組み合わせを含めるため、(L – 1)*(M – 1)個の指標変数から構成されます。

    • 指標の二乗はそれ自体に等しいので、より次数が高い項をカテゴリカル予測子に対して指定することはできません。

    したがって、stepがカテゴリカル予測子を追加または削除する場合、実際には指標変数のグループが一度に追加または削除されます。同様に、カテゴリカル予測子が含まれている交互作用項をstepが追加または削除する場合、実際には、カテゴリカル予測子が含まれている交互作用項のグループが追加または削除されます。

代替機能

  • stepwiselmを使用して開始モデルの項を指定し、項の追加や削除が有益ではなくなるまでモデルの改善を続けます。

  • 特定の項を追加または削除するには、addTermsまたはremoveTermsを使用します。

拡張機能

バージョン履歴

R2012a で導入