-
[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'라는 컬럼을 공유한다.
R에서 'Date'를 기준으로 두 데이터를 묶는 방법은 merge 함수를 쓰는 것이다. 그런데 merge 함수는 데이터를 두 개씩 밖에 묶지 못한다. 그래서 아래 그림 2와 같이 kospi와 fxdata를 먼저 묶고 그 결과를 다시 oildata와 묶어서 최종 데이터를 만들 것이다.
마지막으로 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 : 선형 회귀계수 계산 에서 알아본 다중 선형 회귀 기본 식은 아래와 같다.
다중 선형 회귀 계수를 구할 때도 단순 선형 회귀 분석과 마찬가지로 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에서 회귀계수(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 스퀘어 여전히 낮네...
반응형'기초지식 > ISL with R(통계학)' 카테고리의 다른 글
[4장]ISL with R : 로지스틱 회귀(회귀계수의 계산1: 우도함수와 경사하강법) (0) 2023.04.05 [4장]ISL with R : 로지스틱 회귀(로지스틱 함수) (0) 2023.04.04 [3장]ISL with R : 단순선형회귀 실습 in R(환율을 통한 주가예측) (0) 2022.10.21 [3장]ISL with R : 선형 회귀계수 계산 (0) 2022.08.15 [3장]ISL with R : 선형 회귀분석 기초 (0) 2022.08.14