ドキュメンテーション

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

LinearModel.stepwise

(非推奨) ステップワイズ回帰により線形回帰モデルを作成

関数 LinearModel.stepwise は推奨されません。代わりに stepwiselm を使用してください。

構文

mdl = LinearModel.stepwise(tbl,modelspec)
mdl = LinearModel.stepwise(X,y,modelspec)
mdl = LinearModel.stepwise(___,modelspec,Name,Value)

説明

mdl = LinearModel.stepwise(tbl,modelspec) は、予測子を追加または削除するステップワイズ回帰を使用して、テーブルまたはデータセット配列 tbl の線形モデルを返します。modelspec は、ステップワイズ法の開始モデルです。

mdl = LinearModel.stepwise(X,y,modelspec) は、予測子を追加または削除するステップワイズ回帰を使用して、X データ配列の応答 y の線形モデルを作成します。modelspec は、ステップワイズ法の開始モデルです。

mdl = LinearModel.stepwise(___,modelspec,Name,Value) は、前述の構文に任意の入力に対する線形モデルを作成します。1 つまたは複数の Name,Value の引数のペアによって指定された追加オプションを使用します。

たとえば、カテゴリカル変数、モデルで使用する最小または最大の項集合、実行するステップの最大数または用途の追加または削除に LinearModel.stepwise が使用する基準を指定できます。

入力引数

すべて展開する

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

予測子変数は、数値、logical、categorical、文字または string にすることができます。応答変数は、数値または logical でなければなりません。

応答変数として異なる列を設定するには、名前と値のペア引数 ResponseVar を使用します。列のサブセットを予測子として使用するには、名前と値のペア引数 PredictorVars を使用します。

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

既定では、明示的に削除しない限り、モデルには定数項があるので、1 の列を X に含めないでください。

データ型: single | double

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

データ型: single | double | logical

以下のいずれかとして指定される、ステップワイズ回帰の開始モデル。

  • 開始モデルのタイプを指定する文字ベクトルまたは 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 番目の予測子です。

    モデル内の最小または最大の項集合を指定するには、LowerUpper の名前と値のペアの引数を使用します。

  • モデル内に含める項を指定する t 行 (p+1) 列の行列。つまり項行列であり、t は項の数、p は予測子変数の数、+1 は応答変数を示します。

  • 'Y ~ terms'

    という形式でを表す文字ベクトルまたは string スカラー。termsウィルキンソンの表記法で表されます。

名前と値のペアの引数

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

カテゴリカル変数のリスト。'CategoricalVars' と、テーブルまたはデータセット配列 tbl 内のカテゴリカル変数名が含まれている文字ベクトルの cell 配列または string 配列、またはどの列がカテゴリカルであるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルから構成されるコンマ区切りのペアとして指定します。

  • データがテーブルまたはデータセット配列 tbl に格納されている場合の既定では、LinearModel.stepwise はカテゴリカル値、論理値、文字配列、string 配列、および文字ベクトルの cell 配列をすべてカテゴリカル変数として扱います。

  • データが行列 X に格納されている場合、'CategoricalVars' の既定値は空の行列 [] です。つまり、カテゴリカルとして指定しない限り、カテゴリカルになる変数はありません。

たとえば、以下のいずれかの例を使用して、6 つの観測値のうち観測値 2 および 3 をカテゴリカルとして指定できます。

例: 'CategoricalVars',[2,3]

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

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

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

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

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

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

  • 'rsquared' — 決定係数の値の増加

  • 'adjrsquared' — 自由度調整済み決定係数の値の増加

例: 'Criterion','bic'

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

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

例: 'Exclude',[2,3]

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

データ型: single | double | logical

あてはめにおける定数項 (切片) のインジケーター。'Intercept' と、モデルに定数項を含める true またはモデルから定数項を削除する false で構成されるコンマ区切りのペアとして指定します。

式または行列ではなく文字ベクトルまたは string スカラーを使用してモデルを指定する場合のみ、'Intercept' を使用します。

例: 'Intercept',false

モデルから削除できない項を表すモデル仕様。'Lower' と、モデルの名前を表す modelspec に対するいずれかのオプションから構成されるコンマ区切りのペアとして指定します。

例: 'Lower','linear'

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

例: 'NSteps',5

データ型: single | double

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

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

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

例: 'PEnter',0.075

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

string 値または文字ベクトルは、tbl に含まれている名前、または名前と値のペアの引数 'VarNames' を使用して指定した名前でなければなりません。

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

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

例: 'PredictorVars',[2,3]

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

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

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

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

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

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

例: 'PRemove',0.05

あてはめで使用する応答変数。'ResponseVar' と、テーブルまたはデータセット配列 tbl 内の変数名が格納されている文字ベクトルまたは string 配列、またはどの列が応答変数であるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルから構成されるコンマ区切りのペアとして指定します。通常、テーブルまたはデータセット配列 tbl を近似させる場合に 'ResponseVar' を使用する必要があります。

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

例: 'ResponseVar','yield'

例: 'ResponseVar',[4]

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

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

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

例: 'Upper','quadratic'

変数の名前。'VarNames' と、X の列名が最初に、応答変数 y の名前が最後に含まれている文字ベクトルの cell 配列または string 配列から構成されるコンマ区切りのペアとして指定します。

テーブルまたはデータセット配列の変数には既に名前が設定されているため、'VarNames' はこれらの配列には適用されません。

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

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

データ型: string | cell

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

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

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

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

例: 'Verbose',2

観測値の重み。'Weights' と、非負のスカラー値の n 行 1 列のベクトル (n は観測値の数) で構成されるコンマ区切りのペアとして指定します。

データ型: single | double

出力引数

すべて展開する

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

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

すべて展開する

hald データセットを読み込みます。これは、セメントの硬化熱に対してセメントの組成が与える影響を測定したデータです。

load hald

このデータセットには、変数 ingredients および heat が含まれています。行列 ingredients には、セメントに含まれている 4 種類の化学物質の組成率が格納されています。ベクトル heat には、各セメント標本に対する 180 日後の硬化熱の値が格納されています。

ステップワイズ線形回帰モデルをデータにあてはめます。モデルに項を追加する基準のしきい値として 0.06 を指定します。

 mdl = stepwiselm(ingredients,heat,'PEnter',0.06)
1. Adding x4, FStat = 22.7985, pValue = 0.000576232
2. Adding x1, FStat = 108.2239, pValue = 1.105281e-06
3. Adding x2, FStat = 5.0259, pValue = 0.051687
4. Removing x4, FStat = 1.8633, pValue = 0.2054
mdl = 
Linear regression model:
    y ~ 1 + x1 + x2

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)     52.577       2.2862    22.998    5.4566e-10
    x1              1.4683       0.1213    12.105    2.6922e-07
    x2             0.66225     0.045855    14.442     5.029e-08


Number of observations: 13, Error degrees of freedom: 10
Root Mean Squared Error: 2.41
R-squared: 0.979,  Adjusted R-Squared: 0.974
F-statistic vs. constant model: 230, p-value = 4.41e-09

既定では、開始モデルは定数モデルです。stepwiselm は前方選択を実行し、x4x1 および x2 の各項を (この順番で) 追加します。これは対応する p 値が PEnter の値 0.06 より小さいためです。その後、stepwiselm は後退消去を使用して x4 をモデルから削除します。これは、x2 がモデル内にあると、PRemove の既定値である 0.1 より x4p 値が大きくなるためです。

データセット配列に格納されている変数を使用してステップワイズ回帰を実行します。ウィルキンソンの表記法を使用して開始モデルを指定し、オプションの引数を使用して応答変数と予測子変数を指定します。

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

load hospital

hospital データセット配列には、患者の性別、年齢、体重、喫煙状態が含まれています。

線形モデルを、定数項の開始モデルと予測子変数としての Smoker に適合させます。応答変数 Weight、カテゴリカル予測子変数 SexAge および Smoker を指定します。

mdl = stepwiselm(hospital,'Weight~1+Smoker',...
'ResponseVar','Weight','PredictorVars',{'Sex','Age','Smoker'},...
'CategoricalVar',{'Sex','Smoker'})
1. Adding Sex, FStat = 770.0158, pValue = 6.262758e-48
2. Removing Smoker, FStat = 0.21224, pValue = 0.64605
mdl = 
Linear regression model:
    Weight ~ 1 + Sex

Estimated Coefficients:
                   Estimate      SE      tStat       pValue   
                   ________    ______    ______    ___________

    (Intercept)     130.47     1.1995    108.77    5.2762e-104
    Sex_Male         50.06     1.7496    28.612     2.2464e-49


Number of observations: 100, Error degrees of freedom: 98
Root Mean Squared Error: 8.73
R-squared: 0.893,  Adjusted R-Squared: 0.892
F-statistic vs. constant model: 819, p-value = 2.25e-49

各ステップで、stepwiselm は追加および削除する項を検索します。最初のステップでは、p 値 6.26e-48 でモデルに Sex が追加されます。モデル内に Sex が与えられると、変数 Smoker が重複するためです。stepwiselm の最終的な線形モデルには Sex だけが含まれます。患者の体重は、年齢または喫煙状態に基づいた場合、有意な差異はありません。

詳細

すべて展開する

ヒント

  • ロバスト回帰をステップワイズ回帰と併用することはできません。LinearModel.stepwise を使用する前にデータの外れ値をチェックしてください。

  • 他のメソッドや、LinearModel オブジェクトのプロパティについては、LinearModel を参照してください。

アルゴリズム

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

関数 LinearModel.stepwise は、変数増減法のステップワイズ回帰を使用して、最終的なモデルを決定します。各ステップで、名前と値のペアの引数 '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' を使用して、他の基準を指定できます。たとえば、赤池情報量基準、ベイズ情報量基準、決定係数または自由度調整済み決定係数の値の変化を、項の追加または削除の基準として指定できます。

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

代替方法

stepwiselm を使用して、ステップワイズの線形モデルを構築することもできます。

fitlm を使用してモデルを構築し、次に stepaddTerms または removeTerms を使用して手動でモデルを調整します。ロバスト回帰には fitlm を使用します。ロバスト回帰とステップワイズ回帰を併用することはできません。

参考文献

[1] Draper, N. R., and H. Smith. Applied Regression Analysis. Hoboken, NJ: Wiley-Interscience, pp. 307–312, 1998.