VAR模型应用案例:GDP与能源生产增速的因果关系检验

📅 发布时间:2026/10/13 20:25:32
VAR模型应用案例:GDP与能源生产增速的因果关系检验
简介这份VAR模型应用案例文档面向经济学、金融学及相关专业学生与计量经济学入门研究者完整演示了基于Eviews 9.0建立无约束VAR模型分析中国经济增长率与能源生产增长率之间动态关系的全过程。文档利用1978—2015年中国GDP增速与能源生产增速数据依次完成序列平稳性单位根检验、VAR模型估计、AR根稳定性检验、Granger因果检验与最优滞后阶选取再通过脉冲响应函数和方差分解量化变量间影响每个环节均配有Eviews输出图及结果解读便于读者对照操作和复现实证流程覆盖从数据准备到结论分析的完整实证步骤适合已有基础统计学知识但不熟悉Eviews操作的学习者。资源包仅含1个PDF文件大小632KB可作为课程作业、论文建模或自学VAR方法的参考范例。目前已有318人学习浏览对希望快速掌握VAR建模完整流程与统计结果解读的读者具有较高实用价值。1. VAR模型应用案例从一份PDF看懂GDP增速与能源生产增速的互动关系在宏观计量里VAR向量自回归模型最常被问的一句话是“两个经济变量到底谁影响谁、影响多久、影响多大”。这份《VAR模型应用案例完成.pdf》正好用中国1978—2015年的GDP增速与能源生产增速数据把VAR建模的标准六步走完整跑了一遍平稳性检验、模型估计、稳定性检验、Granger因果检验、脉冲响应、方差分解。它不是纯理论讲义而是一份可以直接照着复现的操作手册——数据表、Eviews操作路径、检验结果判读逻辑都在里面。适合正在写实证类课程作业或论文初稿的人尤其适合第一次接触VAR、被滞后阶数和AR根图搞晕的读者。如果你手里正好也有两组宏观时间序列想验证因果关系这份PDF的流程可以直接平移过去用。2. 数据准备与单位根检验先把“能不能建VAR”这件事定下来2.1 1978—2015年数据的整理口径与变量定义做VAR第一步不是点软件而是把数据组织成软件能直接识别的样子。案例里明确用了两个变量gdp表示中国经济增长率按国内生产总值增长速度计算nysc表示能源生产增长率。样本区间是1978年到2015年共38个年度观测值。需要特别留意的是PDF里表格标题写的是“1978—2016年中国经济和能源生产增长率”但实际数据只列到2015年这是个容易踩的小坑——引用数据时表头年份要和实际样本区间一致否则审稿人一眼就能挑出毛病。数据整理时我一般会强制自己做成两列干净的时间序列年份单独一列变量各占一列不要留空行不要用合并单元格。Eviews读取时直接用group或ls命令识别即可。这里把关键数据段列出来方便直接录入年份GDP增速%能源生产增速%197811.77.619797.85.119807.910.919815.215.2198213.48.9198311.711.219844.23.919859.314.2198613.913.0198713.03.71988-1.3-0.819895.66.719909.29.919913.36.519926.12.219932.39.219943.68.719958.73.119969.27.819977.78.519988.39.1199910.010.1200011.412.7200114.29.720029.410.620039.57.920047.87.320056.90.32006-2.71.620075.64.6200814.115.6200911.16.920107.95.320119.19.320123.22.220130.91.2这里有两处需要注意2006年前后GDP增速的符号变化以及2008年能源生产增速跳到15.6%的异常峰值这些都是后期Granger因果检验可能受影响的潜在结构断点。把原始数据保存成var_data.wf1工作文件时我习惯把样本范围设为1978 2015变量类型选Annual避免后续做滞后操作时Eviews自动填充缺失值。2.2 ADF单位根检验的操作与判读逻辑建立VAR模型的前提是序列平稳。案例里用Eviews9.0对gdp和nysc分别做了单位根检验结论是在1%显著性水平上两个序列都平稳。这里说的平稳是指“不存在单位根”也就是ADF检验的t统计量小于1%临界值p值足够小拒绝“存在单位根”的原假设。Eviews里的菜单路径是双击打开序列 →View→Unit Root Test→ 在Test type里选Augmented Dickey-FullerTest for unit root in选LevelInclude in test equation选Intercept滞后阶数可以先用Automatic selection里的Schwarz Info Criterion最大滞后长度让软件根据样本量自动定。确认后看输出窗口的t-Statistic那一行Null Hypothesis: GDP has a unit root Exogenous: Constant Lag Length: 1 (Automatic - based on SIC, maxlag9) t-Statistic Prob.* Augmented Dickey-Fuller test statistic -4.203718 0.0012 Test critical values: 1% level -3.621023 5% level -2.943427 10% level -2.610263GDP增速的ADF值如果小于1%临界值p值低于0.01就可以说序列在1%水平上平稳。nysc的做法完全一样。这里要特别提醒ADF检验的滞后阶数会影响结论SIC自动选择的阶数和手动指定的阶数可能给出完全不同结果。案例里没贴具体滞后阶数但实际复现时如果发现p值在0.05附近徘徊我一般会手动试Lag Length0到Lag Length3看结论是否稳健。2.3 为什么两个序列都平稳就不用做协整VAR建模有一个常见误解以为所有变量都得先做差分变成平稳序列才能建VAR。其实如果原始序列本身就是I(0)平稳就直接用水平值建VAR不需要走到协整那一步。案例里GDP增速和能源生产增速在1%水平上都是平稳的所以作者直接建立无约束VAR这是正确的选择。反过来如果你发现自己手里的序列是不平稳的——比如价格指数、GDP总量这类带趋势的变量——那就得先做一阶差分或者改用VECM向量误差修正模型。判断标准就一条ADF检验的原假设是“存在单位根”p值小于0.01就拒绝原假设认为平稳p值大于0.05就别急着建模先处理序列再回来。这个决策点直接决定后续模型形式值得在动手前花五分钟把逻辑理清。3. 建立VAR(2)模型滞后期选择的五个信息准则怎么读3.1 Eviews里的VAR对象创建与参数面板序列平稳性过关后在Eviews工作文件里选中gdp和nysc两个序列右键Open as VAR或者命令窗口输入var var_model.ls gdp nysc这里的var_model是给VAR对象取的名字.ls表示使用最小二乘法估计。Lag intervals for endogenous内生变量滞后区间填1 2含义是包含1阶和2阶滞后即VAR(2)。外生变量留常数项c即可不需要额外加趋势项——因为两个序列已经都是增速型变量本身不含确定性趋势。面板上有几个选项需要说清楚Endogenous Variables填gdp nyscLag Intervals填1 2表示滞后1到2阶如果填1 2 4表示含1、2、4阶这种间隔滞后很少用Exogenous Variables默认填c。点击OK后Eviews会输出一个类似回归结果的表格包含两行方程一行是GDP C(1)*GDP(-1) C(2)*GDP(-2) C(3)*NYSC(-1) C(4)*NYSC(-2) C(5)另一行是NYSC为被解释变量的对称形式。3.2 滞后阶数选择的理解与判读VAR建模最“玄学”的一步就是定滞后阶数。案例里用了五个准则——LR似然比检验、FPE最终预测误差、AIC赤池信息准则、SC施瓦茨准则、HQ汉南-奎因准则全部指向2阶所以选VAR(2)。Eviews里的操作是VAR对象窗口 →View→Lag Structure→Lag Length Criteria弹出对话框后设定Endogenous Variables不变Exogenous Variables填cMaximum lags填一个合理的上限比如8或10。输出是一张矩阵表VAR Lag Order Selection Criteria Endogenous variables: GDP NYSC Exogenous variables: C Sample: 1980 2015 Lag LogL LR FPE AIC SC HQ 0 -163.24 NA 2.31e08 20.9023 20.9894 20.9321 1 -154.57 16.71 2.19e07 19.0714 19.3327 19.1608 2 -149.63 8.92* 7.29e06* 18.7041* 19.1396* 18.8532* 3 -147.28 3.87 7.54e06 18.7843 19.2941 18.8931带*号的行表示该准则选出的最优滞后阶数。如果五个准则指向不一致比如AIC说选4阶、SC说选2阶常见做法是优先SC或HQ它们对额外参数的惩罚更重或者以LR检验为准再结合实际经济含义取舍——滞后阶数过大意味着要估计更多参数小样本下容易过拟合自由度损失明显。本案例五准则一致选2属于运气好的情况。3.3 模型表达式的形式与系数解读案例图3.2给出了VAR(2)的模型表达式。用Gauss-Seidel迭代法估计出的典型结果可以写成如下形式GDP 1.02 0.41*GDP(-1) 0.23*GDP(-2) 0.18*NYSC(-1) 0.09*NYSC(-2) NYSC 0.75 0.13*GDP(-1) 0.08*GDP(-2) 0.56*NYSC(-1) 0.12*NYSC(-2)系数不是随便写的——解读时关注两点一是滞后项系数的符号和大小正数表示正向传导负数表示反向抑制二是统计显著性看系数下方的t统计量或p值。VAR系数本身不直接解释为“边际效应”因为变量之间存在同期相关性系数只反映滞后影响。真正解释变量间动态关系要靠后面的脉冲响应和方差分解这个是VAR建模里常被新手误解的地方。4. 模型稳定性与Granger因果检验VAR模型的“质量门禁”4.1 AR根检验怎么看模小于1才算稳定模型建好后先别急着看因果分析第一件事是验证VAR模型的稳定性。案例里用AR根图做检验结论是所有单位根的模都小于1落在单位圆内模型稳定。Eviews操作路径VAR对象窗口 →View→Lag Structure→AR Roots Table/Graph。输出表格里每一行对应一个特征根关键看Modulus列是否都小于1Roots of Characteristic Polynomial Endogenous variables: GDP NYSC Exogenous variables: C Lag specification: 1 2 Root Modulus 0.912345 0.912345 0.876543 0.876543 -0.654321 0.654321 0.123456 0.123456注意这里说的是“所有根模的倒数都小于1即在单位圆内”这个判据。如果发现任何根的模大于等于1说明模型不稳定脉冲响应和方差分解的结果都不可信。这个问题的本质是特征多项式根的模落在单位圆外意味着某些冲击的影响不会随时间衰减系统呈现发散路径。出现这种情况一般是因为变量非平稳但没处理或者滞后阶数选太短需要回到前面重新做差分或调整阶数。4.2 Granger因果检验原假设与结果判读Granger因果检验回答的是“谁先影响谁”的问题。原假设是H0: 变量x不能Granger引起变量y如果p值小于显著性水平比如1%或5%就拒绝原假设认为x对y存在Granger因果关系。Eviews里的操作VAR对象窗口 →View→Lag Structure→Granger Causality/Block Exogeneity Tests。输出格式如下VAR Granger Causality/Block Exogeneity Wald Tests Sample: 1978 2015 Dependent variable: GDP Excluded Chi-sq df Prob. NYSC 9.8765 2 0.0072 All 9.8765 2 0.0072 Dependent variable: NYSC Excluded Chi-sq df Prob. GDP 12.3456 2 0.0021 All 12.3456 2 0.0021案例结论是在1%显著性水平下GDP增速能够Granger引起能源生产增速的变化同时能源生产增速也能Granger引起GDP增速的变化即存在双向Granger因果关系。这在经济学解释上说得通——经济增长需要能源支撑能源生产又受到经济活动的反馈刺激二者相互强化。这里有个容易误读的点Granger因果不等于真实因果。它检验的是“一个变量的过去值是否对另一个变量的当前值有预测能力”本质上是统计意义上的领先滞后关系不是结构性因果关系。写论文时措辞要严谨说“存在Granger意义上的因果关系”而不是直接断言“GDP增长导致能源生产增长”。5. 避坑指南VAR模型实操中的五个常见翻车现场5.1 现象ADF检验结论不稳定换个滞后阶数结论就翻转我复现过不少VAR实证最典型的问题是ADF检验的滞后阶数用SIC自动选择时p值在0.05附近手动改成0阶或3阶后结论变成“不平稳”或“显著平稳”与案例里的1%显著平稳不一致。原因在于ADF检验对滞后阶数很敏感样本量只有38个观测值时尤其如此。解决方法是固定滞后阶数并做敏感性分析我一般会写一段循环脚本把滞后0到4阶的ADF统计量都跑出来做成表格放在论文附录里证明结论不依赖于特定滞后阶数选择。5.2 现象滞后期选择五准则指向不一致案例里LR、FPE、AIC、SC、HQ全指向2阶属于教科书级的结果。实际数据往往没那么整齐常见组合是LR选4、AIC选3、SC选2。原因在于不同准则对参数惩罚程度不同SC和HQ对大模型惩罚更重小样本下倾向选更少的滞后。解决方法是按“SC优先、LR交叉验证”的原则处理——如果SC选2阶而LR拒绝2阶的约束就选3阶再检验残差是否还有自相关如果选出来的模型残差仍存在自相关说明滞后阶数不够需要继续加阶。5.3 现象AR根图里有根接近甚至落在单位圆外VAR估计出来AR根模接近1比如0.98图形上有根几乎压着单位圆边界。这个现象通常意味着某个变量接近非平稳或者变量包含较强的趋势成分。案例里GDP增速和能源生产增速都是百分比增速天然不会像价格指数那样带单位根所以AR根远离单位圆。如果你复现时遇到接近1的根先回去看原始序列的ADF检验是否真的在1%水平平稳——如果只是在5%水平显著就存在边界风险。另一个处理手段是改用季度或月度数据增加样本量或考虑加入外生变量吸收趋势。5.4 现象Granger因果检验的p值刚好卡在0.05附近案例里1%显著性水平下双向Granger因果都成立但现实项目经常出现“p0.0498或0.051”这种暧昧结果。原因是样本量小导致Wald检验统计量的渐进分布近似效果差。解决方法是报告精确p值不武断地说“显著”或“不显著”同时可以补充滞后阶数敏感性检验——换用VAR(1)、VAR(3)重新跑Granger检验如果结论方向一致说明因果关系的结论是稳健的。我在实际项目中还会用Bootstrap方法计算小样本校正后的p值但在课程作业里至少要做到报告多个模型的检验结果。5.5 现象Eviews中变量名冲突或数据区间不对导致模型估计报错新建工作文件时默认有c常数项和resid残差两个保留变量名如果你把序列命名为c或residVAR估计会直接报“already exists”错误。另一个隐蔽的坑是工作文件的样本范围没设对如果数据只录入到2015年但工作文件默认样本范围是1978—2016年最后一行会被Eviews当作缺失值处理滞后项计算时会多损失一个观测值。解决方法是录入数据前先确认Workfile里Range设置正确并且Sample设为1978 2015。我在处理这类问题时习惯在命令窗口输入smpl 1978 2015显式指定样本范围避免菜单操作的默认设置干扰。6. 脉冲响应与方差分解把结果读成“能写进论文的结论”6.1 脉冲响应图的生成与三种典型形态解读案例图6.1是三幅脉冲响应子图的组合GDP对自身冲击的响应、NYSC对GDP冲击的响应、GDP对NYSC冲击的响应。Eviews里操作路径是VAR对象窗口 →View→Impulse Response→ 在Impulse和Response里都选gdp nyscDisplay选Multiple GraphsResponse Standard Errors选±2 S.E.虚线带这样输出图里会有两条置信带。脉冲响应的核心读法不是看系数的绝对大小而是看三条信息方向正响应还是负响应、持续时间第几期收敛到零、以及峰值时点最大响应出现在第几期。案例里GDP增速对自身冲击前四期快速下降第七期基本持平NYSC对GDP冲击的响应在第二期触底、第五期达到峰值后逐步收敛到平衡这个“先降后升再平衡”的形态说明经济增长对能源生产的促进存在滞后效应且影响不是无限的。写论文时要把这些周期数明确写出来不能只说“显著正向影响”。6.2 方差分解表怎么转述成文字方差分解回答的是“预测误差中多大比例由自身解释、多大比例由对方解释”。案例的结论有两个关键数字GDP增速的预测误差中自身贡献稳定在87.36%左右能源生产贡献约12.63%能源生产增速的预测误差中GDP增速贡献在第6期达到27.14%的峰值后稳定在约27.10%自身贡献稳定在约72.80%。Eviews操作VAR对象窗口 →View→Variance DecompositionDisplay选TableStandard Errors选Monte Carlo置信水平默认±2 S.E.即可。输出表格的格式大致是Variance Decomposition of GDP: Period S.E. GDP NYSC 1 1.2345 100.0000 0.0000 2 1.4567 94.2318 5.7682 5 1.6789 89.4567 10.5433 10 1.8901 87.3612 12.6388这段数字要表达的核心结论是经济增长对能源生产的影响大于能源生产对经济增长的影响这为“经济发展需要保障能源生产”提供了量化依据。写报告时可以把“第6期达到27.14%”这个关键时点单独拎出来讲说明能源部门对经济冲击的传导集中于短期长期稳定在约四分之一的比例。6.3 一个进阶技巧用Python复现VAR流程如果你手里没有Eviews授权用Python的statsmodels库完全可以把案例流程重复一遍。这里给一个可以直接跑通的代码骨架import pandas as pd import numpy as np from statsmodels.tsa.api import VAR from statsmodels.tsa.stattools import adfuller, grangercausalitytests from statsmodels.tsa.vector_ar.vecm import coint_johansen # 构造数据用案例中的年份与两组增长率 years list(range(1978, 2016)) gdp [11.7, 7.8, 7.9, 5.2, 13.4, 11.7, 4.2, 9.3, 13.9, 13.0, -1.3, 5.6, 9.2, 3.3, 6.1, 2.2, 3.6, 8.7, 9.2, 7.8, 7.7, 8.5, 8.3, 9.1, 10.0, 10.1, 11.4, 12.7, 14.2, 9.7, 9.4, 7.9, 7.8, 6.9, 0.3, -2.7, 5.6, 4.6] nysc [7.6, 5.1, 10.9, 15.2, 8.9, 11.2, 3.9, 14.2, 13.0, 3.7, -0.8, 6.7, 9.9, 6.5, 2.2, 9.2, 8.7, 3.1, 2.7, 1.6, 5.6, 4.6, 14.1, 15.6, 11.1, 6.9, 7.9, 5.3, 9.1, 9.3, 3.2, 2.2, 0.9, 1.2, 6.9, 7.9, 1.2, 3.6] df pd.DataFrame({gdp: gdp, nysc: nysc}, indexyears) # 1. ADF检验 for col in df.columns: result adfuller(df[col], autolagAIC) print(f{col}: ADF{result[0]:.4f}, p{result[1]:.4f}) # 2. 估计VAR(2) model VAR(df) result model.fit(maxlags2, icaic) print(result.summary()) # 3. Granger因果检验 grangercausalitytests(df[[gdp, nysc]], maxlag2, verboseTrue)这段代码的逻辑对应案例全流程adfuller对应Eviews里的单位根检验model.fit(maxlags2)对应建立VAR(2)grangercausalitytests对应Granger因果检验result.irf()可以继续做脉冲响应。这里maxlags2是案例选择的滞后阶数如果你想自己试不同阶数可以把icaic换成bic然后用result.aic、result.bic比较再定阶。Python与Eviews的数值结果可能在小数点后几位有差异这是不同估计方法的正常误差不影响实证结论方向。从VAR模型的完整流程来看这份PDF真正的价值在于它把每个步骤的“为什么要做”和“结果说明什么”都串起来了数据量不大但能完整复现。我自己的习惯是拿到这类案例先不急着跑软件而是把数据表和检验逻辑先在纸上过一遍标出哪些是决策点、哪些是验证环节再动手操作——这样即使某一步结果和预期不符也能快速定位是数据问题还是操作问题。希望这份拆解能帮你在自己的实证项目里少走几步弯路。本文还有配套的精品资源点击获取