Часто, когда мы подбираем модель линейной регрессии, мы используем R-квадрат как способ оценить, насколько хорошо модель соответствует данным.
R-квадрат представляет собой долю дисперсии переменной отклика , которая может быть объяснена переменными-предикторами в регрессионной модели.
Это число находится в диапазоне от 0 до 1, причем более высокие значения указывают на лучшее соответствие модели.
Однако такого значения R-квадрата нет для общих линейных моделей, таких как модели логистической регрессии и модели регрессии Пуассона .
Вместо этого мы можем рассчитать показатель, известный как R-квадрат Макфаддена , который колеблется от 0 до чуть меньше 1, причем более высокие значения указывают на лучшее соответствие модели.
Мы используем следующую формулу для расчета R-квадрата Макфаддена:
R-квадрат Макфаддена = 1 - ( модель логарифмического правдоподобия / нуль логарифмического правдоподобия)
куда:
- модель логарифмического правдоподобия : значение логарифмического правдоподобия текущей подобранной модели
- журнал правдоподобия null : значение вероятности журнала нулевой модели (только модель с перехватом)
На практике значения выше 0,40 указывают на то, что модель очень хорошо соответствует данным.
В следующем примере показано, как рассчитать R-квадрат Макфаддена для модели логистической регрессии в R.
Пример: вычисление R-квадрата Макфаддена в R
В этом примере мы будем использовать набор данных по умолчанию из пакета ISLR. Мы можем использовать следующий код для загрузки и просмотра сводки набора данных:
#install and load ISLR package
install. packages('ISLR')
library (ISLR)
#define dataset
data <- ISLR::Default
#view summary of dataset
summary(data)
default student balance income
No :9667 No :7056 Min. : 0.0 Min. : 772
Yes: 333 Yes:2944 1st Qu.: 481.7 1st Qu.:21340
Median : 823.6 Median :34553
Mean : 835.4 Mean :33517
3rd Qu.:1166.3 3rd Qu.:43808
Max.:2654.3 Max.:73554
#find total observations in dataset
nrow(data)
[1] 10000
Этот набор данных содержит следующую информацию о 10 000 человек:
- по умолчанию: указывает, нарушил ли индивидуум дефолт.
- студент: Указывает, является ли человек студентом.
- баланс: средний баланс, который несет физическое лицо.
- доход: Доход физического лица.
Мы будем использовать статус студента, банковский баланс и доход, чтобы построить модель логистической регрессии, которая предсказывает вероятность того, что данный человек не выполнит свои обязательства:
#fit logistic regression model
model <- glm(default~student+balance+income, family='binomial', data=data)
#view model summary
summary(model)
Call:
glm(formula = default ~ balance + student + income, family = "binomial",
data = data)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.4691 -0.1418 -0.0557 -0.0203 3.7383
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.087e+01 4.923e-01 -22.080 < 2e-16 \*\*\*
balance 5.737e-03 2.319e-04 24.738 < 2e-16 \*\*\*
studentYes -6.468e-01 2.363e-01 -2.738 0.00619 \*\*
income 3.033e-06 8.203e-06 0.370 0.71152
---
Signif. codes: 0 ‘\*\*\*’ 0.001 ‘\*\*’ 0.01 ‘\*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2920.6 on 9999 degrees of freedom
Residual deviance: 1571.5 on 9996 degrees of freedom
AIC: 1579.5
Number of Fisher Scoring iterations: 8
Далее мы будем использовать следующую формулу для расчета значения R-квадрата Макфаддена для этой модели:
#calculate McFadden's R-squared for model
with(summary(model), 1 - deviance/null. deviance )
[1] 0.4619194
Значение R-квадрата Макфаддена оказывается равным 0,4619194.Это значение довольно высокое, что указывает на то, что наша модель хорошо соответствует данным и обладает высокой предсказательной силой.
Также обратите внимание, что мы могли бы использовать функцию pR2() из пакета pscl для вычисления значения R-квадрата Макфаддена для модели:
#install and load pscl package
install. packages('pscl')
library (pscl)
#calculate McFadden's R-squared for model
pR2(model)['McFadden']
McFadden
0.4619194
Обратите внимание, что это значение совпадает с рассчитанным ранее.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:
Как рассчитать R-квадрат в R
Как рассчитать скорректированный R-квадрат в R
Что такое хорошее значение R-квадрата?