首页 > 解决方案 > 是否可以对具有 58 行和(时间序列)和 10467 列的大型 GDP 数据运行向量自回归分析?

问题描述

我有一个庞大的 GDP 数据集,我正在尝试在其上运行一个 VAR 模型。它包含了世界上所有国家的48个GDP指标,总共194个。所以每个国家都有自己的指标值。这意味着每个国家/地区都有自己的 48 列。时间序列从 1950 年到 2017 年。每个国家的指标值。所以这是一个相当大的数据集。因为这是我在 python 中进行 var 建模的第一个代码。我在这个过程中遇到了多个问题。

l 尝试在数据集上运行格兰杰因果检验,但这个错误 exog 包含 inf 或 nans。

from statsmodels.tsa.stattools import grangercausalitytests
maxlag=12

test = 'ssr-chi2test'

def grangers_causality_matrix(data, variables, test = 'ssr_chi2test', verbose=False):

    dataset = pd.DataFrame(np.zeros((len(variables), len(variables))), columns=variables, index=variables)

    for c in dataset.columns:
        for r in dataset.index:
            test_result = grangercausalitytests(data[[r,c]], maxlag=maxlag, verbose=False)
            p_values = [round(test_result[i+1][0][test][1],4) for i in range(maxlag)]
            if verbose: print(f'Y = {r}, X = {c}, P Values = {p_values}')

            min_p_value = np.min(p_values)
            dataset.loc[r,c] = min_p_value

    dataset.columns = [var + '_x' for var in variables]

    dataset.index = [var + '_y' for var in variables]

    return dataset

grangers_causality_matrix(dataset, variables = dataset.columns)  

MissingDataError:exog 包含 inf 或 nans

标签: python

解决方案


从您的代码中,我只能猜测您的数据集中缺少值(这并不奇怪:我不希望自 1950 年以来每年都有 48 个不同的 GDP 指标适用于小国)。

您应该找到处理这些缺失值的策略。这显然不是一件容易的事。在这些可能性中:

  • 将它们替换为列的平均值(天真)
  • 线性回归它们(很难知道它是否相关)
  • 删除所有缺少值的列或所有行(残酷)

其他一些方法更微妙,但也更难实施。我相信您可以通过关键字在网上找到它们missing values。祝你好运 !


推荐阅读