From: Gavin Simpson <gavin.simpson_at_ucl.ac.uk>

Date: Fri 14 Jul 2006 - 02:24:44 EST

Date: Fri 14 Jul 2006 - 02:24:44 EST

On Thu, 2006-07-13 at 15:02 +0100, Pavlidis, Efthymios wrote:

> Hello,

*>
**> I am having the following silly problem with lm.
**>
**> Let X be a dataframe with X[,1] the dependent variable and X[,-1] the independent variables. I want to run the following
**> but without including an intercept.
**>
**> for(i in 1:100 ){
**> lm( X[,100-i] ) # this works fine but it returns an intercept
**> }
**>
**> Can anyone help me? Thank you in advance!
*

Are you really sure that works? Looks like the last loop will be indexing column 0 and this does fail for me but for a different reason first:

dat <- data.frame(matrix(rnorm(10000), ncol = 100)) for(i in 1:100)

lm(dat[, 101-i])

Gives this error:

Error in terms.default(formula, data = data) :

no terms component

I'm not exactly sure what you want to do, but if you mean you want to fit a model to your y (X[,1]) using a single column at a time from the rest of X, then does this do what you want?

mods <- vector("list", length = ncol(dat)) for(i in seq(along = mods))

mods[[i]] <- lm(X1 ~ . -1, data = dat[, c(1, i)])

The -1 in the formular removes the intercept. To get the coefficients:

sapply(mods, coef)

Even then though, the first iteration of the loop is fitting a model of X1 ~ X1 and gets a coefficient of 1:

> mods[[1]]

Call:

lm(formula = X1 ~ . - 1, data = dat[, c(1, i)])

Coefficients:

X1.1

1

If you meant to only regress X1 on the remaining 99 variables then you need something like this:

dat <- data.frame(matrix(rnorm(10000), ncol = 100))
## list to hold the results

mods <- vector("list", length = ncol(dat) - 1)
## indexer for the list

ind <- c(1, seq(2, ncol(dat)-1))

for(i in seq(2, ncol(dat))) {

j <- ind[i-1]

mods[[j]] <- lm(X1 ~ . -1, data = dat[, c(1, i)])
}

## return the coefficients

sapply(mods, coef)

Of course it would be easier if you subset X first in that case

dat <- data.frame(matrix(rnorm(10000), ncol = 100))
X1 <- dat[, 1] # dependent variables

dat <- dat[, -1] # predictors

## list to hold the results

mods <- vector("list", length = ncol(dat))
for(i in seq(along = mods))

mods[[i]] <- lm(X1 ~ . -1, data = dat[, i, drop = FALSE])
## return the coefficients

sapply(mods, coef)

**HTH
**
G

-- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% Gavin Simpson [t] +44 (0)20 7679 0522 ECRC & ENSIS, UCL Geography, [f] +44 (0)20 7679 0565 Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/cv/ London, UK. WC1E 6BT. [w] http://www.ucl.ac.uk/~ucfagls/ %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.htmlReceived on Fri Jul 14 02:30:29 2006

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.1.8, at Fri 14 Jul 2006 - 04:14:34 EST.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*