Translate

2019년 4월 4일 목요일

로지스틱 회귀 분석 (1)



 로지스틱 회귀분석 (Logistic regression analysis)는 의학을 비롯해 다양한 분야에 매우 널리 사용되는 분석방법입니다. 결과가 몇 가지 범주로 나눠지는 경우 사용할 수 있는 방법으로 위험 요인에 따른 질병 발생의 유무가 대표적인 경우입니다. 예를 들면 비만에 의한 당뇨 발생률의 차이를 들수 있습니다. 자세한 이론적인 설명은 생략하고 여기서는 R을 이용한 분석 방법에 대해서 알아보겠습니다. 


 앞서 살펴본 예제 가운데 피마 인디언 데이터를 이용해서 체질량지수 (BMI)와 당뇨 발생의 정도를 비교해 보겠습니다. 


library(mlbench)

data(PimaIndiansDiabetes)
pima <- pimaindiansdiabetes="" span="">

summary(pima)


 여기서 mass (BMI)에는 결측치가 없어야 하기 때문에 0으로 표기된 결측치를 모두 제거해야 합니다. 그러면 757개의 관측치가 남을 것입니다. 


pima<-subset mass="" pima="">0)


 정확한 데이터 분석을 위해서는 사실 데이터에 대한 이해가 가장 중요합니다. 간단하게라도 BMI의 데이터 분포와 당뇨 발생과의 관계를 그려보겠습니다. 


#visualization

d=density(pima$mass,na.rm=TRUE)
plot(d,"Density Plot of BMI",col="red",lty=5)
rug(pima$mass)

boxplot(pima$mass~pima$diabetes,data=pima)






 데이터 분포를 보면 피마 인디언의 BMI는 상당히 높은 편이며 당뇨가 있는 경우 더 높은 것으로 보입니다. 이제 glm 을 사용해서 로지스틱 회귀 분석을 해보겠습니다. 이 경우 결과가 두 가지로 나눠지는 이분형이라는 점과 데이터를 써주는 것이 기본 문법입니다. 


out=glm(diabetes~mass,family=binomial,data=pima)
summary(out)


> out=glm(diabetes~mass,family=binomial,data=pima)
> summary(out)

Call:
glm(formula = diabetes ~ mass, family = binomial, data = pima)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0094  -0.9184  -0.6598   1.2254   1.9107  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.99682    0.42885   -9.32  < 2e-16 ***
mass         0.10250    0.01261    8.13 4.31e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 981.53  on 756  degrees of freedom
Residual deviance: 904.89  on 755  degrees of freedom
AIC: 908.89

Number of Fisher Scoring iterations: 4


 여러 가지 이야기가 나오는데 여기서 우선적으로 볼 것은 회귀 계수입니다. 추정 회귀 계수 (Estimate)는 0.10250이 나왔습니다. 그리고 P 값은 4.31e-16이므로 매우 유의합니다. 그런데 보통 로지스틱 회귀 분석의 결과는 회귀 계수로 이야기 하지 않고 OR 값 (Odds ratio, 승산비)로 표기합니다. OR값과 이 OR값의 95% 신뢰구간 (CI)을 표기하는 것이 일반적인데 OR값과 회귀 계수가 어떻게 다른지는 아래 글을 참조하면 좋을 것 같습니다. 




 아무튼 OR값과 95% CI 값을 쉽게 구할 수 있는 패키지가 moonBook 패키지입니다. 국내 R 커뮤니티에서 상당한 기여를 한 문건웅 선생님이 만든 패키지로 저도 유용하게 사용하고 있습니다. extractOR 기능은 OR 값을 쉽게 표기해줍니다. 


library(moonBook)
extractOR(out)


> library(moonBook)
> extractOR(out)
              OR  lcl  ucl p
(Intercept) 0.02 0.01 0.04 0
mass        1.11 1.08 1.14 0


 이 결과를 해석하면 BMI가 1 증가할 때마다 당뇨 가능성은 1.11배 증가한다는 것입니다. 95% 신뢰 구간은 1.08배에서 1.14배입니다. 적용은 매우 간단하지만, 로지스틱 회귀 분석 역시 여러 가지 분석 기법과 생각해야 하는 문제들이 있습니다. 앞으로 계속해서 이야기 해보겠습니다. 








댓글 없음:

댓글 쓰기