ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [3장]ISL with R : 다중선형회귀 실습 in R(주가예측 심화)
    기초지식/ISL with R(통계학) 2022. 10. 25. 07:56
    반응형

    환율과 원유 선물을 통한 주가 예측

    [3장]ISL with R : 단순선형회귀 실습 in R(환율을 통한 주가예측) 에서 환율을 통한 주가예측 모델을 만들어 봤다. 단순선형회귀에서 조금 더 다양한 factor를 반영한다면(다중선형회귀) 예측의 정확도가 올라갈지 한 번 실습해보자. [3장]ISL with R : 단순선형회귀 실습 in R(환율을 통한 주가예측) 에서와 마찬가지로 yahoo finance 에서 수집한 코스피 종가, 환율 종가, 원유선물 종가 데이터 샘플에서 시작해보자. 
    단순선형회귀에서와 마찬가지로 각 데이터들의 단위가 다르기 때문에 코스피, 환율, 원유선물 종가의 일일 수익률을 이용해서 선형회귀 분석을 진행해보자.

    데이터 만들기

    엑셀 읽어오기

    [3장]ISL with R : 단순선형회귀 실습 in R(환율을 통한 주가예측) 에서와 마찬가지로 R의 "readxl"이라는 라이브러리를 이용해서 read_excel 함수를 아래와 같이 쓰면 위의 코스피, 환율, 원유 선물 데이터를 불러와서 fxdata, oildata, kospi라는 변수에 저장할 수 있다. 

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

    통합 데이터 만들기

    분석을 편하게 하기 위해서 위 fxdata, kospi, oildata 데이터를 하나의 DataFrame으로 묶어 보자. 아래 그림 1에서 확인할 수 있듯이 fxdata, oildata, kospi는 'Date'라는 컬럼을 공유한다. 

    그림1: 데이터 구조 확인

    R에서 'Date'를 기준으로 두 데이터를 묶는 방법은 merge 함수를 쓰는 것이다. 그런데 merge 함수는 데이터를 두 개씩 밖에 묶지 못한다. 그래서 아래 그림 2와 같이 kospi와 fxdata를 먼저 묶고 그 결과를 다시 oildata와 묶어서 최종 데이터를 만들 것이다.

    그림2: merge를 통한 데이터 합치기

    마지막으로 subset 함수의 select 기능을 이용해서 특정 컬럼만 선택하여 데이터를 정리하면, 다중회귀에 필요한 독립변수와 종속변수를 모두 갖고 있는 fin2 data라는 데이터가 나온다.

    library(readxl)
    
    fxdata = read_excel("파일경로")
    oildata = read_excel("파일경로")
    kospi = read_excel("파일경로")
    
    merge1 = merge(kospi, fxdata, by='Date')
    merge2 = merge(merge1, oildata, by='Date')
    fin2data = subset(merge2, select=c('Date','kospi_roc','fx_roc','oilfut_roc'))

    선형 회귀 분석

    회귀 계수 도출

    [3장]ISL with R : 선형 회귀계수 계산 에서 알아본 다중 선형 회귀 기본 식은 아래와 같다. 

    식1: 다중선형회귀 기본식

    다중 선형 회귀 계수를 구할 때도 단순 선형 회귀 분석과 마찬가지로 R에서 제공하는 lm 함수를 쓰면 된다. lm.fit = lm(y값~x1값 + x2값+x3값 ... , data=R에서 설정한 데이터 명)과 같이 " + "를 통해서 독립 변수만 추가하면 여러 독립 변수의 회귀계수를 구할 수 있다.  

    lm.fit2=lm(kospi_roc~fx_roc+oilfut_roc, data=fin2data)
    result2 = lm.fit2

    선형 회귀분석을 통한 예측

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

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

    그림 3에서 회귀계수(regression coefficient)는 절편(intercept)은 -0.0011418, fx 변화율에 대한 계수는(fx_roc) -0.3416087 이 나오고 원유 선물의 수익률에 대한 계수는(oilfut) 0.0379169 가 나온다. 아래 식과 같이 intercept_2라는 변수에는 첫 번째( [1] ) 회귀계수(regression coefficient), beta2_1이라는 변수에는 두 번째(회귀계수(regression coefficient), beta2_2라는 변수에는 세 번째(회귀계수(regression coefficient)를 넣으면 아래와 같은 선형 회귀 식을 완성할 수 있다.

    library(readxl)
    
    fxdata = read_excel("파일경로")
    oildata = read_excel("파일경로")
    kospi = read_excel("파일경로")
    
    merge1 = merge(kospi, fxdata, by='Date')
    merge2 = merge(merge1, oildata, by='Date')
    
    fin2data = subset(merge2, select=c('Date','kospi_roc','fx_roc','oilfut_roc'))
    lm.fit2=lm(kospi_roc~fx_roc+oilfut_roc, data=fin2data)
    result2 = lm.fit2
    intercept_2 = result2$coefficients[1]
    beta1_2 = result2$coefficients[2]
    beta2_2 = result2$coefficients[3]
    
    x1 = 관측된 환율의 일일 변화율
    x2 = 관측된 원유 선물의 일일 수익률
    
    kospi_ex2 = intercept_2 + beta1_2*x1 + beta2_2*x2
    kospi_ex2

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

     

    결론: R 스퀘어 여전히 낮네...

    반응형
Designed by Tistory.