R의 로지스틱 회귀


40

에서 로지스틱 회귀 분석을 수행하려고합니다 R. STATA를 사용하여이 자료를 다루는 과정에 참석했습니다. 에서 기능을 복제하는 것이 매우 어렵다는 것을 알고 있습니다 R. 이 지역에서 성숙합니까? 이용 가능한 문서 나 지침이 거의없는 것 같습니다. 승산 비 출력을 생성하려면 설치 epicalc및 / 또는 epitools기타 작업이 필요합니다. 어느 것도 작업 할 수 없거나 구식이거나 문서가 부족합니다. 나는 glm로지스틱 회귀를 사용했습니다. 모든 제안을 환영합니다.

나는 이것을 실제 질문으로 만드는 것이 좋습니다. 로지스틱 회귀 분석을 실행하고 배당률을 R어떻게 계산합니까?

일 변량 분석을 위해 수행 한 작업은 다음과 같습니다.

x = glm(Outcome ~ Age, family=binomial(link="logit"))

다변량의 경우 :

y = glm(Outcome ~ Age + B + C, family=binomial(link="logit"))

나는 다음을 검토 한 결과 x, y, summary(x)summary(y).

x$coefficients어떤 가치?

답변:


36

추정 된 효과를 상대 승산 비로 해석 exp(coef(x))하려면 를 사용하십시오 ( 와 관련된 공변량 이 1 증가 하면 에 대한 승산 비의 곱셈 변화를 줄 수 있습니다 ). 이 수량에 대한 프로파일 우도 구간의 경우 다음을 수행 할 수 있습니다. y = 1 βeβy=1β

require(MASS)
exp(cbind(coef(x), confint(x)))  

편집 : @ caracal이 더 빨랐습니다 ...


1
@fabian의 제안에 +1. 일반적으로 비슷한 간격을 생성하는 열등한 방법은 로짓 척도의 간격을 계산 한 다음 승산 척도로 변환하는 것 cbind( exp(coef(x)), exp(summary(x)$coefficients[,1] - 1.96*summary(x)$coefficients[,2]), exp(summary(x)$coefficients[,1] + 1.96*summary(x)$coefficients[,2]) )입니다. 델타 방법도 있습니다 : ats.ucla.edu/stat/r/faq/deltamethod.htm
lockedoff

42

R의 출력에는 일반적으로 필수 정보 만 포함되어 있으며 더 많은 것을 별도로 계산해야합니다.

N  <- 100               # generate some data
X1 <- rnorm(N, 175, 7)
X2 <- rnorm(N,  30, 8)
X3 <- abs(rnorm(N, 60, 30))
Y  <- 0.5*X1 - 0.3*X2 - 0.4*X3 + 10 + rnorm(N, 0, 12)

# dichotomize Y and do logistic regression
Yfac   <- cut(Y, breaks=c(-Inf, median(Y), Inf), labels=c("lo", "hi"))
glmFit <- glm(Yfac ~ X1 + X2 + X3, family=binomial(link="logit"))

coefficients()추정 된 회귀 모수 합니다. 를 해석하는 것이 더 쉽습니다 (절편 제외). e x p ( b j )bjexp(bj)

> exp(coefficients(glmFit))
 (Intercept)           X1           X2           X3 
5.811655e-06 1.098665e+00 9.511785e-01 9.528930e-01

승산 비를 얻으려면 원래 이분법 DV의 분류 교차 테이블과 먼저 선택해야 할 확률 임계 값에 따라 예측 분류가 필요합니다. ClassLog()패키지에서 함수 를 볼 수도 있습니다 QuantPsyc( 관련 질문에 언급 된 chl 참조 ).

# predicted probabilities or: predict(glmFit, type="response")
> Yhat    <- fitted(glmFit)
> thresh  <- 0.5  # threshold for dichotomizing according to predicted probability
> YhatFac <- cut(Yhat, breaks=c(-Inf, thresh, Inf), labels=c("lo", "hi"))
> cTab    <- table(Yfac, YhatFac)    # contingency table
> addmargins(cTab)                   # marginal sums
     YhatFac
Yfac   lo  hi Sum
  lo   41   9  50
  hi   14  36  50
  Sum  55  45 100

> sum(diag(cTab)) / sum(cTab)        # percentage correct for training data
[1] 0.77

승산 비의 경우 패키지를 사용 vcd하거나 수동으로 계산을 수행 할 수 있습니다.

> library(vcd)                       # for oddsratio()
> (OR <- oddsratio(cTab, log=FALSE)) # odds ratio
[1] 11.71429

> (cTab[1, 1] / cTab[1, 2]) / (cTab[2, 1] / cTab[2, 2])
[1] 11.71429

> summary(glmFit)  # test for regression parameters ...

# test for the full model against the 0-model
> glm0 <- glm(Yfac ~ 1, family=binomial(link="logit"))
> anova(glm0, glmFit, test="Chisq")
Analysis of Deviance Table
Model 1: Yfac ~ 1
Model 2: Yfac ~ X1 + X2 + X3
  Resid. Df Resid. Dev Df Deviance P(>|Chi|)    
1        99     138.63                          
2        96     110.58  3   28.045 3.554e-06 ***

2
감사합니다-귀하의 답변을주의 깊게 살펴 봐야합니다. STATA에서 하나는 실행 logit하고 logistic쉽게 교차비 및 신뢰 구간을 얻을. 나는 이것이 너무 복잡하고 비표준 적 인 것으로 다소 실망했습니다 R. exp(cbind(coef(x), confint(x)))OD와 CI를 얻기 위해 아래 fabians의 답변을 사용할 수 있습니까 ? 귀하의 답변이 무엇을 제공하는지 잘 모르겠습니다.
SabreWolfy

3
@SabreWolfy 나는 당신이 무엇을 말하는지 확신하지 못했습니다. 원래, 나는 당신이 분류 표의 OR을 실제 카테고리 멤버십과 예측 멤버십 ( cTab내 대답 의 일부) 을 비교하는 OR을 의미한다고 생각했습니다 . 그러나 지금 당신은 아마 의미한다는 것을 알 것입니다 : fabians가 설명했듯이 는 가 1 단위 증가 할 때 예상 확률이 변하는 요인과 같습니다 . 이것은 "1 단위 증가 전"대 "1 단위 증가 전"의 확률 비율입니다. 그래서, 당신은 단지 fabians 답변을 사용할 수 있습니다. e x p ( b j ) X jexp(bj)exp(bj)Xj
caracal

4
실제로 @SabreWolfy 사람들이 stata / sas / spss 등에서 단일 버튼을 클릭하고 의미에 대한 단서없이 승률 (삽입 통계, 유형 III SS 등)을 얻을 수 있다는 것이 실망 스럽습니다. 그것을 계산하는 방법 / 언어 자체에 대한 실무 지식이없는 특정 상황에서 (그리고 아마도 더 중요하게) 의미가 있는지 여부.
rawr


4

epiDisplay 패키지는이 작업을 매우 쉽게 수행합니다.

library(epiDisplay)
data(Wells, package="carData")
glm1 <- glm(switch~arsenic+distance+education+association, 
            family=binomial, data=Wells)
logistic.display(glm1)
Logistic regression predicting switch : yes vs no 

                       crude OR(95%CI)         adj. OR(95%CI)         P(Wald's test) P(LR-test)
arsenic (cont. var.)   1.461 (1.355,1.576)     1.595 (1.47,1.731)     < 0.001        < 0.001   

distance (cont. var.)  0.9938 (0.9919,0.9957)  0.9911 (0.989,0.9931)  < 0.001        < 0.001   

education (cont. var.) 1.04 (1.021,1.059)      1.043 (1.024,1.063)    < 0.001        < 0.001   

association: yes vs no 0.863 (0.746,0.999)     0.883 (0.759,1.027)    0.1063         0.1064    

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