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

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

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

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

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

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

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

  • Для числового 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'Модель содержит точку пересечения, линейные условия, взаимодействия и квадратные условия.
'poly <reservedrangesplaceholder0>'Модель является полиномом со всеми терминами до степени 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)

The 0 в конце каждого термина представляет переменную отклика. В целом векторе-столбце из нулей в матрице терминов представляет положение переменной отклика. Если у вас есть переменные предиктора и отклика в матрице и векторе-столбце, то вы должны включать 0 для переменной отклика в последнем столбце каждой строки.

Формула

Формула для спецификации модели является вектором символов или строковым скаляром вида

'y ~ <reservedrangesplaceholder0>',

  • 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.

  • The 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.

Есть одна точка с большим расстоянием Кука. Идентифицируйте его и удалите из модели. Можно использовать Data Cursor, чтобы кликнуть выбросы и идентифицировать его, или программно идентифицировать его:

[~,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 в полной модели. The 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 - Добавить или удалить указанные условия. Приведите термины в любой из форм, описанных в Choose a Model или Range of Models.

Если вы создали модель с помощью 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 функция. The 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 функция для симуляции откликов. The 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

См. также

| | | | | | |

Похожие темы