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!!!!的更多相关文章
随机推荐
- twisted task.cpperator
twisted task.cpperator 1. twisted task.cpperator 1.1. 简介-cooperator 官方文档: https://twistedmat ...
- 树莓派Raspberry实践笔记—显示分辨率配置
转载:http://www.cnblogs.com/atsats/p/6607886.html 如果未接显示设备,使用VNC登录后,显示分辨率很小,应该是480p,导致使用很不方便. 这里通过修改/b ...
- [蓝桥杯2017初赛]Excel地址
题目描述 Excel单元格的地址表示很有趣,它使用字母来表示列号. 比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,.... 当然Excel的最 ...
- inline-block,真的懂吗
曾几何时,display:inline-block 已经深入「大街小巷」,随处可见 「display:inline-block; *display:inline; *zoom:1; 」这样的代码.如今 ...
- 【原】Mysql最大连接数
MySQL最大连接数的默认值是100, 这个数值对于并发连接很多的数据库的应用是远不够用的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些. 在使用MySQL数 ...
- pycharm 右键无法显示unittest框架&&解决右键只有unittest 运行如何取消右键显示进行普通run
上面是普通文件和unittest 导入的文件右键快捷键显示情况,可以看出两者快捷键都是ctr+shift+F10,如果你是右键模式想运行unitest,但是又不知道哪里配置unittest直接运行快捷 ...
- Centos610无桌面安装Docker-内核升级
1.查看当前操作系统和系统内核 (此处只需要注意一项centos6的docker源只有64位的,x86_64,32位的直接换系统吧) 查看当前内核版本uname -r 2.6.32-754.el6.x ...
- c#DDOS代码
//在工程属性中设置"允许不安全代码"为true ?using System; using System.Net; using System.Net.Sockets; using ...
- 误删Django的model中的表解决办法
误删Django的model中的表解决办法 1.model里面的表格实际的操作都在migrations文件夹中,里面记录了操作过程,当在database和model中删除表格时要注意初始化数据库时会报 ...
- [蓝桥杯2015决赛]穿越雷区(BFS求最短路)
题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已 ...