stepwisefit

Подгонка линейной регрессионой модели с использованием ступенчатой регрессии

Описание

пример

b = stepwisefit(X,y) возвращает вектор b оценок коэффициентов от ступенчатой регрессии вектора отклика y на переменных предиктора в матрице X. stepwisefit начинается с начальной модели константы и принимает вперед или назад шаги, чтобы добавить или удалить переменные, пока не будет удовлетворен критерий остановки.

пример

b = stepwisefit(X,y,Name,Value) задает дополнительные опции, используя один или несколько аргументы пары "имя-значение". Для примера можно задать неконстантную начальную модель или максимальное количество шагов, которые stepwisefit может взять.

пример

[b,se,pval] = stepwisefit(___) возвращает оценки коэффициентов b, стандартные ошибки seи p -значения pval использование любой комбинации входных аргументов в предыдущих синтаксисах.

пример

[b,se,pval,finalmodel,stats] = stepwisefit(___) также возвращает спецификацию переменных в окончательной регрессионой модели finalmodel, и статистические stats об окончательной модели.

пример

[b,se,pval,finalmodel,stats,nextstep,history] = stepwisefit(___) также возвращает рекомендуемый следующий шаг nextstep и информационные history обо всех предпринятых шагах.

Примеры

свернуть все

Выполните базовую ступенчатую регрессию и получите оценки коэффициентов.

Загрузите 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              

Этот набор данных содержит наблюдения за выделением тепла во время затвердевания цемента для различных смесей четырех ингредиентов цемента. Переменная отклика heat. Матрица ingredients содержит четыре столбца предикторов.

Выполняйте stepwisefit начиная с только постоянного члена в модели и используя входные и выходные допуски по умолчанию 0,05 и 0,10, соответственно.

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

The 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              

Выполните ступенчатую регрессию с четырьмя непрерывными переменными и переменной отклика 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 никогда не входит в модель. Определите, сильно ли он коррелирует с другими тремя терминами, вычислив матрицу корреляции терминов.

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

Третья строка матрицы корреляции соответствует Displacement. Этот термин сильно коррелирует с другими тремя терминами, особенно Cylinders (0.95) и Horsepower (0.91).

Переопределите матрицу входа X включать Weight. Задайте начальную модель, содержащую условия Displacement и Horsepower при помощи 'InModel' аргумент пары "имя-значение".

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 оценки имеют p-значений больше 0.05 в конечной модели. Можно настроить пошаговый алгоритм, чтобы вести себя более консервативно при помощи 'PRemove' аргумент пары "имя-значение". Для примера установка 'PRemove' на 0.05 (вместо значения по умолчанию 0.1) приводит к меньшей окончательной модели с только двумя терминами, каждый с p-значение меньше 0.05.

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

Центрируйте и масштабируйте каждый столбец (вычислите z-оценки) перед подгонкой при помощи 'Scale' аргумент пары "имя-значение". Масштабирование не изменяет выбранную модель, знаки оценок коэффициентов или их p-значения. Однако масштабирование масштабирует оценки коэффициентов.

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, в то время как увеличение Weight одно стандартное отклонение приводит к ожидаемому падению 4.4 в MPG.

Загрузите 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

Выполняйте stepwisefit переменной price по другим восьми переменным сначала с постоянной начальной моделью по умолчанию, а затем с начальной моделью, включающей 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) вместо этого. Сравните средние корневые квадратичные невязки (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

Алгоритм выполняет в общей сложности семь шагов. Этот выход показывает, что engine-size (термин 1) добавляется на шаге 1, horsepower (термин 5) добавляется на шаге 2и так далее.

Входные параметры

свернуть все

Переменные предиктора, заданные как n -by p числовая матрица, где n - количество наблюдений, а p - количество переменных предиктора. Каждый столбец X представляет одну переменную, и каждая строка представляет одно наблюдение.

stepwisefit всегда включает постоянный члена в модели. Поэтому не включайте столбец 1с в X.

Типы данных: single | double

Переменная отклика, заданная как n -на-1 числовой или логический вектор, где n количество наблюдений. Каждая запись в y - ответ для соответствующей строки X.

Типы данных: single | double | logical

Примечание

stepwisefit лечит NaN значения в любом из X или y как отсутствующие и игнорирует все строки, содержащие эти значения.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'PEnter',0.10,'PRemove',0.15,'MaxIter',8 инструктирует stepwisefit использовать входные и выходные допуски 0.10 и 0.15, соответственно, и чтобы взять максимум 8 шаги.

Условия для начальной модели, заданные как разделенная разделенными запятой парами, состоящая из 'InModel' и логический вектор, задающий условия для включения в начальную модель. Значением по умолчанию является отсутствие терминов.

Пример: 'InModel',[true false false true]

Типы данных: logical

Допуск для добавления членов к модели, заданный как разделенная разделенными запятой парами, состоящая из 'PEnter' и положительный скаляр, задающий максимальное p -значение для добавляемого термина. Значение по умолчанию является 0.05.

Пример: 'PEnter',0.10

Типы данных: single | double

Допуск для удаления членов из модели, заданный как разделенная разделенными запятой парами, состоящая из 'PRemove' и положительный скаляр, задающий минимальное p значение для термина, который будет удален. По умолчанию это максимум PEnter и 0.10.

Примечание

PRemove не допускается быть меньше PEnter потому что это приведет к stepwisefit ввести бесконечный цикл, где переменная неоднократно добавляется в модель и удаляется из модели.

Пример: 'PRemove',0.15

Типы данных: single | double

Индикатор для отображения информации о шаге, заданный как разделенная разделенными запятой парами, состоящая из 'Display' и 'on' или 'off'.

  • 'on' отображает информацию о каждом шаге в Командном окне (по умолчанию).

  • 'off' опускает отображение.

Пример: 'Display','off'

Максимальное количество шагов, заданное как разделенная разделенными запятой парами, состоящая из 'MaxIter' и положительное целое или Inf (по умолчанию). Inf позволяет алгоритму запускаться, пока ни один шаг не улучшит модель.

Пример: 'MaxIter',12

Типы данных: double

Условия для сохранения в их начальном состоянии, заданные как разделенная запятыми пара, состоящая из 'Keep' и логический вектор. Значение true для термина, заданного как находящийся в (или вне) исходной модели, заставляет этот термин оставаться в (или вне) конечной модели. Значение false для термина не заставляет этот термин оставаться в (или вне) окончательной модели. Значение по умолчанию состоит в том, чтобы не задавать условия для хранения в их начальном состоянии.

Пример: 'Keep',[true true false false]

Типы данных: logical

Индикатор для членов центрирования и масштабирования, заданный как разделенная разделенными запятой парами, состоящая из 'Scale' и 'off' или 'on'.

  • 'off' не центрирует и масштабирует условия (по умолчанию).

  • 'on' центрирует и масштабирует каждый столбец X (вычисляет z -счета) перед подбором кривой .

Пример: 'Scale','on'

Выходные аргументы

свернуть все

Оценочные коэффициенты, возвращенные как числовой вектор, соответствующий терминам в X. The stepwisefit функция вычисляет значения в b следующим образом:

  • Если термин включен в окончательную модель, то его соответствующее значение в b - оценка, полученная в результате подбора кривой конечной модели.

  • Если член исключен из конечной модели, то его соответствующее значение в b - оценка, полученная в результате подбора кривой окончательной модели плюс этот термин.

Примечание

Чтобы получить полную спецификацию подобранной модели, вам также нужен предполагаемая точка пересечения в дополнение к b. Предполагаемая точка пересечения предоставляется как поле в выходном аргументе stats. Для получения дополнительной информации смотрите Stepwisefit Подобранная модель.

Стандартные ошибки, возвращенные как числовой вектор, соответствующий оценкам в b.

p -значения, возвращенный как числовой вектор, который является результатом проверки, являются ли элементы b являются 0.

Конечная модель, возвращенная как логический вектор с длиной, равной количеству столбцов в X, указывающий, какие условия находятся в окончательной модели.

Дополнительная статистика, возвращенная как структура со следующими полями. Вся статистика относится к окончательной модели, кроме тех случаев, когда она отмечена.

ОбластьОписание
source

Вектор символов 'stepwisefit'

dfe

Степени свободы для ошибки

df0

Степени свободы для регрессии

SStotal

Общая сумма квадратов отклика

SSresid

Сумма квадратов невязок

fstat

F -статистический для проверки конечной модели по сравнению с моделью без (только для среднего)

pval

p -value F -statistic

rmse

Корневая средняя квадратичная невязка

xr

Невязки для членов, не входящих в окончательную модель, вычисляются вычитанием из каждого члена предсказанной реакции конечной модели

yr

Невязки для отклика с использованием предикторов в конечной модели

B

Коэффициенты для членов в окончательной модели со значением для каждого члена, а не в модели, устанавливаются в значение, которое будет получено путем добавления этого термина к модели

SE

Стандартные ошибки для оценок коэффициентов

TSTAT

t статистику для оценок коэффициентов

PVAL

p -значения для оценок коэффициентов

intercept

Предполагаемая точка пересечения

wasnan

Строки в данных, которые содержат NaN значения

Рекомендуемый следующий шаг, возвращенный как неотрицательное целое число, равное индексу следующего термина, чтобы добавить или удалить из модели, или 0 если дальнейшие шаги не рекомендованы.

Информация о предпринятых шагах, возвращенная как структура со следующими полями.

ОбластьОписание
B

Матрица коэффициентов регрессии, где каждый столбец является одним шагом, и каждая строка является одним вектором коэффициентов

rmse

Корневые средние квадратичные невязки для модели на каждом шаге

df0

Степени свободы для регрессии на каждом шаге

in

Логический массив, указывающий, какие предикторы находятся в модели на каждом шаге, где каждая строка является одним шагом, и каждый столбец является одним предиктором

Подробнее о

свернуть все

stepwisefit Подобранная модель

Итоговая stepwisefit подобранная модель

y^=статистика.intercept+X(:, finalmodel)*b(finalmodel).

Вот,

  • y^ - предсказанная средняя характеристика.

  • stats.intercept - предполагаемая точка пересечения.

  • <reservedrangesplaceholder1> <reservedrangesplaceholder0> - матрица входа для членов в конечной модели.

  • b(finalmodel) - вектор оценок коэффициентов для членов в конечной модели.

Алгоритмы

Stepwise regression является методом для добавления членов к многолинейной модели и удаления членов из нее, основанным на их статистической значимости. Этот метод начинается с начальной модели, а затем делает последующие шаги, чтобы изменить модель, добавляя или удаляя условия. На каждом шаге p -value F-statistic вычисляется для экспериментальных моделей с потенциальным термином и без него. Если термин не находится в модели в данный момент, нулевая гипотеза заключается в том, что термин будет иметь нулевой коэффициент, если добавлен к модели. Если существует достаточно доказательств, чтобы отклонить нулевую гипотезу, термин добавляется к модели. И наоборот, если член в данный момент находится в модели, нулевая гипотеза заключается в том, что термин имеет нулевой коэффициент. Если нет достаточных доказательств, чтобы отклонить нулевую гипотезу, термин удаляется из модели. Способ протекает следующим образом:

  1. Подгонка начальной модели.

  2. Если какие-либо условия, не входящие в модель, имеют p -значения меньше, чем допуск входа, добавьте единицу с наименьшим p -значением и повторите этот шаг. Например, предположим, что начальная модель является моделью констант по умолчанию, а допуск входа является допуском по умолчанию 0.05. Алгоритм сначала подходит для всех моделей, состоящих из константы плюс другого члена, и идентифицирует термин, который имеет наименьшее p -значение, например, термин 4. Если термин 4 p -значение меньше 0.05, затем термин 4 добавляется к модели. Затем алгоритм выполняет поиск среди всех моделей, состоящих из константы, члена 4, и еще один термин. Если термин, не входящий в модель, имеет p -значение меньше 0.05, термин с наименьшим p -значение добавляется к модели, и процесс повторяется. Когда дополнительных членов, которые могут быть добавлены к модели, не существует, алгоритм переходит к шагу 3.

  3. Если какие-либо члены в модели имеют p -значений, больше, чем выходной допуск, удалите тот, с самым большим p -значение и перейдите к шагу 2; в противном случае завершите.

На каждом шаге алгоритма stepwisefit использует метод наименьших квадратов, чтобы оценить коэффициенты модели. После добавления термина к модели на более раннем этапе алгоритм может впоследствии отказаться от этого термина, если он больше не будет полезен в сочетании с другими терминами, добавленными позже. Метод заканчивается, когда ни один шаг не улучшает модель. Однако конечная модель не гарантирована оптимальной, что означает, что она наилучшим образом соответствует данным. Другая начальная модель или другая последовательность шагов могут привести к лучшей подгонке. В этом смысле ступенчатые модели являются локально оптимальными, но не обязательно глобально оптимальными.

Альтернативная функциональность

  • Можно создать модель с помощью fitlm, а затем вручную настроить модель используя step, addTerms, и removeTerms.

  • Использование stepwiselm если у вас есть данные в таблице, у вас есть смесь непрерывных и категориальных предикторов, или вы хотите задать формулы модели, которые потенциально могут включать условия более высокого порядка и взаимодействия.

  • Использование stepwiseglm чтобы создать ступенчато обобщенные линейные модели (для примера, если у вас есть двоичная переменная отклика и вы хотите подогнать под классификационную модель).

Ссылки

[1] Дрейпер, Норман Р. и Гарри Смит. Прикладной регрессионный анализ. Hoboken, NJ: Wiley-Interscience, 1998. стр 307–312.

Представлено до R2006a