stepwisefit
ステップワイズ回帰を使用して線形回帰モデルを当てはめる
構文
説明
では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、非定数の初期モデル、または b
= stepwisefit(X
,y
,Name,Value
)stepwisefit
が受け入れ可能なステップの最大数を指定できます。
[
は、最終回帰モデル b
,se
,pval
,finalmodel
,stats
] = stepwisefit(___)finalmodel
内の変数の指定、および最終モデルについての統計値 stats
も返します。
例
既定の引数でのステップワイズ回帰
基本的なステップワイズ回帰を実行し、係数推定値を取得します。
hald
データ セットを読み込みます。
load hald whos % Check variables loaded in workspace
Name Size Bytes Class Attributes Description 22x58 2552 char hald 13x5 520 double heat 13x1 104 double ingredients 13x4 416 double
このデータ セットには、4 つのセメント原料から成るさまざまな混合物について、セメント硬化時に発生した熱の観測値が含まれています。応答変数は heat
です。行列 ingredients
には、予測子の列が 4 つ含まれています。
モデル内の定数項のみで開始し、既定のエントリと終了許容誤差にそれぞれ 0.05 および 0.10 を使用して stepwisefit
を実行します。
b = stepwisefit(ingredients,heat)
Initial columns included: none Step 1, added column 4, p=0.000576232 Step 2, added column 1, p=1.10528e-06 Final columns included: 1 4 {'Coeff' } {'Std.Err.'} {'Status'} {'P' } {[ 1.4400]} {[ 0.1384]} {'In' } {[1.1053e-06]} {[ 0.4161]} {[ 0.1856]} {'Out' } {[ 0.0517]} {[-0.4100]} {[ 0.1992]} {'Out' } {[ 0.0697]} {[-0.6140]} {[ 0.0486]} {'In' } {[1.8149e-07]}
b = 4×1
1.4400
0.4161
-0.4100
-0.6140
stepwisefit
表示には、列 1
および 4
が最終モデルに含まれることが示されます。出力 b
には、最終モデルに表示されないものであっても、すべての列に関する推定値が含まれます。stepwisefit
は、最終モデルと列 2
(または 3
) で構成されるモデルを当てはめることにより、列 2
(または 3
) の推定値を計算します。
ステップワイズ手順の調整
さまざまな自動車の測定値を含む carsmall
データ セットを読み込みます。
load carsmall
whos
Name Size Bytes Class Attributes Acceleration 100x1 800 double Cylinders 100x1 800 double Displacement 100x1 800 double Horsepower 100x1 800 double MPG 100x1 800 double Mfg 100x13 2600 char Model 100x33 6600 char Model_Year 100x1 800 double Origin 100x7 1400 char Weight 100x1 800 double
4 つの連続変数と応答変数 MPG
を使用して、ステップワイズ回帰を実行します。
X = [Acceleration Cylinders Displacement Horsepower];
y = MPG;
b4_default = stepwisefit(X,y) % Stepwise regression with default arguments
Initial columns included: none Step 1, added column 2, p=1.59001e-25 Step 2, added column 4, p=0.00364266 Step 3, added column 1, p=0.0161414 Final columns included: 1 2 4 {'Coeff' } {'Std.Err.'} {'Status'} {'P' } {[-0.4517]} {[ 0.1842]} {'In' } {[ 0.0161]} {[-2.6407]} {[ 0.4823]} {'In' } {[4.0003e-07]} {[ 0.0148]} {[ 0.0157]} {'Out' } {[ 0.3472]} {[-0.0772]} {[ 0.0204]} {'In' } {[2.6922e-04]}
b4_default = 4×1
-0.4517
-2.6407
0.0148
-0.0772
項 Displacement
がモデルに入力されることはありません。項の相関行列を計算して、他の 3 つの項と高い相関関係があるかどうかを特定します。
corrcoef(X,'Rows','complete') % To exclude rows with missing values from calculation
ans = 4×4
1.0000 -0.6438 -0.6968 -0.6968
-0.6438 1.0000 0.9517 0.8622
-0.6968 0.9517 1.0000 0.9134
-0.6968 0.8622 0.9134 1.0000
相関行列の 3 行目は Displacement
に対応します。この項は、他の 3 つの項、特に Cylinders
(0.95
) および Horsepower
(0.91
) と高い相関関係があります。
入力行列 X
に Weight
を含むように再定義します。名前と値のペアの引数 'InModel'
を使用して、項 Displacement
および Horsepower
を含む初期モデルを指定します。
X = [Acceleration Cylinders Displacement Horsepower Weight];
inmodel = [false false true true false];
b5_inmodel = stepwisefit(X,y,'InModel',inmodel)
Initial columns included: 3 4 Step 1, added column 5, p=1.06457e-06 Step 2, added column 2, p=0.00410234 Final columns included: 2 3 4 5 {'Coeff' } {'Std.Err.'} {'Status'} {'P' } {[-0.0912]} {[ 0.2032]} {'Out' } {[ 0.6548]} {[-2.3223]} {[ 0.7879]} {'In' } {[ 0.0041]} {[ 0.0252]} {[ 0.0145]} {'In' } {[ 0.0862]} {[-0.0449]} {[ 0.0231]} {'In' } {[ 0.0555]} {[-0.0050]} {[ 0.0012]} {'In' } {[1.0851e-04]}
b5_inmodel = 5×1
-0.0912
-2.3223
0.0252
-0.0449
-0.0050
最終モデルは、項 2–5
で構成されます。ただし、推定値 Displacement
および Horsepower
は、最終モデルにおいて 0.05
よりも大きい 値をもちます。名前と値のペアの引数 'PRemove'
を使用すると、より保守的に動作するようにステップワイズ アルゴリズムを調整することができます。たとえば、'PRemove'
を (既定の 0.1
に代えて) 0.05
に設定することにより、それぞれが 0.05
よりも小さい 値をもつ、項が 2 つだけのより小さい最終モデルが得られます。
b5_inmodel_premove = stepwisefit(X,y,'InModel',inmodel,'PRemove',0.05)
Initial columns included: 3 4 Step 1, added column 5, p=1.06457e-06 Step 2, added column 2, p=0.00410234 Step 3, removed column 3, p=0.0862131 Step 4, removed column 4, p=0.239239 Final columns included: 2 5 {'Coeff' } {'Std.Err.'} {'Status'} {'P' } {[-0.0115]} {[ 0.1656]} {'Out' } {[ 0.9449]} {[-1.6037]} {[ 0.5146]} {'In' } {[ 0.0025]} {[ 0.0101]} {[ 0.0124]} {'Out' } {[ 0.4186]} {[-0.0234]} {[ 0.0198]} {'Out' } {[ 0.2392]} {[-0.0055]} {[ 0.0011]} {'In' } {[3.9038e-06]}
b5_inmodel_premove = 5×1
-0.0115
-1.6037
0.0101
-0.0234
-0.0055
名前と値のペアの引数 'Scale'
を使用して当てはめる前に、各列をセンタリングし、スケーリングします (z スコアを計算します)。このスケーリングでは、選択したモデル、係数推定値の符号、またはその 値は変更されません。ただし、係数推定値をスケーリングします。
b5_inmodel_premove_scale = stepwisefit(X,y,'InModel',inmodel,'PRemove',0.05,'Scale','on')
Initial columns included: 3 4 Step 1, added column 5, p=1.06457e-06 Step 2, added column 2, p=0.00410234 Step 3, removed column 3, p=0.0862131 Step 4, removed column 4, p=0.239239 Final columns included: 2 5 {'Coeff' } {'Std.Err.'} {'Status'} {'P' } {[-0.0370]} {[ 0.5339]} {'Out' } {[ 0.9449]} {[-2.8136]} {[ 0.9028]} {'In' } {[ 0.0025]} {[ 1.1155]} {[ 1.3726]} {'Out' } {[ 0.4186]} {[-1.0617]} {[ 0.8961]} {'Out' } {[ 0.2392]} {[-4.4406]} {[ 0.9028]} {'In' } {[3.9038e-06]}
b5_inmodel_premove_scale = 5×1
-0.0370
-2.8136
1.1155
-1.0617
-4.4406
通常、スケーリングは、異なるスケール (Horsepower
や Weight
など) で測定された項の推定値を比較するために行います。この場合は、Horsepower
の標準偏差を 1 ずつ大きくすると MPG
が 1
低下することが期待され、Weight
の標準偏差を 1 ずつ大きくすると MPG
が 4.4
低下することが期待されます。
ステップワイズ回帰からの詳細な出力の取得
imports-85
データ セットを読み込みます。このデータ セットには、1985 年に取り込まれた自動車の特性が含まれています。すべての列名の一覧については、ワークスペースの変数 Description
を参照するか、コマンド ラインで Description
と入力してください。
load imports-85
whos
Name Size Bytes Class Attributes Description 9x79 1422 char X 205x26 42640 double
ステップワイズ回帰で使用する連続変数のサブセットを選択します。このサブセットは、予測子変数 engine-size
、bore
、stroke
、compression-ratio
、horsepower
、peak-rpm
、city-mpg
、および highway-mpg
と、応答変数 price
で構成されます。
varnames = ["engine-size","bore","stroke","compression-ratio","horsepower","peak-rpm","city-mpg","highway-mpg","price"]; % Variable names to use in stepwise regression dataTbl = array2table(X(:,8:16),'VariableNames',varnames); % Create data table with variable names Xstepw = dataTbl{:,{'engine-size','bore','stroke','compression-ratio','horsepower','peak-rpm','city-mpg','highway-mpg'}}; % Input matrix ystepw = dataTbl{:,{'price'}}; % Response vector
他の 8 つの変数で変数 price
の stepwisefit
を実行します。最初は既定の定数初期モデルを使用し、次に highway-mpg
を含む初期モデルを使用します。ステップ情報の表示を省略します。
[betahat_def,se_def,pval_def,finalmodel_def,stats_def] = stepwisefit(Xstepw,ystepw,'Display',"off"); inmodel = [false false false false false false false true]; [betahat_in,se_in,pval_in,finalmodel_in,stats_in] = stepwisefit(Xstepw,ystepw,'InModel',inmodel,'Display','off');
stepwisefit
によって返される最終モデルを検査します。
finalmodel_def
finalmodel_def = 1x8 logical array
1 0 1 1 0 1 1 0
finalmodel_in
finalmodel_in = 1x8 logical array
1 0 1 1 0 1 0 1
既定のモデルでは、モデルから highway-mpg
(項 8
) を削除し、代わりに city-mpg
(項 7
) を含めます。これら 2 つの最終モデルの平方根平均二乗誤差 (RMSE) を比較します。
stats_def.rmse
ans = 3.3033e+03
stats_in.rmse
ans = 3.3324e+03
既定の引数から得られたモデルでは RMSE がわずかに小さくなります。完全な仕様の最終モデルは、項の推定値と切片の推定値で構成されることに注意してください。
betahat_def % Term estimates
betahat_def = 8×1
103 ×
0.1559
-0.2242
-2.8578
0.3904
0.0222
0.0024
-0.2414
0.0793
stats_def.intercept % Intercept estimate
ans = -7.3506e+03
stepwisefit
の既定の実行履歴と、次の推奨ステップを取得します。ステップ情報の表示を省略します。
[~,~,~,~,~,nextstep_def,history_def]=stepwisefit(Xstepw,ystepw,'Display',"off"); nextstep_def
nextstep_def = 0
推奨ステップはこれ以上存在しません (nextstep_def
は 0
)。
history_def.('in')
ans = 7x8 logical array
1 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0
1 0 0 1 1 0 0 0
1 0 1 1 1 0 0 0
1 0 1 1 1 1 0 0
1 0 1 1 1 1 1 0
1 0 1 1 0 1 1 0
アルゴリズムは、合計で 7 つのステップを実行します。出力は、engine-size
(項 1
) がステップ 1
に追加されることや、horsepower
(項 5
) がステップ 2
に追加されることなどを示しています。
入力引数
X
— 予測子変数
数値行列
予測子変数。n 行 p 列の数値行列として指定します。ここで、n は観測値の数、p は予測子変数の数です。X
の各列が 1 つの変数を表し、各行が 1 つの観測値を表します。
stepwisefit
は常にモデル内の定数項を含みます。そのため、1 の列を X
に含めないでください。
データ型: single
| double
y
— 応答変数
数値ベクトルまたは logical ベクトル
応答変数。n 行 1 列の数値または logical ベクトルとして指定します。ここで、n は観測値の数です。y
の各エントリは X
の対応する行に対する応答です。
データ型: single
| double
| logical
メモ
stepwisefit
は、X
または y
の NaN
値を欠損値として扱い、これらの値を含むすべての行を無視します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'PEnter',0.10,'PRemove',0.15,'MaxIter',8
では、stepwisefit
に対し、エントリと終了許容誤差にそれぞれ 0.10
と 0.15
を使用して、最大 8
つのステップを実行するように指示しています。
InModel
— 初期モデルの項
logical ベクトル
初期モデルの項。'InModel'
と、初期モデルに含める項を指定する logical ベクトルで構成されるコンマ区切りのペアとして指定します。既定の設定では、どの項も含まれていません。
例: 'InModel',[true false false true]
データ型: logical
PEnter
— モデルに項を追加する許容誤差
0.05
(既定値) | 正のスカラー
モデルに項を追加する許容誤差。'PEnter'
と、追加する項の最大 p 値を指定する正のスカラーで構成されるコンマ区切りペアとして指定します。既定値は 0.05 です。
例: 'PEnter',0.10
データ型: single
| double
PRemove
— モデルから項を削除する許容誤差
PEnter
の最大値と 0.10
(既定値) | 正のスカラー
モデルから項を削除する許容誤差。 'PRemove'
と、削除する項の最小 p 値を指定する正のスカラーで構成されるコンマ区切りペアとして指定します。既定値は PEnter
の最大値と 0.10
です。
メモ
PRemove
を PEnter
よりも小さくすることは許可されていません。その理由は、stepwisefit
が無限ループに入り、変数のモデルへの追加とモデルからの削除が繰り返される可能性があるからです。
例: 'PRemove',0.15
データ型: single
| double
Display
— ステップ情報の表示用インジケーター
'on'
(既定値) | 'off'
ステップ情報の表示用インジケーター。'Display'
と 'on'
または 'off'
から構成されるコンマ区切りのペアとして指定します。
'on'
の場合、コマンド ウィンドウの各ステップに関する情報を表示します (既定)。'off'
の場合、表示を省略します。
例: 'Display','off'
MaxIter
— 最大ステップ数
Inf
(既定値) | 正の整数
最大ステップ数。'MaxIter'
と正の整数または Inf
(既定) から構成されるコンマ区切りのペアとして指定します。Inf
では、単一のステップでモデルが改善しなくなるまでアルゴリズムの実行を許可します。
例: 'MaxIter',12
データ型: double
Keep
— 初期状態で保持する項
logical ベクトル
初期状態で保持する項。'Keep'
と logical ベクトルで構成されるコンマ区切りのペアとして指定します。初期モデルに含まれる (または除外される) ように指定した項の値が true
の場合、その項は強制的に最終モデルに残る (または除外される) ことになります。項の値が false
であれば、その項が強制的に最終モデルに残される (または除外される) ことはありません。既定の設定では、初期状態において項が保持されないように指定します。
例: 'Keep',[true true false false]
データ型: logical
Scale
— 項のセンタリングおよびスケーリング用インジケーター
'off'
(既定値) | 'on'
項のセンタリングおよびスケーリング用インジケーター。'Scale'
と 'off'
または 'on'
で構成されるコンマ区切りのペアとして指定します。
'off'
の場合、項のセンタリングとスケーリングを行いません (既定)。'on'
の場合、当てはめの前に、X
の各列をセンタリングし、スケーリングします (z スコアを計算します)。
例: 'Scale','on'
出力引数
b
— 推定された係数
数値ベクトル
推定係数。X
の項に対応する数値ベクトルとして返されます。関数 stepwisefit
は b
の値を次のように計算します。
最終モデルに項が含まれる場合、
b
の対応する値は、最終モデルの当てはめによって得られた推定値になります。最終モデルから項が除外される場合、
b
の対応する値は、最終モデルとその項の当てはめによって得られた推定値になります。
メモ
完全な仕様の当てはめられたモデルを取得するには、b
に加えて、切片の推定値も必要です。切片の推定値は、出力引数 stats
のフィールドとして与えられます。詳細は、stepwisefit の当てはめられたモデルを参照してください。
se
— 標準誤差
数値ベクトル
標準誤差。b
内の推定値に対応する数値ベクトルとして返されます。
pval
— p 値
数値ベクトル
p 値。b
の要素が 0
かどうかの検定から得られる数値ベクトルとして返されます。
finalmodel
— 最終モデル
logical ベクトル
最終モデル。最終モデルに含まれる項を示す、X
の列数に等しい長さの logical ベクトルとして返されます。
stats
— 追加統計量
構造体
追加統計量。次のフィールドがある構造体として返されます。注意書きがなければ、すべての統計量は最終モデルに関するものです。
フィールド | 説明 |
---|---|
source | 文字ベクトル |
dfe | 誤差に対する自由度 |
df0 | 回帰に対する自由度 |
SStotal | 応答の二乗和の合計 |
SSresid | 残差の二乗和 |
fstat | 最終モデルを (平均値だけの) 空のモデルと対比する検定に関する F 統計量 |
pval | F 統計量の p 値 |
rmse | 平方根平均二乗誤差 |
xr | 最終モデルに含まれない項の残差。各項から最終モデルの予測応答を減算して計算する |
yr | 最終モデルの予測子を使用した応答に対する残差 |
B | すべての項を最終モデルに追加したと仮定した場合に得られる、最終モデルの各項に対する係数 |
SE | 係数推定値に対する標準誤差 |
TSTAT | 係数推定値に対する t 統計量 |
PVAL | 係数推定値に対する p 値 |
intercept | 切片の推定値 |
wasnan |
|
nextstep
— 次の推奨ステップ
非負の整数
次の推奨ステップ。モデルに追加または削除する次の項のインデックスに等しい非負の整数として返されます。推奨ステップがそれ以上ない場合は 0
として返されます。
history
— 実行するステップの情報
構造体
実行するステップの情報。次のフィールドをもつ構造体として返されます。
フィールド | 説明 |
---|---|
B | 各列が 1 つのステップで各行が 1 つの係数ベクトルである、回帰係数の行列 |
rmse | 各ステップのモデルに対する平方根平均二乗誤差 |
df0 | 各ステップの回帰に対する自由度 |
in | ステップごとのモデル内予測子を示す logical 配列。各行が 1 ステップ、各列が 1 つの予測子。 |
詳細
stepwisefit
の当てはめられたモデル
最終的な stepwisefit
の当てはめられたモデルは次のとおりです。
ここで、
は、予測された平均応答です。
stats.intercept
は、切片の推定値です。X
(:,finalmodel)
は、最終モデルの項に対する入力行列です。b(finalmodel)
は、最終モデルの項についての係数推定値のベクトルです。
アルゴリズム
"ステップワイズ回帰" は、各項の統計的な重要性に基づき、多重線形モデルに項を追加したり削除したりするための方法です。この方法では、初期モデルから開始し、そこから連続的にステップを実行して項の追加または削除をして、モデルを改良します。各ステップで、追加可能項がある場合とない場合のモデルを検定するために、F 統計量の p 値が計算されます。ある項が現在はモデルにない場合、帰無仮説は、項がモデルに追加された場合に係数ゼロをもつということです。帰無仮説を棄却する十分な証拠があれば、その項がモデルに追加されます。逆に、ある項がモデルに現在ある場合、帰無仮説は、その項が係数ゼロをもつことです。帰無仮説を棄却する十分な証拠がなければ、その項がモデルから削除されます。この方法は、以下のように進めます。
初期モデルを当てはめます。
モデルにない任意の項が開始許容誤差よりも小さい p 値をもつ場合、最小の p 値をもつ項を追加し、このステップを繰り返します。たとえば、初期モデルが既定の定数モデルであり、開始許容誤差が既定値
0.05
であると仮定します。アルゴリズムでは、最初に、定数と別の項で構成されるすべてのモデルを当てはめ、最小の p 値をもつ項 (たとえば、項4
) を特定します。項4
の p 値が0.05
より小さい場合、項4
がモデルに追加されます。アルゴリズムでは、次に、定数である項4
と別の項で構成されるすべてのモデルに対して検索を実行します。モデルにない項が0.05
よりも小さい p 値をもつ場合、最小の p 値をもつ項をモデルに追加し、このプロセスを繰り返します。モデルに追加可能な項がそれ以上存在しない場合、アルゴリズムはステップ 3 に進みます。モデルの任意の項が、終了許容誤差よりも大きい p 値をもつ場合、最大の p 値をもつ項を削除してステップ 2 に進みます。それ以外の場合は終了します。
アルゴリズムの各ステップにおいて、stepwisefit
は最小二乗法を使用してモデル係数を推定します。アルゴリズムは、前の段階でモデルに項を追加した後、後から追加した他の項との組み合わせに役立たなくなった場合、その項を削除する可能性があります。この方法は、1 つのステップがモデルを改良することがないと終了します。ただし、最終モデルが最適である (つまり、データに対する最適な当てはめをもつ) ことを保証するものではありません。異なる初期モデルまたは異なるステップの順序を使用すると、当てはめが向上する場合があります。この意味において、ステップワイズ モデルは、局所的には最適でも、大域的には必ずしも最適ではありません。
代替機能
fitlm
を使用してモデルを作成し、次にstep
、addTerms
、およびremoveTerms
を使用して手動でモデルを調整します。テーブルにデータがあり、連続予測子とカテゴリカル予測子が混在している場合、または高次の交互作用項を潜在的に含む可能性があるモデル式を指定する場合は、
stepwiselm
を使用します。stepwiseglm
を使用して、ステップワイズ一般化線形モデルを作成します (たとえば、二項応答変数があり、分類モデルを当てはめる場合)。
参照
[1] Draper, Norman R., and Harry Smith. Applied Regression Analysis. Hoboken, NJ: Wiley-Interscience, 1998. pp. 307–312.
バージョン履歴
R2006a より前に導入
参考
stepwise
| addedvarplot
| regress
| stepwiselm
| stepwiseglm
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)