如何在 r 中执行格兰杰因果关系检验
格兰杰因果检验用于确定一个时间序列是否有助于预测另一个时间序列。
该检验使用以下原假设和备择假设:
原假设 (H 0 ):时间序列x不会导致时间序列y发生格兰杰分布
备择假设 ( HA ):时间序列x格兰杰原因时间序列y
术语“格兰杰原因”是指知道具有一定滞后性的时间序列x的值对于预测稍后时间序列y的值是有用的。
此检验生成具有相应 p 值的 F 检验统计量。如果 p 值低于一定的显着性水平(即 α = 0.05),那么我们可以拒绝原假设并得出结论:我们有足够的证据来断言时间序列x Granger 导致时间序列 y。
要在 R 中执行 Granger-Causality 测试,我们可以使用lmtest包中的grangertest()函数,该函数使用以下语法:
格兰杰测试(x,y,顺序= 1)
金子:
- x:第一个时间序列
- y:第二个时间序列
- order:第一个时间序列中使用的偏移量数。默认值为 1。
以下分步示例展示了如何在实践中使用此功能。
步骤 1:定义两个时间序列
在本示例中,我们将使用 lmtest 包中预加载的ChickEgg数据集。该数据集值包含 1930 年至 1983 年美国生产的鸡蛋数量以及鸡的数量:
#load lmtest package library (lmtest) #load ChickEgg dataset data(ChickEgg) #view first six rows of dataset head(ChickEgg) chicken egg [1,] 468491 3581 [2,] 449743 3532 [3,] 436815 3327 [4,] 444523 3255 [5,] 433937 3156 [6,] 389958 3081
步骤 2:执行格兰杰因果关系检验
接下来,我们将使用grangertest()函数执行格兰杰因果关系检验,看看所产鸡蛋的数量是否可以预测未来母鸡的数量。我们将使用三个偏移量运行测试:
#perform Granger-Causality test grangertest(chicken ~ egg, order = 3 , data = ChickEgg) Granger causality test Model 1: chicken ~ Lags(chicken, 1:3) + Lags(egg, 1:3) Model 2: chicken ~ Lags(chicken, 1:3) Res.Df Df F Pr(>F) 1 44 2 47 -3 5.405 0.002966 ** --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
以下是如何解释结果:
- 模型1:该模型尝试使用前三年的鸡数量和前三年的鸡蛋数量作为预测变量来预测鸡的数量。
- 模型 2:该模型尝试仅使用前三年的鸡数量作为预测变量来预测鸡的数量。
- F:这是F检验统计量。结果是 5.405。
- Pr(>F):这是对应于 F 检验统计量的 p 值。结果是 0.002966。
由于 p 值小于 0.05,我们可以拒绝检验的原假设,并得出结论:知道鸡蛋的数量有助于预测未来母鸡的数量。
步骤 3:反向执行格兰杰因果关系检验
尽管我们拒绝了检验的原假设,但实际上有可能发生反向因果关系的情况。换句话说,母鸡的数量有可能导致鸡蛋数量的变化。
为了排除这种可能性,我们需要反向执行格兰杰因果检验,使用鸡作为预测变量,鸡蛋作为响应变量:
#perform Granger-Causality test in reverse grangertest(egg ~ chicken, order = 3 , data = ChickEgg) Granger causality test Model 1: egg ~ Lags(egg, 1:3) + Lags(chicken, 1:3) Model 2: egg ~ Lags(egg, 1:3) Res.Df Df F Pr(>F) 1 44 2 47 -3 0.5916 0.6238
检验的 p 值为 0.6238。由于该值不小于 0.05,因此我们不能拒绝原假设。换句话说,母鸡的数量并不能预测未来鸡蛋的数量。
因此,我们可以得出结论,知道鸡蛋的数量有助于预测未来母鸡的数量。