本节书摘来异步社区《量化金融R语言初级教程》一书中的第1章,第1.3节,作者: 【匈牙利】Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.3 协整
协整的思想缘于Granger(1981年)提出的一个概念,后来由Engle和Granger(1987年)加以形式化。协整的思想是指寻找非平稳时间序列之间的一个线性组合,这个线性组合是一个平稳时间序列。因此,协整方法可以用于检测非平稳时间序列(比如价格)之间的稳定长期关系。
航空燃油的交叉对冲
航空公司很自然需要购买航空燃油。但由于航空燃油价格的波动很剧烈,大部分航空公司会将它们对航空燃油价格变化的风险敞口对冲掉一部分。如果市场中缺乏航空燃油OTC产品(译注:OTC产品指交易所场外柜台交易产品),航空公司会使用相关交易所交易的期货合约(比如,取暖油)来实现对冲。在下面的部分中,我们首先使用经典方法导出最优对冲比率,这种方法仅仅考虑两种价格之间短期波动。然后考察价格之间的长期稳定联系,进而改进最优对冲比。
首先,我们载入需要使用的包。urca包有一些有用的方法,可以用于单位根检验和估计协整关系。
> library("zoo")
> install.packages("urca")
> library("urca")
我们导入航空燃油和取暖油的月价格。
> prices <- read.zoo("JetFuelHedging.csv", sep = ",",
+ FUN =as.yearmon, format = "%Y-%m", header = TRUE)
现在我们仅仅考虑两种商品的短期行为(月价格改变)。通过拟合一个用取暖油价格变化来解释航空燃油价格的线性模型,可以推导出两种商品的最小方差对冲比率。线性模型中的beta系数就是最优对冲比。
> simple_mod <- lm(diff(prices$JetFuel) ~ diff(prices$HeatingOil)+0)
函数lm(用于线性模型)估计了航空燃油价格变动对取暖油价格变动的最佳拟合系数。+0项表示截距设置为0,意味着航空公司不持有现金。
> summary(simple_mod)
Call:
lm(formula = diff(prices$JetFuel) ~ diff(prices$HeatingOil) +
0)
Residuals:
Min 1Q Median 3Q Max
-0.52503 -0.02968 0.00131 0.03237 0.39602
Coefficients:
Estimate Std. Error t value Pr(>|t|)
diff(prices$HeatingOil) 0.89059 0.03983 22.36 <2e-16***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.0846 on 189 degrees of freedom
Multiple R-squared: 0.7257, Adjusted R-squared: 0.7242
F-statistic: 499.9 on 1 and 189 DF, p-value: < 2.2e-16
结果得到了方差比为0.89059和残差标准差为0.0846。但是,交叉对冲并非完美无缺,推导出的对冲组合结果仍然有风险。
现在,我们通过考察航空燃油和取暖油期货价格之间存在的长期关系,尝试改进方差比。我们使用下列命令画出两个价格序列(取暖油价格用红色),通过观察图形你可能已经猜出存在着这种长期关系。
> plot(prices$JetFuel, main = "Jet Fuel and Heating Oil Prices",
+ xlab = "Date", ylab = "USD")
> lines(prices$HeatingOil, col = "red")
我们使用Engle和Granger的两步估计方法。首先,使用增强的Dickey-Fuller检验(augmented Dickey-Fuller test,ADF检验)对两个序列进行单位根检验(非平稳性)。
> jf_adf <- ur.df(prices$JetFuel, type = "drift")
> summary(jf_adf)
###############################################
# Augmented Dickey-Fuller Test Unit Root Test #
###############################################
Test regression drift
Call:
lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
Residuals:
Min 1Q Median 3Q Max
-1.06212 -0.05015 0.00566 0.07922 0.38086
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.03050 0.02177 1.401 0.16283
z.lag.1 -0.01441 0.01271 -1.134 0.25845
z.diff.lag 0.19471 0.07250 2.686 0.00789 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.159 on 186 degrees of freedom
Multiple R-squared: 0.04099, Adjusted R-squared: 0.03067
F-statistic: 3.975 on 2 and 186 DF, p-value: 0.0204
Value of test-statistic is: -1.1335 0.9865
Critical values for test statistics:
1pct 5pct 10pct
tau2 -3.46 -2.88 -2.57
phi1 6.52 4.63 3.81
结果显示,因为检验统计量值−1.1335大于临界值−3.46,所以在1%的置信水平上不能拒绝非平稳(航空燃油时间序列包含一个单位根)的原假设。同样的结果对取暖油也成立(检验统计量是−1.041)。
> ho_adf <- ur.df(prices$HeatingOil, type = "drift")
> summary(ho_adf)
现在我们可以继续估计静态均衡模型,并使用ADF方法检验时间序列的残差是否平稳。请注意,目前的研究序列是上一步的估计结果,因此,我们现在必须使用不同的临界值[参见Engle和Yoo1987发表的论文]。
> mod_static <- summary(lm(prices$JetFuel ~ prices$HeatingOil))
> error <- residuals(mod_static)
> error_cadf <- ur.df(error, type = "none")
> summary(error_cadf)
得到的检验统计量是−8.912,而规模为200的样本在1%的置信水平上的临界值为−4.00。所以,我们拒绝非平稳的原假设。因此我们发现了两个协整变量并且可以进行第二步,两个协整变量意味着一个误差修正模型(ECM)。ECM是一个动态模型,刻画了系统如何(以及多快)返回之前估计的静态均衡,这个静态均衡存储在变量mod_static中。
> djf <- diff(prices$JetFuel)
> dho <- diff(prices$HeatingOil)
> error_lag <- lag(error, k = -1)
> mod_ecm <- lm(djf ~ dho + error_lag)
> summary(mod_ecm)
Call:
lm(formula = djf ~ dho + error_lag + 0)
Residuals:
Min 1Q Median 3Q Max
-0.19158 -0.03246 0.00047 0.02288 0.45117
Coefficients:
Estimate Std. Error t value Pr(>|t|)
Dho 0.90020 0.03238 27.798 <2e-16 ***
error_lag -0.65540 0.06614 -9.909 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.06875 on 188 degrees of freedom
Multiple R-squared: 0.8198, Adjusted R-squared: 0.8179
F-statistic: 427.6 on 2 and 188 DF, p-value: < 2.2e-16
通过考察航空燃油价格和取暖油价格之间存在的长期联系(协整),对冲比现在稍微提高了一点(0.90020),并且残差标准差显著地降低了(−0.65540)。误差项的系数为负(−0.65540):两个价格之间原先较大的偏差有所修正,价格向它们的长期稳定关系移动。