Solved – Making a prediction using Fixed Effects

I have a simple data set for which I applied a simple linear regression model. Now I would like to use fixed effects to make a better prediction on the model. I know that I could also consider making dummy variables, but in reality is my data over several years and has more variables so I would like to avoid making dummies.

My data and code is similar to this:

data <- read.table(header = TRUE,                     stringsAsFactors = FALSE,                     text="CompanyNumber ResponseVariable Year ExplanatoryVariable1 ExplanatoryVariable2                    1 2.5 2000 1 2                    1 4 2001 3 1                    1 3 2002 5 7                    2 1 2000 3 2                    2 2.4 2001 0 4                    2 6 2002 2 9                    3 10 2000 8 3")  library(lfe) fe <- getfe(felm(data = data, ResponseVariable ~ ExplanatoryVariable1 + ExplanatoryVariable2 | Year)) fe lm.1<-lm(ResponseVariable ~ ExplanatoryVariable1 + ExplanatoryVariable2, data=data)                                      prediction<- predict(lm.1, data)  prediction  check_model=postResample(pred = prediction, obs = data$ResponseVariable) check_model 

For my real dataset I will make a prediction based on my test set but for simplicity I just use the trainingset here as well.

I would like to make a prediction with the help of the fixed effects that I found. But it does not seem to match the fixed effect right, anyone who knows how to use this fe$effects?

prediction_fe<- predict(lm.1, data) + fe$effect 

You have to add the estimated fixed effects to the prediciton data frame.

library(lfe)  ##data d <- read.table(header = TRUE,                     stringsAsFactors = FALSE,                     text="CompanyNumber ResponseVariable Year ExplanatoryVariable1 ExplanatoryVariable2                    1 2.5 2000 1 2                    1 4 2001 3 1                    1 3 2002 5 7                    2 1 2000 3 2                    2 2.4 2001 0 4                    2 6 2002 2 9                    3 10 2000 8 3")  ##regression e<-felm(data = d, ResponseVariable ~ ExplanatoryVariable1 + ExplanatoryVariable2 | Year)  ##fixed effects data d.fe<-getfe(e) ##prediction sample p<-d #could be a different sample, but with the same covariates #add columns on fixed effects p<-merge(p,d.fe[d.fe$fe=="Year",],by.x="Year",by.y="idx",all.x=T) names(p)[grep("^effect$",names(p))]<-"effect.Year"  #  if you have more than one fixed effect, #  you should continue here, adapting the two lines above. eg. fixed effects on ComanyNumber #reorder p<-p[order(p$CompanyNumber,p$Year),]  ##predict  #coefficients: predicted.values<-   as.matrix(p[,rownames(e$coefficients)]) %*% (e$coefficients) + # covariates * coefficients   p$effect.Year # fixed effects from years  ##test  round(predicted.values + e$residuals- p$ResponseVariable,6) # only works if the order of all observerations conincide 

Note, that the data object name is now d not data, to avoide confusion.

Similar Posts:

Rate this post

Leave a Comment