fitglm

Создайте обобщенную линейную регрессионую модель

Описание

пример

mdl = fitglm(tbl) возвращает обобщенную линейную модель подгонки к переменным в таблице или массиве набора данных tbl. По умолчанию, fitglm принимает последнюю переменную в качестве переменной отклика.

пример

mdl = fitglm(X,y) возвращает обобщенную линейную модель откликов y, подгонка к матрице данных X.

пример

mdl = fitglm(___,modelspec) возвращает обобщенную линейную модель заданного вами типа modelspec.

пример

mdl = fitglm(___,Name,Value) возвращает обобщенную линейную модель с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар.

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

Примеры

свернуть все

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

Загрузите hospital массив набора данных.

load hospital
dsa = hospital;

Задайте модель с помощью формулы, которая позволяет до двухсторонних взаимодействий между возрастом, весом и полом переменных. Курильщик является переменной отклика.

modelspec = 'Smoker ~ Age*Weight*Sex - Age:Weight:Sex';

Подбор логистической биномиальной модели.

mdl = fitglm(dsa,modelspec,'Distribution','binomial')
mdl = 
Generalized linear regression model:
    logit(Smoker) ~ 1 + Sex*Age + Sex*Weight + Age*Weight
    Distribution = Binomial

Estimated Coefficients:
                        Estimate         SE         tStat      pValue 
                       ___________    _________    ________    _______

    (Intercept)            -6.0492       19.749     -0.3063    0.75938
    Sex_Male               -2.2859       12.424    -0.18399    0.85402
    Age                    0.11691      0.50977     0.22934    0.81861
    Weight                0.031109      0.15208     0.20455    0.83792
    Sex_Male:Age          0.020734      0.20681     0.10025    0.92014
    Sex_Male:Weight        0.01216     0.053168     0.22871     0.8191
    Age:Weight         -0.00071959    0.0038964    -0.18468    0.85348


100 observations, 93 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 5.07, p-value = 0.535

Все значения p (под pValue) большие. Это означает, что ни один из коэффициентов не является значимым. Большое p-значение для теста модели, 0.535, указывает, что эта модель может не отличаться статистически от постоянной модели.

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

rng('default') % for reproducibility
X = randn(100,7);
mu = exp(X(:,[1 3 6])*[.4;.2;.3] + 1);
y = poissrnd(mu);

Подбор обобщенной линейной модели с помощью распределения Пуассона.

mdl =  fitglm(X,y,'linear','Distribution','poisson')
mdl = 
Generalized linear regression model:
    log(y) ~ 1 + x1 + x2 + x3 + x4 + x5 + x6 + x7
    Distribution = Poisson

Estimated Coefficients:
                   Estimate        SE        tStat        pValue  
                   _________    ________    ________    __________

    (Intercept)      0.88723    0.070969      12.502    7.3149e-36
    x1               0.44413    0.052337      8.4858    2.1416e-17
    x2             0.0083388    0.056527     0.14752       0.88272
    x3               0.21518    0.063416      3.3932    0.00069087
    x4             -0.058386    0.065503    -0.89135       0.37274
    x5             -0.060824    0.073441     -0.8282       0.40756
    x6               0.34267    0.056778      6.0352    1.5878e-09
    x7               0.04316     0.06146     0.70225       0.48252


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

The p-значения 2.14e-17, 0.00069 и 1.58e-09 указывают, что коэффициенты переменных x1, x3, и x6 являются статистически значимыми.

Входные параметры

свернуть все

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

  • По умолчанию, fitglm принимает последнюю переменную как переменную отклика, а другие как переменные предиктора.

  • Чтобы задать другой столбец в качестве переменной отклика, используйте ResponseVar аргумент пары "имя-значение".

  • Чтобы использовать подмножество столбцов в качестве предикторов, используйте PredictorVars аргумент пары "имя-значение".

  • Чтобы определить спецификацию модели, установите modelspec аргумент с использованием формулы или матрицы терминов. Матрица формул или терминов задает, какие столбцы использовать в качестве переменных предиктора или отклика.

Имена переменных в таблице не должны быть допустимыми MATLAB® идентификаторы. Однако, если имена недопустимы, вы не можете использовать формулу, когда подбираете или корректируете модель; для примера:

  • Вы не можете задать modelspec использование формулы.

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

  • Вы не можете использовать формулу, чтобы задать нижнюю и верхнюю границы модели, когда вы используете step или stepwiseglm функция с аргументами пары "имя-значение" 'Lower' и 'Upper', соответственно.

Можно проверить имена переменных в tbl при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.

Переменные предиктора, заданные как n -by - p матрица, где n - количество наблюдений, а p - количество переменных предиктора. Каждый столбец X представляет одну переменную, и каждая строка представляет одно наблюдение.

По умолчанию существует постоянный член в модели, если вы явно не удаляете ее, поэтому не включайте столбец 1с в X.

Типы данных: single | double

Переменная отклика, заданная в виде вектора или матрицы.

  • Если 'Distribution' не 'binomial', затем y должен быть вектором n -by-1, где n количество наблюдений. Каждая запись в y - ответ для соответствующей строки X. Тип данных должен быть одинарным или двойным.

  • Если 'Distribution' является 'binomial', затем y может быть n вектором -by-1 или n матрицей -by-2 со счетчиками в столбцах 1 и BinomialSize в столбце 2.

Типы данных: single | double | logical | categorical

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

  • Вектор символов или строковый скаляр с именем модели.

    ЗначениеТип модели
    'constant'Модель содержит только постоянный (перехват) термин.
    'linear'Модель содержит точку пересечения и линейный термин для каждого предиктора.
    'interactions'Модель содержит точку пересечения, линейный член для каждого предиктора и все продукты пар различных предикторов (без квадратов членов).
    'purequadratic'Модель содержит термин точки пересечения и линейные и квадратные условия для каждого предиктора.
    'quadratic'Модель содержит член точки пересечения, линейные и квадратные условия для каждого предиктора и все продукты пар различных предикторов.
    'poly <reservedrangesplaceholder0>'Модель является полиномом со всеми терминами до степени i в первом предикторе, степень j во втором предикторе и так далее. Задайте максимальную степень для каждого предиктора с помощью цифр 0, хотя и 9. Модель содержит условия взаимодействия, но степень каждого термина взаимодействия не превышает максимальное значение заданных степеней. Для примера, 'poly13' имеет перехват и x 1, x 2, x 22, <reservedrangesplaceholder0> 23, x 1 * x 2 и x 1 * x 22 условия, где x 1 и x 2 являются первым и вторым предикторами, соответственно.
  • Матрица t -by-  (p + 1) или Матрица терминов, задающая членов в модели, где t количество членов, а p количество переменных предиктора, и + 1 учитывает переменную отклика. Матрица терминов удобна, когда количество предикторов велико, и вы хотите сгенерировать условия программно.

  • Вектор символов или строковый скаляр Формула в форме

    'y ~ terms',

    где terms находятся в Обозначении Уилкинсона. Имена переменных в формуле должны быть именами переменных в tbl или имена переменных, заданные Varnames. Кроме того, имена переменных должны быть допустимыми идентификаторами MATLAB.

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

Пример: 'quadratic'

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Distribution','normal','link','probit','Exclude',[23,59] задает, что распределение отклика нормальное, и инструктирует fitglm использовать функцию probit link и исключить из подгонки 23-е и 59-е наблюдения.

Количество испытаний биномиального распределения, то есть размер выборки, заданное как разделенная разделенными запятой парами, состоящая из 'BinomialSize' и имя переменной в tbl, числовой скаляр или числовой вектор той же длины, что и ответ. Это параметр n для установленного биномиального распределения. BinomialSize применяется только тогда, когда Distribution параметр 'binomial'.

Если BinomialSize является скалярным значением, что означает, что все наблюдения имеют одинаковое количество испытаний.

Как альтернатива BinomialSize, можно задать ответ как двухколоночную матрицу со счетчиками в столбцах 1 и BinomialSize в столбце 2.

Типы данных: single | double | char | string

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

Типы данных: single | double

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

  • Если данные находятся в таблице или массиве набора данных tbl, затем, по умолчанию, fitglm Обработки все категориальные значения, логические значения, символьные массивы, строковые массивы и массивы ячеек векторов символов как категориальные переменные.

  • Если данные в матрице X, затем значение по умолчанию 'CategoricalVars' является пустой матрицей []. То есть никакая переменная не является категориальной, если вы не задаете ее как категориальную.

Для примера можно задать вторую и третью переменные из шести как категориальные с помощью одного из следующих:

Пример: 'CategoricalVars',[2,3]

Пример: 'CategoricalVars',logical([0 1 1 0 0 0])

Типы данных: single | double | logical | string | cell

Индикатор для вычисления параметра дисперсии для 'binomial' и 'poisson' распределения, заданные как разделенная разделенными запятой парами, состоящая из 'DispersionFlag' и одно из следующих.

trueОцените параметр дисперсии при вычислении стандартных ошибок. Оцененное значение параметров дисперсии является суммой квадратов невязок Пирсона, разделенных на степени свободы от ошибки (DFE).
falseПо умолчанию. Используйте теоретическое значение 1 при вычислении стандартных ошибок.

Функция аппроксимации всегда оценивает дисперсию для других распределений.

Пример: 'DispersionFlag',true

Распределение переменной отклика, заданное как разделенная разделенными запятой парами, состоящая из 'Distribution' и одно из следующих.

'normal'Нормальное распределение
'binomial'Биномиальное распределение
'poisson'Распределение Пуассона
'gamma'Гамма- распределение
'inverse gaussian'Обратное Гауссово распределение

Пример: 'Distribution','gamma'

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

Например, можно исключить наблюдения 2 и 3 из 6, используя любой из следующих примеров.

Пример: 'Exclude',[2,3]

Пример: 'Exclude',logical([0 1 1 0 0 0])

Типы данных: single | double | logical

Индикатор для постоянного термина (точка пересечения) в подгонке, заданный как разделенная разделенными запятой парами, состоящая из 'Intercept' и любой из них true включать или false чтобы удалить постоянный член из модели.

Использование 'Intercept' только при задании модели с помощью вектора символов или строкового скаляра, а не формулы или матрицы.

Пример: 'Intercept',false

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

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

Имя поляЗначениеЗначение по умолчанию
Display

Количество информации, отображаемой алгоритмом

  • 'off' - Не отображает никакой информации

  • 'final' - Отображает окончательный выход

'off'
MaxIter

Максимально допустимое количество итераций, заданное в виде положительного целого числа

100
TolX

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

1e-6

Можно также ввести набор состояний ('fitglm') в Командном окне, чтобы увидеть имена и значения по умолчанию полей, которые fitglm принимает в 'Options' аргумент имя-значение.

Пример: 'Options',statset('Display','final','MaxIter',1000) задает отображение окончательной информации результатов итерационного алгоритма и изменение максимального количества итераций равного 1000.

Типы данных: struct

Переменная смещения в подгонке, заданная как разделенная разделенными запятой парами, состоящая из 'Offset' и имя переменной в tbl или числовой вектор с той же длиной, что и ответ.

fitglm использует Offset как дополнительный предиктор со значением коэффициента, фиксированным на 1. Другими словами, формула для подбора кривой

f (<reservedrangesplaceholder1>) = Offset + X*b,

где f - ссылка функция, μ - средняя характеристика, а X * b - линейная комбинация предикторов X. The Offset предиктор имеет коэффициент 1.

Например, рассмотрим регрессионую модель Пуассона. Предположим, что количество отсчётов известно по теоретическим причинам, что оно пропорционально предиктору A. При помощи функции log link и путем определения log(A) в качестве смещения можно заставить модель удовлетворить этому теоретическому ограничению.

Типы данных: single | double | char | string

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

Строковые значения или векторы символов должны быть среди имен в tbl, или имена, которые вы задаете используя 'VarNames' аргумент пары "имя-значение".

По умолчанию все переменные в X, или все переменные в tbl кроме ResponseVar.

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

Пример: 'PredictorVars',[2,3]

Пример: 'PredictorVars',logical([0 1 1 0 0 0])

Типы данных: single | double | logical | string | cell

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

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

Пример: 'ResponseVar','yield'

Пример: 'ResponseVar',[4]

Пример: 'ResponseVar',logical([0 0 0 1 0 0])

Типы данных: single | double | logical | char | string

Имена переменных, заданные как разделенная разделенными запятой парами, состоящая из 'VarNames' и строковые массивы или массив ячеек из векторов символов, включая имена для столбцов X во-первых, и имя переменной отклика y последний.

'VarNames' не применяется к переменным в таблице или массиве набора данных, поскольку эти переменные уже имеют имена.

Имена переменных не должны быть допустимыми идентификаторами MATLAB. Однако, если имена недопустимы, вы не можете использовать формулу, когда подбираете или корректируете модель; для примера:

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

  • Вы не можете использовать формулу, чтобы задать нижнюю и верхнюю границы модели, когда вы используете step или stepwiseglm функция с аргументами пары "имя-значение" 'Lower' и 'Upper', соответственно.

Перед указанием 'VarNames',varNamesможно проверить имена переменных в varNames при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.

Пример: 'VarNames',{'Horsepower','Acceleration','Model_Year','MPG'}

Типы данных: string | cell

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и вектор n -by-1 неотрицательных скалярных значений, где n - количество наблюдений.

Типы данных: single | double

Выходные аргументы

свернуть все

Обобщенная линейная регрессионая модель, заданная как GeneralizedLinearModel объект, созданный с помощью fitglm или stepwiseglm.

Подробнее о

свернуть все

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

Матрица терминов 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 представляет предикторные условия в модели, использующей обозначение Уилкинсона.

Чтобы представлять переменные предиктора и отклика, используйте имена переменных входных tbl таблицы или имена переменных, заданные при помощи VarNames. Значение по умолчанию VarNames является {'x1','x2',...,'xn','y'}.

Для примера:

  • 'y ~ x1 + x2 + x3' задает линейную модель с тремя переменными с точкой пересечения.

  • 'y ~ x1 + x2 + x3 – 1' задает линейную модель с тремя переменными без точки пересечения. Обратите внимание, что формулы включают постоянный (перехват) термин по умолчанию. Чтобы исключить постоянный термин из модели, вы должны включить –1 в формуле.

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

Уилкинсон Обозначение

Уилкинсон обозначения описывает термины, присутствующие в модели. Обозначение относится к терминам, присутствующим в модели, а не к умножителям (коэффициентам) этих членов.

Уилкинсон обозначения использует эти символы:

  • + средства включают следующую переменную.

  • средства не включают следующую переменную.

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

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

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

  • () группы терминов.

Эта таблица показывает типичные примеры обозначению Уилкинсона.

Уилкинсон ОбозначениеТермины в стандартном обозначении
1Константа ( точку пересечения) термин
x1^k, где k является положительным целым числомx1, x12..., x1k
x1 + x2x1, x2
x1*x2x1, x2, x1*x2
x1:x2x1*x2 только
–x2Не включать x2
x1*x2 + x3x1, x2, x3, x1*x2
x1 + x2 + x3 + x1:x2x1, x2, x3, x1*x2
x1*x2*x3 – x1:x2:x3x1, x2, x3, x1*x2, x1*x3, x2*x3
x1*(x2 + x3)x1, x2, x3, x1*x2, x1*x3

Для получения дополнительной информации см. Обозначение Уилкинсона.

Функция канонической ссылки

Функция ссылки по умолчанию для обобщенной линейной модели является canonical link function.

РаспределениеКанонические Ссылки Имени функцииФункция ссылкиСредняя (обратная) функция
'normal''identity'f (<reservedrangesplaceholder1>) = μμ = Xb
'binomial''logit'f (μ) = журнал (μ/( 1 - μ))μ = exp (Xb )/( 1 + exp (Xb))
'poisson''log'f (μ) = журнал (μ)μ = exp (Xb)
'gamma'-1f (<reservedrangesplaceholder1>) = 1 / μμ = 1 / (<reservedrangesplaceholder0>)
'inverse gaussian'-2f (<reservedrangesplaceholder1>) = 1 / μ2μ = (<reservedrangesplaceholder0>)–1/2

Совет

  • Обобщенная линейная модель mdl является стандартной линейной моделью, если вы не задаете обратное со Distribution Пара "имя-значение".

  • Для таких методов, как plotResiduals или devianceTest, или свойства GeneralizedLinearModel объект, см. GeneralizedLinearModel.

  • После обучения модели можно сгенерировать код C/C + +, который предсказывает ответы для новых данных. Для генерации кода C/C + + требуется MATLAB Coder™. Для получения дополнительной информации смотрите Введение в генерацию кода .

Алгоритмы

  • fitglm рассматривает категориальный предиктор следующим образом:

    • Модель с категориальным предиктором, которая имеет L уровни (категории), включает L - 1 переменные показателя. Модель использует первую категорию в качестве ссылочного уровня, поэтому она не включает переменную индикатора для ссылочного уровня. Если тип данных категориального предиктора categorical, затем можно проверить порядок категорий при помощи categories и переупорядочить категории при помощи reordercats для настройки уровня ссылки. Для получения дополнительной информации о создании переменных индикатора, смотрите Автоматическое создание переменных фиктива.

    • fitglm рассматривает группу   переменных индикатора L-1 как одну переменную. Если вы хотите считать переменные индикатора отдельными переменными предиктора, создайте переменные индикатора вручную при помощи dummyvar. Затем используйте переменные индикатора, кроме той, которая соответствует ссылочному уровню категориальной переменной, когда вы подбираете модель. Для категориального предиктора X, если вы задаете все столбцы dummyvar(X) и точка пересечения член как предикторы, тогда матрица дизайна становится неполным рангом.

    • Условия взаимодействия между непрерывным предиктором и категориальным предиктором с L уровнями состоят из поэлементного произведения   переменных показателя L-1 с непрерывным предиктором.

    • Условия взаимодействия между двумя категориальными предикторами с L и M уровнями состоят из переменных (L - 1) *  (M - 1) индикатора, чтобы включать все возможные комбинации двух категориальных уровней предиктора.

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

  • fitglm рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в tbl, X, и Y чтобы быть отсутствующими значениями. fitglm не использует наблюдения с отсутствующими значениями в подгонке. The ObservationInfo свойство подобранной модели указывает, указывает или нет fitglm использует каждое наблюдение в подгонке.

Альтернативная функциональность

  • Использование stepwiseglm для автоматического выбора спецификации модели. Использование step, addTerms, или removeTerms чтобы настроить подобранную модель.

Ссылки

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

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

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

Расширенные возможности

Введенный в R2013b