[R] The economist's term "fixed effects model" - plain lm() should work

From: Ajay Narottam Shah <ajayshah_at_mayin.org>
Date: Mon 06 Jun 2005 - 15:58:20 EST

> CAN YOU TELL ME HOW TO FIT FIXED-EFFECTS MODEL WITH R? THANK YOU!
Ordinary lm() might suffice.

In the code below, I try to simulate a dataset from a standard earnings regression, where log earnings is quadratic in experience, but the intercept floats by education category - you have 4 intercepts for 4 education categories.

I think this works as a simple implementation of "the fixed effects model" in the sense of the term that is used in economics. I will be happy to hear from R gurus about how this can be done better using nlme or lme4.

> education <- factor(sample(1:4,1000, replace=TRUE),

                      labels=c("none", "school", "college", "beyond"))

> experience <- 30*runif(1000) # experience from 0 to 30 years
> intercept <- c(0.5,1,1.5,2)[education]
> log.earnings <- intercept + 2*experience -

    0.05*experience*experience + rnorm(1000)
>
> summary(lm(log.earnings ~

             -1 + education + experience + I(experience*experience)))

Call:
lm(formula = log.earnings ~ -1 + education + experience + I(experience *

    experience))

Residuals:

    Min 1Q Median 3Q Max -3.1118 -0.6525 -0.0134 0.6790 4.1763

Coefficients:

                             Estimate Std. Error  t value Pr(>|t|)    
educationnone               0.5888110  0.1101963    5.343 1.13e-07 ***
educationschool             0.9062839  0.1106103    8.193 7.76e-16 ***
educationcollege            1.3662172  0.1141488   11.969  < 2e-16 ***
educationbeyond             1.9739789  0.1147356   17.205  < 2e-16 ***
experience                  2.0026482  0.0148110  135.214  < 2e-16 ***
I(experience * experience) -0.0499795 0.0004753 -105.152 < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Residual standard error: 1.015 on 994 degrees of freedom
Multiple R-Squared: 0.9966,     Adjusted R-squared: 0.9966 
F-statistic: 4.818e+04 on 6 and 994 DF,  p-value: < 2.2e-16 


As you see, it pretty much recovers the true parameter vector -- it
gets           c(.588, .906, 1.366, 1.974, 2.003, -0.0499, 1.015)
compared with  c(.5,   1.,   1.5,   2,     2,     -0.05,   1)

I think the standard errors and tests should also be quite fine.

Please do post an informative "summary" of your exploration on the
economist's notation about panel data (fixed effects and random
effects models) on the mailing list, when you are finished learning
this question. :-) We will all benefit. Hope this helps,

-- 
Ajay Shah                                                   Consultant
ajayshah@mayin.org                      Department of Economic Affairs
http://www.mayin.org/ajayshah           Ministry of Finance, New Delhi

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Received on Mon Jun 06 19:15:19 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:32:22 EST