Advanced Panel Data Methods (Chapter 14)

As always at the beginning of a session remove anything from R’s memory and set your working directory. Then load the “foreign” library and download the files we are going to use.

rm(list=ls())
setwd('your directory')
library(foreign)

download.file('http://fmwww.bc.edu/ec-p/data/wooldridge/jtrain.dta','jtrain.dta',mode="wb")
download.file('http://fmwww.bc.edu/ec-p/data/wooldridge/wagepan.dta','wagepan.dta',mode="wb")

In order to estimate panel data models, I use the “plm” package. The central function of this package is plm(). The intuition behind its structure is similar to the ordinary linear model, except that it allows you to specify the panel’s group and the time variables and the effects model.

Example 14.1

Similar to the lm() function, you can specify your model’s equation and the sample. Since you want to use panel data methods for you estimation, you also have to specify which variables in your sample contain the information used to distinguish different groups and which variable contains the time measurement. In our example this is done with the option index=c('fcode','year'). Note, that the order of the variables is important. The group variable always has to be at the first and the time variable at the second position.

The specification model='within' indicates that the effects occur within a group. This is the fixed effects estimator. And the effect='individual' specifies that we are only interested in effects of the group variable and that there are no time specific effects. (See ?plm for further information on this.)

jtrain <- read.dta('jtrain.dta') # Read the data

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

summary(plm(lscrap ~ d88 + d89 + grant + grant_1,
            data=jtrain,
            index=c('fcode','year'),
            model='within',
            effect='individual'
            ))

Example 14.2

The structure of the plm() remains the same in this example, except that interaction terms are added.
Additionally, a specific F-test pFtest(estimatedmodel1,estimatedmodel2) is used to test for joint significance of those terms.

wagepan <- read.dta('wagepan.dta')

plm.1 <- plm(lwage ~ married + union +
              d81 + d82 + d83 +d84 + d85 + d86 + d87 +
              d81*educ + d82*educ + d83*educ + d84*educ + d85*educ +
              d86*educ + d87*educ,
              data=wagepan,
              model='within',
              effect='individual',
              index=c('nr','year'))
summary(plm.1)

plm.2 <- plm(lwage ~ married + union +
                     d81 + d82 + d83 +d84 + d85 + d86 + d87,
                   data=wagepan,
                   model='within',
                   effect='individual',
                   index=c('nr','year'))

pFtest(plm.1,plm.2)

Example 14.3
See example 14.1.

summary(plm(lscrap ~ d88 + d89 + grant + grant_1 + lsales + lemploy,
            data=jtrain,
            model='within',
            effect='individual',
            index=c('fcode','year')))

Example 14.4

This example compares the estimated coefficients of an OLS, random effects and fixed effects model with each other.
The random effects model is estimated by setting model='random'. Note that you do not need to specify the effect option.

# OLS
lm.1 <- lm(lwage ~ educ + black + hisp + exper + expersq + married + union +
           d81 + d82 + d83 + d84 + d85 + d86 + d87,
         data=wagepan)

# Random effects
plm.re <- plm(lwage ~ educ + black + hisp + exper + expersq + married + union +
              d81 + d82 + d83 + d84 + d85 + d86 + d87,
            data=wagepan,
            model='random',
            index=c('nr','year'))

# Fixed effects
plm.fe <- plm(lwage ~ expersq + married + union +
              d81 + d82 + d83 + d84 + d85 + d86 + d87,
            data=wagepan,
            effect='individual',
            model='within',
            index=c('nr','year'))

# Table of results (rounded to 3 digits)
results <- round(data.frame("Pooled OLS"=lm.1$coefficients[2:8],
                    "Random Effects"=plm.re$coeff[2:8],
                    "Fixed Effects"=c(NA,NA,NA,NA,plm.re$coeff[2:4])),3)
results
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s