-
[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 스퀘어 여전히 낮네...
반응형'기초지식 > 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