【问题标题】:Panel probit in PythonPython中的面板概率
【发布时间】:2018-11-19 22:01:18
【问题描述】:

我的数据集(“prob”)是一个不平衡的面板,看起来像:

     index                               x1      x2      x3     y (dummy 0/1)
(100, Timestamp('2016-01-26 09:10:00')) 19.9    13.44  -0.006   0
(100, Timestamp('2016-01-26 09:15:00')) 17.2    13.25  -0.046   0                     
(200, Timestamp('2016-01-26 09:20:00')) 19.4    19.06   0.04    1                        

我想在 Python 中估计一个面板概率模型(y 是我的左侧变量,x1、x2、x3 是右侧变量)。面板实体应该是 ID,它位于数据帧索引的第一部分(100、200 等)据我了解,我需要一个类似于 Stata 的 “xtprobit” 的 Python 函数。

我想出的唯一方法是:

mod = PanelOLS(prob.dummy, prob[['x1', 'x2', 'x3']], entity_effects=True)
res = mod.fit(cov_type='clustered', cluster_entity=True)
打印(分辨率)

这是一个面板概率模型吗?

输出看起来与概率模型的输出不同(通过 statsmodels 的“sm.Probit”函数接收),我不知道如何估计概率边际效应。或者,我应该以某种方式修改“sm.Probit”以使其成为面板概率? (现在我只知道如何以“时间序列”方式仅对一个实体使用它)。

【问题讨论】:

  • 您对每个面板实体有多少观察?问题在于,在短面板中,实体固定效应无法一致地估计。 “现实生活”中的单位是什么,具体来说是实体内部而不是实体之间的相关性?
  • 对于 32 个实体,我有 23028 个观察值,对于其他 7 个 - 更少,最少 14264 个。您能否建议我如何检查实体内部和实体之间的相关性,我认为这是个好主意确实!

标签: python panel panel-data


【解决方案1】:

一些背景:

面板数据模型的行为取决于我们是在实体或组 n_i(长面板)内有大量观察,还是在组内有大量 g_group 和少量观察(宽面板)。

statsmodels 主要使用术语groups 来指代实体。

模型的渐近行为取决于是否所有 n_i 都变大了,或者 n_i 是否保持小而组数变大。此外,不同估算器的实现针对这两种情况中的任何一种。

在长面板的情况下,我们可以使用标准估计器,并且可以一致地估计每个组的固定效应。

所以在这种情况下,我们可以只使用虚拟变量来实现组或实体效果,例如使用公式接口使用 patsy 自动创建实体效果,其中 data 是 pandas DataFrame 或类似 dict 的对象,变量名称为键。

mod = probit('y ~ x1 + x2 + x3 + C(group_id)', data)

Patsy 为C(group_id) 创建固定效果假人。如果包含一个常量(默认情况下),则将删除一个参考级别以避免“虚拟变量陷阱”。

长面板和宽面板之间的类似区别适用于对组内相关性具有稳健性的标准误差。

cov_type='cluster' 假设我们有宽面板情况,即大量实体,每个实体只有几个观察值。计算假设实体或集群的数量大于集群中的观察数量,IIRC。

对于在实体内具有序列相关性的长面板,我们可以在实体内使用 HAC cov_type。对于这种情况,statsmodels 有 cov_types "hac-panel" 和 "hac-groupsum" 可用。

statsmodels 仍然没有记录三明治 cov_types 的中心位置,但在支持它的模型中是相同的。此处提供了可用的 cov_types 和所需的其他信息:

http://www.statsmodels.org/devel/generated/statsmodels.regression.linear_model.RegressionResults.get_robustcov_results.html

对于宽面板,statsmodels 中可用的主要模型是 GEE。最近添加了贝叶斯混合 GLM。目前还没有常用的 MixedGLM 模型,唯一可用的是线性高斯 MixedLM。

【讨论】:

  • 约瑟夫,谢谢!我从您的惊人描述中了解到:我的案例是一个“长”面板,几乎没有实体(但每个实体有很多 obs)。所以我将“cov_type”从“clustered”更改为“HAC”。你能解释一下,patsy的公式到底是做什么的?它是否为每个实体创建虚拟对象?还是它估计面板?公式中的“数据”是带有变量的数据框吗?当我在 IPython 控制台中编写时: mod = probit('y ~ x1 + x2 + x3 + C(id), df) -> 我得到: SyntaxError: EOL while scanning string literal - 你能指出什么问题吗?跨度>
  • 我打错了,C(id) df 是带有数据的 DataFrame 之后的结束引号。 probit 来自 statsmodels.formula.api 与 Probit.from_formula 相同`
  • HAC 假设有一个时间序列,您需要“hac-panel”或“hac-groupsum”,它们本质上是每个组内的 HAC。
  • Josef,当我运行 patsy 公式时,我收到一个错误:“if len(endog) == 1: # never squeeze to a scalar --->> TypeError: len() of unsized object ”。当我检查 Y 的 len() 和每个 X 时,它们都不是 1。您能建议导致此问题的原因吗?
  • 查看公式界面的一些示例。小写probit 是sm.Probit.from_formula 在statsmodels.formula.api 中的别名,例如你可以使用mod = sm.Probit.from_formula('dummy ~ x1 + x2 + C(group_id)', df)
猜你喜欢
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多