Fama Macbeth panel data regression

Hi,
I am having trouble with Fama Macbeth panel data regression.
I run

pmg(y ~ x1+  x2+ x3 +x4, data, index=c("isin","Year"))

The regression runs just fine in Stata, but R gives me error message: "Insufficient number of time periods".
Why? (I have also tried changing the order for index, with "Year", "isin".

When I include companies that are listed for 10 years or more, the regression runs fine.

BUT, using this same data on R and Stata (where companies under 10 years are removed), the results are completely different.

This is what I do in Stata:
encode isin, gen(ID)
format year %ty
xtset ID year
asreg y x1 x2 x3 x4 , fmb newey(1)

Is there another way to run Fama Macbeth in R? Why does the result differ from Stata?
How do I implement the Stata procedure into R?

Thanks!

Hi @sunniva

Could you upload the data and share it here? It will make it easier for us to help you.

Hi @sunniva ,

You mention trying switching the positions of "Year" and "isin" in the index argument with no success. I am not sure why because it is working for me. Here is my full code:

# Load packages ----
library(here)
library(plm)
library(readr)

# Import the data ----
dat <- read_csv(here("data/testdata.csv"))

# Run Fama Macbeth panel regression ----
fm_model <- pmg(formula = Y ~ x1 + x2 + x3 + x4,
    data = dat,
    index = c("Year","isin"))

fm_model

Model Formula: Y ~ x1 + x2 + x3 + x4

Coefficients:
(Intercept)          x1          x2          x3          x4 
   0.829776   -0.013092   -0.044625   -0.187797    0.021546 

summary(fm_model)

Mean Groups model

Call:
pmg(formula = Y ~ x1 + x2 + x3 + x4, data = dat, index = c("Year", 
    "isin"))

Unbalanced Panel: n = 30, T = 40-144, N = 3024

Residuals:
       Min.     1st Qu.      Median     3rd Qu.        Max. 
-3.09429009 -0.35156882 -0.07151865  0.21601332 21.52348689 

Coefficients:
             Estimate Std. Error z-value Pr(>|z|)   
(Intercept)  0.829776   0.268053  3.0956 0.001964 **
x1          -0.013092   0.067968 -0.1926 0.847261   
x2          -0.044625   0.016263 -2.7440 0.006070 **
x3          -0.187797   0.101419 -1.8517 0.064069 . 
x4           0.021546   0.033033  0.6523 0.514224   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Total Sum of Squares: 2840.8
Residual Sum of Squares: 2112.7
Multiple R-squared: 0.25632

1 Like

Well, actually it worked for me now! I guess I have been playing around with so many datasets, that I lost track of which I had not tried :slight_smile: Thanks a lot!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.