格兰杰因果检验-从头到脚


参考链接:https://www.cnblogs.com/hdu-zsk/p/7235200.html,
该作者的博客写的很详尽,我只摘录一些要点。且后期考虑补充一些内容。

核心公式

autoregression: X t = β 0 + ∑ k = 1 p β k X t − k + ε t union-regression: X t = θ 0 + ∑ k = 1 p β k X t − k + ∑ n = 1 q θ n Y t − n + ε m \text{autoregression:} X_{t}=\beta_{0}+\sum_{k=1}^{p}\beta_{k}X_{t-k}+\varepsilon_{t} \\ \text{union-regression:}X_{t}=\theta_{0}+\sum_{k=1}^{p}\beta_{k}X_{t-k}+\sum_{n=1}^{q}\theta_{n}Y_{t-n}+\varepsilon_{m} autoregression:Xt=β0+k=1pβkXtk+εtunion-regression:Xt=θ0+k=1pβkXtk+n=1qθnYtn+εm

阶数

即p
在格兰杰因果关系检验中,阶数的作用更像是在指明采用过去的多少个点对当前点的点求解回归问题。因此阶数order有了一个崭新的名字:lag(迟延,迟滞)。

在格兰杰因果关系的计算过程中,针对阶数的选择方法大致可以分为三类:

  • I. Akaike information criterion(赤池信息准则,简称AIC);
  • II. Bayes information criterion(贝叶斯信息准则,简称BIC);
  • III Rule of thumb(凭经验选择lag)。

自预测

针对这个迟延lag,预测流程即为:
利用时间范围T:[X1~lag]的点预测[lag+1]上的点[Xlag+1],产生误差ε1。
以此类推
参数确定方式为最小二乘

误差

对一个长度为n的数据段,我们需要进行n-lag次预测,每一次预测都会产生一个误差项。
总体误差 δ 1 \delta_1 δ1是自回归误差 ε 1 ∼ ε n − l a g ε_1 \sim ε_{n-lag} ε1εnlag的无偏估计。
δ 1 = ∑ m = 1 n − l a g ( ε m − ε ‾ ) 2 n − l a g − 1 \delta_1=\frac{\sum_{m=1}^{n-lag}\left(\varepsilon_m-\overline{\varepsilon}\right)^2}{n-lag-1} δ1=nlag1m=1nlag(εmε)2

联合预测

同理参考自预测,求解联合回归产生的无偏误差估计 δ 2 \delta_2 δ2
假如 δ 2 < δ 1 \delta_2 < \delta_1 δ2<δ1则认为,添加变量对自回归变量可能有格兰杰因果关系。

F test

在得到 δ 2 , δ 1 \delta_2,\delta_1 δ2,δ1的值并比较大小之后,我们必须做自回归和联合回归误差的F检验,否则无法判断 δ 2 , δ 1 \delta_2,\delta_1 δ2,δ1值的大小是否有意义。
F_test(δ2,δ1 )。

数据预处理

平稳时序序列

需要预处理的最主要原因是granger causality analysis要求time series平稳。
根据原作者的描述,平稳时间序列粗略的讲需要满足以下两个条件:

  • 1)时间序列没有变化趋势(含周期性变化趋势),换言之,它不可以是那种看起来有明显增加或减少的线条。像以下两种就绝非平稳:
    在这里插入图片描述
    在这里插入图片描述
  • 2)任意取出若干段数据并对该若干段数据求方差。则方差间不应该有显著性差异。
  • 3)原作者补充:平稳时间序列里不含有单位根,非平稳时间序列里一定含有单位根。

处理步骤

在这里插入图片描述

STEP1:数据去趋势化

matlab工具箱会有相关工具。
在这里插入图片描述

STEP2:数据去均值

格兰杰因果关系要求时间序列数据必须围绕y=0轴波动
在这里插入图片描述

STEP3:ADF检验和KPSS检验

ADF检验全称 Augmented-Dickey-Fuller test(增广迪肯富乐检验),KPSS检验全称 Kwiatkowski-Phillips-Schmidt-Shin test。这两种检验均称为单位根检验。如果对时间序列数据做单位根检验得出的结论是该时间序列有单位根,则可以肯定该序列一定不是平稳的。

PS:

这里产生了四个问题:

  • 1)我们不是经过STEP1和STEP2了吗,为何序列仍是不平稳的?
    答:STEP1和STEP2并不保证序列的平稳性,只能使序列看似平稳。因此在完成STEP1和STEP2后,必须进行STEP3以便找到时间序列平稳数学上的证据。
  • 2)如果时间序列经过STEP1和STEP2后仍然检验不平稳该怎么办?
    答:问得好!解决这个问题正是STEP3的任务。
  • 3)ADF检验和KPSS检验有什么区别?
    KPSS 是右侧单边检验,原假设是序列是平稳的(不存在单位根)。
    ADF是双边检验,原假设是序列是非平稳的(存在单位根)。
  • 4)ADF检验和KPSS检验结果不一致怎么办?
    不得不说,这事儿常发生。笔者在网上也好好搜索了一番(2017年7月25日搜索)。网友给出的结论基本分为两派:
    A.“看情况自己选”
    B.“有一个通过就算通过”

STEP4:一阶差分

正如同STEP3中所提到的一样,只有当经过STEP1和STEP2后仍然检验不平稳时才会对时间序列数据做差分。那么怎么做差分呢?
给定时间序列X{x1,x2,x3,……,xn }。则定义差分过的时间序列X_diff为{x2-x1, x3-x2, x4-x3, …, xn-xn-1}。说白了就是后项减前项,这就是差分。差分带来的唯一问题是经过差分后的时间序列长度会缩减1个单位。另一个问题是,如果时间序列仍然不是平稳的该怎么办?答案是再差分一次知道平稳为止。根据笔者的经验,一般差分一次就足够了,很少有出现差分两次的。

STEP5:通过AIC准则求阶数lag

AIC信息准则的公式是:AIC=2*lag+nln(RSS/n)。其中,RSS是拟合的残差和(就是之前的误差无偏估计量), n是数据段的长度。我们的目标是搜索在1~n的范围内搜索lag,使AIC的值取得最小。而那个取得AIC最小值的lag就是我们想要的阶数lag

STEP6:杜尔滨怀特讯检验

英文名称为Durbin-Watson test。相必大家还记得我们采用最小二乘法求回归问题时曾假设回归后理论值与实际值的误差为ε,且ε服从正态分布。实际上,误差服从正态分布是使用最小二乘法求解回归问题的先决条件。而杜尔滨怀特讯检验的目的就是检测回归完成后的残差是否服从正态分布。如果不服从则该段数据不满足使用最小二乘法的先决条件,也就不满足求解格兰杰因果关系的基础。

STEP7:一致性检验

当对时间序列的数据值点完成回归以后。并不能确定回归得出的理论值和实际值是否来自于同一分布。此时,应采用一致性检验。如果一致性检验的结论表明理论值和实际值差距较大,则回归结果失败,需要重新确定回归。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
格兰杰因果检验是一种用于分析时间序列数据中因果关系的方法。R语言中可以使用quantile-on-quantile approach进行格兰杰因果检验。该方法基于分位数回归分析,通过对两个时间序列的分位数进行回归,来判断其中一个序列是否对另一个序列有因果影响。以下是一个使用quantile-on-quantile approach进行格兰杰因果检验的例子[^3]: ```R library(quantreg) library(ggplot2) # 生成两个时间序列数据 set.seed(123) x <- arima.sim(model = list(ar = 0.7), n = 100) y <- arima.sim(model = list(ar = 0.5), n = 100) # 将数据分为训练集和测试集 train.x <- x[1:80] test.x <- x[81:100] train.y <- y[1:80] test.y <- y[81:100] # 使用quantile-on-quantile approach进行格兰杰因果检验 g.fit <- rq(test.y ~ test.x, tau = 0.9) g.coef <- coef(g.fit) # 绘制分位数回归图像 ggplot(data.frame(x = test.x, y = test.y), aes(x, y)) + geom_point() + geom_quantreg(mapping = aes(color = "quantile regression"), formula = y ~ x, tau = 0.9, size = 1.2) + geom_smooth(mapping = aes(color = "lowess"), method = "loess", size = 1.2) + geom_abline(mapping = aes(intercept = g.coef, slope = g.coef, color = "quantile-on-quantile"), size = 1.2) + scale_color_manual(name = "Regression", values = c("quantile regression" = "black", "lowess" = "gray40", "quantile-on-quantile" = "blue"), labels = c("Quantile regression", "Lowess", "Quantile-on-quantile")) + theme_minimal() ``` 上述代码中,首先生成了两个时间序列x和y,然后将数据分为训练集和测试集。接着,使用`rq()`函数进行quantile-on-quantile approach格兰杰因果检验,其中`tau`参数为分位数回归的分位数。最后,通过`ggplot2`包绘制了分位数回归图像,并用蓝色直线表示quantile-on-quantile approach的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值