我的数据集(“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 函数。“xtprobit”。
我想出的唯一方法是:
mod = PanelOLS(prob.dummy, prob[['x1', 'x2', 'x3']], entity_effects=True)
res = mod.fit(cov_type='clustered', cluster_entity=True)
print(res)
这是面板概率模型吗?
输出看起来与概率模型的输出不同(通过statsmodels中的“sm.Probit”函数接收),并且我不知道如何估计概率边际效应。或者,我应该以某种方式修改“sm.Probit”以使其成为面板概率? (现在我只知道如何以“时间序列”方式仅对一个实体使用它)。
最佳答案
一些背景:
面板数据模型的行为取决于我们是否在实体或组 n_i(长面板)内有大量观察值,或者是否有大量 g_groups 在组内有少量观察值(宽面板)。
statsmodels 主要使用术语组
来指代实体。
模型的渐近行为取决于是否所有 n_i 都变大,或者 n_i 是否保持较小而组数变大。此外,不同估计器的实现是针对这两种情况之一。
在长面板的情况下,我们可以使用标准估计器,并且可以对每个组使用固定效应进行一致估计。
因此,在这种情况下,我们可以仅使用虚拟变量来实现组或实体效果,例如使用公式接口(interface)通过 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 和所需的附加信息:
对于宽面板,statsmodels 中可用的主要模型是 GEE。最近添加了贝叶斯混合 GLM。目前还没有可用的频率论 MixedGLM 模型,唯一可用的是线性高斯 MixedLM。
关于python - Python 中的面板概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50784406/