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

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

Чтобы начать соответствовать регрессии, поместите свои данные в форму, которую ожидают подходящие функции. Все методы регрессии начинаются с входных данных в массиве 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, подходящие функции принимают, что эти типы данных являются категориальными:

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

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

    • Массив символов

    • StringArray

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

Представляйте недостающие числовые данные как NaN. Чтобы представлять недостающие данные для других типов данных, смотрите Значения Missing Group.

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

Создать массив набора данных из электронной таблицы 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 (p + 1) матричные условия определения в модели, где t является количеством условий, p, является количеством переменных прогноза и +1 счетом на переменную отклика. Значение T(i,j) является экспонентой переменной j в термине i.

Например, предположите, что вход включает три переменные прогноза A, B, и C и переменная отклика Y в порядке A, B, C и Y. Каждая строка T представляет один термин:

  • [0 0 0 0] — Постоянный термин или прерывание

  • [0 1 0 0]B; эквивалентно, A^0 * B^1 * C^0

  • [1 0 1 0]A*C

  • [2 0 0 0]A^2

  • [0 1 2 0]B*(C^2)

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

Формула

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

'Y ~ terms',

  • Y является именем ответа.

  • terms содержит

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

    • +, чтобы включать следующую переменную

    • -, чтобы исключить следующую переменную

    • :, чтобы задать взаимодействие, продукт условий

    • *, чтобы задать взаимодействие и все условия более низкоуровневые

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

    • (), чтобы сгруппировать условия

Совет

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

Примеры:

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

Например, чтобы задать модель взаимодействия использование 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, таком как набор '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 на линейной модели с пятью предикторами:

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)

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

Ищите точки с расстоянием крупного Кука.

plotDiagnostics(mdl,'cookd')

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

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

Невязки — образцовое качество для данных тренировки

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

Исследуйте невязки:

plotResiduals(mdl)

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

plotResiduals(mdl,'probability')

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

Можно идентифицировать эти два выбросов и удалить их из данных:

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)

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

plotResiduals(mdl3,'lagged')

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

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

plotResiduals(mdl3,'fitted')

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

Графики понять эффекты предиктора

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

Исследуйте график среза ответов. Это отображает эффект каждого предиктора отдельно.

plotSlice(mdl)

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

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

plotEffects(mdl)

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

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

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

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

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

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

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

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

Графики понять эффекты условий

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

Создайте добавленный переменный график с Weight^2 как добавленная переменная.

plotAdded(mdl,'Weight^2')

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

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

plotAdded(mdl)

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

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

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

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

  • addTerms и removeTerms — Добавьте или удалите заданные условия. Дайте условия в любой из форм, описанных в, Выбирают 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.

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

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

предсказать

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

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

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

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

Xnew = [nanmin(X);nanmean(X);nanmax(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,nanmean(Acceleration),nanmean(Displacement),nanmean(Horsepower),nanmean(Weight))
NewMPG = 23.4078

случайный

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

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

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

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

Xnew = [nanmin(X);nanmean(X);nanmax(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 array
  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

Смотрите также

| | | | | | |

Похожие темы