Як обчислити псевдо- з логістичної регресії R?


46

Опис Крістофера Меннінга про логістичну регресію в R показує логістичну регресію в R таким чином:

ced.logr <- glm(ced.del ~ cat + follows + factor(class), 
  family=binomial)

Деякі результати:

> summary(ced.logr)
Call:
glm(formula = ced.del ~ cat + follows + factor(class),
    family = binomial("logit"))
Deviance Residuals:
Min            1Q    Median       3Q      Max
-3.24384 -1.34325   0.04954  1.01488  6.40094

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept)   -1.31827    0.12221 -10.787 < 2e-16
catd          -0.16931    0.10032  -1.688 0.091459
catm           0.17858    0.08952   1.995 0.046053
catn           0.66672    0.09651   6.908 4.91e-12
catv          -0.76754    0.21844  -3.514 0.000442
followsP       0.95255    0.07400  12.872 < 2e-16
followsV       0.53408    0.05660   9.436 < 2e-16
factor(class)2 1.27045    0.10320  12.310 < 2e-16
factor(class)3 1.04805    0.10355  10.122 < 2e-16
factor(class)4 1.37425    0.10155  13.532 < 2e-16
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 958.66 on 51 degrees of freedom
Residual deviance: 198.63 on 42 degrees of freedom
AIC: 446.10
Number of Fisher Scoring iterations: 4

Потім він детально описує, як інтерпретувати коефіцієнти, порівнювати різні моделі тощо. Досить корисно.

Однак скільки дисперсії враховує модель? На сторінці статистичних даних про логістичну регресію написано:

Технічно не можна обчислити так само, як у логістичній регресії, як у регресії OLS. Псевдо- в логістичній регресії визначається як , де являє собою ймовірність журналу для моделі "лише для постійних", а - вірогідність журналу для повної моделі з константа і предиктори.R 2 1 - L 1R2R2 L0L11L1L0L0L1

Я розумію це на високому рівні. Модель, що підтримує лише постійні, була б без жодного з параметрів (лише термін перехоплення). Імовірність журналу - це міра того, наскільки тісно параметри відповідають даним. Насправді, Меннінг роду натяки , що девіація може бути . Можливо, нульове відхилення є лише постійним, а залишкове відхилення - моделі? Однак я на це не кришталево чистий.- 2 log L2logL2logL

Чи може хтось перевірити, як насправді можна обчислити псевдо- в R, використовуючи цей приклад?R2


5
Зазвичай чудові сторінки статистичних обчислень UCLA тут допустили рідкісну помилку - у виразі для псевдо- не повинно бути дужок , тобто воно повинно бути . (Вибачте за те, що не відповідав на ваші запитання, коли я збираюся попрямувати до ліжка - я впевнений, що хтось ще відповість на це, перш ніж я буду прокидатися.) 1 - L 1 / L 0R21L1/L0
onestop


3
На цій сторінці обговорюється кілька псевдо-R ^ 2s.
dfrankow

2
Примітка: відповідне запитання не подобається жодним псевдо-R ^ 2s, але надає перевагу перехресній валідації або передбаченню тестування витримування.
dfrankow

Відповіді:


49

Не забувайте середньоквадратичний пакет, Френк Харрелл. Ви знайдете все необхідне для встановлення та підтвердження GLM.

Ось іграшковий приклад (із лише одним передбачувачем):

set.seed(101)
n <- 200
x <- rnorm(n)
a <- 1
b <- -2
p <- exp(a+b*x)/(1+exp(a+b*x))
y <- factor(ifelse(runif(n)<p, 1, 0), levels=0:1)
mod1 <- glm(y ~ x, family=binomial)
summary(mod1)

Це дає:

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   0.8959     0.1969    4.55 5.36e-06 ***
x            -1.8720     0.2807   -6.67 2.56e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 258.98  on 199  degrees of freedom
Residual deviance: 181.02  on 198  degrees of freedom
AIC: 185.02

Тепер, використовуючи lrmфункцію,

require(rms)
mod1b <- lrm(y ~ x)

Незабаром ви отримаєте безліч модельних індексів, зокрема Nagelkerke , за допомогою :R2print(mod1b)

Logistic Regression Model

lrm(formula = y ~ x)

                      Model Likelihood     Discrimination    Rank Discrim.    
                         Ratio Test            Indexes          Indexes       

Obs           200    LR chi2      77.96    R2       0.445    C       0.852    
 0             70    d.f.             1    g        2.054    Dxy     0.705    
 1            130    Pr(> chi2) <0.0001    gr       7.801    gamma   0.705    
max |deriv| 2e-08                          gp       0.319    tau-a   0.322    
                                           Brier    0.150                     


          Coef    S.E.   Wald Z Pr(>|Z|)
Intercept  0.8959 0.1969  4.55  <0.0001 
x         -1.8720 0.2807 -6.67  <0.0001 

Тут і обчислюється як , де LR - стан (порівняння двох вкладених вами моделей), тоді як знаменник - це лише максимальне значення для . Для ідеальної моделі ми очікуємо , тобто .( 1 - exp ( - LR / n ) ) / ( 1 - exp ( - ( - 2 L 0 ) / n ) ) χ 2 R 2 LR = 2 L 0 R 2 = 1R2=0.445(1exp(LR/n))/(1exp((2L0)/n))χ2R2LR=2L0R2=1

Вручну,

> mod0 <- update(mod1, .~.-x)
> lr.stat <- lrtest(mod0, mod1)
> (1-exp(-as.numeric(lr.stat$stats[1])/n))/(1-exp(2*as.numeric(logLik(mod0)/n)))
[1] 0.4445742
> mod1b$stats["R2"]
       R2 
0.4445742 

У своїй книзі « Моделі клінічного передбачення» (Спрінгер, 2009, § 4.2.2, с. 58-60) Е. В. Стейерберг обговорив використання з GLM . В основному, зв'язок між статистикою LR та Нагелкерке приблизно лінійний (він буде більш лінійним із низькою частотою падіння). Тепер, як обговорювалося в попередній темі, до якої я посилався у своєму коментарі, ви можете використовувати інші заходи, такі як статистика, що еквівалентно статистиці AUC (є також приємна ілюстрація у наведеному вище посиланні, див. Малюнок 4.6).R 2 cR2R2c


Чи можете ви пояснити, як ви отримали .445? Я використав 1-exp (-77,96 / 200), але отримав .323. Що я роблю неправильно? Дякую.

2
Який з них - Nagelkerke R2?
JetLag

1
@JetLag Під індексами дискримінації Nagelkerke скорочується як R2 (тобто 0,445). Ви можете перевірити це за допомогою функції NagelkerkeR2 () з пакета fmsb.
Чернофф


7

Будьте обережні з розрахунком Псевдо-R2 :

Псевдо- Макфаддена обчислюється як , де - вірогідність журналу повної моделі, а - вірогідність журналу моделі лише з перехопленням.R 2 М = 1 - л п л е ц л лR2 лп л еулллп л еUллRM2=1lnL^fulllnL^nulllnL^fulllnL^full

Два підходи до обчислення псевдо- :R2

  1. Використовуйте відхилення: оскільки ,deviance=2ln(Lfull)null.deviance=2ln(Lnull)

    pR2 = 1 - mod$deviance / mod$null.deviance # works for glm

Але вищевказаний підхід не працює для позапробного PseudoR2

  1. Використовуйте функцію "logLik" в R та визначення (також працює для вибірки)

    mod_null <- glm(y~1, family = binomial, data = insample) 1- logLik(mod)/logLik(mod_null)

Це може бути злегка модифіковано для обчислення вибіркових псевдоR2

Приклад:

позапробовий псевдо-R

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

Rp2=1Lest.outLnull.out,
Lest.outLnull.out

Коди:

pred.out.link <- predict(mod, outSample, type = "link") mod.out.null <- gam(Default~1, family = binomial, data = outSample) pR2.out <- 1 - sum(outSample$y * pred.out.link - log(1 + exp(pred.out.link))) / logLik(mod.out.null)


deviance=2ln(Lfull) не має значення для двочлену, просто дивись model1 <- glm(cbind(ncases, ncontrols) ~ agegp + tobgp * alcgp, data = esoph, family = binomial)і дзвони model1$devianceі -2*logLik(model1).
Цікаво

6

якщо відхилення були пропорційними вірогідності журналу, і використовує визначення (див. приклад Макфаддена тут )

pseudo R^2 = 1 - L(model) / L(intercept)

то псевдо- вище було б = 0.7928R21198.63958.66

Питання в тому: чи повідомляється про відхилення пропорційним вірогідності журналу?


3
Цей псевдо-R ^ 2 зовсім не погоджується з відповіддю Nagelkerke R ^ 2 @ @ chl.
dfrankow

Відхилення визначали -2 * LL, коли я навчався в школі.
DWin

@dfrankow з цим не згоден, тому що Nagelkerke - це нормалізація Cox і Snell R2, яка відрізняється від McFaddens R2.
colin

0

Якщо його зі зразка , то я вважаю , що повинні бути обчислені в відповідно до лог-правдоподібності як , де є вірогідність журналу тестових даних із прогнозованою моделлю, відкаліброваною на навчальному наборі, і - вірогідність журналу тестових даних з моделлю з простою константаю, встановленою на навчальному наборі, а потім використовувати пристосований константа прогнозувати на тестовому наборі обчислення ймовірностей і тому отримати ймовірність журналу.R2R2=1llfullllconstantllfullllconstant

Зауважимо, що в лінійній регресії є аналогічною, вибірка обчислюється як , де, зокрема, якщо ми подивимось на термін в знаменнику , для прогнозування використовується середнє значення для навчального набору . Це як якщо б ми помістили модель у навчальних даних із простою константою, тому ми повинні мінімізувати , що призводить до , тоді ця звичайна модель постійної прогностики є тією, що використовується як бенчмарк (тобто в знаменнику oosR2R2=1i(yiy^i)2i(yiy¯train)2i(yiy¯train)2y¯traini(yiβ0)2 & beta ; 0= ¯ y trainR2Rβ^0=y¯trainR2термін) для обчислення вибірки .R2

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.