В этом примере показано, как подбирать обобщенную линейную модель и анализировать результаты. Типичный рабочий процесс включает эти шаги: импортируйте данные, подбирайте обобщенную линейную модель, протестируйте ее качество, измените модель, чтобы улучшить ее качество и сделать предсказания на основе модели. В этом примере вы используете ирисовые данные Фишера, чтобы вычислить вероятность, что цветок находится в одном из двух классов.
Загрузите ирисовые данные Фишера.
load fisheririsИзвлеките строки 51 - 150, которые имеют классификацию versicolor или virginica.
X = meas(51:end,:);
Создайте логические переменные отклика, которые являются true для versicolor и false для virginica.
y = strcmp('versicolor',species(51:end));Подбирайте биномиальную обобщенную линейную модель к данным.
mdl = fitglm(X,y,'linear','Distribution','binomial')
mdl =
Generalized linear regression model:
logit(y) ~ 1 + x1 + x2 + x3 + x4
Distribution = Binomial
Estimated Coefficients:
Estimate SE tStat pValue
________ ______ _______ ________
(Intercept) 42.638 25.708 1.6586 0.097204
x1 2.4652 2.3943 1.0296 0.30319
x2 6.6809 4.4796 1.4914 0.13585
x3 -9.4294 4.7372 -1.9905 0.046537
x4 -18.286 9.7426 -1.8769 0.060529
100 observations, 95 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 127, p-value = 1.95e-26
Согласно отображению модели, некоторым p-значениям в pValue столбец не мал, который подразумевает, что можно упростить модель.
Определите, включают ли 95% доверительных интервалов для коэффициентов 0. Если так, можно удалить термины модели с теми интервалами.
confint = coefCI(mdl)
confint = 5×2
-8.3984 93.6740
-2.2881 7.2185
-2.2122 15.5739
-18.8339 -0.0248
-37.6277 1.0554
Только четвертый предиктор x3 имеет коэффициент, доверительный интервал которого не включает 0.
Коэффициенты x1 и x2 имейте большие p-значения, и их 95% доверительных интервалов включают 0. Протестируйте, могут ли оба коэффициента быть нулем. Задайте матрицу гипотезы, чтобы выбрать коэффициенты x1 и x2.
M = [0 1 0 0 0
0 0 1 0 0];
p = coefTest(mdl,M)p = 0.1442
P-значение - приблизительно 0,14, который не мал. Удалите x1 и x2 из модели.
mdl1 = removeTerms(mdl,'x1 + x2')mdl1 =
Generalized linear regression model:
logit(y) ~ 1 + x3 + x4
Distribution = Binomial
Estimated Coefficients:
Estimate SE tStat pValue
________ ______ _______ __________
(Intercept) 45.272 13.612 3.326 0.00088103
x3 -5.7545 2.3059 -2.4956 0.012576
x4 -10.447 3.7557 -2.7816 0.0054092
100 observations, 97 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 118, p-value = 2.3e-26
В качестве альтернативы можно идентифицировать важные предикторы с помощью stepwiseglm.
mdl2 = stepwiseglm(X,y,'constant','Distribution','binomial','Upper','linear')
1. Adding x4, Deviance = 33.4208, Chi2Stat = 105.2086, PValue = 1.099298e-24 2. Adding x3, Deviance = 20.5635, Chi2Stat = 12.8573, PValue = 0.000336166 3. Adding x2, Deviance = 13.2658, Chi2Stat = 7.29767, PValue = 0.00690441
mdl2 =
Generalized linear regression model:
logit(y) ~ 1 + x2 + x3 + x4
Distribution = Binomial
Estimated Coefficients:
Estimate SE tStat pValue
________ ______ _______ ________
(Intercept) 50.527 23.995 2.1057 0.035227
x2 8.3761 4.7612 1.7592 0.078536
x3 -7.8745 3.8407 -2.0503 0.040334
x4 -21.43 10.707 -2.0014 0.04535
100 observations, 96 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 125, p-value = 5.4e-27
P-значение (pValue) для x2 в коэффициенте таблица больше 0.05, но stepwiseglm включает x2 в модели, потому что p-значение (PValue) для добавления x2 меньше, чем 0,05. stepwiseglm функция вычисляет PValue использование подгонок с и без x2, тогда как функция вычисляет pValue на основе аппроксимированной стандартной погрешности, вычисленной только из итоговой модели. Поэтому PValue более надежно, чем pValue.
Исследуйте график рычагов искать влиятельные выбросы.
plotDiagnostics(mdl2,'leverage')
Наблюдение может быть рассмотрено выбросом, если его рычаги существенно превышают p/n, где p количество коэффициентов и n количество наблюдений. Точечная ссылочная линия является рекомендуемым порогом, вычисленным 2*p/n, который соответствует 0.08 в этом графике. Некоторые наблюдения имеют значения рычагов, больше, чем 10*p/n (то есть, 0.40). Идентифицируйте эти наблюдательные посты.
idxOutliers = find(mdl2.Diagnostics.Leverage > 10*mdl2.NumCoefficients/mdl2.NumObservations)
idxOutliers = 4×1
19
21
57
85
Смотрите, изменяются ли коэффициенты модели, когда вы подбираете модель, исключая эти точки.
oldCoeffs = mdl2.Coefficients.Estimate; mdl3 = fitglm(X,y,'linear','Distribution','binomial', ... 'PredictorVars',2:4,'Exclude',idxOutliers); newCoeffs = mdl3.Coefficients.Estimate; disp([oldCoeffs newCoeffs])
50.5268 44.0085
8.3761 5.6361
-7.8745 -6.1145
-21.4296 -18.1236
Коэффициенты модели в mdl3 отличаются от тех в mdl2. Этот результат подразумевает, что ответы в точках высоких рычагов не сопоставимы с ожидаемыми значениями от упрощенной модели.
Используйте mdl3 предсказать вероятность, что цветок со средними измерениями является versicolor. Сгенерируйте доверительные интервалы для предсказания.
[newf,newc] = predict(mdl3,mean(X))
newf = 0.4558
newc = 1×2
0.1234 0.8329
Модель дает почти 46%-ю вероятность, что средний цветок является versicolor с широким доверительным интервалом.
fitglm | stepwiseglm | GeneralizedLinearModel | predict | removeTerms | coefCI | plotDiagnostics