微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 plm() 将年份固定效应转换为十年固定效应?

如何解决如何使用 plm() 将年份固定效应转换为十年固定效应?

对于我的学士论文,我有一个固定效应和时间固定效应的回归:

log⁡(production_it)= β_0 + β_1 * log⁡(temp_it) + β_2 * log⁡(rain_it) ) + β_3 * 干旱_it + β_4 * 洪水_it + β_5 * 风暴_it + β_6 * log⁡(labour_it )+ β_7* log⁡(Fertilitzer_it )+ β_8* log⁡(capital_it )+ β_9* log⁡(area_it )+ η_t+ u_i+ ε_it

哪里

i:国家,t:年份

r1.time.fixed <- plm(log(production) ~ log(temp) + log(rain) + drought + flood + 
                       storm + log(labour) + log(fertilizer) + log(capital) +
                       log(area),data=pm.rich,model="within",effect="twoways")

现在我想用十年而不是年作为固定效应创建以下回归:

log⁡(production_id)= β_0 + β_1 * log⁡(temp_id) + β_2 * log⁡(rain_id) ) + β_3 * 干旱_id + β_4 * 洪水_id + β_5 * 风暴_id + β_6 * log⁡(labour_id)+ β_7* log⁡(Fertilitzer_id)+ β_8* log⁡(capital_id)+ β_9* log⁡(area_id)+ η_d+ u_i+ ε_id

哪里

i:国家,d:十年

给定基于年份数据的面板数据集,如何在 r 中创建十年固定效应?

在这里你可以找到我使用的数据:

enter image description here

解决方法

首先,您希望每个国家/地区在每个十年中的平均值作为单个观察值,您可能希望每个国家/地区在每个十年中的 mean 值。我们在 plm 之外使用 aggregate 执行此操作,我们 paste0 将年份的前三个 substr 与零一起,例如1935 → 1930。让我向您展示Grunfeld附带的plm数据:

library(plm)
data(Grunfeld)
Grunfeld <- transform(Grunfeld,decade=paste0(substr(year,1,3),"0"))
head(Grunfeld,3)
#   firm year   inv  value capital decade
# 1    1 1935 317.6 3078.5     2.8   1930
# 2    1 1936 391.8 4661.7    52.6   1930
# 3    1 1937 410.6 5387.1   156.9   1930
dim(Grunfeld)
# [1] 200   6

这使我们能够aggregate 沿着几十年:

Grunfeld.a <- aggregate(. ~ firm + decade,Grunfeld,mean)
head(Grunfeld.a,3)
#   firm decade year    inv   value capital
# 1    1   1930 1937 341.70 4046.54  124.98
# 2    2   1930 1937 305.56 1921.00  159.06
# 3    3   1930 1937  49.60 2057.12  129.80
dim(Grunfeld.a)
# [1] 30  6

现在我们可以将聚合的 Grunfeld.a 放入原始的 plm 调用中,因为 plm 在内部做了一些“魔术”来识别 unit 和 时间变量。但是,我认为这是危险的,建议在 index= 调用中明确说明 plmes(请参阅我的 earlier answer 以获得全面的解释):

## unit and year FE
fit.year <- plm(inv ~ value + capital,data=Grunfeld,index=c("firm","year"),model="within",effect="twoways")

## unit and decade FE
fit.decade <- plm(inv ~ value + capital,data=Grunfeld.a,"decade"),effect="twoways")

对于统计摘要,您可能希望使用按单位聚类的稳健标准误差(即,在您的情况下,按国家,或在本例中的公司)。 plm 带有 summary.plm 方法,允许使用 vcov= 自定义 vcovHC.plm。请注意, cluster=c("group") 令人困惑地意味着您希望通过定义为 unit 变量的变量(即您的国家/地区)进行聚类。对于估算 type=,我们可能希望使用 "HC3",因为它是 sandwich 包中的标准并且今天​​经常被推荐。

## unit and year FE
summary(fit.year,vcov=vcovHC(fit.year,type="HC3",cluster=c("group")))$coe
#          Estimate Std. Error t-value     Pr(>|t|)
# value   0.1177159 0.01212638 9.70742 5.539985e-18
# capital 0.3579163 0.05915972 6.05000 9.049182e-09

## unit and decade FE
summary(fit.decade,vcov=vcovHC(fit.decade,cluster=c("group")))$coe
#          Estimate Std. Error  t-value     Pr(>|t|)
# value   0.1541480 0.05601229 2.752039 1.417452e-02
# capital 0.3476384 0.06517729 5.333735 6.719637e-05

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。