ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [3장]ISL with R : 단순선형회귀 실습 in R(환율을 통한 주가예측)
    기초지식/ISL with R(통계학) 2022. 10. 21. 08:35
    반응형

    환율을 통한 주가 예측

    [3장]ISL with R : 선형 회귀분석 기초 에서 선형 회귀 분석이 뭔지 개념을 파악했고, [3장]ISL with R : 선형 회귀계수 계산 에서 회귀계수의 계산 원리도 파악했으니 실제로 R을 이용해서 환율과 코스피 주가의 관계에 대한 선형 회귀 식을 만들고 코스피주가를 예측해보자. 아래는 yahoo finance 에서 수집한 코스피 종가와 환율 종가 데이터 샘플이다. 

    221012_FX.xlsx
    0.01MB
    221012_KOSPI.xlsx
    0.01MB

     

    여기서 중요한 것은 코스피 종가와 환율 종가를 가지고 바로 선형회귀 분석을 하면 단위가 다르기 때문에 오류가 발생한다는 점이다. 따라서 샘플 데이터에서 확인할 수 있는 것처럼 코스피와 환율 종가의 일일 수익률을 가지고 회귀분석을 진행해야 한다.

    데이터 만들기  

    엑셀 데이터 읽어오기 

    일단 데이터를 R에 불러와야 한다. 가장 간단하게 엑셀에 저장된 데이터를 불러오려면 R의 "readxl"이라는 라이브러리를 쓰면 된다.

    library(readxl)

    readxl 라이브러리를 불러와서 해당 라이브러리의 read_excel 함수를 이용하면 아래와 같이 데이터를 불러올 수 있다.

    library(readxl)
    
    fxdata = read_excel("파일경로")
    kospi = read_excel("파일경로")

    통합 데이터 만들기

    선형 분석을 하기 위해서는 위 fxdata, kospi 데이터를 하나의 DataFrame으로 만드는 것이 편하다. 아래 그림 1의 두 데이터를 비교해 보면 index 컬럼을 제외하면 Date 컬럼이 두 데이터 모두 공통되는 것을 알 수 있다.

    그림1: 데이터 구조 파악

    Date 컬럼이 fxdata, kospi 데이터에 공통되므로 특정 날짜마다 코스피, 환율, 코스피 수익률, 환율 변화율을 뽑아낼 수 있다. 즉 아래와 같은 식으로 데이터를 합칠 수 있는 것이다.

    그림2: 데이터 합치기

    R에서는 이를 merge라는 함수를 통해서 지원해주고 있는데, 아래와 같은 코드를 통해서 두 데이터를 그림 2처럼 합칠 수 있다. 

    merge1 = merge(kospi, fxdata, by='Date')

    선형 회귀 분석

    lm 함수 사용

    [3장]ISL with R : 선형 회귀계수 계산 에서 알아본 선형 회귀 분석의 기본 식을 생각해보자. 아래 식 1에서 y 값은 우리가 얻고자 하는 값인 코스피 지수가 될 것이고 x 값은 환율이 될 것이다. 이제 회귀 식의 계수(절편과 기울기) 구하면 된다. 

    식1: 선형회귀분석 기본식

    R에서는 회귀식의 계수를 구해주는 함수를 제공하고 있는데 그것이 lm 함수이다. 기본적으로 lm.fit = lm(y값~x값, data=R에서 설정한 데이터 명)과 같은 형식으로 사용한다. merge 함수를 통해서 최종적으로 merge1이라는 이름의 데이터를 만들었기 때문에 R에서 설정한 데이터 명은 merge1이 될 것이다. 그리고 y값은 merge1의 코스피 수익률 컬럼인 kospi_roc, x값은 merge1의 환율 변화율 컬럼인 fx_roc가 된다.

    lm.fit1=lm(kospi_roc~fx_roc, data=fin1data)
    result1 = lm.fit1

    선형 회귀 분석을 통한 예측

    summary 함수를 통해서 result1에 저장한 선형 회귀 결과를 아래와 같이 확인할 수 있다. 

    그림3: 선형회귀 분석 결과

    그림 3에서 회귀계수(regression coefficient)는 절편(intercept)은 -0.0010923, 기울기(fx_roc)는 -0.3707385 가 나온다. 아래 식과 같이 intercept_1이라는 변수에는 첫 번째( [1] ) 회귀계수(regression coefficient) 값인 절편 값을 넣고, beta1_1이라는 변수에는 두 번째(회귀계수(regression coefficient) 값인 기울기를 넣으면 최종적으로 아래와 같은 선형 회귀 식을 완성할 수 있다. 

    library(readxl)
    
    fxdata = read_excel("파일경로")
    kospi = read_excel("파일경로")
    
    merge1 = merge(kospi, fxdata, by='Date')
    fin1data = merge1
    
    lm.fit1=lm(kospi_roc~fx_roc, data=fin1data)
    result1 = lm.fit1
    
    intercept_1 = result1$coefficients[1]
    beta1_1 = result1$coefficients[2]
    
    x1 = 관측된 환율의 일일 변화율
    
    kospi_ex1 = intercept_1 + beta1_1*x1
    kospi_ex1

    x1에 특정 값을 넣어주면 kospi_ex1에서 회귀분석에 따른 예측 값을 산출해 낸다.

     

    결론: 근데 R 스퀘어 왜 이렇게 낮지...

     

    반응형
Designed by Tistory.