Search code examples
rdataframemultinomial

R: Regression of each variable depending on all the others


In R, I have the following data.frame:

df <- data.frame(var1,var2,var3)

I would like to fit a regression function, like multinom, for each variable with respect to the others, without using the variable names explicitely. In other words, I would like to obtain this result:

fit1 <- multinom(var1 ~ ., data=df)
fit2 <- multinom(var2 ~ ., data=df)
fit3 <- multinom(var3 ~ ., data=df)

But in a for loop, without using the variable names (so that I can use the same code for any data.frame). Something similar to this:

for (i in colnames(df))
{
  fit[i] <- lm(i ~ ., data=df)
}

(This code does not work.)

Maybe my question is trivial, but I have no idea on how to proceed.

Thanks!


Solution

  • You need to add an extra step to build the formula object using string operation

    fit <- vector(mode = "list", length = ncol(df))
    for (i in colnames(df)) {
        fm <- as.formula(paste0(i, " ~ ."))
        fit[[i]] <- lm(fm, data = df)
    }