Python状态模型VARMAX结果

问题描述 投票:0回答:1

每次运行VARMAX模型时,我都会得到不同的系数。有没有什么办法可以在不强加种子的情况下复制我之前的结果?谢谢

我试图复制statsmodels网页上发布的VARMA(p,q)示例:(https://www.statsmodels.org/dev/examples/notebooks/generated/statespace_varmax.html)。为了检查结果的可复制性,我只添加了一个循环来重新估计模型和一个用于保存结果的数据帧(参数)。所以这是我的代码:

%matplotlib inline
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
dta = sm.datasets.webuse('lutkepohl2', 'https://www.stata-press.com/data/r12/')
dta.index = dta.qtr
endog = dta.loc['1960-04-01':'1978-10-01', ['dln_inv', 'dln_inc', 'dln_consump']]


exog = endog['dln_consump']

parameters=pd.DataFrame()
for p in  range(10):
    print(p)
    mod = sm.tsa.VARMAX(endog[['dln_inv', 'dln_inc']], order=(1,1))
    res = mod.fit(maxiter=1000, disp=False)
    print(res.summary())
    param= pd.DataFrame(res.params,columns= ["estimation "+str(p)])
    parameters=pd.concat([parameters, param], axis=1)

print(parameters)    

如您所见,每次估算模型时结果都会发生变化:

                          estimation 0  estimation 1  estimation 2  \
const.dln_inv                 0.010974      0.010934      0.010934   
const.dln_inc                 0.016554      0.016536      0.016536   
L1.dln_inv.dln_inv           -0.010164     -0.010087     -0.010087   
L1.dln_inc.dln_inv            0.360306      0.362187      0.362187   
L1.dln_inv.dln_inc           -0.032975     -0.033071     -0.033071   
L1.dln_inc.dln_inc            0.230657      0.231421      0.231421   
L1.e(dln_inv).dln_inv        -0.249916     -0.250307     -0.250307   
L1.e(dln_inc).dln_inv         0.125546      0.125581      0.125581   
L1.e(dln_inv).dln_inc         0.088878      0.089001      0.089001   
L1.e(dln_inc).dln_inc        -0.235258     -0.235176     -0.235176   
sqrt.var.dln_inv              0.044926      0.044927      0.044927   
sqrt.cov.dln_inv.dln_inc      0.001670      0.001662      0.001662   
sqrt.var.dln_inc              0.011554      0.011554      0.011554    
python statsmodels
1个回答
0
投票

谢谢。但我试图复制statsmodels网页上发布的VARMA(p,q)示例:(https://www.statsmodels.org/dev/examples/notebooks/generated/statespace_varmax.html)。为了检查结果的可复制性,我只添加了一个循环来重新估计模型和一个用于保存结果的数据帧(参数)。所以这是我的代码:

%matplotlib inline
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
dta = sm.datasets.webuse('lutkepohl2', 'https://www.stata-press.com/data/r12/')
dta.index = dta.qtr
endog = dta.loc['1960-04-01':'1978-10-01', ['dln_inv', 'dln_inc', 'dln_consump']]


exog = endog['dln_consump']

parameters=pd.DataFrame()
for p in  range(10):
    print(p)
    mod = sm.tsa.VARMAX(endog[['dln_inv', 'dln_inc']], order=(1,1))
    res = mod.fit(maxiter=1000, disp=False)
    print(res.summary())
    param= pd.DataFrame(res.params,columns= ["estimation "+str(p)])
    parameters=pd.concat([parameters, param], axis=1)

print(parameters)    

如您所见,每次估算模型时结果都会发生变化:

                          estimation 0  estimation 1  estimation 2  \
const.dln_inv                 0.010974      0.010934      0.010934   
const.dln_inc                 0.016554      0.016536      0.016536   
L1.dln_inv.dln_inv           -0.010164     -0.010087     -0.010087   
L1.dln_inc.dln_inv            0.360306      0.362187      0.362187   
L1.dln_inv.dln_inc           -0.032975     -0.033071     -0.033071   
L1.dln_inc.dln_inc            0.230657      0.231421      0.231421   
L1.e(dln_inv).dln_inv        -0.249916     -0.250307     -0.250307   
L1.e(dln_inc).dln_inv         0.125546      0.125581      0.125581   
L1.e(dln_inv).dln_inc         0.088878      0.089001      0.089001   
L1.e(dln_inc).dln_inc        -0.235258     -0.235176     -0.235176   
sqrt.var.dln_inv              0.044926      0.044927      0.044927   
sqrt.cov.dln_inv.dln_inc      0.001670      0.001662      0.001662   
sqrt.var.dln_inc              0.011554      0.011554      0.011554    
© www.soinside.com 2019 - 2024. All rights reserved.