Statsmodels与Stata的ARIMA(0,1,2)结果差异原因问询
Stata 17与statsmodels ARIMA结果差异的原因解析
问题背景
在ARIMA分析过程中,Stata 17与statsmodels(0.13.5版本)的输出结果出现不一致:
- 运行statsmodels代码
ARIMA(df_log, order=(0,1,2))得到的SARIMAX结果,和Stata执行arima log_gdp, arima(0,1,2)的ARIMA回归结果不匹配。 - 但将一阶差分后的数据传入statsmodels的
ARIMA(df_log.diff().dropna(), order=(0,0,2))时,结果与Stata完全一致。
核心差异原因
1. 常数项的处理逻辑不同
- Stata的
arima(0,1,2):本质是对差分后的数据拟合带常数项的MA(2)模型,默认会在差分序列中加入均值项(对应结果中的_cons),即Stata的ARIMA(p,d,q)会自动将常数项绑定在差分后的序列上,而非原始序列。 - statsmodels的
ARIMA(0,1,2):默认不在差分后的序列中添加常数项(假设差分序列均值为0)。若要给差分序列添加常数项,必须显式指定trend='c'参数,否则模型不会包含均值项。
2. 样本量与拟合逻辑的对应
- Stata的
arima(0,1,2)自动使用差分后的61个观测值(样本范围1961-2021),拟合带常数项的MA(2)模型。 - statsmodels的
ARIMA(0,1,2)默认使用原始62个观测值拟合无常数项的模型;而手动差分后传入ARIMA(0,0,2)时,相当于复刻了Stata的逻辑:用差分后的61个观测值,拟合带常数项的MA(2)(statsmodels的ARIMA(0,0,2)默认包含常数项const)。
让statsmodels与Stata结果匹配的方法
如果要让statsmodels的ARIMA(0,1,2)直接输出和Stata一致的结果,只需在模型中指定趋势项参数:
re = ARIMA(df_log, order=(0,1,2), trend='c') print(re.fit().summary())
此时statsmodels会在差分后的序列中加入常数项,拟合逻辑与Stata完全对齐,结果也会匹配。
附:各结果对比
statsmodels ARIMA(0,1,2)默认结果(无常数项)
SARIMAX Results ============================================================================== Dep. Variable: GDP No. Observations: 62 Model: ARIMA(0, 1, 2) Log Likelihood 48.459 Date: Thu, 11 May 2023 AIC -90.918 Time: 02:21:08 BIC -84.585 Sample: 01-01-1960 HQIC -88.436 - 01-01-2021 Covariance Type: opg ============================================================================== coef std err z P>|z| [0.025 0.975] ------------------------------------------------------------------------------ ma.L1 0.4751 0.142 3.349 0.001 0.197 0.753 ma.L2 -0.0500 0.151 -0.332 0.740 -0.345 0.245 sigma2 0.0119 0.002 6.720 0.000 0.008 0.015 =================================================================================== Ljung-Box (L1) (Q): 4.11 Jarque-Bera (JB): 3.62 Prob(Q): 0.04 Prob(JB): 0.16 Heteroskedasticity (H): 0.60 Skew: 0.37 Prob(H) (two-sided): 0.27 Kurtosis: 3.94 ===================================================================================
Stata 17 ARIMA(0,1,2)结果(带常数项)
(setting optimization to BHHH) Iteration 0: log likelihood = 51.833406 Iteration 1: log likelihood = 58.219464 Iteration 2: log likelihood = 59.750732 Iteration 3: log likelihood = 60.128641 Iteration 4: log likelihood = 60.183567 (switching optimization to BFGS) Iteration 5: log likelihood = 60.191613 Iteration 6: log likelihood = 60.192693 Iteration 7: log likelihood = 60.192721 Iteration 8: log likelihood = 60.192721 ARIMA regression Sample: 1961 thru 2021 Number of obs = 61 Wald chi2(2) = 17.21 Log likelihood = 60.19272 Prob > chi2 = 0.0002 ------------------------------------------------------------------------------ | OPG D.log_gdp | Coefficient std. err. z P>|z| [95% conf. interval] -------------+---------------------------------------------------------------- log_gdp | _cons | .0707899 .0085723 8.26 0.000 .0539885 .0875912 -------------+---------------------------------------------------------------- ARMA | ma | L1. | .1135653 .103465 1.10 0.272 -.0892223 .3163529 L2. | -.4008123 .1129969 -3.55 0.000 -.6222821 -.1793425 -------------+---------------------------------------------------------------- /sigma | .0899162 .007283 12.35 0.000 .0756417 .1041907 ------------------------------------------------------------------------------ Note: The test of the variance against zero is one sided, and the two-sided confidence interval is truncated at zero.
匹配的statsmodels ARIMA(0,0,2)结果(手动差分后带常数项)
re = ARIMA(df_log.diff().dropna(), order=(0,0,2)) print(re.fit().summary())
SARIMAX Results ============================================================================== Dep. Variable: GDP No. Observations: 61 Model: ARIMA(0, 0, 2) Log Likelihood 60.193 Date: Thu, 11 May 2023 AIC -112.386 Time: 02:14:30 BIC -103.942 Sample: 01-01-1961 HQIC -109.076 - 01-01-2021 Covariance Type: opg ============================================================================== coef std err z P>|z| [0.025 0.975] ------------------------------------------------------------------------------ const 0.0708 0.009 8.258 0.000 0.054 0.088 ma.L1 0.1136 0.103 1.098 0.272 -0.089 0.316 ma.L2 -0.4008 0.113 -3.548 0.000 -0.622 -0.179 sigma2 0.0081 0.001 6.174 0.000 0.006 0.011 =================================================================================== Ljung-Box (L1) (Q): 0.00 Jarque-Bera (JB): 2.57 Prob(Q): 0.99 Prob(JB): 0.28 Heteroskedasticity (H): 0.60 Skew: 0.36 Prob(H) (two-sided): 0.26 Kurtosis: 3.71 ===================================================================================
内容的提问来源于stack exchange,提问作者Satish Chaudhary
相关产品推荐
相关产品推荐

