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

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

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

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

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

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

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 — Добавьте или вычтите условия по одному, где 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 возразите предлагает три функции, чтобы предсказать или симулировать ответ на новые данные: predictfeval, и 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

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

| | | | | | |

Похожие темы