[SAS] 단순 선형 회귀 분석 (Simple linear regression) - PROC REG
지난 상관관계 분석에서 우리는 서로 다른 두 변수가 얼마나 관련되어 있는지를 알아보았다. 즉, 한 변수의 값으로 다른 변수의 값을 예측할 수 있는 정도인 "예측도"의 관점에서 상관 계수를 이해하였다.(2023.04.10 - [상관분석/SAS] - [SAS] 피어슨 상관 계수 (Pearson's correlation coefficient) - PROC CORR) 그런데, 상관 계수의 단점은 "예측도"만 확인할 수 있을 뿐, 실제로 예측을 할 수는 없다. 가령, 수축기 혈압(SBP)이 120인 사람의 심혈관 질환 위험 점수 (CVD_RISK)가 얼마인지는 알 수 없는 것이다. 이걸 가능하게 하는 것이 선형 회귀 분석 (linear regression)이다. 본 포스팅에서는 독립 변수가 1개인 단순 선형 회귀 분석 (simple linear regression)을 시행해 보도록 하겠다. 이는 독립 변수가 1개라는 점에서 univariate linear regression이라고도 부른다.
*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.
2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.12.18)
시작하기 위해 라이브러리를 만들고, 파일을 불러온다.
라이브러리 만드는 방법: 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;
목표: 수축기 혈압(SBP)으로 심혈관 질환 위험 점수 (CVD_RISK)를 예측할 수 있는가?
선형 회귀 분석은 PROC REG이라는 함수를 사용한다.
코드
PROC REG DATA=hong.df;
MODEL CVD_RISK=SBP;
RUN;
PROC REG DATA=hong.df; : 회귀분석을 시행하는 코드를 시작한다 (PROC REG). 데이터는 hong 라이브러리의 df 데이터를 사용한다.
MODEL CVD_RISK=SBP; : 독립변수를 SBP로, 종속변수를 CVD_RISK로 하는 선형 회귀 분석을 시행한다
결과
하나씩 살펴보도록 하자.
SBP에 관한 것부터 보자.
추정치(Estimate)는 1.10193이다. 이는 SBP가 1 증가할 때, CVD_RISK가 1.101935 증가한다는 의미다. 즉, 이는 $xy$평면에서 기울기를 의미하고, 양의 상관관계가 있다는 말이다. 이 값은 논문에서 종종 $\beta$값으로 불린다.
추정치의 표준 오차는 0.00906다. 이는 추정치(Estimate)의 변동가능성을 의미하고, 이보다 오른쪽에 있는 Pr>|t|를 구할 때 사용된다.
Pr>|t|는 0.0001보다 작다. 이는 p-value를 의미하는데, $0.0001$보다 작으므로 매우 유의한 결과임을 알 수 있다. 그러므로 귀무가설을 기각하면 되는데, 선형 회귀분석에서는 귀무가설과 대립가설이 무엇일까?
귀무가설: $H_0=$ 추정치(Estimate)는 0이다. 즉, 이 표본이 기원한 모집단에서 SBP와 CVD_RISK는 아무런 관련성이 없다.
대립가설: $H_1=$ 추정치(Estimate)는 0이 아니다. 즉, 이 표본이 기원한 모집단에서 SBP와 CVD_RISK는 모종의 관련성이 있다.
따라서, 우리는 SBP와 CVD_RISK 사이의 양의 상관관계가 유의미하며, 추정치 1.10193는 유의미하다고 결론 내린다.
하지만, 우리가 선형 회귀 분석을 시작한 목적은 SBP의 값으로 CVD_RISK의 값을 예측하기 위함이었는데, 기울기만 알아서는 $xy$평면에서 직선을 그릴 수 없다. 우리는 $y$절편 또한 알아야 한다. 따라서 Intercept값을 보아야 한다.
Intercept는 23.036415이다. 사실 이 값에 대한 p-value는 큰 의미가 없다. 왜냐하면 우리는 이 값이 0이든 아니든 관심이 없기 때문이다.
어찌 되었든 우리는 SBP와 CVD_RISK사이의 관계식이 다음과 같음을 알 수 있게 되었다.
$CVD\_RISK=23.036415+1.101935\times SBP$
그런데 결과창에 보면 SBP와 CVD_RISK의 산점도와 추세선을 같이 그려주고 있다.
추세선처럼 데이터에서 SBP가 증가할수록 CVD_RISK가 증가하고 있다. 하지만 모든 데이터가 완벽히 선 위에 있는 것은 아니다. 선 위의 값들은 예측된 값이므로 실제값과는 차이가 있다. 이 차이를 Residual라고 한다.
그럼 위 산점도의 오른쪽에 있는 숫자들을 보자. 이 내용은 결과창에서 표로도 제시하고 있다.
이 숫자들의 의미는 다음과 같다.
Root MSE(Mean Squared Error) 이는 위 산점도 옆 숫자들 중 MSE (26.793)에 루트를 씌운 값이다. 이는 위에서 설명한 residual의 표준오차가 5.176이라는 뜻이다.
(산점도 그림의) Error DF 오차의 자유도가 998인데 자유도(degrees of freedom)가 언급된 이유는, 표준오차를 계산할 때 자유도를 이용하기 때문이다. 998인 이유는, 쉽게 설명하면 표본의 수인 1000에서 변수(SBP, Intercept=y절편)의 수인 2를 뺀 것이다. 어렵게 설명하면, 총 분산은 표본의 수에서 1을 뺀 999개의 자유도를 갖는다. 그리고, 모델 자체의 자유도는 변수의 수(2)에서 1을 뺀 1개의 자유도를 갖는다. 따라서 총 분산의 수(999)에서 모델의 자유도(1)을 뺀 998이 도출된다.
Dependent Mean : 종속변수인 CVD_RISK의 평균이다.
Coeff Var: 변동계수 (Coefficient of variance)에 100을 곱한 것이다. 따라서 다음 수식에 따라 구해진 것이다. $$Coeff\,Var = 100\times \frac {Root MSE} {Dependent Mean} =100\times \frac {5.17622}{171.82726}$$
R-squared: 0.9369 : R squared는 SBP가 CVD_RISK를 어느 정도 설명하는지를 의미한다. 여기에서는 SBP가 CVD_RISK를 93.69% 설명한다고 말할 수 있다.
Adj(usted) R-squared: 0.9368 : 본 분석은 독립 변수가 1개이므로 별로 의미는 없는 지표이다. 그럼에도 불구하고 Adjusted R-squared를 설명하면, 다음과 같다. 독립 변수가 많아지면 많아질수록 종속 변수를 설명하는 능력은 증가되기 마련이다. 하지만 마냥 변수가 많아진다고 실제로 설명력이 높아지는 것은 아니다. 따라서 어느 정도의 패널티를 주어야 하는데, 이 패널티를 고려한 것이 Adjusted R-squared이다.
다루지 않고 남은 한 개의 표를 마저 보자.
이 표는 분산분석 표다.
1. DF: 자유도를 의미한다. 이렇게 숫자가 계산되는 이유는 위에서 밝히었다.
2. Sum of Squares: 분산분석 표에서 흔히들 이야기하는 SSR, SSE, SST에 관한 이야기다.
Sum of Squares | |
Model | SSR |
Error | SSE |
Corrected Total | SST |
이를 구하는 방법, 그리고 관계식 등에 대한 내용은 다음 링크를 확인하길 바란다. 링크 추가 예정
3. Mean Square: Sum of Squares를 DF로 나누어 구한다.
4. F Value: 이는 Model의 Mean Square를 Error의 Mean Square로 나누어 구한다. 이 값은 F 분포를 따른다고 알려져 있으므로, 이에 해당하는 p-value를 구할 수 있고, 이는 Pr>F의 column에 나타나있다.
이 내용은 사실 독립 변수가 1개인 본 분석에는 별로 의미가 없다. 그럼에도 불구하고 설명하면. 이 p-value의 귀무가설은 "모든 독립 변수의 Estimate가 0이다"이다. p-value가 0.05보다 작으므로 적어도 한 개 이상의 Estimate가 유의미한 값을 갖는다는 결론을 내리게 된다. 하지만 여기에서는 독립 변수가 원래 1개이므로 그 독립변수, SBP가 유의미하다는 것을 알 수 있다.
가정
단순 선형 회귀 분석 자체는 간단하지만, 단순 선형 회귀 분석 시행의 전제조건을 따지는 것이 이보다 까다롭고 더 중요하다. 이는 내용이 꽤 많으므로 다음 포스팅을 참고하길 바란다. 링크 추가 예정
독립 변수의 종류: 연속형
필자는 연속형 변수인 SBP를 독립 변수로 사용하였다. 만약 범주형 변수를 사용하고자 한다면 분석 방법이 약간은 달라지게 된다. 이에 관한 내용은 다음 링크에서 확인할 수 있다. 링크 추가 예정
코드 정리
*라이브러리 지정하기;
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;
RUN;
[SAS] 단순 선형 회귀 분석 (Simple linear regression) 정복 완료!
작성일: 2023.05.14.
최종 수정일: 2023.05.14.
이용 프로그램: SAS v9.4
운영체제: Windows 11