Time Series_2_Multivariate_TBC!!!!
1. Cointegration
n×1 vector yt of time series is cointegrated if each series individually integrated in the order d (d = 1, nonstationary unit-root processes, i.e., random walks; d = 0, stationary process).
1.1 Simulation for Cointegration, based on Hamilton (1994)


#generate the two time series of length 1000
set.seed(20200229) #fix the random seed
N <- 100 #define length of simulation
x <- cumsum(rnorm(N)) #simulate a normal random walk
gamma <- 0.7 #set an initial parameter value
y <- gamma * x + rnorm(N) #simulate the cointegrating series
plot(x, col="black", type='l', lwd=2, ylab='simulated values')
lines(y,col="skyblue", lwd=2)

Both series are individually random walks.
In real world we don't know gamma, so need estimation based on raw data, running linear regression of one series on the other, i.e., Engle-Granger method of testing cointegration.
1.2 Statistical Tests (Augmented Dickey Fuller test)
install.packages('urca')
library('urca')
summary(ur.df(x,type="none"))
summary(ur.df(y,type="none"))
NULL: Unit root exists in the process
Reject NULL if test-statistic is smaller than critical value. Result shows test-statistic is larger than critical value at three usual sig.levels. We can't reject NULL.
Conclusion: Both series are individually unit root process.

1.3 Linear Combination
z <- y - gamma * x
plot(z,type='l')
summary(ur.df(z,type="none"))

zt seems to be a white noise process and rejection of unit root if confirmed by ADF tests:

1.4 Estimate the Cointegrating Relationship using Engle-Granger method
Step 1: Run linear regression yt on xt (simple OLS estimation);
Step 2: Test residuals for the presence of a unit root.
coin <- lm(y ~ x -1) #regression without constant
coin$resid #obtain the residuals
summary(ur.df(coin$resid)) #ADF test of residuals

Reject NULL.
Pair trading (statistical arbitrage) exploits such cointegrating relationship, aiming to set up strategy based on the spread between two time series. If two series are cointegrated, we expect their stationary linear combination to revert to 0. By selling relatively expensive and buying cheaper one, wait for the reversion to make profit.
Intuition: Linear combination of time series (which form cointegrating relationship) is determined by underlying (long-term) economic forces, e.g., same industry companies may grow similarly; spot and forward price of financial product are bound together by no-arbitrage principle; FX rates of interlinked countries tend to move together.
2. Vector Autoregressive Model
2.1 Theory Bgs

Ai are n×n coefficient matrices for all i = 1...p;
ut is a vector white noise process (assumes lack of auto correlation, while allow contemporaneous (同时发生的) correlation between components, i.e., ut has non-diagonal covariance matrix, meaning that contemporaneous dependencies aren't modeled) with positive definite covariance matrix. Thus we can use OLS to estimate equation by equation. (叫做 reduced form VAR models)
另一种叫做 structural VAR form model, SVAR models the contemporaneous effects among variables:

Where: 
Disturbance terms are defined to be uncorrelated, thus are referred to as structural shocks.
2.2 Three-component VAR model (equity return, stock index, US Treasury bond interest rates)
2.2.1 Task: Forecast stock market index by using additional variables and identify impluse responses.
Assume: There exists a hidden long-term relationship between these three components.
2.2.2 Process:
rm(list = ls()) #clear the whole workspace
install.packages('xts');library(xts)
install.packages('vars');library('vars')
install.packages('quantmod');library('quantmod')
getSymbols('SNP', from='2012-01-02', to='2020-02-29')
getSymbols('MSFT', from='2012-01-02', to='2020-02-29')
getSymbols('DTB3', src='FRED') #3-month T-Bill interest rates
chartSeries(MSFT, theme=chartTheme('white'))

Cl(MSFT) #closing prices
Op(MSFT) #open prices
Hi(MSFT) #daily highest price
Lo(MSFT) #daily lowest price
ClCl(MSFT) #close-to-close daily return
Ad(MSFT) #daily adjusted closing price
Subset to obtain period of interests ,while the downloaded prices are supposed to be nonstationary series and should be transformed into stationary series:
#indexing time series data
DTB3.sub <- DTB3['2012-01-02/2020-02-29']
#Calculate returns from Adjusted log series
SNP.ret <- diff(log(Ad(SNP)))
MSFT.ret <- diff(log(Ad(MSFT)))
#replace NA values
DTB3.sub[is.na(DTB3.sub)] <- 0
DTB3.sub <- na.omit(DTB3.sub) # return with incomplete removed
# merge the three databases to get the same length
# innerjoin returns only rows in which one set have matching keys in the other
dataDaily <- na.omit(merge(SNP.ret,MSFT.ret,DTB3.sub), join='inner')
VAR modeling usually deals with lower frequency data, so transform data to monthly (or quarterly) frequency.
#obtain monthly data, package xts
SNP.M <- to.monthly(SNP.ret)$SNP.ret.Close
MSFT.M <- to.monthly(MSFT.ret)$MSFT.ret.Close
DTB3.M <- to.monthly(DTB3.sub)$DTB3.sub.Close
# allow a max of 4 lags
# choose the model with best(lowest Akaike Information Criterion value)
var1 <- VAR(dataDaily, lag.max=4, ic="AIC")
Or see multiple information criteria:
VARselect(dataDaily,lag.max=4)

summary(var1)



coef(var1) #concise summary of the estimated variables
residuals(var1) #list of residuals (of the corresponding ~lm)
fitted(var1) #list of fitted values
Phi(var1) #coefficient matrices of VMA representation
plot(var1, plot.type='multiple') #Diagram of fit and residuals for each variables



#confidence interval for bootstrapped error bands
var.irf <- irf(var1, ci=0.9)
plot(var.irf)



Number of required restrictions for SVAR model is K(K-1)/2, so in our case is 3.
Time Series_2_Multivariate_TBC!!!!的更多相关文章
随机推荐
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 排序、条件刷选函数
numpy.sort() 函数返回输入数组的排序副本.函数格式如下: numpy.sort(a, axis, kind, order) 参数说明: a: 要排序的数组 axis: 沿着它排序数组的轴, ...
- vscode vue js 开发插件配置
安装 vetur { // 自动补全触发范围---双引号内的字符串也可以触发补全 "editor.quickSuggestions": { "other": t ...
- 通过python调用jenkins 常用api操作
# -*- coding: utf-8 -*- import jenkins class TestJenkins(object): def __new__(cls, *args, **kwargs): ...
- base64相关
1.base64指定的64个字符(包含52个大小写.10个数字和+./): abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ...
- leetcode 0205
目录 700 二叉搜索树中的搜索 175 组合两个表 仍旧不理解 left join 590. N叉树的后序遍历 递归: 迭代: 589 N叉树的前序遍历 递归, 注意 递归 过程中附带的 actio ...
- pyputer安装使用
pip install jupyter 请在终端(Mac / Linux)或命令提示符(Windows)上运行以下命令: jupyter notebook 登录地址在cmd安装运行完jupyter n ...
- 2020新春公益赛 writeup
简单的招聘系统 无需注册账号,admin'or 1#登陆,到blank page页面,在输入key处发现有注入点: /pages-blank.php?key=1%27+union+select+1%2 ...
- PAT A1091 Acute Stroke
对于坐标平面的bfs模板题~ #include<bits/stdc++.h> using namespace std; ; ][][]={false}; ][][]; int n,m,l, ...
- PTA的Python练习题(一)
最近宅家里没事干,顺便把python给学了.教程和书看了一段时间,但是缺少练习的平台. 想起大一时候练习C语言的PTA平台,就拿来练手了. (因为没有验证码无法提交题目,所以自己用pycharm来做题 ...
- Struts2学习(六)
拦截器原理 1.如图所示,Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一 ...