Python实现固定效应回归模型实现因果关系推断(二)

简介: Python实现固定效应回归模型实现因果关系推断(二)

固定效应数据分析示例1 —投资与市场价值

公司投资的主要驱动力是什么?有大量的文献讨论了其驱动因素。Grunfeld认为,公司的市场价值是投资的主要解释和预测指标。在以下练习中,我将使用Grunfeld数据集(可在statsmodels.datasets中获得)来演示固定效果模型的使用。顺便说一句,Grunfeld数据集是计量经济学中的知名数据集,就像Machine Learning中的虹膜数据集一样。这篇学术文章“ 50岁时的Grunfeld数据”指出了它的广泛用途。

该数据包含11家公司中每家20年的数据:IBM,通用电气,美国钢铁,大西洋炼油,钻石比赛,西屋电气,通用汽车,固特异,克莱斯勒,联合石油和美国钢铁。在面板数据中,将“确定”和“年份”设置为索引。固定效果模型指定如下,其中单个公司因子为𝝆_i或在以下代码中称为`entity_effects。时间因子是𝝋_t或称为time_effects

image.png

或如下所示,其中D_j是公司i的虚拟变量,而I_t是t年的虚拟变量。

image.png

from statsmodels.datasets import grunfeld
data = grunfeld.load_pandas().data
data = data.set_index(["firm","year"])
print(data.head())

image.png

模块linearmodels提供PandelOLS进行固定效果模型。entity_effects=True表示模拟企业特定因素。这意味着为11家公司创建10(N-1)个虚拟变量。下面我展示了两种回归方法的代码。两者产生相同的结果。

# Coding method 1
from linearmodels.panel import PanelOLS
import statsmodels.api as sm
exog = sm.add_constant(gf[['value','capital']])
grunfeld_fe = PanelOLS(gf['invest'], exog, entity_effects=True, time_effects=False)
grunfeld_fe = grunfeld_fe.fit()
print(grunfeld_fe)
# Coding method 2
grunfeld_fe = PanelOLS.from_formula("invest ~ value + capital + EntityEffects", data=gf)                          
print(grunfeld_fe.fit())

image.png

“value”的系数在95%时具有统计学意义上的0.1101。因此,Grunfeld得出了因果关系,即高投资是由高市场价值驱动的。

下面的代码同时指定了公司特有的效果和时间效果。结论保持不变。

# Coding method 1
from linearmodels.panel import PanelOLS
import statsmodels.api as sm
exog = sm.add_constant(gf[['value','capital']])
grunfeld_fet = PanelOLS(gf['invest'], exog, entity_effects=True, time_effects=True)
grunfeld_fet = grunfeld_fe.fit()
print(grunfeld_fet)
# Coding method 2
grunfeld_fet = PanelOLS.from_formula("invest ~ value + capital + EntityEffects + TimeEffects", data=gf)                          
print(grunfeld_fet.fit())

image.png

固定收益数据分析示例2 –交通死亡率与啤酒税

更高的啤酒税是否有助于减少交通致死率?许多州降低了啤酒税,交通事故死亡率更高。我们可以说降低啤酒税会导致更高的死亡率吗?这种因果关系具有深远的政策含义。我将使用Stock&Watson广为接受的书籍“计量经济学概论”中的死亡数据集。

import pandas as pd
import numpy as np
import seaborn as sns
fatalities = pd.read_csv('/fatality.csv')
fatalities.head()

image.png

  • mrall = 车辆总死亡率
  • beertax = 酒精税
  • mlda = 最低法定饮酒年龄
  • jaild = 强制性入狱
  • comserd = 强制性社区服务
  • vmiles = 每位驾驶员的平均里程
  • unrate = 失业率
  • perinc = 人均个人收入

我将每年的数据生成平均值,以显示每年的平均啤酒税和死亡率。1982–1984年的平均啤酒税高于1986–1988年的啤酒税。

avg = fatalities.groupby('year')['mrall','beertax'].mean()

avg

image.png


我将使用`seaborn来显示相关性。

sns.set(style="darkgrid")
g = sns.jointplot("beertax", "mrall",
                    data=avg, kind="reg",
                    color="m", height=6)

image.png

我们可以建立任何因果关系吗?我将使用固定效果模型进行测试。下面,我演示了两个固定效果模型并用于讨论和汇总OLS。

  • 模型 1: 实体效果+时间效果
  • 模型 2: Entity_effects
  • 模型 3: 汇总OLS

image.png

或如下所示,其中D_j是状态i的虚拟变量,而I_t是状态t的虚拟变量。

image.png

下面对州的不随时间变化的变量(例如州文化,州居民对饮酒的态度(可能是不随时间进行变化)等)进行控制。对所有州随时间变化的遗漏变量的时效控制。例如,宏观经济条件或联邦政策措施在所有州都是通用的,但会随时间而变化。

您可能会询问如何确认需要固定效果的模型规范。这是通过可合并性测试Poolability Test)完成的。许多模块已经包含测试结果。用于F-test for poolability并显示输出。这是对没有固定效果的原假设的检验。模型1中的F-test是40.158,p值是0.0,因此我们可以拒绝原假设,并得出固定效果模型规格合适的结论。

模型1:实体效果+时间效果
# Coding method 1
from linearmodels.panel import PanelOLS
import statsmodels.api as sm
exog = sm.add_constant(fatalities[['beertax','mlda','jaild',
       'comserd','vmiles','unrate','perinc']])
fe = PanelOLS(fatalities['mrall'], exog, entity_effects=True, time_effects=True)
fe = fe.fit()
print(fe)
# Coding method 2
from linearmodels.panel import PanelOLS
fe = PanelOLS.from_formula("mrall ~ beertax + mlda + jaild
      + comserd + vmiles + unrate  + perinc + EntityEffects + TimeEffects",
      data=fatalities)                          
print(fe.fit())


模型1告诉我们,啤酒税与死亡率之间存在负相关关系(啤酒税系数为-.4649)。因此,我们可以得出因果关系,即较高的啤酒税会导致较低的死亡率。

image.png

模型2:Entity_effects

如何理解三个模型中的R-squared值?模型1中的R-squared为0.3577,高于模型2中的R-squared0.1286。这意味着模型1的拟合效果更好。模型3中的0.4662怎么样?尽管它比模型1和2的模型高得多,但是合并的OLS是一个错误指定的模型,如上面的公式(1)和(2)所述。由于模型3无法解决内生性问题,因此它无法帮助我们得出啤酒税和死亡率之间的因果关系。

# Coding method 1
from linearmodels.panel import PanelOLS
import statsmodels.api as sm
exog = sm.add_constant(fatalities[['beertax','mlda',
     'jaild','comserd','vmiles','unrate','perinc']])
fe2 = PanelOLS(fatalities['mrall'], exog,
     entity_effects=True, time_effects=False)
fe2 = fe2.fit()
print(fe2)
# Coding method 2
from linearmodels.panel import PanelOLS
fe2 = PanelOLS.from_formula("mrall ~ beertax + mlda +
    jaild + comserd + vmiles + unrate  + perinc + EntityEffects",
    data=fatalities)                          
print(fe2.fit())


image.png

模型3:汇总OLS
# Coding method 1
from linearmodels.panel import PanelOLS
import statsmodels.api as sm
exog = sm.add_constant(fatalities[['beertax','mlda',
    'jaild','comserd','vmiles','unrate','perinc']])
pooledOLS = PanelOLS(fatalities['mrall'], exog,
    entity_effects=False, time_effects=False)
pooledOLS = pooledOLS.fit()
print(pooledOLS)
# Coding method 2
from linearmodels.panel import PanelOLS
pooledOLS = PanelOLS.from_formula("mrall ~ beertax  +
    mlda + jaild + comserd + vmiles + unrate  + perinc ",
    data=fatalities)
print(pooledOLS.fit())


image.png

目录
相关文章
|
6月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
230 2
|
5月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
559 2
|
8月前
|
存储 机器学习/深度学习 人工智能
稀疏矩阵存储模型比较与在Python中的实现方法探讨
本文探讨了稀疏矩阵的压缩存储模型及其在Python中的实现方法,涵盖COO、CSR、CSC等常见格式。通过`scipy.sparse`等工具,分析了稀疏矩阵在高效运算中的应用,如矩阵乘法和图结构分析。文章还结合实际场景(推荐系统、自然语言处理等),提供了优化建议及性能评估,并展望了稀疏计算与AI硬件协同的未来趋势。掌握稀疏矩阵技术,可显著提升大规模数据处理效率,为工程实践带来重要价值。
389 58
|
5月前
|
算法 安全 新能源
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
438 0
|
6月前
|
机器学习/深度学习 算法 调度
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
293 0
|
5月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
541 102
|
5月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
402 104
|
5月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
313 103
|
5月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
249 82
|
4月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
351 3

推荐镜像

更多