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!!!!的更多相关文章
随机推荐
- html 标签 frame
html 标签 frame 对于html标签,一般都是在<html>标签对里包着<head>标签对和<body>标签对,body元素定义文档的主体,包含文档的所有内 ...
- Vue中组件之间的通信方式
vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 本文会介绍组件间通信的8种方式如下图所示, 并介绍在不同的场景下如何选择有效方式实现的 ...
- border-1px的实现(stylus)如何在移动端设置1px的border
在这里我只介绍下边框的实现: 当样式像素一定时,因手机有320px,640px等.各自的缩放比差异,所以设备显示像素就会有1Npx,2Npx.为保设计稿还原度,解决就是用media + scale. ...
- 洛谷 P2925 [USACO08DEC]干草出售Hay For Sale
嗯... 题目链接:https://www.luogu.org/problemnew/show/P2925 这是一道简单的01背包问题,但是按照正常的01背包来做会TLE一个点,所以要加一个特判(见代 ...
- 对list集合的内容分组
/** * 把list集合里的内容按照len大小分组 * @param list * @param len * @return */ private static List<List<St ...
- Jenkins 定时备份插件 ThinBackup
需求 公司的整个测试环境正式环境打包都是用的同一个Jenkins, 该Jenkins是搭建在内部的一台机器上,之前有一台机器的硬盘出了问题,为了安全起见,我们决定备份 Jenkins 的配置和数据. ...
- ng-class 动态设置css
可使用ng-class 动态设置class ,设置disable后,发现ng-click 居然还可以使用,不知什么原因. <li ng-class="{disabled:!first} ...
- webdriver-js操作滚动条
webdriver-js操作滚动条 1. webdriver高级应用-js操作滚动条 1.滑动页面的滚动条到页面最下面 2.滑动页面的滚动条到页面的某个元素 3.滑动页面的滚动条向下移动某个 ...
- 牛茶冲天的ip命令
一.修改二层链路相关设置 1.修改网卡名称(修改前要先停止) ip link set eth0 name testname 2.修改网卡地址 ip link set eth0 address xxx ...
- Python数据类型-6 字典
字典 Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度.但它是无序的,包含的元素个数不限, ...