我对Python的编码还比较陌生,我正在从事一个涉及信号分析的项目。我有几个数据集,但为了简单起见,我只使用其中的两个来问这个问题。
首先,有关数据的信息:
我正在试着测试aos是否会导致拍卖。
相关代码行(截至目前)如下:
mydict = statsmodels.tsa.stattools.grangercausalitytests(zip(aucs[1:677],aos[1:677]), maxlag=100, addconst=True, verbose=True)
pp.pprint(mydict)函数调用中的“详细”模式产生非常好的输出,例如,对于第79次滞后:
Granger Causality
number of lags (no zero) 79
ssr based F test: F=1.0481 , p=0.3772 , df_denom=438, df_num=79
ssr based chi2 test: chi2=112.8566, p=0.0075 , df=79
likelihood ratio test: chi2=103.3680, p=0.0343 , df=79
parameter F test: F=1.0481 , p=0.3772 , df_denom=438, df_num=79从我的研究来看,基于ssr的F检验是“标准”格兰杰因果检验,因此我想在我的项目中使用。
我想做两件事:(1)将其中的每一个打印到一个文件中,(2)绘制基于ssr的F分布和相关的p-值/置信界。
但是,对于第一个问题,“详细”模式代码被内置到实际函数中(即,我将整个数据集传递给该函数)。它在执行计算时迭代地打印输出,然后分别返回整个字典结构。因此,我不能将输出“打印”到一个文件(它在函数中),也不能打印字典(它有几个层次深)。
下面是使用漂亮打印机的两个滞后的结构,我从实际输出中得到了这个结构:
{ 1: ( { 'lrtest': (3.4447802797894838, 0.063451857791777685, 1),
'params_ftest': (3.438235992254306, 0.064141599476182851, 672.0, 1),
'ssr_chi2test': (3.4535852600768981, 0.063114725408777453, 1),
'ssr_ftest': (3.4382359922543344, 0.06414159947617562, 672.0, 1)},
[ <statsmodels.regression.linear_model.RegressionResultsWrapper object at 0x116ccd210>,
<statsmodels.regression.linear_model.RegressionResultsWrapper object at 0x116cc9d90>,
array([[ 0., 1., 0.]])]),
2: ( { 'lrtest': (2.849736097306959, 0.24054020071776955, 2),
'params_ftest': (1.4172919220343254, 0.24309625306924146, 669.0, 2),
'ssr_chi2test': (2.8557690745918363, 0.23981570719685263, 2),
'ssr_ftest': (1.4172919220340792, 0.24309625306930535, 669.0, 2)},
[ <statsmodels.regression.linear_model.RegressionResultsWrapper object at 0x116cc9590>,
<statsmodels.regression.linear_model.RegressionResultsWrapper object at 0x116cc9490>,
array([[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.]])]),如你所见,这是相当混乱的。我意识到我需要为循环做几个(例如,x in mydict、for y in mydict[x]等),但是有太多不同级别/类型的数据被吐出来了,以至于我无法准确地循环。我不断地得到涉及迭代的错误(例如,不能循环这种数据类型,因为这是不可迭代的,等等)。我希望将这些值打印到文本文件中,使它们看起来与在“详细”模式输出中所做的相同。然后,我想要提取每个列的值,并创建一个数组(每个滞后的F值),并绘制它。
我很抱歉,如果这是一个简单的问题,任何帮助都是非常感谢的!
发布于 2016-09-22 18:53:57
当您设置maxlags=2时,将执行1和2的滞后。延迟和结果是返回的dict中的第一个键:值对。然后测试结果的判断是值元组的第一个元素,F-得分是ssr_ftest键值对的第一个元组元素。因此,要获得滞后2的值,您将使用
fscore = mydict[2][0]['ssr_ftest'][0]https://stackoverflow.com/questions/24371491
复制相似问题