반응형

[SAS] 다중 선형 회귀 분석 (Multiple linear regression) - PROC REG, PROC GLM

 

 지난 포스팅에서 연속형 변수의 단순 선형 회귀 분석 (Simple linear regression: 2023.05.14 - [선형 회귀 분석/SAS] - [SAS] 단순 선형 회귀 분석 (Simple linear regression) - PROC REG), 범주형 변수의 단순 선형 회귀 분석 (Simple linear regression with categorical variables: 2023.10.19 - [선형 회귀 분석/SAS] - [SAS] 범주형 변수의 선형 회귀 분석 (Simple linear regression with categorical variable) - PROC REG, PROC GLM)에 대해 알아보았다.  위 분석들은 모두 독립 변수가 1개인 단순 선형 회귀 분석이다. 하지만 세상 일은 그렇게 단순하지 않다. 

 

교란 변수 (Confounder, confounding variable)

 우리는 앞서  연속형 변수의 단순 선형 회귀 분석 (Simple linear regression: 2023.05.14 - [선형 회귀 분석/SAS] - [SAS] 단순 선형 회귀 분석 (Simple linear regression) - PROC REG) 포스팅에서 수축기 혈압과 심혈관 질환의 관련성을 찾아보았다. 그런데, 비만인 사람은 혈압이 대체적으로 높은 것으로 알려져 있다. 더구나 비만인 사람은 심혈관 질환의 위험도도 높아지는 것으로 알려져 있다. 그렇다면, "수축기 혈압이 높았던 사람에게서 높은 심혈관 질환 위험 점수가 발견되었던 것은 그냥 그 사람이 비만도가 높아 당연히 수축기 혈압도 높고, 심혈관 질환 위험 점수도 높았던 것이 아닐까?"라는 의문이 든다. 즉, "우리가 이전 단순 선형 회귀 분석에서 발견한 과학적 현상(수축기 혈압이 높으면 심혈관 질환 위험 점수가 높아진다.)은 사실은 비만 때문이 아니었을까?"라는 의문이 들게 된다. 이렇게 독립변수와 종속변수 모두의 원인이 되는 변수를 교란 변수라고 하며, 이런 현상(교란)은 통계 분석을 할 때 반드시 교정을 해야 한다. (사실 독립변수는 인과적 관계가 아니라 연관 관계이기만 해도 충분하다.)

교란 현상의 해결 방법: 다중 회귀 분석

 교란 현상을 해결하는 방법은 보정(adjustment)과 층화(stratification)가 있다. 층화도 좋은 방법이고, 때로는 보정을 할 수 없어 층화를 해야만 할 때도 있지만, 보통 표본의 수가 부족해지는 문제가 있기 때문에, 층화가 아니라 보정을 시행하곤 한다. 보정을 시행할 수 있는 방법으로는 이전에 다룬 편상관 분석(2023.04.20 - [상관분석/SAS] - [SAS] 편상관 계수, 부분 상관 계수 (Partial correlation coefficient) - PROC CORR)이 있다. 하지만 이는 상관 계수만 구할 수 있어 "예측할 수 있는 정도"만 표현할 수 있다. 그 대신 비만도의 영향을 보정했을 때, 수축기 혈압이 1 단위 증가할 때 심혈관 질환 위험 점수가 얼마나 증가하는지(기울기)를 알 수 있는 방법으로는 본 포스팅에서 다룰 다중 선형 회귀 분석이 있다.

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.12.18)

 

분석용 데이터 (update 22.12.18)

2022년 12월 18일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 상관분석 - 반복 측정 자료

medistat.tistory.com

 

시작하기 위해 라이브러리를 만들고, 파일을 불러온다.

라이브러리 만드는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 라이브러리 만들기 - LIBNAME

파일 불러오는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 데이터 불러오기 및 저장하기 - PROC IMPORT, PROC EXPORT

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

 

 

목표:  BMI의 영향을 배제 혹은 교정했을 때 수축기 혈압(SBP)이 1 단위 증가할 때 심혈관 질환 위험 점수(CVD_RISK)는 얼마나 증가하는가?

 

단순 선형 회귀 분석과 같이 PROC REG 명령어를 사용하며, 코드는 다음과 같다.

코드

PROC REG DATA=hong.df;
MODEL CVD_RISK=SBP BMI;
RUN;

PROC REG DATA=hong.df; : 선형 회귀분석을 시작하라. 데이터는 hong 라이브러리에 있는 df를 사용하라.

 독립변수에 사용된 SBP, BMI 모두 연속변수이기에 PROC GLM이 아니라 REG를 사용해도 무방하다.
MODEL CVD_RISK=SBP BMI; :  종속 변수는 CVD_RISK로, 독립 변수에는 SBP와 BMI를 사용하라. SBP와 BMI의 순서가 바뀌는 것은 아무 상관이 없다. 즉, BMI를 보정했을 때의 SBP의 영향과 SBP를 보정했을 때의 BMI의 영향을 동시에 파악하는 것이다.

 

결과

해석의 방법은 단순 선형 회귀 분석에서와 같다. (2023.05.14 - [선형 회귀 분석/SAS] - [SAS] 단순 선형 회귀 분석 (Simple linear regression) - PROC REG) 그리고, Analysis of Variance Table, Root MSE, R-Square, Dependent Mean, Adj R-Sq, Coeff Var에 대한 내용도 위 단순 선형 회귀 분석 링크에서 확인할 수 있다.

 

 BMI의 영향을 보정하더라도, SBP가 1 단위 증가할 때 CVD_RISK는 0.99389만큼 증가하며 이에 대한 p-value는 0.0001보다 작아 매우 유의함을 알 수 있다. 

 또한, SBP의 영향을 보정하더라도, BMI가 1 단위 증가할 때 CVD_RISK는 1.08243만큼 증가하며 이에 대한 p-value는 0.0001보다 작아 매우 유의함을 알 수 있다. 

 

즉, 단순 회귀 분석에서 나타난 수축기 혈압과 심혈관 질환 위험 점수 사이의 유의한 관련성은 BMI의 영향을 보정하더라도 유의함을 알 수 있다. 또한, 단순 회귀 분석에서의 회귀 계수  1.10193보다 작으므로, 일부분의 설명력은 BMI에게 빼았겼음을 알 수 있다.

 

 

보정 변수가 두 개 이상일 때 코드

 BMI 외에 흡연 상태로도 보정하고 싶을 수 있다. 이럴 땐 어떻게 해야 할까? 답은, 단순히 BMI 뒤에 추가적인 보정변수를 띄어쓰기를 이용하여 나열하면 된다. 그런데, 선형 회귀 분석 전에 연속형 변수와 범주형 변수의 전처리가 다르다는 것을 일전에 소개한 적이 있다. 범주형 변수는 분석 전에 범주형 자료임을 SAS에게 알려주어야 한다. 내용은 다음 링크를 확인하면 된다.

연속형 변수: 2023.05.14 - [선형 회귀 분석/SAS] - [SAS] 단순 선형 회귀 분석 (Simple linear regression) - PROC REG

범주형 변수: 2023.10.19 - [선형 회귀 분석/SAS] - [SAS] 범주형 변수의 선형 회귀 분석 (Simple linear regression with categorical variable) - PROC REG, PROC GLM

 그런데, 흡연 상태 (SMOK)는 범주형 자료다. 따라서 선형 회귀 분석을 시행하기 전에 범주형임을 알려주어야 한다.

PROC GLM DATA=hong.df;
CLASS SMOK(REF='0');
MODEL CVD_RISK= SBP BMI SMOK/SOLUTION;
RUN;
QUIT;

PROC GLM DATA=hong.df; : 선형 회귀분석을 시작하라. 데이터는 hong 라이브러리에 있는 df를 사용하라.

 독립변수에 사용된 SMOK가 범주형 변수이기에 PROC REG이 아니라 GLM를 사용해야만 한다.

CLASS SMOK(REF='0'); : SMOK는 범주형 자료다. 참고치는 0으로 한다.
MODEL CVD_RISK= SBP BMI SMOK/SOLUTION;  : 결과변수는 CVD_RISK, 독립변수는 SBP, BMI, SMOK이다. 각 변수에 대한 beta값, 표준오차, p-value 등을 산출하라. (SOLUTION)
RUN; : 실행하라.
QUIT; : GLM을 종료하라. (QUIT이 필요하지 않은 다른 구문을 추가로 시행해도 상관없다.)

 

결과

 

 SBP, BMI는 유의한 결과를 보이고 있지만, SMOK는 1(과거 흡연자), 2(현재 흡연자) 모두 유의한 결과를 보이고 있지 않다. 

"BMI와 흡연 상태로 보정을 하였을 때, 수축기 혈압 1 단위 증가할 때, CVD_RISK는 0.98417668점 증가한다"라고 할 수 있지만

"SBP와 BMI로 보정을 하였을 때, 비흡연자와 과거 흡연자 혹은 비흡연자와 현재 흡연자 사이의 CVD_RISK의 차이는 존재하지만 유의하다고 할 수 없다."라고 결론 내리게 된다.

 또한 중요한 것은, 만약 SMOK를 단순히 보정변수로만 보고 CVD_RISK와 SBP 사이의 관계만 확인하고 싶다면, SMOK의 참고치(REF)를 무엇으로 설정하든 같은 결과를 낸다는 것이다. 따라서 주된 독립변수가 아니라면 REF를 무엇으로 잡을지 크게 신경 쓰지 않아도 될 뿐만 아니라, 따로 지정을 하지 않아도 상관없다.

 

위 두 개의 표는 다음 링크에서 내용을 확인하길 바란다. (2023.05.14 - [선형 회귀 분석/SAS] - [SAS] 단순 선형 회귀 분석 (Simple linear regression) - PROC REG) CVD_RISK Mean 은 위 링크에서 "Dependent Mean"에 해당한다.

위 두 개의 표 SS(Sum of Squares)에 관한 것인데, Type I과 Type III가 있다. 이는 다음 링크에서 내용을 확인하길 바란다. (링크 추가 예정)

코드 정리

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

*다중 선형 회귀분석 시행;
PROC REG DATA=hong.df;
MODEL CVD_RISK=SBP BMI;
RUN;


PROC GLM DATA=hong.df;
CLASS SMOK(REF='0');
MODEL CVD_RISK= SBP BMI SMOK/SOLUTION;
RUN;
QUIT;

 

[SAS] 다중 선형 회귀 분석 (Multiple linear regression) 정복 완료!

작성일: 2023.10.22.

최종 수정일: 2023.10.23.

이용 프로그램: SAS v9.4

운영체제: Windows 11

반응형
반응형

[이론] 보통최소제곱법 (Ordinary Least Squares)

 의학통계를 비롯한 많은 통계에서 모수(parameter)를 추정할 때 가장 많이 쓰이는 방법 중 하나가 보통최소제곱법(Ordinary Least Squares)이다. 이에 대해 알아보고자 한다. 보통최소제곱법 (Ordinary Least Squares)은 최소제곱법 (Least Squares)와 다른 것이지만 많이들 구분하지 않고 사용하고 있다. 본 글에서는 철저히 구분하여 사용할 것이다.

 

최소제곱법 (Least Squares)

  최소제곱법의 분류를 이해하기 위해서는 최소제곱법이 무엇인지 알아야 한다. 

 네 개의 표본으로부터 얻은 데이터를 다음과 같이 좌표평면 위에 표시했다고 하자.

누군가가 "이 데이터는 적절한 선형 관계로 표시할 수 있을 것 같아."라고 생각하였고, 적절한 선을 다음과 같이 그렸다고 하자.

 다른 누군가는 이 직선이 아니라, 기울기와 $y$절편이 조금은 다른 직선이 더 적절하다고 주장할 수도 있다. 그렇다면 어떤 기준으로 직선을 정해야 다수가 받아들일 수 있을까? 그에 대한 답 중 하나가 최소제곱법(Least Squares)이다.

 

최소 제곱법은 직선 관계에서만 답을 내어줄 수 있는 것은 아니다. 또 다른 누군가는 직선이 아니라 아래와 같은 이차함수가 더 적절하다고 주장할 수 있고, 다른 누군가는 오른/왼쪽으로 조금 이동한 이차함수가 더 적절하다고 주장할 수 있다.

 최소제곱법 (Least Squares)은 이런 문제들에 대한 답을 내어준다. 직선 관계로 표현하기로 마음먹었다면, 어떤 직선이 데이터를 가장 잘 설명하는지 답을 내어줄 수 있다. 이차 함수 관계로 표현하기로 했다면, 어떤 이차 함수가 가장 잘 설명하는지 알려줄 수 있다. 

 요약하면, 최소제곱법은 잔차를 제곱한 것들의 합이 최소화되는 순간을 찾는 테크닉이다. 방법은 다음과 같다.

1) 데이터를 잘 설명할 것으로 예상되는 임의의 직선을 그린다. 

2) 그 직선 위 $x$좌표가 데이터의 $X_1 (x_1,y_1)$의 x좌표$(x_1)$와 같은 점$(\hat{X_1})$의 $y$값$(\hat{y_1})$은 직선 관계를 사용하여 구한 예측치다.

3) 실제 $y$값$(x_1)$과 예측치$(\hat{y_1})$의 차이를 잔차라고 한다. (오렌지색 선분)

4) 오렌지색 선분들이 짧으면 짧을 수록, 직선이 데이터를 잘 설명한다고 할 수 있다. 그런 목적으로 잔차의 합을 구하면 문제가 발생한다. 데이터들은 직선 위에도, 아래에도 있으므로 잔차는 +, - 두 가지가 모두 존재한다. 따라서 단순 합산은, 오렌지색 선분이 아무리 길어도 잘 상쇄되기만 하면 0이 될 수도 있다. 그러므로 그냥 더하는 것이 아니라 제곱을 하여 더하게 된다. 이는 통계에서 분산이 편차의 합이 아닌, 편차의 제곱의 합인 이유와 같다.

5) 편차의 제곱의 합을 최소로 만드는 기울기와 $y$절편을 구하면 된다.

 

최소제곱법 (Least Squares)의 분류

사실 위 설명은 최소제곱법 중 하나인 보통최소제곱법 (Ordinary Least Squares, OLS)에 대한 설명이다. 최소제곱법의 분류는 다음과 같다.

1. Linear Least Squares : 선형

 - Ordinary Least Squares

 - Weighted Least Squares : 등분산성이 보장되지 않을 때

 - Generalized Lieast Squares : 등분산성뿐만 아니라 자기상관 등 문제가 있을 

2. Non-Linear Least Squares

 

 

보통최소제곱법 (Ordinary Least Squares, OLS)의 계산법

 지금부터는 실제로 잔차 제곱의 합을 최소화하는 기울기와 $y$절편을 구해보고자 한다.

직선의 방정식은 다음과 같다고 하자

$$y=ax+b$$

데이터는 $n$개의 표본으로 이루어져 있으며, 각 데이터는 다음과 같이 표현된다 

$$X_{i} (x_i, y_i), where \; i\in\mathbb{N}\; AND\; 1\leq i\leq n $$

그럼 $X_{i} (x_i, y_i)$의 잔차 $d_i$는 다음과 같이 계산된다.

$$d_i=y_i - (ax_i +b) $$

잔차의 제곱의 합은 다음과 같다.

$$\sum_{i=1}^{n} {\left(y_i -ax_i-b \right)^2}$$

 

이 값이 최소화되는 지점에서는 $a$에 대해서든, $b$에 대해서든 편미분을 하면 0이 된다.

$$ \frac {\partial} {\partial a} \sum_{i=1}^{n} {\left(y_i -ax_i-b \right)^2} =-2\sum_{i=1}^{n} {x_i \left(y_i - ax_i -b \right) } = 0 \cdots (1) $$

$$ \frac {\partial} {\partial b} \sum_{i=1}^{n} {\left(y_i -ax_i-b \right)^2} =-2\sum_{i=1}^{n} {\left(y_i - ax_i -b \right)}=0 \cdots (2) $$

 

(2)식에서 다음을 얻는다.

$$ \begin{align} b&= \frac {\sum_{i=1}^{n} y_i} {n} - a \frac {\sum_{i=1}^{n} x_i}{n} \\ &=\bar{Y} - a\bar{X} \\&&\end{align} $$

 

이를 (1) 식에 대입하면 다음을 얻는다.

$$ \begin{align} a &= \frac {\sum_{i=1}^{n}x_i \left( y_i - \frac {\sum_{i=1}^{n} y_i } {n} \right)} {\sum_{i=1}^{n} x_i \left(x_i - \frac {\sum_{i=1}^{n} x_i} {n} \right)} \\ &= \frac {\sum_{i=1}^{n} x_i \left( y_i - \bar{Y} \right)} {\sum_{i=1}^{n} x_i \left( x_i - \bar{X} \right)} \cdots(3) \\&&\end{align}$$

 

한편, 

$$ \sum_{i=1}^{n} \left( \bar{X}^2 - x_i \bar{X} \right)= \bar{X} \sum_{i=1}^{n} \left( \bar{X} - x_i \right)=0$$

$$ \sum_{i=1}^{n} \left( \bar{X}y_i - \bar{X}\bar{Y} \right)=\bar{X} \sum_{i=1}^{n} \left( y_i - \bar{Y} \right)=0$$

이므로 (3)식의 분자, 분모는 다음과 같이 쓸 수 있다.

$$\sum_{i=1}^{n} x_i \left(y_i - \bar{Y} \right) = \sum_{i=1}^{n} \left[ x_i \left(y_i - \bar{Y}\right)- \left(\bar{X} y_i - \bar{X}\bar{Y} \right)\right] = \sum_{i=1}^{n} \left(x_i - \bar{X} \right) \left( y_i - \bar{Y} \right) = (n-1) cov \left(X,Y \right) $$

$$\sum_{i=1}^{n} x_i \left( x_i - \bar{X} \right)=\sum_{i=1}^{n} \left[ x_i  \left( x_i - \bar{X} \right) + \left( -x_i\bar{X} + \bar{X}^2 \right) \right]=\sum_{i=1}^{n} \left( x_i - \bar{X} \right)^2 =(n-1) var(X)$$

따라서 다음을 얻는다.

$$a= \frac {cov \left(X,Y \right)} {var(X)}$$

$$b=\bar{Y} - \bar{X} \frac {cov \left(X,Y \right)} {var(X)}$$

 

값이 하나라는 점에서도 알 수 있지만, Local minima가 존재하지 않음을 알 수 있고, 이는 바로 global minima임을 알 수 있다.

 

이렇게, 선형 회귀분석에서 적절한 회귀 계수들을 찾는 방법인 최소제곱법에 대해 알아보았다. '최소제곱법을 통해 구한 값이 정말 최적일까?'라는 질문에 대한 답변은 '가우스-마르코프 정리 Gauss-Markov Theorem'을 통해 얻을 수 있다. 해당 내용은 다음 링크에서 알아볼 수 있다. 링크 추가 예정 

 

[이론] 보통최소제곱법 (Ordinary Least Squares) 정복 완료!

 

작성일: 2023.06.15.

최종 수정일: 2023.06.15.

반응형

+ Recent posts