Обобщенные линейные модели

Что такое обобщенные линейные модели?

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

Напомним, линейные модели имеют такие характеристики:

  • В каждом множестве значений для предикторов ответ имеет нормальное распределение со средним μ.

  • Вектор b коэффициентов задает линейную комбинацию X b из X предикторов.

  • Модель является μ = X b.

В обобщенных линейных моделях эти характеристики обобщаются следующим образом:

  • В каждом множестве значений для предикторов ответ имеет распределение, которое может быть нормальным, биномиальным, Пуассоном, гамма или обратным Гауссовым, с параметрами, включающими среднюю μ.

  • Вектор b коэффициентов задает линейную комбинацию X b из X предикторов.

  • <reservedrangesplaceholder5> <reservedrangesplaceholder4> определяет модель как f (<reservedrangesplaceholder2>) = <reservedrangesplaceholder1> <reservedrangesplaceholder0>.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Для 'binomial' модель с матрицей данных X, ответ y могут быть:

    • Двухкомпонентный вектор-столбец - каждая запись представляет успех (1) или отказ (0).

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

  • Для 'binomial' модель с таблицей или набором данных tbl:

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

    • Используйте BinomialSize Пара "имя-значение", чтобы задать столбец tbl это дает количество испытаний в каждом наблюдении.

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

Например, чтобы создать массив набора данных из Excel® электронная таблица:

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

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

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

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

Чтобы создать таблицу из переменных рабочей области:

load carsmall
tbl = table(MPG,Weight);
tbl.Year = ordinal(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.

Выберите обобщенную линейную модель и функцию ссылки

Часто ваши данные предполагают тип распределения обобщенной линейной модели.

Тип данных откликаПредлагаемый тип распределения модели
Любое действительное число'normal'
Любое положительное число'gamma' или 'inverse gaussian'
Любое неотрицательное целое число'poisson'
Целое число от 0 до n, где n является фиксированным положительным значением'binomial'

Установите тип распределения модели с помощью Distribution Пара "имя-значение". После выбора типа модели выберите функцию ссылки, чтобы сопоставить среднее µ и Xb линейного предиктора.

ЗначениеОписание
'comploglog'

журнал (-журнал ((1 - µ))) = Xb

'identity', по умолчанию для распределительного 'normal'

µ = Xb

'log', по умолчанию для распределительного 'poisson'

журнал (µ) = Xb

'logit', по умолчанию для распределительного 'binomial'

журнал (µ/( 1 - µ)) = Xb

'loglog'

журнал (-журнал (µ)) = Xb

'probit'

Φ–1(µ) = Xb, где И является нормальной (Гауссовой) совокупной функцией распределения

'reciprocal', по умолчанию для распределительного 'gamma'

µ–1 = Xb

p (a number), по умолчанию для 'inverse gaussian' распределенияp = -2)

µp = Xb

Массив ячеек вида   {FL FD FI}, содержащий три указателя на функцию, созданные с помощью @, которые определяют ссылку (FL), производная ссылка (FD), и обратной ссылки связи (FI). Или структура функции обрабатывает поле Link содержащие FL, поле Derivative содержащие FD, и поле Inverse содержащие FI.

Пользовательская функция ссылки (см. «Пользовательская функция ссылки»)

Функции ссылки nondefault в основном полезны для биномиальных моделей. Эти функции ссылки nondefault 'comploglog', 'loglog', и 'probit'.

Функция пользовательской ссылки

Функция ссылки определяет отношения f (<reservedrangesplaceholder6>) = Xb между средним ответом µ и линейной комбинацией Xb = X * b предсказателей. Можно выбрать одну из встроенных функций ссылки или определить свою собственную, задав функцию ссылки FL, его производная FD, и его обратное FI:

  • Функция ссылки FL вычисляет f (µ).

  • Производная функции ссылки FD вычисляет df (µ )/ dµ.

  • Обратная функция FI вычисляет g (Xb) = µ.

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

  • Массив ячеек вида   {FL FD FI}, содержащий три указателя на функцию, созданные с помощью @, которые определяют ссылку (FL), производная ссылка (FD), и обратной ссылки связи (FI).

  • Структурные s с тремя полями, каждый из которых содержит указатель на функцию, созданный с помощью @:

    • s.Link - Функция Link

    • s.Derivative - Производная функции ссылки

    • s.Inverse - Обратная функция ссылки

Для примера подбирать модель используя 'probit' функция ссылки:

x = [2100 2300 2500 2700 2900 ...
     3100 3300 3500 3700 3900 4100 4300]';
n = [48 42 31 34 31 21 23 23 21 16 17 21]';
y = [1 2 0 3 8 8 14 17 19 15 17 21]';
g = fitglm(x,[y n],...
    'linear','distr','binomial','link','probit')
g = 

Generalized Linear regression model:
    probit(y) ~ 1 + x1
    Distribution = Binomial

Estimated Coefficients:
                   Estimate     SE            tStat     pValue    
    (Intercept)      -7.3628       0.66815    -11.02    3.0701e-28
    x1             0.0023039    0.00021352     10.79    3.8274e-27

12 observations, 10 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 241, p-value = 2.25e-54

Вы можете выполнить ту же подгонку с помощью пользовательской функции link, которая выполняет аналогично 'probit' функция ссылки:

s = {@norminv,@(x)1./normpdf(norminv(x)),@normcdf};
g = fitglm(x,[y n],...
    'linear','distr','binomial','link',s)
g = 

Generalized Linear regression model:
    link(y) ~ 1 + x1
    Distribution = Binomial

Estimated Coefficients:
                   Estimate     SE            tStat     pValue    
    (Intercept)      -7.3628       0.66815    -11.02    3.0701e-28
    x1             0.0023039    0.00021352     10.79    3.8274e-27

12 observations, 10 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 241, p-value = 2.25e-54

Две модели одинаковы.

Эквивалентно можно писать s как структура вместо cell-массива указателей на функцию:

s.Link = @norminv;
s.Derivative = @(x) 1./normpdf(norminv(x));
s.Inverse = @normcdf;
g = fitglm(x,[y n],...
    'linear','distr','binomial','link',s)
g = 

Generalized Linear regression model:
    link(y) ~ 1 + x1
    Distribution = Binomial

Estimated Coefficients:
                   Estimate     SE            tStat     pValue    
    (Intercept)      -7.3628       0.66815    -11.02    3.0701e-28
    x1             0.0023039    0.00021352     10.79    3.8274e-27

12 observations, 10 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 241, p-value = 2.25e-54

Выберите метод и модель аппроксимации

Существует два способа создать подобранную модель.

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

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

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

В любом случае предоставьте модель функции аппроксимации (которая является стартовой моделью для stepwiseglm).

Задайте модель с помощью одного из следующих методов.

Краткое имя модели

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

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

Матрица терминов 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 с каждой из других переменных.

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

Создайте подобранную модель используя fitglm или stepwiseglm. Выберите между ними как в Выбрать метод аппроксимации и Модель. Для обобщенных линейных моделей, отличных от моделей с нормальным распределением, дайте Distribution Пара "имя-значение" как в выборе обобщенной линейной модели и Ссылки функции. Для примера,

mdl = fitglm(X,y,'linear','Distribution','poisson')
% or
mdl = fitglm(X,y,'quadratic',...
         'Distribution','binomial')

Исследуйте качество и настройте подобранную модель

После подбора кривой модели исследуйте результат.

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

Линейная регрессионая модель показывает несколько диагностик, когда вы вводите его имя или вводите disp(mdl). Это отображение даёт некоторую базовую информацию, чтобы проверить, представляет ли подобранная модель данные адекватно.

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

rng('default') % for reproducibility
X = randn(100,5);
mu = exp(X(:,[1 4 5])*[.4;.2;.3]);
y = poissrnd(mu);
mdl = fitglm(X,y,...
    'linear','Distribution','poisson')
mdl = 


Generalized Linear regression model:
    log(y) ~ 1 + x1 + x2 + x3 + x4 + x5
    Distribution = Poisson

Estimated Coefficients:
                   Estimate     SE          tStat       pValue    
    (Intercept)     0.039829     0.10793     0.36901       0.71212
    x1               0.38551    0.076116      5.0647    4.0895e-07
    x2             -0.034905    0.086685    -0.40266        0.6872
    x3              -0.17826    0.093552     -1.9054      0.056722
    x4               0.21929     0.09357      2.3436      0.019097
    x5               0.28918      0.1094      2.6432     0.0082126


100 observations, 94 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 44.9, p-value = 1.55e-08

Заметьте, что:

  • Отображение содержит оценочные значения каждого коэффициента в Estimate столбец. Эти значения достаточно близки к истинным значениям [0;.4;0;0;.2;.3], за исключением, возможно, коэффициента x3 не страшно близко 0.

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

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

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

  • Отображение содержит статистику Хи-квадрат.

Диагностические графики

Диагностические графики помогают вам идентифицировать выбросы и увидеть другие проблемы в вашей модели или подгонке. Чтобы проиллюстрировать эти графики, рассмотрите биномиальную регрессию с функцией логистической ссылки.

Этот logistic model полезен для данных о пропорциях. Он определяет связь между p пропорции и весом, w:

log [p/( 1 - p)] = b 1 + b 2 w

Этот пример подходит биномиальной модели к данным. Данные получают из carbig.mat, который содержит измерения больших вагонов различной массы. Каждый вес в w имеет соответствующее количество автомобилей в total и соответствующее количество автомобилей с плохим пробегом в poor.

Разумно предположить, что значения poor следовать биномиальным распределениям с количеством испытаний, заданных total и процент успехов в зависимости от w. Это распределение может быть учтено в контексте логистической модели с помощью обобщенной линейной модели с журналом функции звена (µ/( 1 - µ)) = X b. Эта функция ссылки вызывается 'logit'.

w = [2100 2300 2500 2700 2900 3100 ...
     3300 3500 3700 3900 4100 4300]';
total = [48 42 31 34 31 21 23 23 21 16 17 21]';
poor = [1 2 0 3 8 8 14 17 19 15 17 21]';
mdl = fitglm(w,[poor total],...
    'linear','Distribution','binomial','link','logit')
mdl = 

Generalized Linear regression model:
    logit(y) ~ 1 + x1
    Distribution = Binomial

Estimated Coefficients:
                   Estimate     SE            tStat      pValue    
    (Intercept)       -13.38         1.394    -9.5986    8.1019e-22
    x1             0.0041812    0.00044258     9.4474    3.4739e-21

12 observations, 10 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 242, p-value = 1.3e-54

Посмотрите, насколько хорошо модель подходит для данных.

plotSlice(mdl)

Подгонка выглядит достаточно хорошо, с довольно широкими доверительными границами.

Чтобы изучить дальнейшие детали, создайте график кредитного плеча.

plotDiagnostics(mdl)

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

Невязки - Моделирование качества для обучающих данных

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

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

rng('default') % for reproducibility
X = randn(100,5);
mu = exp(X(:,[1 4 5])*[2;1;.5]);
y = poissrnd(mu);
mdl = fitglm(X,y,...
    'linear','Distribution','poisson');

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

plotResiduals(mdl)

В то время как большинство невязок объединяются около 0, существует несколько близких ± 18. Поэтому рассмотрим другой график невязок.

plotResiduals(mdl,'fitted')

Большие невязки, по-видимому, не имеют большого отношения к размерам подобранных значений.

Возможно, вероятностный график более информативен.

plotResiduals(mdl,'probability')

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

Графики, чтобы понять эффекты предиктора и как изменить модель

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

  1. Создайте модель из некоторых предикторов в искусственных данных. Данные не используют второй и третий столбцы в X. Так что вы ожидаете, что модель не покажет большой зависимости от этих предикторов.

    rng('default') % for reproducibility
    X = randn(100,5);
    mu = exp(X(:,[1 4 5])*[2;1;.5]);
    y = poissrnd(mu);
    mdl = fitglm(X,y,...
        'linear','Distribution','poisson');
  2. Исследуйте график среза откликов. Это отображает эффект каждого предиктора отдельно.

    plotSlice(mdl)

    Шкала первого предиктора подавляет график. Отключите его с помощью меню Predictors.

    Теперь ясно, что предикторы 2 и 3 практически не влияют.

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

  3. Удалите ненужные предикторы, используя любой из removeTerms или step. Использование step может быть более безопасным, если существует неожиданная важность термина, который становится очевидным после удаления другого термина. Однако иногда removeTerms может быть эффективным, когда step не продолжается. В этом случае два дают одинаковые результаты.

    mdl1 = removeTerms(mdl,'x2 + x3')
    mdl1 = 
    
    
    Generalized Linear regression model:
        log(y) ~ 1 + x1 + x4 + x5
        Distribution = Poisson
    
    Estimated Coefficients:
                       Estimate    SE          tStat     pValue     
        (Intercept)    0.17604     0.062215    2.8295       0.004662
        x1              1.9122     0.024638    77.614              0
        x4             0.98521     0.026393    37.328    5.6696e-305
        x5             0.61321     0.038435    15.955     2.6473e-57
    
    
    100 observations, 96 error degrees of freedom
    Dispersion: 1
    Chi^2-statistic vs. constant model: 4.97e+04, p-value = 0
    mdl1 = step(mdl,'NSteps',5,'Upper','linear')
    1. Removing x3, Deviance = 93.856, Chi2Stat = 0.00075551, PValue = 0.97807
    2. Removing x2, Deviance = 96.333, Chi2Stat = 2.4769, PValue = 0.11553
    
    mdl1 = 
    
    
    Generalized Linear regression model:
        log(y) ~ 1 + x1 + x4 + x5
        Distribution = Poisson
    
    Estimated Coefficients:
                       Estimate    SE          tStat     pValue     
        (Intercept)    0.17604     0.062215    2.8295       0.004662
        x1              1.9122     0.024638    77.614              0
        x4             0.98521     0.026393    37.328    5.6696e-305
        x5             0.61321     0.038435    15.955     2.6473e-57
    
    
    100 observations, 96 error degrees of freedom
    Dispersion: 1
    Chi^2-statistic vs. constant model: 4.97e+04, p-value = 0

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

Существует три способа использования линейной модели для предсказания реакции на новые данные:

predict

The predict метод дает предсказание средних откликов и, при запросе, доверительных границ.

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

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

    rng('default') % for reproducibility
    X = randn(100,5);
    mu = exp(X(:,[1 4 5])*[2;1;.5]);
    y = poissrnd(mu);
    mdl = stepwiseglm(X,y,...
        'constant','upper','linear','Distribution','poisson');
    1. Adding x1, Deviance = 2515.02869, Chi2Stat = 47242.9622, PValue = 0
    2. Adding x4, Deviance = 328.39679, Chi2Stat = 2186.6319, PValue = 0
    3. Adding x5, Deviance = 96.3326, Chi2Stat = 232.0642, PValue = 2.114384e-52
  2. Сгенерируйте некоторые новые данные и оцените предсказания из данных.

    Xnew = randn(3,5) + repmat([1 2 3 4 5],[3,1]); % new data
    [ynew,ynewci] = predict(mdl,Xnew)
    ynew =
    
       1.0e+04 *
    
        0.1130
        1.7375
        3.7471
    
    
    ynewci =
    
       1.0e+04 *
    
        0.0821    0.1555
        1.2167    2.4811
        2.8419    4.9407

feval

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

Этот пример показывает, как предсказать средние отклики с помощью feval способ.

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

    rng('default') % for reproducibility
    X = randn(100,5);
    mu = exp(X(:,[1 4 5])*[2;1;.5]);
    y = poissrnd(mu);
    
    X = array2table(X); % create data table
    y = array2table(y);
    tbl = [X y];
    
    mdl = stepwiseglm(tbl,...
        'constant','upper','linear','Distribution','poisson');
    1. Adding x1, Deviance = 2515.02869, Chi2Stat = 47242.9622, PValue = 0
    2. Adding x4, Deviance = 328.39679, Chi2Stat = 2186.6319, PValue = 0
    3. Adding x5, Deviance = 96.3326, Chi2Stat = 232.0642, PValue = 2.114384e-52
  2. Сгенерируйте некоторые новые данные и оцените предсказания из данных.

    Xnew = randn(3,5) + repmat([1 2 3 4 5],[3,1]); % new data
    ynew = feval(mdl,Xnew(:,1),Xnew(:,4),Xnew(:,5)) % only need predictors 1,4,5
    ynew =
    
       1.0e+04 *
    
        0.1130
        1.7375
        3.7471

    Эквивалентно,

    ynew = feval(mdl,Xnew(:,[1 4 5])) % only need predictors 1,4,5
    ynew =
    
       1.0e+04 *
    
        0.1130
        1.7375
        3.7471

random

The random метод генерирует новые значения случайного отклика для заданных значений предиктора. Распределением значений отклика является распределение, используемое в модели. random вычисляет среднее значение распределения из предикторов, оценочных коэффициентов и функции ссылки. Для распределений, таких как normal, модель также предоставляет оценку отклонения отклика. Для биномиального распределения и распределения Пуассона отклонение отклика определяется средним значением; random не использует отдельную оценку «дисперсии».

В этом примере показано, как моделировать ответы с помощью random способ.

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

    rng('default') % for reproducibility
    X = randn(100,5);
    mu = exp(X(:,[1 4 5])*[2;1;.5]);
    y = poissrnd(mu);
    mdl = stepwiseglm(X,y,...
        'constant','upper','linear','Distribution','poisson');
    1. Adding x1, Deviance = 2515.02869, Chi2Stat = 47242.9622, PValue = 0
    2. Adding x4, Deviance = 328.39679, Chi2Stat = 2186.6319, PValue = 0
    3. Adding x5, Deviance = 96.3326, Chi2Stat = 232.0642, PValue = 2.114384e-52
  2. Сгенерируйте некоторые новые данные и оцените предсказания из данных.

    Xnew = randn(3,5) + repmat([1 2 3 4 5],[3,1]); % new data
    ysim = random(mdl,Xnew)
    ysim =
    
            1111
           17121
           37457

    Предсказания из random являются выборками Пуассона, так же как и целые числа.

  3. Оцените random снова метод, результат меняется.

    ysim = random(mdl,Xnew)
    ysim =
    
            1175
           17320
           37126

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

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

rng('default') % for reproducibility
X = randn(100,5);
mu = exp(X(:,[1 4 5])*[2;1;.5]);
y = poissrnd(mu);
mdl = stepwiseglm(X,y,...
    'constant','upper','linear','Distribution','poisson')
1. Adding x1, Deviance = 2515.02869, Chi2Stat = 47242.9622, PValue = 0
2. Adding x4, Deviance = 328.39679, Chi2Stat = 2186.6319, PValue = 0
3. Adding x5, Deviance = 96.3326, Chi2Stat = 232.0642, PValue = 2.114384e-52

mdl = 


Generalized Linear regression model:
    log(y) ~ 1 + x1 + x4 + x5
    Distribution = Poisson

Estimated Coefficients:
                   Estimate    SE          tStat     pValue     
    (Intercept)    0.17604     0.062215    2.8295       0.004662
    x1              1.9122     0.024638    77.614              0
    x4             0.98521     0.026393    37.328    5.6696e-305
    x5             0.61321     0.038435    15.955     2.6473e-57


100 observations, 96 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 4.97e+04, p-value = 0

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

mdl.Coefficients.Estimate
ans =

    0.1760
    1.9122
    0.9852
    0.6132
mdl.Formula
ans = 

log(y) ~ 1 + x1 + x4 + x5

Ссылки

[1] Collett, D. Modeling Binary Data. Нью-Йорк: Chapman & Hall, 2002.

[2] Добсон, А. Дж. Введение в обобщенные линейные модели. Нью-Йорк: Chapman & Hall, 1990.

[3] McCullagh, P., and J. A. Nelder. Обобщенные линейные модели. Нью-Йорк: Chapman & Hall, 1990.

[4] Нетер, Дж., М. Х. Кутнер, К. Дж. Нахтсхайм и У. Вассерман. Прикладные линейные статистические модели, четвертое издание. Ирвин, Чикаго, 1996.