R语言panelvar包pVAR建模后如何用pgrangertest做格兰杰因果检验
面板向量自回归模型搭配
pgrangertest的检验实操说明 1. 公式项的适配规则
pgrangertest本身是针对面板结构的单向因果Wald检验,公式逻辑和pVAR的核心设定完全匹配:
- 公式左侧填入待检验的被解释内生变量(和pVAR的
dependent_vars列表保持一致) - 公式右侧填入待检验的格兰杰原因变量
- 不需要手动写入滞后项、固定效应项:函数会自动按指定阶数为右侧变量生成滞后项,同时匹配面板个体维度的残差修正逻辑,和pVAR采用前向正交离差(fod)剥离固定效应的处理逻辑适配,不需要手动添加额外的变换项。
- 前置要求:传入函数前需要先通过
pdata.frame()为数据集定义面板索引,否则函数无法识别个体、时间维度,会触发报错。
2. order参数的取值标准
order参数必须和pVAR模型通过Andrews_Lu_MMSC准则筛选得到的最优滞后阶数完全一致。
原因是pVAR框架下的MMSC-BIC、MMSC-AIC指标,本身就是针对GMM估计的面板VAR模型,在平衡模型拟合度、自由度、残差自相关水平下得到的最优阶数。如果此处手动设置和pVAR不一致的阶数,会导致检验的动态结构和前期拟合的pVAR模型错配,检验结果无法对应pVAR系统的真实因果关系,失去参考价值。比如如果pVAR筛选得到最优滞后阶为1,order就填1L,不能随意设置为2L。
3. 三变量系统的检验次数与代码合理性
针对y、x、z三个存在互动机理的变量,确实需要完成6次单向检验。格兰杰检验的原假设是“变量A的滞后项对变量B无显著影响”,属于单向检验逻辑,不能双向替代,因此需要覆盖“x→y、y→x、x→z、z→x、y→z、z→y”全部6条单向路径。
最初编写的6行两变量检验代码存在两个核心问题:
- 未提前定义数据集的面板属性,函数无法正常运行
- 未对系统内的第三个变量进行控制,检验结果会被变量间的传导路径扭曲
4. 三变量系统的变量控制方法
原生pgrangertest仅支持双变量的基础检验,如果直接跑两变量检验,当三个变量存在传导关系时(比如模拟数据中x影响z、z影响y),两变量下的检验结果会被第三个变量的中介效应污染,存在估计偏误。
实操中的适配调整方案:
- 在公式的右侧手动加入需要控制的第三个变量,函数会自动对所有右侧变量按指定阶数生成滞后项,完成“控制其他变量滞后影响后,核心检验变量的滞后项对被解释变量是否有联合显著影响”的联合Wald检验,这一逻辑和pVAR系统下的单方程系数检验是完全等价的。
- 调整后的可运行参考代码如下(假设最优滞后阶为1):
# 先定义面板属性 panel_pdata <- pdata.frame(panel, index = c("country", "year")) # 控制第三变量后的全路径检验 pgrangertest(y ~ x + z, data = panel_pdata, order = 1L) pgrangertest(y ~ z + x, data = panel_pdata, order = 1L) pgrangertest(x ~ z + y, data = panel_pdata, order = 1L) pgrangertest(x ~ y + z, data = panel_pdata, order = 1L) pgrangertest(z ~ x + y, data = panel_pdata, order = 1L) pgrangertest(z ~ y + x, data = panel_pdata, order = 1L)
注意:公式右侧解释变量的先后顺序不影响检验结果,函数会自动对所有解释变量的滞后项做联合显著性检验。
内容的提问来源于stack exchange,提问作者Miranda
相关产品推荐
相关产品推荐

