R语言面板数据回归:含时间固定效应混合模型分析交通死亡率、酒驾法和啤酒税

简介: R语言面板数据回归:含时间固定效应混合模型分析交通死亡率、酒驾法和啤酒税

全文链接:https://tecdat.cn/?p=33874


面板数据回可以缓解省略变量偏误的问题,特别是当没有既与感兴趣的回归变量相关又与依赖变量相关的变量信息时,并且这些变量在时间或实体维度上是恒定的点击文末“阅读原文”获取完整代码数据


当客户有面板数据可用时,可以使用面板回归方法来改善多元回归模型。这是因为在这种情况下,多元回归模型可能会产生缺乏内部有效性的结果。

本文涵盖以下主题:

  • 面板数据符号表示
  • 固定效应回归使用时间和/或实体固定效应
  • 在固定效应回归模型中计算标准误差

我们使用一个面板数据集,报告了1982年至1988年期间交通死亡率观察到的年度记录。应用分析酒精税和酒后驾车法律对道路死亡率是否有影响,如果存在,这些影响有多强烈。

面板数据

有时,面板数据也被称为纵向数据,因为它为横截面数据添加了时间维度。让我们来看看数据集,通过检查其结构并列出前几个观测值。

# 载入包和数据集
......
# 声明为面板数据。
Fatas <- pdata.frame(Fats,......
 c("state", "year"))
# 获取维度并检查结构
is.data.frame(Faies)

image.png

str(Fates)

image.png

# 列出前几个观测值
head(Fataes)

image.png

# 总结变量 'state' 和 'year'
summary(Fatas[, c(1, 2)])

image.png

我们发现该数据集包含了336个关于34个变量的观测。

示例:交通死亡和酒精税

我们首先重现图。为此,我们使用1982年和1988年的数据估计简单回归模型,建立啤酒税与交通死亡率之间的关系,交通死亡率以每万人口的死亡人数表示。然后,我们绘制数据并添加相应的估计回归函数。

# 定义死亡率
Fata......
ies$pop * 10000
# 子集数据
Fatalities1982 <- subset(Fata......
1988")
# # 使用1982年和1988年的数据估计简单的回归模型
fatal1982_mod <- lm(fa......
lities1982)
fatal1988_mod <- lm(fatal_rate ~ beertax, ......
ities1988)
coeftest(fata......
 type = "HC1")
coeftest(fatal......
 type = "HC1")

image.png

image.png

估计的回归函数如下所示:

image.png

# 绘制观测数据,并添加1982年数据的估计回归线
plot(x = as.double(Fatalities1982$beertax), 
  ......
     col = "steelblue")
abline(fata......

image.png

点击标题查阅往期内容


R语言用线性混合效应(多水平/层次/嵌套)模型分析声调高低与礼貌态度的关系


01

02

03

04



# 绘制观测数据,并添加1988年数据的估计回归线
plot(x = as.double(Fatalities1988$beertax), 
     y = as.double(Fatalities1988$fatal_rate), 
   ......
     col = "steelblue")
abline(fatald, lwd = 1.5,col="darkred")
legend("bo......

image.png

在这两个图中,每个点代表了相应年份中给定州的啤酒税和死亡率的观测值。回归结果显示,无论是在1982年还是1988年,啤酒税与死亡率呈正相关关系。然而,这无法解释不可观测的因素,这些因素在地区之间存在差异,但可以假定在观测时间范围内保持不变,例如人们对酒后驾车的态度。面板数据可以使我们将这些因素保持不变。

两个时间段的面板数据:“前后”比较

假设只有T=2个时间段,即t=1982,1988。这使我们能够分析从1982年到1988年的死亡率变化的差异。我们首先考虑人口回归模型

image.png

其中,Zi表示在时间上不变的各州特征。对于t=1982和t=1988,我们有

image.png

我们可以通过将1988年和1982年的死亡率差异与啤酒税差异进行回归,来消除自变量中的Zi。

接下来,我们将使用R通过差分数据估计回归,并绘制估计的回归函数。

# 计算差异
diff_fatal_rate <- Fata_rate - Faal_rate
......
# 使用差分数据估计回归
fatal_diff_mod <- lm(dif......
C1")

image.png

包括截距允许在1982年和1988年之间的时间内,当啤酒税没有改变时,平均死亡率发生变化。

我们得到OLS估计的回归函数

image.png

# 绘制差分数据
plot(x = as.double(diff_beertax), 
 ......
     pch = 20, 
     col = "steelblue")
# 将回归线添加到图表中
abline(fata......
red")
# 添加图例
legend("topri......
)

image.png

现估计的啤酒税系数为负,并且与0显著不同,在5%的水平上。

# 计算所有州在所有时间段上的平均死亡率
mean(Fata_rate)

image.png

再次,这个结果很可能是因为在单年回归中忽略了影响死亡率并与啤酒税和时间变化相关的因素。

固定效应回归

考虑面板回归模型

image.png

其中Zi是实体i的未观察到的时间不变异,i=1,…,n。我们的目标是估计β1,即在保持Zi恒定不变的情况下,Xi对Yi的影响。令αi=β0+β2Zi=β0+β2Zi,我们得到模型

image.png

该模型具有个体特定的截距αi,i=1,…,n,其中每一个可以理解为实体i的固定效应。αi的变化来自Zi。可以重写为包含n−1个虚拟回归器和一个常数项的回归模型:

image.png

模型有n个不同的截距,每个实体一个。固定效应模型的等价表示。

固定效应模型可以推广为包含多个与X相关并随时间变化的Y决定因素。关键概念介绍了广义固定效应回归模型。

应用于交通死亡数据

根据关键概念用于估计交通死亡率与啤酒税之间关系的简单固定效应模型是

image.png

这是交通死亡率对啤酒税和48个二分类回归的回归分析。

我们只需使用lm()函数,即可获得β1的估计值。

fatamod <- lm(fatal_......
fatal_m_mod

image.png

如前文所述,我们可以通过对去中心化数据应用OLS来估计β1,即运行回归模型。

# 获取去中心化数据
Fatalianed <- with(Fata......
state)))
# 估计回归模型
summary(lm(fatal......
meaned))

ave函数方便计算组平均值。我们使用它来获取每个州的平均死亡率和啤酒税。

lm()类似,我们需要在plm()的调用中指定回归公式和要使用的数据。

# 使用plm()估计固定效应回归模型
fatal_fe_mod <- plm(fatal_......
coeftest(fata......
HC1")

估计的系数仍为-0.65。需要注意的是,plm()使用去中心化OLS算法,因此不报告虚拟变量的系数。估计的回归函数为:

image.png

啤酒税的系数为负且显著。

含时间固定效应的回归

可以通过包括时间固定效应来控制对实体而言不变但随时间而变的变量。如果仅存在时间固定效应,则固定效应回归模型变为:

image.png

因为模型包括截距,所以只包含T-1个虚拟变量(B1被省略)。该模型消除了由于排除随时间但对实体恒定的未观测变量而引起的遗漏变量偏差。

在某些应用中,同时包括实体和时间固定效应是有意义的。实体和时间固定效应模型为:

image.png

这种综合模型能够消除随时间变化但实体间恒定的不可观察因素的偏差,并控制在时间上不同但实体间恒定的因素。可以使用R中实现的OLS算法估计此类模型。

下面的代码块展示了如何估计关于死亡人数和啤酒税之间的关系的结合实体和时间固定效应模型。

# 估计一个包含时间和实体固定效应的回归模型
# 通过lm()函数
fatal_tmod <- lm(fatal_ra......
_mod
# 通过plm()函数
fatal__mod <- plm(fatal_rate......
s")
coeftest(fata......
HC1")

估计的回归函数为

image.png

结果-0.66接近仅包含实体固定效应的回归模型的估计系数。

我们得出结论:交通事故死亡人数与实际啤酒税之间的估计关系不受由恒定于时间或州的遗漏变量造成的偏误的影响。

固定效应回归的假设和固定效应回归的标准误差

重点讨论实体固定效应模型,并介绍在OLS产生无偏估计且大样本下服从正态分布所需的模型假设。这些假设是多元回归模型的延伸,并在关键概念中给出。我们还简要讨论了固定效应模型中的标准误差,与多元回归中的标准误差不同,因为面板模型中的回归误差可以表现出串行相关性。

固定效应回归的标准误差

与异方差性类似,自相关也使得通常的标准误公式以及异方差性-稳健标准误失效,因为这些公式是在没有自相关的假设下推导出来的。

回归分析是说明为什么在固定效应模型的实证应用中使用聚类标准误至关重要的很好例子。

# 基于异方差性-稳健标准误的摘要
coeftest(fatal......
= "HC1")[1, ]
# 基于聚类标准误的摘要
coeftest(fata......
pe = "HC1")

image.png

image.png

结果有很大的不同:如果不考虑自相关,我们得到一个标准误为0.25,这意味着在5%的显著性水平上,对于啤酒税的系数^β1^1具有显著性。相反,使用聚类标准误0.35将导致无法拒绝零假设H0: β1 = 0,在相同的显著性水平下。

酒驾法和交通事故死亡

在我们迄今考虑的与交通事故死亡和啤酒税之间关系的所有模型中,存在两个主要的遗漏变量偏差来源:经济状况和驾驶法规。

首先,根据回归结果,我们定义变量。

# 将最低法定饮酒年龄离散化
Fatalities$drinkagec <- cut(Fatalities$drinkage,
                         ......
                            right = FALSE)
# 将最低饮酒年龄[21, 22]设置为基准水平
Fatalities$drinkagec <- relevel(Fatal......
]")
# 强制监禁或社区服务?
Fatalities$punish <- with(Fata......
"yes")))
# 所有变量在1982年和1988年的观测集合
Fat......
, year == 1982 | year == 1988), ]

接下来,我们使用plm()函数对所有七个模型进行估计。

# 估计所有七个模型
fatalesmod1 <- lm(fa......
ties)
faalite_mod2 <- plm(fata......
ities)
fatiie_od3 <- plm(fatal......
fataits_od4 <- plm(fat......
                       data = Fatlities)
fatltismod5 <- plm(fat......
                       data = Faalties)
fatatis_od6 <- plm(fat......
                       data = Faalites)
fatlie_mod7 <- plm(fat......
                       data = Fatliie_1982_1988)

生成结果的综合表格演示。

library(stargazer)
# 将聚类标准误差收集到一个列表中
rob_se <- list(sqrt(diag(vcovHC(fatalities_mod1, type = "HC1"))),
        ......
               sqrt(diag(vcovHC(fatalities_mod7, type = "HC1"))))
# 生成表格
stargazer(fatalities_mod1, fatalities_mod2, fatalities_mod3, 
       ......
          model.numbers = FALSE,......
", "(7)"))

因变量:死亡率

image.png

模型(5)省略了经济因素。结果支持这样一种观点,即啤酒税的系数对包括后者在内的模型具有敏感性,因此应将经济指标保留在模型中。

模型(6)的结果表明,法定饮酒年龄几乎没有解释能力,而与饮酒年龄和交通事故死亡率之间的关系的函数形式的改变也不会对所关注的系数产生影响。

规格说明(7)表明,减少可用信息的数量(我们在这里只使用了1982年至1988年期间的95个观测值)会增加标准误差,但对系数估计没有产生 drast 的变化。

总结

我们没有找到证据表明严厉的惩罚和提高最低饮酒年龄会降低由酒驾引起的交通事故死亡人数。然而,酒税似乎对交通事故死亡率有负面影响,但由于估计的不准确性,不能将其解释为感兴趣的因果效应,因为仍然可能存在偏差。问题在于可能存在在地区之间以及随时间变化的被忽略的变量,并且即使我们使用控制实体特定和时间不变的不可观测因素的面板方法,这种偏差仍然存在。


相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
46 3
|
3月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
3月前
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
7月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
7月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
4月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。