【发布时间】:2025-12-20 00:45:06
【问题描述】:
我对使用 Python 进行编码比较陌生,我正在从事一个涉及信号分析的项目。我有几个数据集,但为简单起见,我将只使用其中两个来问这个问题。
首先,关于数据的信息:
- 两个时间序列数据集
- 采样率 1x/天
- 826 列集中缺少 11 个数据值,python 中缺乏处理 nan 的功能意味着我在第 677 个滞后处截断,在第一个缺失值之前。
- 两者都通过了增强的 dickey 更全面测试,即它们是静止的。这对我来说很可疑,但现在我会接受它。
- 我使用 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 值/置信范围。
但是,对于第一个问题,“详细”模式代码内置于实际函数中(即,我将整个数据集传递给该函数)。它在执行计算时迭代地打印输出,然后分别返回整个字典结构。因此,我不能将输出“打印”到文件中(它在函数内),也不能打印字典(它有几个层次)。
这是两个滞后的结构,使用漂亮的打印机,我从实际输出中得到:
{ 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 循环(即x in mydict、for y in mydict[x] 等),但是有太多不同级别/类型的数据被吐出,以至于我不知道究竟如何循环。我不断收到涉及迭代的错误(即无法循环此数据类型,因为它不可迭代等)。我想将这些值打印到文本文件中,使它们看起来与“详细”模式输出中的相同。然后,我想提取各个列的值并创建一个数组(每个滞后的 F 值),然后绘制它。
如果这是一个简单的问题,我深表歉意,非常感谢任何帮助!
【问题讨论】:
-
您不需要将它们打印到文本文件中,您可以将结果放入数组中进行绘图。您想要所有滞后的结果还是只需要最大滞后的结果?
标签: python dictionary statistics graphing