2

Is there a way to run a model (for simplicity, a linear model) using specified columns of a data.frame?

For example, I would like to be able to do something like this:

set.seed(1)
ET = runif(10, 1,20)
x1 = runif(10, 1,20)
x2 = runif(10, 1,30)
x3 = runif(10, 1,40)

Xdf = data.frame(ET = ET, X1 = x1, X2 =x2, X3 = x3)

lm(ET~Xdf[,c(2,3)], data = Xdf)

Where the linear model would be equal to lm(ET~X1 +X2, data = Xdf)

I have tried with a matrix - but it won't work in this case as I will eventually be adding spatial correlation based upon values stored in the data.frame that need to be specified by the data = data.frame call.As well as having certain names.frame. As well, I need to be able to choose certain columns in the data because this will be looping through multiple models using different predictors.

Any help would be greatly appreciated. Thanks!

Jilber Urbina
  • 58,147
  • 10
  • 114
  • 138
Sarah
  • 731
  • 7
  • 15

2 Answers2

1

Here's a (rather ugly) way to make it work.

I use as.formula and the paste function to make the formula before calling lm.

I'm sure there are better ways to do this, but this is what came to mind.

# ET ~ X1 + X2
f1 <- as.formula(paste("ET~", paste(names(Xdf)[c(2,3)], 
                                        collapse="+")))
lm(f1, data=Xdf)

You can also specify the individual columns, though it might be more work

lm(ET ~ Xdf[,2] + Xdf[,3], data=Xdf)
ialm
  • 8,510
  • 4
  • 36
  • 48
-1

Here is a one line solution:

lm(ET~., data = Xdf[c(2,3)])

If you want to include all but one variable, X3 for example:

lm(ET~., data = Xdf[-c(4)])
Agustín Indaco
  • 550
  • 5
  • 17