상세 컨텐츠

본문 제목

[ SAS ] - 실제 Data를 사용한 평균 회귀 모형을 분석하는 프로그램 작성 + FRED site에서 실제 DATA FILE 다운로드

Language/SAS

by bing_su 2023. 4. 21. 23:09

본문

반응형
SMALL

이전의 게시물에서는 $X_i=\mu+\varepsilon_i$의 에서 모평균 $\mu$를 추정하는데 SAS에서 DATA를 생성해주는 함수인 RANNOR Function을 사용하였다. 이번 게시물에서는 실제 data를 사용하여 모평균 $\mu$를 추정하는 방법에 대해 살펴보려고 한다. 여기저기에 있는 실제 데이터를 사용해도 되지만, 이번 실습에서는 아래의 사이트에 있는 데이터를 다운로드하여 사용하였다.
실습에 사용된 site: https://fred.stlouisfed.org/

 

Federal Reserve Economic Data | FRED | St. Louis Fed

Welcome to FRED, your trusted source for economic data since 1991. Download, graph, and track 819,000 US and international time series from 110 sources. Welcome to FRED, your trusted source for economic data since 1991. Download, graph, and track 819,000 U

fred.stlouisfed.org

해당 사이트에 있는 데이터를 사용하기 위한 절차에 대해 짚고 넘어가자.

(1) 컴퓨터에 \mydata\ 디렉토리 만들기

내 컴퓨터에 다운로드한 데이터 파일을 저장할 디렉터리를 만들어 놔야 한다. 본인이 원하는 폴더에 \mydata\ 디렉터리를 만들어 주면 된다. (필자는 USB에 디렉터리 생성함)

디렉토리 생성

 

(2) FRED 사이트에서 DATA FILE 다운로드

우리가 실습을 위하여 다운로드 받아야 할 파일은 "Industrial Production", "monthly Federal funds rate" 총 2가지다.

검색창에 찾고자 하는 파일명 입력
찾고자 하는 파일(Industrial Production) 클릭
DOWNLOAD > Excel (data) 클릭

위의 사진 순서대로 다운로드를 받아주면 된다. monthly Federal funds rate 파일 역시 동일한 순서로 다운로드하자.

(3) 데이터 파일 편집

파일을 설명하는 문자행 삭제

파일에 대한 설명이 있는 문자행을 shade 하여 삭제하자.

날짜가 적힌 열 shade & "표시 형식" 오른쪽 아래 작은 화살표 클릭

날짜가 적힌 열을 shade 한다. A에 커서를 대고 클릭하면 A열이 모두 shade 된다. 그 이후에는 "표시 형식" 메뉴에서 오른쪽 아래 작은 화살표를 클릭하자.

날짜 형식 사용자 지정

"표시 형식"을 누르면 위와 같이 셀 서식을 지정할 수 있다. 사용자 지정 > yyyy-mm-dd 선택 > "yyyy-mm-dd"에서 hyphen(-) 2개를 삭제하는 과정을 거치면 이제 이 파일을 사용할 준비가 된 것이다.

파일 저장

F12를 누르면 파일을 다른 이름으로 저장할 수 있다. 파일 형식(T)을 "텍스트 (공백으로 분리)"로 선택하고, 파일 이름(N) ip를 입력하여 "저장"을 하자. (/mydata/ 디렉터리는 이미 생성되어 있어야 합니다.)
monthly Federal funds rate 파일 역시 위 과정과 똑같이 편집해서 저장하자. (파일명: fyff로 지정)

(4) SAS Cloud에 DATA FILE Upload

폴더 생성 클릭

"서버 파일 및 폴더"를 클릭한 후 제일 왼쪽에 있는 아이콘을 클릭하여 새 폴더를 생성하자.

폴더명 지정

새로운 폴더명 mydata를 입력하고 "저장"을 누르면, 새폴더 mydata가 생성된다.

mydata 폴더에 파일 업로드

동그라미 친 아이콘을 클릭하면 mydata 폴더에 파일을 업로드할 수 있다.

파일 선택 > prn 파일 업로드

파일 선택을 누르면 내 컴퓨터 디렉터리가 화면으로 뜨게 된다. 업로드할 데이터가 저장된 디렉터리(\mydata\)로 가서 fyff.prn, ip.prn 파일을 클릭하여 업로드를 하면 실제 DATA를 분석할 준비가 끝났다.
 
실제 DATA FILE을 이용하여 평균 회귀 모형을 분석하기 이전에 해당 프로그램 작성을 위해 필요한 SAS 개념을 짚고 넘어가자. (이전 실습에서 다룬 개념은 다루지 않습니다! 이 게시물에서는 다루지 않는 개념이지만, 코드를 살펴보며 생소한 개념이 있으시다면 제 블로그에서 검색 or 이 카테고리에 있는 글 읽고 와 주세요.)

[ 외부 데이터를 불러와서 테이블 생성하기 ]

보통의 데이터 분석 시에는 원시데이터(가공하지 않은 데이터)가 제공되는 경우가 많다. 특히 분석할 데이터가 대용량이라면 수작업으로 하는 것은 거의 불가능하고 시간도 많이 걸려서 비효율적이다. 이와 같은 이유로 분석 대상 원시데이터는 대체로 파일로 제공되는 경우가 많다. 이 파일을 SAS에 탑재해야 분석 작업을 할 수 있다. (탑재하는 방법은 이미 다뤘기 때문에 넘어감.) 탑재된 파일을 SAS에서 작업할 수 있는 파일로 변환하는 과정을 살펴보자.

- 명령어 정리

INFILE 'C:\SAS_TEST\TEST.TXT'  /* 'C:\SAS_TEST\TEST.TXT' 파일을 불러오는 명령어 */
INPUT YYY $ ZZZ  /* 문자 변수 YYY와 숫자 변수 ZZZ를 생성 */

INFILE 명령어는 파일에 있는 데이터를 불러오는 기능만 한다. 따라서 변수명을 만들고 데이터를 입력하는 기능을 수행하기 위해서는 INPUT 명령어를 통해 변수를 지정해줘야 한다.

[ DATA를 다룰 때 자주 쓰는 함수: LOG(), DIF(), LAG() ]

- LOG() 함수

로그 함수는 말 그대로 로그를 취한 값을 출력해 주는 기능을 수행한다. 다만, LOG 자체는 자연로그 값을 반환하므로 상용 로그를 쓰기 위해서는 LOG10()을 사용해야 한다. (근데 일반적으로는 자연 로그 값을 쓰게 될 것.)

- DIF() 함수

DIF는 DIFferencing(차분)의 약자이며, 차분은 쉽게 설명하자면 현시점의 자료 값에서 전 시점의 자료 값을 빼 주는 것을 의미한다. 이 의미대로 DIF() 함수는 현재 데이터에서 이전 시점 데이터를 뺀 값을 출력하는 기능을 수행한다. 다만, 첫 번째 값은 이전 시점의 데이터가 없기 때문에 결측치(.)로 출력된다.

$$DIF(a)=a_t-a_{t-1}$$

- LAG() 함수

LAG 함수는 관측지를 한 시점씩 뒤로 밀어주는 기능을 한다. 이 기능을 생각하면 DIF() 함수를 LAG() 함수를 이용하여 나타낼 수 있다. ($b=DIF(a)\Leftrightarrow b=a-LAG(a)$)
 
해당 함수의 문법은 아래와 같이 정리할 수 있다.

LAG<N>(argument)

위의 명령어를 통해 N 시점 이전의 값을 계산할 수 있다. N을 지정하지 않으면, LAG() 함수는 기본적으로 한 시점 이전의 값을 계산한다. 

[ ip.prn 파일의 실제 데이터로부터 기초 통계량을 추출하는 프로그램 ]

DATA ip;
	INFILE '/home/u63329964/mydata/ip.prn';  /* mydata 디렉토리의 ip.prn 파일을 불러옴 */
	INPUT mon ip;  /* mon, ip 변수에 데이터를 입력할 것임 */
	logip=LOG(ip);  /* ip 값에 자연 로그(ln)을 취함 */
	ipg=DIF(logip)*1200;  /* 따로 설명할 것 */
    /* 1959년 1월 이전이나 2020년 1월 이후면 삭제(DELETE). */
    /* 샘플 수는 1959년 1월 ~ 2020년 1월로 총 733개가 됨. */
	IF mon<19590101 OR mon>20200101 THEN DELETE;
RUN;

PROC UNIVARIATE DATA=ip;
	VAR ipg;  /* ipg 변수에 대한 통계 데이터를 분석 */
RUN;

프로그램 실행 결과를 살펴보기 전, 아래의 명령어 부분에 대해 다시 살펴보자.

ipg=DIF(logip)*1200;

이를 수식으로 나타내면 $DIF(logip)=(logip_t-logip_{t-1}) \simeq  \frac{ip_t-ip_{t-1}}{ip_{t-1}} $가 된다.
즉, DIF(logip)는 ip의 성장률을 구하는 Logic이라고 생각하면 된다. 이를 연간 퍼센트(%) 성장률로 바꾸기 위하여 12*100=1200을 곱한 것이다. 해당 프로그램을 실행하면 아래와 같은 결과가 나온다.

프로그램 실행 화면

해당 프로그램에서 분석된 데이터를 간단하게 정리한 후 귀무가설 $\mu_0=0$을 검증하자.

  • N: 총 샘플 수 - 733 = 19590101 ~ 20200101
  • 표본 평균($\mu$의 추정치) $\bar{x}$=2.52789942
  • 표본 표준편차=$\sqrt{\sigma^2}=\sqrt{92.2888187}=9.60670696$
  • 평균의 표준 오차=$ \frac{s}{\sqrt{N}} = \frac{9.60670696}{\sqrt{733}}=0.35483182$
  • $t= \frac{\bar{x}}{ \frac{s}{\sqrt{N}} } = \frac{2.52789942}{0.35483182}= 7.124219$
  • P value < 0.0001

1. 신뢰 구간을 구함으로써 귀무가설 검증

신뢰 수준 95%에서의 신뢰 구간은 $\mu_0=(\bar{x}-1.98 \times 0.35483182, \bar{x}+1.98 \times 0.35483182)=(1.825, 3.230)$가 된다. 이를 통해 $\mu_0=0$인 귀무가설은 기각됨을 확인할 수 있다.

2. t 값 / P 값을 이용하여 귀무가설 검증

- $t=7.124219>1.98$이므로 귀무가설 $\mu_0=0$은 기각된다.
- $P<0.0001$이므로 귀무가설 $\mu_0=0$은 기각된다.

1, 2에 의해 귀무가설 $\mu_0=0$은 기각된다.

[ ip.prn에서 글로벌 금융 위기와 코로나 위기를 제외한 샘플의 기초 통계량을 추출하는 프로그램 ]

DATA ip;
	INFILE '/home/u63329964/mydata/ip.prn';  /* mydata 디렉토리의 ip.prn 파일을 불러옴 */
	INPUT mon ip;  /* mon, ip 변수에 데이터를 입력할 것임 */
	logip=LOG(ip);  /* ip 값에 자연 로그(ln) 취함 */
	ipg=DIF(logip)*1200;  /* ip 성장률 계산하는 Logic(앞 부분에서 설명함) */
    /* 2009년 4월 이전이나 2020년 1월 이후면 삭제(DELETE) */
    /* 샘플 수는 2009년 4월 ~ 2020년 1월로 총 130개가 됨. */
	IF mon<20090401 OR mon>20200101 THEN DELETE;
RUN;

PROC UNIVARIATE DATA=ip;
	VAR ipg;  /* ipg 변수에 대한 통계 데이터를 분석 */
RUN;

(참고: 글로벌 금융 위기 기간 - 2008.09.14 ~ 2009.03.09 / COVID-19 Pandemic - 2020.02.01 ~)
해당 프로그램을 실행하면 아래와 같은 결과가 나타난다.

프로그램 실행 화면

해당 프로그램에서 분석된 데이터를 간단하게 정리한 후 귀무가설 $\mu_0=0$을 검증하자.

  • N: 총 샘플 수 - 130 = 20090401 ~ 20200101: 글로벌 금융위기 이후에서 코로나 펜데믹 이전까지
  • 표본 평균($\mu$의 추정치) $\bar{x}$=1.4671203
  • 표본 표준편차=$\sqrt{\sigma^2}=\sqrt{36.7749401}=6.0642345$
  • 평균의 표준 오차=$\frac{s}{\sqrt{N}} = \frac{6.0642345}{\sqrt{130}}=0.53186855$
  • $t= \frac{\bar{x}}{ \frac{s}{\sqrt{N}} } = \frac{1.4671203}{0.53186855}= 2.758427$
  • P value = 0.0067

1. 신뢰 구간을 구함으로써 귀무가설 검증

신뢰 수준 95%에서의 신뢰 구간은 $\mu_0=(\bar{x}-1.98 \times 0.53186855, \bar{x}+1.98 \times 0.53186855)=(0.4140, 2.520)$가 된다. 이를 통해 $\mu_0=0$인 귀무가설은 기각됨을 확인할 수 있다.

2. t 값 / P 값을 이용하여 귀무가설 검증

- $t=2.758427>1.98$이므로 귀무가설 $\mu_0=0$은 기각된다.
- $P=0.0067<0.05$이므로 귀무가설 $\mu_0=0$은 기각된다.

1, 2에 의해 귀무가설 $\mu_0=0$은 기각된다.

[ fyff.prn 파일의 실제 데이터로부터 기초 통계량을 추출하는 프로그램 ]

프로그램을 작성하기 전 fyff에 대해 간략히 설명하자면, 이는 Federal Funds Rate으로 미국 연방 정부 채권에 붙는 이자율이다. (연간 % 기준) 이제 본격적으로 프로그램을 작성해 보자.

DATA fyff;
	INFILE '/home/u63329964/mydata/fyff.prn';  /* mydata 디렉토리의 fyff.prn 파일을 불러옴 */
	INPUT mon fyff;  /* mon, fyff 변수에 데이터를 입력할 것임 */
    /* 1959년 1월 이전이나 2020년 1월 이후면 삭제(DELETE) */
    /* 샘플 수는 1959년 1월 ~ 2020년 1월로 총 733개가 됨. */
	IF mon<19590101 OR mon>20200101 THEN DELETE;
RUN;

PROC UNIVARIATE DATA=fyff;
	VAR fyff;  /* fyff 변수에 대한 통계 데이터를 분석 */
RUN;

해당 프로그램을 실행하면 아래와 같은 결과가 나타난다.

프로그램 실행 화면

위의 통계량으로부터 95% 신뢰 수준에서의 신뢰 구간을 구하면 (4.695, 5.228)가 된다. (식 생략)

[ fyff.prn에서 글로벌 금융 위기와 코로나 위기를 제외한 샘플의 기초 통계량을 추출하는 프로그램 ]

DATA fyff;
	INFILE '/home/u63329964/mydata/fyff.prn';  /* mydata 디렉토리의 fyff.prn 파일을 불러옴 */
	INPUT mon fyff;  /* mon, fyff 변수에 데이터를 입력할 것임 */
    /* 2009년 4월 이전이나 2020년 1월 이후면 삭제(DELETE) */
    /* 샘플 수는 2009년 4월 ~ 2020년 1월로 총 130개가 됨. */
	IF mon<20090401 OR mon>20200101 THEN DELETE;
RUN;

PROC UNIVARIATE DATA=fyff;
	VAR fyff;  /* fyff 변수에 대한 통계 데이터를 분석 */
RUN;

해당 프로그램을 실행하면 아래와 같은 결과가 나타난다.

프로그램 실행 화면

위의 통계량으로부터 95% 신뢰 수준에서의 신뢰 구간을 구하면 (0.4591, 0.7180)가 된다. (식 생략)

반응형
LIST

관련글 더보기

댓글 영역