python - 绘制基于 ssr 的格兰杰因果关系 : pulling values from list within a dictionary within a dictionary

标签 python dictionary statistics graphing

我对使用 Python 进行编码还比较陌生,而且我正在从事一个涉及信号分析的项目。我有几个数据集,但为简单起见,我将仅使用其中两个来问这个问题。

首先,关于数据的信息:

  • 两个时间序列数据集
  • 采样率 1x/天
  • 826 列集中缺少 11 个数据值,python 中缺少处理 nan 的功能意味着我在第 677 个滞后处被截断,第一个缺失值之前的一个滞后。
  • 都通过了增强的 dickey fuller 测试,即它们是静止的。这对我来说很可疑,但现在我会接受它。
  • 我使用 boxcox 对数据进行了标准化。

我正在尝试测试 aos 是否会导致 aucs。

相关的代码行是(截至目前):

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 值/置信区间。

然而,对于第一个问题,“详细”模式代码内置于实际函数中(即我将整个数据集传递给该函数)。它在执行计算时迭代打印输出,然后一次单独返回整个字典结构。因此,我无法将输出“打印”到文件(它在函数内),也无法打印字典(它有几层深)。

这里是两个滞后的结构,使用 pretty-print ,我从实际输出中得到:

{ 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.]])]),

如您所见,这相当困惑。我意识到我需要做几个 for 循环(即 for x in mydictfor y in mydict[x] 等),但是有很多不同的级别/吐出的数据类型让我完全不知道如何循环。我不断收到涉及迭代的错误(即无法遍历此数据类型,因为它不可迭代,等等)。我想将这些值打印到一个文本文件中,使它们看起来与“详细”模式输出中的一样。然后,我想提取各个列值并创建一个数组(每个滞后的 F 值),然后绘制它。

如果这是一个简单的问题,我深表歉意,非常感谢您的帮助!

最佳答案

当您设置 maxlags=2 时,将执行 1 和 2 的滞后。滞后和结果是返回字典中的第一个键值对。然后测试结果的dict是值元组的第一个元素,F-score是ssr_ftest的键值对的第一个元组元素。因此,要获得滞后 2 的值,您可以使用

fscore = mydict[2][0]['ssr_ftest'][0]

关于python - 绘制基于 ssr 的格兰杰因果关系 : pulling values from list within a dictionary within a dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371491/

相关文章:

python - 我可以在分区的配置单元表上使用 mrjob python 库吗?

c# - 将分层 TreeView 绑定(bind)到字典

statistics - 如何在 Excel 中使用 T 检验确定统计显着性?

r - 如何计算栅格堆栈的变化百分比?

python - 根据距某个点的距离从列表中随机选择一个项目?

python - 将 header 添加到 python 子进程的 stdout

python - Pandas - 将列附加到 DataFrame

Python字典用户名密码P

arrays - 数组中的数组/字典是空快捷方式

C++ 计算排序数组的模式