I have a multiply imputed dataset (imputed using Amelia) and would like to derive a
function which runs several regressions (with the same outcome, and different predictor
variables) in one go. The reason is that I need to run several regressions (with the same
predictors) on different outcome variables.
I have defined the function but when I run it, I get an error message:
Error in model.frame.default(formula = outcome ~ country, data = as.data.frame(.), :
variable lengths differ (found for 'country')
I think it is because the imputed datasets are an "amelia" object and not a
typical data frame, so it is hard to index the variable "country". But I'm
not sure how to do this.
A reproducible example is below. I would really appreciate any advice.
library(Amelia)
library(Zelig)
# Use africa dataset
data(africa)
# Impute data
imp.out <- amelia(x = africa, cs = "country", ts = "year", logs =
"gdp_pc", m=5)
summary(imp.out)
# Define function to run regression predicting an outcome from country, gdp_pc, civlib,
and population
reg_function <- function(outcome, data) {
# Run regressions using the zelig function
country <- zelig(outcome ~ country, model = "normal", data=data,
cite=FALSE)
gdp_pc <- zelig(outcome ~ gdp_pc, model = "normal", data=data, cite=FALSE)
population <- zelig(outcome ~ population, model = "normal", data=data,
cite=FALSE)
# Put results into a vector
results <- ( c(combine_coef_se(country)[2,1], combine_coef_se(country)[2,2],
combine_coef_se(gdp_pc)[2,1], combine_coef_se(gdp_pc)[2,2],
combine_coef_se(population)[2,1], combine_coef_se(population)[2,2]))
# Return results in a matrix
return(matrix(results, nrow=1, ncol=6, dimnames=list(c(""),
c("Est_country",
"SE_country",
"Est_gdp_pc",
"SE_gdp_pc",
"Est_population",
"SE_population"))))
}
# Run regression for outcome variables "year", "infl", and
"trade"
# This is where I get the error messages that the variable lengths differ for
'country'
year <- reg_function(year, imp.out$imputations)
year <- reg_function(infl, imp.out$imputations)
year <- reg_function(trade, imp.out$imputations)