R의 로지스틱 회귀 분석에서 의사


46

R의 로지스틱 회귀 분석에 대한 Christopher Manning의 은 다음과 같이 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

그런 다음 계수를 해석하고 다른 모델을 비교하는 방법 등에 대해 자세히 설명합니다. 매우 유용합니다.

그러나 모델이 얼마나 많은 차이를 설명합니까? 로지스틱 회귀 분석에 대한 Stata 페이지 는 다음과 같이 말합니다.

기술적으로 는 로지스틱 회귀 분석에서 OLS 회귀 분석과 같은 방식으로 계산할 수 없습니다. 로지스틱 회귀 분석에서 의사 는 으로 정의되며 , 여기서 은 "일정한"모델 에 대한 로그 우도를 나타내고 은 전체 모델에 대한 로그 우도를 나타냅니다. 상수 및 예측 변수.R 2 1 - L 1R2R2 L0L11L1L0L0L1

나는 이것을 높은 수준에서 이해합니다. 상수 전용 모델에는 매개 변수가 없습니다 (절편 항만). 로그 우도는 매개 변수가 데이터와 얼마나 밀접하게 일치하는지 측정 한 것입니다. 실제로 Manning은 이탈이 일 수 있음을 암시합니다 . 아마도 null 이탈은 상수 전용이고 잔차 이탈은 모델의 입니까? 그러나 나는 그것에 대해 명확하지 않습니다.2 로그 L2logL2logL

누군가이 예제를 사용하여 실제로 의사 를 R로 계산하는 방법을 확인할 수 있습니까 ?R2


5
일반적으로 우수한 UCLA 통계 컴퓨팅 페이지는 여기서 드문 오류를 . 의사 대한 괄호가 없어야합니다. 즉, 이어야합니다 . (잠자리에 들려고 할 때 질문에 대답하지 않아서 죄송합니다. 그렇게하기 전에 깨어나 기 전에 다른 사람이이 질문에 대답했을 것입니다.) 1 - L 1 / L 0R21L1/L0
onestop


3
이 페이지 에서는 여러 의사 R ^ 2에 대해 설명합니다.
dfrankow

2
참고 : 관련 질문은 의사 R ^ 2를 좋아하지 않지만 교차 유효성 검사 또는 홀드 아웃 테스트 예측을 선호합니다.
dfrankow

답변:


49

Frank Harrell 의 rms 패키지를 잊지 마십시오 . 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 

Ewout W. Steyerberg 는 자신의 저서 임상 예측 모델 (Springer, 2009, § 4.2.2 pp. 58-60) 에서 G2 와 함께 의 사용에 대해 논의했습니다 . 기본적으로 LR 통계량과 Nagelkerke의 사이의 관계 는 대략 선형입니다 (발생률이 낮을 수록 선형화 됨 ). 이제 내 의견에서 링크 한 이전 스레드에서 설명한 것처럼 AUC 통계와 동등한 통계 와 같은 다른 측정을 사용할 수 있습니다 (위의 참조에는 멋진 그림이 있습니다 (그림 4.6 참조)).R 2 cR2R2c


.445를 어떻게 얻었는지 설명해 주시겠습니까? 1-exp (-77.96 / 200)를 사용했지만 .323을 얻었습니다. 내가 뭘 잘못하고 있니? 감사.

2
Nagelkerke R2는 무엇입니까?
JetLag

1
@JetLag 차별 지수에서 Nagelkerke는 R2 (즉, 0.445)로 약칭됩니다. fmsb 패키지에서 NagelkerkeR2 () 함수를 사용하여이를 확인할 수 있습니다.
Chernoff


7

R2

R2RM2=1lnL^fulllnL^nulllnL^fulllnL^full

R2

  1. deviance=2ln(Lfull)null.deviance=2ln(Lnull)

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

그러나 위의 접근법은 샘플 외부 의사 에서는 작동하지 않습니다.R2

  1. R 및 정의에서 "logLik"함수 사용 (또한 샘플에서 작동)

    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

이탈이 로그 가능성에 비례하고 정의를 사용하는 경우 (예 : McFadden 's here )

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

R21198.63958.66

문제는 로그 이탈에 비례하여 이탈이보고 되는가?


3
이 의사 R ^ 2는 @chl의 답변의 Nagelkerke R ^ 2와 전혀 일치하지 않습니다.
dfrankow

내가 학교에있을 때 편차는 -2 * LL로 정의되었습니다.
DWin

Nagelkerke가 Cox와 Snell R2의 정규화이기 때문에 @dfrankow는 동의하지 않습니다. McFaddens R2와 다릅니다.
colin

0

R2R2=1llfullllconstantllfullllconstant

R2R2=1i(yiy^i)2i(yiy¯train)2i(yiy¯train)2y¯traini(yiβ0)2β^0=y¯trainR2R2

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.