如何使用 Python 检查面板数据中的单位根?

How to check for unit root in Panel Data using Python?

我正在进行时间序列分析,我有 2021 年每个月 700 个单独区域的销售数据(我们称其为 df_panel,因为我们采用面板数据结构)。例如

Area Month Sales
Area 1 January 1000
Area 1 February 2000
Area 1 Marts 3000
Area 2 January 1000
Area 2 February 2000
Area 2 Marts 1400
Area 3 January 1000
Area 3 February 1200
Area 3 Marts 1400

通常在处理销售数据时,您会使用例如ADF 测试以检查销售数据中的单位根。我知道如何在 Python 中使用标准非面板数据结构执行此操作,例如数据帧上 statsmodels 的 adfuller 函数 df:

adf_test_result = adfuller(df["Sales"])[1]

我如何为我的面板数据结构做类似的事情,因为它包含 700 条单独的销售曲线(每个区域一条)。目标是使用面板数据回归(固定或随机效应)

一种近似方法是将我的面板数据销售曲线汇总为一条销售曲线,然后对其进行 ADF 检验:

adf_test_result = adfuller(df_panel.groupby("Month").sum()["Sales"])

但我认为这会大大高估销售数据中出现单位根的概率。 700个单独的区域这样汇总,销售数据丢失了很多信息。

另一种近似可能是检查每个单独区域的单位根并以某种方式取平均值 (?)

不确定这里最好的是什么...

在 R 中有一个包 plm,其函数 purtest 实现了几个测试程序,这些程序被提议用面板数据测试单位根假设,例如,“levinlin”代表 Levin、Lin 和Chu (2002),“ips”代表 Im、Pesaran 和 Shin (2003),“madwu”代表 Maddala 和 Wu (1999),“hadri”代表 Hadri (2000)。

有谁知道如何估计面板数据结构的单位根?以及如何在 Python?

中实现它

似乎可能没有广泛可用的 Python 包来对面板数据进行单位根测试(至少我找不到)。

您似乎熟悉进行此类测试的适当方法,但为了其他读者的利益,我将提供一些包含更多信息的链接:

如果您能够切换到 R 或 Stata,那可能是解决您问题的最佳方法。如果您想坚持使用 Python,您的选择似乎包括:

  • 自己实现面板数据单元测试(一项艰巨的任务)
  • 从 Python 调用一个 non-Python 库(我的建议)

对于第二个选项,这里是从 Python 调用 R 的快速解释:https://medium.com/analytics-vidhya/calling-r-from-python-magic-of-rpy2-d8cbbf991571

正如您所提到的,R 的包 plm 中的函数 purtest 中存在此测试的实现:https://rdrr.io/cran/plm/man/purtest.html