exponenta event banner

Линейная регрессия

Подготовка данных

Чтобы начать подгонку регрессии, поместите данные в форму, ожидаемую для подгонки функций. Все методы регрессии начинаются с входных данных в массиве X и данные ответа в отдельном векторе yили входные данные в таблице или массиве наборов данных tbl и данные ответа в виде столбца в tbl. Каждая строка входных данных представляет одно наблюдение. Каждый столбец представляет один предиктор (переменную).

Для таблицы или массива наборов данных tbl, укажите переменную ответа с помощью 'ResponseVar' пара имя-значение:

mdl = fitlm(tbl,'ResponseVar','BloodPressure');

Переменная ответа является последним столбцом по умолчанию.

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

  • Для числового массива X, укажите категориальные предикторы, используя 'Categorical' пара имя-значение. Например, чтобы указать, что предикторы 2 и 3 из шести категоричны:

    mdl = fitlm(X,y,'Categorical',[2,3]);
    % or equivalently
    mdl = fitlm(X,y,'Categorical',logical([0 1 1 0 0 0]));
  • Для таблицы или массива наборов данных tbl, аппроксимирующие функции предполагают, что эти типы данных категоричны:

    • Логический вектор

    • Категориальный вектор

    • Символьный массив

    • Строковый массив

    Если вы хотите указать, что числовой предиктор категоричен, используйте 'Categorical' пара имя-значение.

Представить отсутствующие числовые данные как NaN. Сведения о представлении отсутствующих данных для других типов данных см. в разделе Отсутствующие значения групп.

Массив наборов данных для входных и ответных данных

Чтобы создать массив наборов данных из электронной таблицы Excel ®:

ds = dataset('XLSFile','hospital.xls', ...
    'ReadObsNames',true);

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

load carsmall
ds = dataset(MPG,Weight);
ds.Year = categorical(Model_Year);

Таблица входных и ответных данных

Чтобы создать таблицу из электронной таблицы Excel, выполните следующие действия.

tbl = readtable('hospital.xls', ...
    'ReadRowNames',true);

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

load carsmall
tbl = table(MPG,Weight);
tbl.Year = categorical(Model_Year);

Числовая матрица для входных данных, числовой вектор для ответа

Например, чтобы создать числовые массивы из переменных рабочей области:

load carsmall
X = [Weight Horsepower Cylinders Model_Year];
y = MPG;

Чтобы создать числовые массивы из электронной таблицы Excel, выполните следующие действия.

[X, Xnames] = xlsread('hospital.xls');
y = X(:,4); % response y is systolic pressure
X(:,4) = []; % remove y from the X matrix

Обратите внимание, что нечисловые записи, такие как sex, не появляться в X.

Выбор метода фитинга

Существует три способа подгонки модели к данным:

Вписать наименьшие квадраты

Использовать fitlm для построения подгонки модели к данным методом наименьших квадратов. Этот метод лучше всего использовать, если вы достаточно уверены в форме модели и в основном должны найти ее параметры. Этот метод также полезен, если требуется исследовать несколько моделей. Метод требует, чтобы данные проверялись вручную, чтобы отбросить отклонения, хотя существуют методы, помогающие (см. раздел «Проверка качества и настройка подогнанной модели»).

Надежная посадка

Использовать fitlm с RobustOpts пара «имя-значение» для создания модели, на которую мало влияют отклонения. Надежный фитинг избавляет вас от проблем, связанных с отменой отклонений вручную. Однако step не работает с надежным фитингом. Это означает, что при использовании надежного фитинга невозможно выполнить пошаговый поиск хорошей модели.

Ступенчатая посадка

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

Результат зависит от начальной модели. Обычно, начиная с постоянной модели приводит к небольшой модели. Начало с большего числа членов может привести к более сложной модели, но с более низкой среднеквадратичной ошибкой. См. раздел Сравнение больших и малых ступенчатых моделей.

Нельзя использовать надежные опции наряду со ступенчатой подгонкой. После пошаговой посадки проверьте модель на отклонения (см. раздел «Проверка качества и настройка подогнанной модели»).

Выбор модели или диапазона моделей

Существует несколько способов задания модели для линейной регрессии. Используйте то, что вы найдете наиболее удобным.

Для fitlm, спецификация модели, которую вы даете, является моделью, которая подходит. Если спецификация модели не задана, по умолчанию используется значение 'linear'.

Для stepwiselm, приведенная спецификация модели является начальной моделью, которую пошаговая процедура пытается улучшить. Если спецификация модели не задана, начальная модель по умолчанию будет 'constant', а верхняя ограничивающая модель по умолчанию - 'interactions'. Изменение верхней ограничивающей модели с помощью Upper пара имя-значение.

Примечание

Существуют и другие способы выбора моделей, например, использование lasso, lassoglm, sequentialfs, или plsregress.

Краткое название

ИмяТип модели
'constant'Модель содержит только константу (пересечение).
'linear'Модель содержит пересечение и линейные члены для каждого предиктора.
'interactions'Модель содержит пересечение, линейные члены и все произведения пар различных предикторов (без квадратов).
'purequadratic'Модель содержит пересечение, линейные и квадратные элементы.
'quadratic'Модель содержит пересечение, линейные элементы, взаимодействия и квадратные элементы.
'polyijk'Модель - многочлен со всеми членами до степени i в первом предикторе, степень j во втором предикторе и т.д. Использовать цифры 0 через 9. Например, 'poly2111' имеет константу плюс все линейные и произведения члены, а также содержит члены с предиктором 1 в квадрате.

Например, чтобы указать модель взаимодействия с помощью fitlm с матричными предикторами:

mdl = fitlm(X,y,'interactions');

Задание модели с помощью stepwiselm и массив таблиц или наборов данных tbl предикторов, предположим, что вы хотите начать с константы и иметь верхнюю границу линейной модели. Предположим, что переменная ответа в tbl находится в третьем столбце.

mdl2 = stepwiselm(tbl,'constant', ...
    'Upper','linear','ResponseVar',3);

Матрица терминов

Матрица терминов T представляет собой матрицу t-by- ( p + 1), задающую члены в модели, где t - число членов, p - число переменных предиктора, и + 1 учитывает переменную отклика. Значение T(i,j) - экспонента переменной j в термине i.

Например, предположим, что входные данные включают три прогнозирующие переменные. x1, x2, и x3 и переменная ответа y в порядке x1, x2, x3, и y. Каждая строка T представляет собой один термин:

  • [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',

  • y - имя ответа.

  • terms содержит

    • Имена переменных

    • + для включения следующей переменной

    • - для исключения следующей переменной

    • : для определения взаимодействия, произведения терминов

    • * для определения взаимодействия и всех терминов нижнего порядка

    • ^ поднять предиктор в степень, точно как в * повторяется, так ^ включает также термины нижнего порядка

    • () для группирования терминов

Совет

Формулы по умолчанию включают константу (пересечение). Чтобы исключить постоянный член из модели, включите -1 в формуле.

Примеры:

'y ~ x1 + x2 + x3' представляет собой трехвариантную линейную модель с пересечением.
'y ~ x1 + x2 + x3 - 1' представляет собой линейную модель с тремя переменными без пересечения.
'y ~ x1 + x2 + x3 + x2^2' является трехвариантной моделью с перехватом и x2^2 срок.
'y ~ x1 + x2^2 + x3' совпадает с предыдущим примером, поскольку x2^2 включает x2 срок.
'y ~ x1 + x2 + x3 + x1:x2' включает x1*x2 срок.
'y ~ x1*x2 + x3' совпадает с предыдущим примером, поскольку x1*x2 = x1 + x2 + x1:x2.
'y ~ x1*x2*x3 - x1:x2:x3' имеет все взаимодействия между x1, x2, и x3, за исключением трехстороннего взаимодействия.
'y ~ x1*(x2 + x3 + x4)' имеет все линейные члены, плюс произведения x1 с каждой из других переменных.

Например, чтобы указать модель взаимодействия с помощью fitlm с матричными предикторами:

mdl = fitlm(X,y,'y ~ x1*x2*x3 - x1:x2:x3');

Задание модели с помощью stepwiselm и массив таблиц или наборов данных tbl предикторов, предположим, что вы хотите начать с константы и иметь верхнюю границу линейной модели. Предположим, что переменная ответа в tbl назван 'y'и переменные предиктора называются 'x1', 'x2', и 'x3'.

mdl2 = stepwiselm(tbl,'y ~ 1','Upper','y ~ x1 + x2 + x3');

Подгонка модели к данным

Наиболее распространенные необязательные аргументы для подгонки:

  • Для надежной регрессии в fitlm, установите 'RobustOpts' пара имя-значение к 'on'.

  • Укажите соответствующую модель верхней границы в stepwiselm, например, set 'Upper' кому 'linear'.

  • Укажите, какие переменные категоричны с помощью 'CategoricalVars' пара имя-значение. Предоставление вектора с номерами столбцов, такими как [1 6] указать, что предикторы 1 и 6 категоричны. Либо задайте логический вектор той же длины, что и столбцы данных, с 1 запись, указывающая, что переменная категорична. Если есть семь предикторов, и предикторы 1 и 6 категоричны, указать logical([1,0,0,0,0,1,0]).

  • Для таблицы или массива наборов данных укажите переменную ответа, используя 'ResponseVar' пара имя-значение. По умолчанию используется последний столбец массива.

Например,

mdl = fitlm(X,y,'linear', ...
    'RobustOpts','on','CategoricalVars',3);
mdl2 = stepwiselm(tbl,'constant', ...
    'ResponseVar','MPG','Upper','quadratic');

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

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

Отображение модели

Модель линейной регрессии показывает несколько диагностических данных при вводе ее имени или ввода disp(mdl). Этот экран предоставляет некоторые основные сведения для проверки того, адекватно ли подобранная модель представляет данные.

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

X = randn(100,5);
y = X*[1;0;3;0;-1] + randn(100,1);
mdl = fitlm(X,y)
mdl = 
Linear regression model:
    y ~ 1 + x1 + x2 + x3 + x4 + x5

Estimated Coefficients:
                   Estimate        SE        tStat        pValue  
                   _________    ________    ________    __________

    (Intercept)     0.038164    0.099458     0.38372       0.70205
    x1               0.92794    0.087307      10.628    8.5494e-18
    x2             -0.075593     0.10044    -0.75264       0.45355
    x3                2.8965    0.099879          29    1.1117e-48
    x4              0.045311     0.10832     0.41831       0.67667
    x5              -0.99708     0.11799     -8.4504     3.593e-13


Number of observations: 100, Error degrees of freedom: 94
Root Mean Squared Error: 0.972
R-squared: 0.93,  Adjusted R-Squared: 0.926
F-statistic vs. constant model: 248, p-value = 1.5e-52

Обратите внимание, что:

  • Дисплей содержит оценочные значения каждого коэффициента в Estimate столбец. Эти значения разумно близки к истинным значениям [0;1;0;3;0;-1].

  • Для оценок коэффициентов имеется стандартный столбец ошибок.

  • Сообщаемый pValue (которые получены из t статистики (tStat) при допущении нормальных ошибок) для предикторов 1, 3 и 5 чрезвычайно малы. Это три предиктора, которые использовались для создания данных ответа y.

  • pValue для (Intercept), x2 и x4 намного больше 0,01. Эти три предиктора не использовались для создания данных ответа y.

  • Дисплей содержит R2, скорректированные R2 и статистику F.

АНОВА

Для проверки качества подогнанной модели обратитесь к таблице ANOVA. Например, использовать anova на линейной модели с пятью предикторами:

tbl = anova(mdl)
tbl=6×5 table
              SumSq     DF    MeanSq        F         pValue  
             _______    __    _______    _______    __________

    x1        106.62     1     106.62     112.96    8.5494e-18
    x2       0.53464     1    0.53464    0.56646       0.45355
    x3        793.74     1     793.74     840.98    1.1117e-48
    x4       0.16515     1    0.16515    0.17498       0.67667
    x5        67.398     1     67.398      71.41     3.593e-13
    Error     88.719    94    0.94382                         

Эта таблица дает несколько иные результаты, чем отображение модели. Таблица ясно показывает, что последствия x2 и x4 не являются значимыми. В зависимости от ваших целей, рассмотрите возможность удаления x2 и x4 из модели.

Графики диагностики

Диагностические графики помогают определить отклонения и увидеть другие проблемы в модели или подгонке. Например, загрузите carsmall данные и создать модель MPG как функция Cylinders (категориальный) и Weight:

load carsmall
tbl = table(Weight,MPG,Cylinders);
tbl.Cylinders = categorical(tbl.Cylinders);
mdl = fitlm(tbl,'MPG ~ Cylinders*Weight + Weight^2');

Создайте график использования данных и модели.

plotDiagnostics(mdl)

Figure contains an axes. The axes with title Case order plot of leverage contains 2 objects of type line. These objects represent Leverage, Reference Line.

Есть несколько моментов с высоким рычагом влияния. Но этот сюжет не показывает, являются ли высокоэффективные точки отклонениями.

Ищите точки с большим расстоянием Кука.

plotDiagnostics(mdl,'cookd')

Figure contains an axes. The axes with title Case order plot of Cook's distance contains 2 objects of type line. These objects represent Cook's distance, Reference Line.

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

[~,larg] = max(mdl.Diagnostics.CooksDistance);
mdl2 = fitlm(tbl,'MPG ~ Cylinders*Weight + Weight^2','Exclude',larg);

Остатки - качество модели для данных обучения

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

Проверьте остатки:

plotResiduals(mdl)

Figure contains an axes. The axes with title Histogram of residuals contains an object of type patch.

Наблюдения выше 12 являются потенциальными отклонениями.

plotResiduals(mdl,'probability')

Figure contains an axes. The axes with title Normal probability plot of residuals contains 2 objects of type line.

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

Можно определить два отклонения и удалить их из данных:

outl = find(mdl.Residuals.Raw > 12)
outl = 2×1

    90
    97

Для удаления отклонений используйте Exclude пара имя-значение:

mdl3 = fitlm(tbl,'MPG ~ Cylinders*Weight + Weight^2','Exclude',outl);

Изучите график остатков mdl2:

plotResiduals(mdl3)

Figure contains an axes. The axes with title Histogram of residuals contains an object of type patch.

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

plotResiduals(mdl3,'lagged')

Figure contains an axes. The axes with title Plot of residuals vs. lagged residuals contains 3 objects of type line.

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

Другая потенциальная проблема - когда остатки велики для больших наблюдений. Проверьте, имеет ли эта проблема текущая модель.

plotResiduals(mdl3,'fitted')

Figure contains an axes. The axes with title Plot of residuals vs. fitted values contains 2 objects of type line.

Существует некоторая тенденция к тому, чтобы более крупные подогнанные значения имели более крупные остатки. Возможно, ошибки модели пропорциональны измеренным значениям.

Графики для понимания эффектов предиктора

В этом примере показано, как понять влияние каждого предсказателя на регрессионную модель с использованием множества доступных графиков.

Изучите график среза ответов. При этом эффект каждого предиктора отображается отдельно.

plotSlice(mdl)

Figure Prediction Slice Plots contains 2 axes and other objects of type uimenu, uicontrol. Axes 1 contains 5 objects of type line. Axes 2 contains 5 objects of type line.

Можно перетащить отдельные предикторные значения, которые представлены пунктирными синими вертикальными линиями. Можно также выбрать между одновременными и несимметричными доверительными границами, которые представлены пунктирными красными кривыми.

Используйте график эффектов, чтобы показать другое представление влияния предикторов на ответ.

plotEffects(mdl)

Figure contains an axes. The axes contains 4 objects of type line.

Этот график показывает, что изменение Weight примерно с 2500 до 4732 ниже MPG примерно на 30 (расположение верхнего синего круга). Это также показывает, что изменение числа баллонов с 8 до 4 повышает MPG примерно на 10 (нижний синий круг). Горизонтальные синие линии представляют доверительные интервалы для этих прогнозов. Прогнозы происходят от усреднения по одному предиктору по мере изменения другого. В таких случаях, когда два предиктора коррелированы, будьте осторожны при интерпретации результатов.

Вместо просмотра эффекта усреднения по предиктору по мере изменения другого, исследуйте совместное взаимодействие в графике взаимодействия.

plotInteraction(mdl,'Weight','Cylinders')

Figure contains an axes. The axes with title Interaction of Weight and Cylinders contains 12 objects of type line.

График взаимодействия показывает эффект изменения одного предиктора с другим фиксированным. В данном случае сюжет гораздо более информативен. Это показывает, например, что снижение количества цилиндров в относительно легком автомобиле (Weight = 1795) приводит к увеличению пробега, но снижению количества баллонов в относительно тяжелом автомобиле (Weight = 4732) приводит к уменьшению пробега.

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

plotInteraction(mdl,'Cylinders','Weight','predictions')

Figure contains an axes. The axes with title Interaction of Cylinders and Weight contains 4 objects of type line. These objects represent Cylinders, 4, 6, 8.

Теперь посмотрите на взаимодействия с различными фиксированными уровнями веса.

plotInteraction(mdl,'Weight','Cylinders','predictions')

Figure contains an axes. The axes with title Interaction of Weight and Cylinders contains 4 objects of type line. These objects represent Weight, 1795, 3263.5, 4732.

Графики для понимания влияния терминов

В этом примере показано, как понять эффект каждого члена в регрессионной модели с использованием множества доступных графиков.

Создание добавленной переменной печати с помощью Weight^2 в качестве добавленной переменной.

plotAdded(mdl,'Weight^2')

Figure contains an axes. The axes with title Added variable plot for Weight^2 contains 3 objects of type line. These objects represent Adjusted data, Fit: y=-5.62168e-06*x, 95% conf. bounds.

На этом графике показаны результаты подгонки обоих Weight^2 и MPG к условиям, отличным от Weight^2. Причина использования plotAdded это понять, какое дополнительное улучшение в модели вы получаете, добавляя Weight^2. Коэффициент подгонки линии к этим точкам - это коэффициент Weight^2 в полной модели. Weight^2 предиктор находится чуть выше края значимости (pValue < 0,05), как видно из таблицы коэффициентов. Вы также можете видеть это на графике. Доверительные границы выглядят так, будто они не могут содержать горизонтальную линию (константа y), поэтому модель с нулевым наклоном не согласуется с данными.

Создайте график добавленной переменной для модели в целом.

plotAdded(mdl)

Figure contains an axes. The axes with title Added variable plot for whole model contains 3 objects of type line. These objects represent Adjusted data, Fit: y=85.8376*x, 95% conf. bounds.

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

Изменить модели

Существует два способа изменения модели:

  • step - Добавлять или вычитать термины по одному, где step выбирает наиболее важный термин для добавления или удаления.

  • addTerms и removeTerms - Добавление или удаление указанных терминов. Введите термины в любой из форм, описанных в разделе Выбор модели или диапазона моделей.

При создании модели с использованием stepwiselm, то step может иметь эффект, только если вы даете различные верхние или нижние модели. step не работает при подгонке модели с помощью RobustOpts.

Например, начните с линейной модели пробега из carbig данные:

load carbig
tbl = table(Acceleration,Displacement,Horsepower,Weight,MPG);
mdl = fitlm(tbl,'linear','ResponseVar','MPG')
mdl = 
Linear regression model:
    MPG ~ 1 + Acceleration + Displacement + Horsepower + Weight

Estimated Coefficients:
                     Estimate         SE         tStat        pValue  
                    __________    __________    ________    __________

    (Intercept)         45.251         2.456      18.424    7.0721e-55
    Acceleration     -0.023148        0.1256     -0.1843       0.85388
    Displacement    -0.0060009     0.0067093    -0.89441       0.37166
    Horsepower       -0.043608      0.016573     -2.6312      0.008849
    Weight          -0.0052805    0.00081085     -6.5123    2.3025e-10


Number of observations: 392, Error degrees of freedom: 387
Root Mean Squared Error: 4.25
R-squared: 0.707,  Adjusted R-Squared: 0.704
F-statistic vs. constant model: 233, p-value = 9.63e-102

Попробуйте улучшить модель, используя шаг до 10 шагов:

mdl1 = step(mdl,'NSteps',10)
1. Adding Displacement:Horsepower, FStat = 87.4802, pValue = 7.05273e-19
mdl1 = 
Linear regression model:
    MPG ~ 1 + Acceleration + Weight + Displacement*Horsepower

Estimated Coefficients:
                                Estimate         SE         tStat       pValue  
                               __________    __________    _______    __________

    (Intercept)                    61.285        2.8052     21.847    1.8593e-69
    Acceleration                 -0.34401       0.11862       -2.9     0.0039445
    Displacement                -0.081198      0.010071    -8.0623    9.5014e-15
    Horsepower                   -0.24313      0.026068    -9.3265    8.6556e-19
    Weight                     -0.0014367    0.00084041    -1.7095      0.088166
    Displacement:Horsepower    0.00054236    5.7987e-05     9.3531    7.0527e-19


Number of observations: 392, Error degrees of freedom: 386
Root Mean Squared Error: 3.84
R-squared: 0.761,  Adjusted R-Squared: 0.758
F-statistic vs. constant model: 246, p-value = 1.32e-117

step остановился после всего лишь одного изменения.

Чтобы попытаться упростить модель, удалите Acceleration и Weight термины от mdl1:

mdl2 = removeTerms(mdl1,'Acceleration + Weight')
mdl2 = 
Linear regression model:
    MPG ~ 1 + Displacement*Horsepower

Estimated Coefficients:
                                Estimate        SE         tStat       pValue   
                               __________    _________    _______    ___________

    (Intercept)                    53.051        1.526     34.765    3.0201e-121
    Displacement                -0.098046    0.0066817    -14.674     4.3203e-39
    Horsepower                   -0.23434     0.019593     -11.96     2.8024e-28
    Displacement:Horsepower    0.00058278    5.193e-05     11.222     1.6816e-25


Number of observations: 392, Error degrees of freedom: 388
Root Mean Squared Error: 3.94
R-squared: 0.747,  Adjusted R-Squared: 0.745
F-statistic vs. constant model: 381, p-value = 3e-115

mdl2 использует только Displacement и Horsepower, и имеет почти такое же хорошее соответствие с данными, как mdl1 в Adjusted R-Squared метрика.

Прогнозирование или моделирование ответов на новые данные

A LinearModel объект предлагает три функции для прогнозирования или моделирования реакции на новые данные: predict, feval, и random.

predict

Используйте predict функция для прогнозирования и получения доверительных интервалов на прогнозах.

Загрузить carbig данные и создание линейной модели ответа по умолчанию MPG в Acceleration, Displacement, Horsepower, и Weight предикторы.

load carbig
X = [Acceleration,Displacement,Horsepower,Weight];
mdl = fitlm(X,MPG);

Создайте трехстрочный массив предикторов из минимальных, средних и максимальных значений. X содержит некоторые NaN значения, поэтому укажите 'omitnan' для опции mean функция. min и max функции пропущены NaN значения в вычислении по умолчанию.

Xnew = [min(X);mean(X,'omitnan');max(X)];

Найдите прогнозируемые реакции модели и доверительные интервалы на прогнозах.

[NewMPG, NewMPGCI] = predict(mdl,Xnew)
NewMPG = 3×1

   34.1345
   23.4078
    4.7751

NewMPGCI = 3×2

   31.6115   36.6575
   22.9859   23.8298
    0.6134    8.9367

Доверие, связанное со средним откликом, уже, чем для минимального или максимального откликов.

feval

Используйте feval функция для прогнозирования ответов. При создании модели из таблицы или массива наборов данных feval часто удобнее, чем predict для прогнозирования ответов. Когда у вас есть новые данные предиктора, вы можете передать их feval без создания таблицы или матрицы. Однако feval не обеспечивает доверительных границ.

Загрузить carbig набор данных и создание линейной модели ответа по умолчанию MPG к предикторам Acceleration, Displacement, Horsepower, и Weight.

load carbig
tbl = table(Acceleration,Displacement,Horsepower,Weight,MPG);
mdl = fitlm(tbl,'linear','ResponseVar','MPG');

Предсказать реакцию модели для средних значений предикторов.

NewMPG = feval(mdl,mean(Acceleration,'omitnan'),mean(Displacement,'omitnan'),mean(Horsepower,'omitnan'),mean(Weight,'omitnan'))
NewMPG = 23.4078

random

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

Загрузить carbig данные и создание линейной модели ответа по умолчанию MPG в Acceleration, Displacement, Horsepower, и Weight предикторы.

load carbig
X = [Acceleration,Displacement,Horsepower,Weight];
mdl = fitlm(X,MPG);

Создайте трехстрочный массив предикторов из минимальных, средних и максимальных значений.

Xnew = [min(X);mean(X,'omitnan');max(X)];

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

rng('default') % for reproducibility
NewMPG = random(mdl,Xnew)
NewMPG = 3×1

   36.4178
   31.1958
   -4.8176

Потому что отрицательное значение MPG не кажется разумным, попробуйте предсказать еще два раза.

NewMPG = random(mdl,Xnew)
NewMPG = 3×1

   37.7959
   24.7615
   -0.7783

NewMPG = random(mdl,Xnew)
NewMPG = 3×1

   32.2931
   24.8628
   19.9715

Ясно, что прогнозы для третьей (максимальной) строки Xnew не являются надежными.

Совместное использование встроенных моделей

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

load carbig
tbl = table(Acceleration,Displacement,Horsepower,Weight,MPG);
mdl = fitlm(tbl,'linear','ResponseVar','MPG');

Чтобы поделиться моделью с другими пользователями, можно:

  • Предоставьте отображение модели.

mdl
mdl = 
Linear regression model:
    MPG ~ 1 + Acceleration + Displacement + Horsepower + Weight

Estimated Coefficients:
                     Estimate         SE         tStat        pValue  
                    __________    __________    ________    __________

    (Intercept)         45.251         2.456      18.424    7.0721e-55
    Acceleration     -0.023148        0.1256     -0.1843       0.85388
    Displacement    -0.0060009     0.0067093    -0.89441       0.37166
    Horsepower       -0.043608      0.016573     -2.6312      0.008849
    Weight          -0.0052805    0.00081085     -6.5123    2.3025e-10


Number of observations: 392, Error degrees of freedom: 387
Root Mean Squared Error: 4.25
R-squared: 0.707,  Adjusted R-Squared: 0.704
F-statistic vs. constant model: 233, p-value = 9.63e-102
  • Укажите определение модели и коэффициенты.

mdl.Formula
ans = 
MPG ~ 1 + Acceleration + Displacement + Horsepower + Weight
mdl.CoefficientNames
ans = 1x5 cell
  Columns 1 through 4

    {'(Intercept)'}    {'Acceleration'}    {'Displacement'}    {'Horsepower'}

  Column 5

    {'Weight'}

mdl.Coefficients.Estimate
ans = 5×1

   45.2511
   -0.0231
   -0.0060
   -0.0436
   -0.0053

См. также

| | | | | | |

Связанные темы