상세 컨텐츠

본문 제목

[SAS] 선형회귀분석 (feat. PROC REG 더미변수 만들기)

SAS

by 대학원생D군 2023. 4. 8. 20:22

본문

반응형

안녕하세요,

이번 포스팅에서는 SAS 프로그램에서 코드를 작성하여 선형회귀분석을 하는 방법을 살펴보겠습니다. SAS ODA에서 클릭으로 선형회귀분석을 하는 방법은 아래의 포스팅을 참고해 주시면 됩니다.

 

[SAS ODA]선형회귀분석 클릭으로 끝내기(조절효과/상호작용항)

안녕하세요, 몇년전부터 머신러닝, 딥러닝에 대한 관심이 많이 증가하였습니다. 그러나 머신러닝 관련 책을 살펴보면 회귀분석에 대한 내용이 포함되어 있습니다. 머신러닝의 알고리즘과 비교

paratussemper.tistory.com

SAS에서 선형회귀분석을 하는 프로시저는 다양하지만 이번 포스팅에서는 PROC REG 프로시저를 중심으로 살펴보고 이후 포스팅에서 PROC GLM, PROC GLMSELECT을 살펴보겠습니다. 

@SAS Help Center

참고로 SAS 프로시저는 정말 다양한 옵션을 갖고 있으나 논문 작성에 필수적으로 필요한 옵션만 설명하겠습니다. PROC REG의 다양한 옵션이 궁금하신 분들께서는 SAS Help Center를 방문하시면 됩니다.

 

SAS Help Center

 

documentation.sas.com

분석예제 데이터셋은 SASHELP.BASEBALL를 사용하였고 종속변수는 SALARY, 설명변수는 NHITS NRUNS league로 하는 회귀분석 모형입니다. 참고로 SALARY, NHITS, NRUNS은 연속형 변수, league는 범주형 변수입니다.

PROC REG 코드의 구조는 복잡하지만 다중회귀분석이 목표라면 아래의 코드만 이해하셔도 됩니다. 우선 범주형 변수를 제외하고 연속형 설명변수만 활용하여 회귀분석을 해보겠습니다. PROC REG DATA=에 SASHELP.CLASS를 입력하고 MODEL 문장에 "종속변수 = 설명변수"를 입력하면 됩니다.

PROC REG DATA=SASHELP.BASEBALL;
	MODEL SALARY=nhits nruns;
RUN;

위의 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다. 기본적으로 F통계량, R-Square, Adjusted R-square 등 모형 정보를 확인할 수 있고 회귀계수, 표준오차, t통계량, p-value 등 회귀계수와 관련된 정보도 출력됩니다.

잔차, 외면 스튜던트화 잔차(RStudent), Leverage, 잔차 플롯, Cook's distance 등 회귀진단과 관련된 그래프도 출력됩니다.

그러나 위의 결과만으로 회귀분석을 완전하게 끝냈다고 보기 어렵습니다. 그 이유는 위의 회귀계수는 비표준화 회귀계수이며 변수들의 상대적 중요도를 판단하기 위하여 표준화 회귀계수를 살펴볼 필요성이 있기 때문입니다. 또한 다중공선성, 오차항의 독립성 등에 대한 추가적인 회귀 진단이 필요합니다. 이를 위하여 아래와 같이 옵션을 추가하였습니다.

  • PLOTS=ALL : 모든 플롯 출력
  • VIF : 다중공선성 진단을 위한 분산팽창지수(VIF) 출력
  • STD : 표준화회귀계수 출력
  • CLB : 회귀계수의 신뢰구간 출력
  • DW : 더빈왓슨 통계량 출력
  • DWPROB : 더빈왓슨 통계량 유의수준 출력
PROC REG DATA=SASHELP.BASEBALL PLOTS=ALL;
	MODEL SALARY=nhits nruns/VIF STB CLB DW DWPROB;
RUN;

추가적으로 출력된 플롯은 직접 확인해보실 것을 추천하며 회귀계수 표는 아래와 같이 제시되었습니다. 표준화회귀계수, 분산팽창지수, 회귀계수의 95% 신뢰구간, 더빈 왓슨 통계량의 정보가 추가적으로 출력된 것을 확인할 수 있습니다.

반응형

다음으로 범주형 변수인 league를 포함한 분석을 해보겠습니다. 앞서 설명드린 것처럼 MODEL 문장에 league를 추가하였으나 "리스트의 변수 League은(는) 이 리스트에서 정해진 유형과 일치하지 않습니다."라는 에러와 함께 결과가 출력되지 않습니다. 즉, PROC REG를 사용할 때 범주형 변수를 모형에 포함하기 위해서는 더미변수 변환이 필요합니다. 

PROC REG DATA=SASHELP.BASEBALL;
	MODEL SALARY=nhits nruns league;
RUN;

league 변수는 American, National 값을 갖는 범주형 변수입니다. 이에 아메리칸 리그(American)는 1, 내셔널 리그(National)는 0의 값을 갖는 변수 L을 만들었습니다. 이후 PROC REG를 실행시키니 분석결과가 출력되는 것을 확인할 수 있습니다.

DATA BASEBALL;
	SET SASHELP.BASEBALL;
	IF league="American" THEN L=1;
	ELSE L=0;
RUN;

PROC REG DATA=BASEBALL;
	MODEL SALARY=nhits nruns L;
RUN;

PROC REG를 사용하면 회귀진단과 관련된 다양한 결과물을 확인할 수 있지만 범주형 변수를 사용하는데 불편함이 있습니다. 이에 PROC REG보다 PROC GLM을 많이 사용하였으며 최근에는 PROC GLMSELECT 프로시저와 함께 사용하고 있습니다.

다음 포스팅에서는 PROC GLM을 살펴보겠습니다.

 

궁금하신 점은 언제든 댓글로 남겨주세요:)

감사합니다!!

☆ 제 코드는 정답이 아니며 틀린 부분이 있을 수 있으니 주의하여 활용하시기 바랍니다.

반응형

관련글 더보기

댓글 영역