[3장]ISL with R : 다중선형회귀 실습 in R(주가예측 심화)
환율과 원유 선물을 통한 주가 예측
데이터 만들기
엑셀 읽어오기
[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 스퀘어 여전히 낮네...