python - 是否可以对具有 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
解决方案
从您的代码中,我只能猜测您的数据集中缺少值(这并不奇怪:我不希望自 1950 年以来每年都有 48 个不同的 GDP 指标适用于小国)。
您应该找到处理这些缺失值的策略。这显然不是一件容易的事。在这些可能性中:
- 将它们替换为列的平均值(天真)
- 线性回归它们(很难知道它是否相关)
- 删除所有缺少值的列或所有行(残酷)
其他一些方法更微妙,但也更难实施。我相信您可以通过关键字在网上找到它们missing values
。祝你好运 !
推荐阅读
- mysql - 节省查询内存
- qt - 如何在 xmonad 环境中的另一个全屏应用程序上方浮动一个 DoesNotAcceptFocus 窗口
- javascript - 如何收集有关数组行的列的信息?
- java - Spring JPA 存储库删除方法不起作用
- react-native - 将文本显示为平面列表项中的标题以分隔每个部分,React Native
- python - Python string.format 替换索引
- swift - 组合框架(URLSession.DataTaskPublisher):使用发布者数组改变第一个发布者结果
- python - python类中定义的调用函数。函数是怎么调用的?
- sql - 从重复数据中选择单行
- docusignapi - 没有 clientUserId 的收件人视图,打开信封进行查看