Python 中的面板概率
Panel probit in Python
我的数据集("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 的 [=30] 的 Python 函数=].
我想到的唯一方法是:
mod = PanelOLS(prob.dummy, prob[['x1', 'x2', 'x3']], entity_effects=True)
res = mod.fit(cov_type='clustered', cluster_entity=True)
print(res)
这是面板概率模型吗?
输出看起来与 probit 模型的输出不同(通过 "sm.Probit" 函数从 statsmodels 接收),我不知道如何估计 probit 边际效应.或者,我应该以某种方式修改 "sm.Probit" 以使其成为面板概率? (现在我只知道如何以 "time-series" 方式仅对一个实体使用它)。
一些背景:
面板数据模型的行为取决于我们是否在实体或组内有大量观察 n_i(长面板),或者我们有大量 g_groups 和小的组内的观察次数(宽面板)。
statsmodels 主要使用术语 groups
来指代实体。
模型的渐近行为取决于是所有 n_i 变大,还是 n_i 保持小而组数变大。此外,不同估计器的实现针对这两种情况中的任何一种。
在长面板的情况下,我们可以使用标准估计量,并且可以一致地估计每个组的固定效应。
所以在这种情况下,我们可以只对组或实体效果使用虚拟变量,例如使用 patsy 使用公式界面自动创建实体效果,其中 data
是一个 pandas DataFrame或以变量名作为键的类似对象的字典。
mod = probit('y ~ x1 + x2 + x3 + C(group_id)', data)
Patsy 为 C(group_id)
创建固定效果假人。如果包含一个常量(默认情况下),那么将降低一个参考级别以避免 "dummy variable trap"。
长面板和宽面板之间的类似区别适用于对组内相关性具有稳健性的标准误差。
cov_type='cluster'
假设我们有宽面板案例,即大量实体,每个实体只有几个观察值。计算假设实体或集群的数量大于集群中的观察数量 IIRC。
对于实体内具有序列相关性的长面板,我们可以在实体内使用 HAC cov_type。对于这种情况,statsmodels 有 cov_types "hac-panel" 和 "hac-groupsum" 可用。
statsmodels 仍然没有中心位置来记录三明治 cov_types,但它在支持它的模型中是相同的。此处提供了可用的 cov_type 和所需的附加信息:
对于宽面板,statsmodels 中可用的主要模型是 GEE。最近添加了 Bayesian MixedGLM。目前还没有可用的频率论 MixedGLM 模型,唯一可用的是线性高斯 MixedLM。
我的数据集("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 的 [=30] 的 Python 函数=].
我想到的唯一方法是:
mod = PanelOLS(prob.dummy, prob[['x1', 'x2', 'x3']], entity_effects=True)
res = mod.fit(cov_type='clustered', cluster_entity=True)
print(res)
这是面板概率模型吗?
输出看起来与 probit 模型的输出不同(通过 "sm.Probit" 函数从 statsmodels 接收),我不知道如何估计 probit 边际效应.或者,我应该以某种方式修改 "sm.Probit" 以使其成为面板概率? (现在我只知道如何以 "time-series" 方式仅对一个实体使用它)。
一些背景:
面板数据模型的行为取决于我们是否在实体或组内有大量观察 n_i(长面板),或者我们有大量 g_groups 和小的组内的观察次数(宽面板)。
statsmodels 主要使用术语 groups
来指代实体。
模型的渐近行为取决于是所有 n_i 变大,还是 n_i 保持小而组数变大。此外,不同估计器的实现针对这两种情况中的任何一种。
在长面板的情况下,我们可以使用标准估计量,并且可以一致地估计每个组的固定效应。
所以在这种情况下,我们可以只对组或实体效果使用虚拟变量,例如使用 patsy 使用公式界面自动创建实体效果,其中 data
是一个 pandas DataFrame或以变量名作为键的类似对象的字典。
mod = probit('y ~ x1 + x2 + x3 + C(group_id)', data)
Patsy 为 C(group_id)
创建固定效果假人。如果包含一个常量(默认情况下),那么将降低一个参考级别以避免 "dummy variable trap"。
长面板和宽面板之间的类似区别适用于对组内相关性具有稳健性的标准误差。
cov_type='cluster'
假设我们有宽面板案例,即大量实体,每个实体只有几个观察值。计算假设实体或集群的数量大于集群中的观察数量 IIRC。
对于实体内具有序列相关性的长面板,我们可以在实体内使用 HAC cov_type。对于这种情况,statsmodels 有 cov_types "hac-panel" 和 "hac-groupsum" 可用。
statsmodels 仍然没有中心位置来记录三明治 cov_types,但它在支持它的模型中是相同的。此处提供了可用的 cov_type 和所需的附加信息:
对于宽面板,statsmodels 中可用的主要模型是 GEE。最近添加了 Bayesian MixedGLM。目前还没有可用的频率论 MixedGLM 模型,唯一可用的是线性高斯 MixedLM。