Introduction to panel data
Set up
# Load libraries
suppressWarnings(suppressMessages({
library(knitr)
library(kableExtra)
library(htmltools)
library(tidyverse)
library(ExPanDaR)
library(car)
library(plm)
library(lmtest)
library(pder)
library(AER)
}))
knitr::opts_chunk$set(fig.align = 'center')
Individual heterogeneity: Fatalities
data("Fatalities", package="AER")
Fatalities %>% head()
Fatalities$frate <- with(Fatalities, fatal / pop * 10000)
fm <- frate ~ beertax
mod82 <- lm(fm, Fatalities, subset = year == 1982)
summary(mod82)
mod88 <- update(mod82, subset = year == 1988)
coeftest(mod88)
poolmod <- plm(fm, Fatalities, model="pooling")
coeftest(poolmod)
dmod <- plm(diff(frate, 5) ~ diff(beertax, 5), Fatalities, model="pooling")
coef(dmod)
lsdv.fm <- update(fm, . ~ . + state - 1)
lsdvmod <- lm(lsdv.fm, Fatalities)
coef(lsdvmod)[1]
femod <- plm(fm, Fatalities)
coeftest(femod)
No heterogeneity: Tileries
data("Tileries", package = "pder")
Tileries %>% head()
coef(summary(plm(log(output) ~ log(labor) + machine, data = Tileries,
subset = area == "fayoum")))
coef(summary(plm(log(output) ~ log(labor) + machine, data = Tileries,
model = "pooling", subset = area == "fayoum")))
Linear regressions: Fatalities
y <- Fatalities$frate
X <- cbind(1, Fatalities$beertax)
beta.hat <- solve(crossprod(X), crossprod(X,y))
beta.hat
mod <- lm(frate ~ beertax, Fatalities)
coef(mod)
LSDVmod <- lm(frate ~ beertax + state - 1, Fatalities)
coef(LSDVmod)["beertax"]
attach(Fatalities)
frate.tilde <- frate - rep(tapply(frate, state, mean),
each = length(unique(year)))
beertax.tilde <- beertax - rep(tapply(beertax, state, mean),
each = length(unique(year)))
lm(frate.tilde ~ beertax.tilde - 1)
detach(Fatalities)
summary(plm(fm, Fatalities))
Explicit within transformation: Fatalities
w.mod <- plm(Within(frate) ~ Within(beertax) - 1, data=Fatalities,
model = "pooling")
coef(w.mod)
Wald test with user-supplied covariance: Tileries
data("Tileries", package = "pder")
til.fm <- log(output) ~ log(labor) + log(machine)
lm.mod <- lm(til.fm, data = Tileries, subset = area == "fayoum")
lht(lm.mod, "log(labor) + log(machine) = 1")
lht(lm.mod, "log(labor) + log(machine) = 1", vcov=vcovHC)
User-supplied covariance 2: Tileries
plm.mod <- plm(til.fm, data = Tileries, subset = area == "fayoum")
lht(plm.mod, "log(labor) + log(machine) = 1", vcov = vcovHC)