Same Explanatory Variables, Multiple Dependent Variables in R

I needed to run variations of the same regression model: the same explanatory variables with multiple dependent variables. In R, we can do this with a simple for() loop and assign().

First I specify the dependent variables:

dv <- c("dv1", "dv2", "dv3")

Then I create a for() loop to cycle through the different dependent variables:

for(i in 1:length(dv)){

Within this loop, I need to create an object to hold the models. I need a separate object for each model, so I create one with paste(). For the first dependent variable, this will be model1; for the second dependent variable model2, and so on.

model <- paste("model",i, sep="")

With this object to hold the model in place, I can run the model: the ith dependent variable is used. It is stored in an object called m.

m <- lm(as.formula(paste(dv[i],"~ ev1 + ev2")), data=mydata)

Now, I assign the model m to the model object created above: model1 for the first dependent variable, etc. That’s also the end of the for() loop.


We can now look at the results:

summary(model1); summary(model2); summary(model3)

or, more practical to compare models:

mtable(model1, model2, model3)

3 thoughts on “Same Explanatory Variables, Multiple Dependent Variables in R

  1. Your loop is great! Thank you.
    I only have a question, if i want proob the combination between n dependent variables with m independent variables, how i can write the loop?

    1. The approach using assign() described here should also work, just nest two for() loops. So you’d loop over say j (like for(j in 1:length(ev)){), and then have something like ev <- c("~ ev1 + ev2", "~ ev1 + ev2 + ev3", "~ ev2 + ev3") earlier on to define the explanatory variables. The line with the actual assignment may then be something like m <- lm(as.formula(paste(dv[i],ev[j])), data=mydata). In this example we'd have 9 models.

Leave a Reply

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

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

Google+ photo

You are commenting using your Google+ 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 )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.