
#### Example 1-1

## ------------------------------------------------------------------------
data("Fatalities", package="AER")
Fatalities$frate <- with(Fatalities, fatal / pop * 10000)
# frate tasa de mortalidad en caminos
# beertax impuesto al alchool
fm <- frate ~ beertax

## ------------------------------------------------------------------------
mod82 <- lm(fm, Fatalities, subset = year == 1982)
summary(mod82)
# coeficiente positivo. No tiene sentido

## ------------------------------------------------------------------------
mod88 <- update(mod82, subset = year == 1988)
library("lmtest") # instrucción para correr instrucción coeftest
coeftest(mod88)
# coeficiente positivo. No tiene sentido. Se repite para todos los años.

## ------------------------------------------------------------------------
library("plm")
poolmod <- plm(fm, Fatalities, model="pooling")
coeftest(poolmod)
# La especificación tipo pool impone restricciones a los parámetros 
# individuales, al establecer que una constante común(𝜇1=⋯=𝜇𝑖=𝜇) 
# y efecto común (𝛽1=⋯=𝛽𝑖=𝛽) con respecto a las variables exógenas, 
# El estimador pooled OLS se obtiene al apilar(staking) 
# los datos sobre i y t con NT observaciones y aplicando OLS.
# coeficiente positivo. No tiene sentido.
# Panel data entrega solución a este problema.

## ------------------------------------------------------------------------
dmod <- plm(diff(frate, 5) ~ diff(beertax, 5), Fatalities, model="pooling")
coef(dmod)
# Para obtener intercepto individual es considerar modelos en diferencias,
# en este caso entre el primero y último año.
# despues de controlar por heterogeneidad del estado, altos tributos
# pueden ser asociados a menores muertes

## ------------------------------------------------------------------------
lsdv.fm <- update(fm, . ~ . + state - 1)
lsdvmod <- lm(lsdv.fm, Fatalities)
coef(lsdvmod)[1] #se puede cambiar 1 por 2, 3, 4 etc
# otra forma de controlar inobservables cambios en el tiempo, es estimarlos
# explícitamente. Separados interceptos podrían ser fácilmente agregados

## ------------------------------------------------------------------------
library("plm")
femod <- plm(fm, Fatalities)
coeftest(femod)
# efecto fijo within obtiene un resultado numéricamente diferente pero 
# iguales conclusiones cuantitativas. En plm no ponemos within porque viene por defecto

#### Example 1-2

## ------------------------------------------------------------------------
data("Tileries", package = "pder")
coef(summary(plm(log(output) ~ log(labor) + machine, data = Tileries,
             subset = area == "fayoum")))
# función de producción, unidades de producción homogéneas y tecnología estándar.
# entonces pooling y fixed effect dan similares resultados

## ------------------------------------------------------------------------
coef(summary(plm(log(output) ~ log(labor) + machine, data = Tileries,
             model = "pooling", subset = area == "fayoum")))


#### Example 1-3

## ------------------------------------------------------------------------
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))


#### Example 1-4

## ------------------------------------------------------------------------
w.mod <- plm(Within(frate) ~ Within(beertax) - 1, data=Fatalities,
             model = "pooling")
coef(w.mod)


#### Example 1-5

## ------------------------------------------------------------------------
data("Tileries", package = "pder")
til.fm <- log(output) ~ log(labor) + log(machine)
lm.mod <- lm(til.fm, data = Tileries, subset = area == "fayoum")
# todo en logaritmo para testear retornos constantes a escala

## ------------------------------------------------------------------------
library(car)
lht(lm.mod, "log(labor) + log(machine) = 1")
# restricción de retornos constantes a escala

## ------------------------------------------------------------------------
library(car)
lht(lm.mod, "log(labor) + log(machine) = 1", vcov=vcovHC)
# permitiendo heterocedasticidad

#### Example 1-6

## ------------------------------------------------------------------------
plm.mod <- plm(til.fm, data = Tileries, subset = area == "fayoum")

## ------------------------------------------------------------------------
library(car)
lht(plm.mod, "log(labor) + log(machine) = 1", vcov = vcovHC)
# retornos constantes a escala no son rechazados
