exponenta event banner

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

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-за-p числовая матрица, где n - количество наблюдений, а p - число переменных предиктора. Каждый столбец X представляет одну переменную, а каждая строка представляет одно наблюдение.

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

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

Переменная ответа, заданная как n-by-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. stepwisefit функция вычисляет значения в b следующим образом:

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

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

Примечание

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

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

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

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

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

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

Символьный вектор 'stepwisefit'

dfe

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

df0

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

SStotal

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

SSresid

Сумма квадратов остатков

fstat

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

pval

p-значение F-статистики

rmse

Среднеквадратическая ошибка корня

xr

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

yr

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

B

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

SE

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

TSTAT

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

PVAL

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

intercept

Предполагаемый перехват

wasnan

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

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

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

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

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

rmse

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

df0

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

in

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

Подробнее

свернуть все

stepwisefit Подогнанная модель

Финал stepwisefit подогнанная модель

y ^ = stats.intercept + X (:, finalmodel) * b (finalmodel).

Здесь,

  • y ^ - прогнозируемый средний отклик.

  • stats.intercept - предполагаемый перехват.

  • X(:,finalmodel) - входная матрица для членов в конечной модели.

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

Алгоритмы

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

  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] Дрейпер, Норман Р. и Гарри Смит. Примененный регрессионный анализ. Хобокен, Нью-Джерси: Wiley-Interscience, 1998. стр 307–312.

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