4.5 Panel Data

To estimate panel data model, we need to install and load package plm.

install.packages("plm")
library(plm)

We have the following panel data

time <- c(1,2,1,2,1,2,1,2,1,2,1,2)
firm <-c(1,1,2,2,3,3,4,4,5,5,6,6)
x <- c(1, 2, 4, 3, 5, 4, 2, 5,5,6,7,8)
y <- c(2, 3, 5, 4, 3, 2, 4, 7,7,8,5,7)
p.df <- data.frame(time, firm, x, y)
p.df <- pdata.frame(p.df, index = c("firm", "time"), drop.index = F, row.names = T)

4.5.1 Clustering

We first estimate the model based on pooled OLS.

pooled.plm <- plm(formula=y~x, data=p.df, model="pooling") 

Then we calculate the variance-covariance matrix to be clustered by group.

coeftest(pooled.plm, vcov=vcovHC(pooled.plm, 
                                 type="sss", 
                                 cluster="group"))  
## 
## t test of coefficients:
## 
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  1.81164    0.68521  2.6439 0.024568 * 
## x            0.67808    0.17151  3.9536 0.002715 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Then we calculate the variance-covariance matrix to be clustered by time.

coeftest(pooled.plm, vcov=vcovHC(pooled.plm, 
                                 type="sss", 
                                 cluster="time")) 
## 
## t test of coefficients:
## 
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  1.81164    0.71388  2.5377 0.029478 * 
## x            0.67808    0.21088  3.2154 0.009246 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Two-way clustering of both time and group:

coeftest(pooled.plm, vcov=vcovDC(pooled.plm, 
                                 type="sss"))
## 
## t test of coefficients:
## 
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  1.81164    0.81130  2.2330  0.04959 *
## x            0.67808    0.22838  2.9691  0.01407 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4.5.2 Fixed Effect Model

We first estimate the model based on pooled OLS.

fe.plm <- plm(formula=y~x, data=p.df, model="within")

Then we calculate the variance-covariance matrix to be clustered by group.

coeftest(fe.plm, vcov=vcovHC(fe.plm, 
                             type="sss",
                             cluster="group")) 
## 
## t test of coefficients:
## 
##   Estimate Std. Error t value  Pr(>|t|)    
## x 1.071429   0.089074  12.028 7.008e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Then we calculate the variance-covariance matrix to be clustered by time.

coeftest(fe.plm, vcov=vcovHC(fe.plm, 
                             type="sss", 
                             cluster="time")) 
## 
## t test of coefficients:
## 
##     Estimate Std. Error    t value  Pr(>|t|)    
## x 1.0714e+00 4.6089e-10 2324719242 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1