Re: [R] Question for LM intercept

From: Gavin Simpson <gavin.simpson_at_ucl.ac.uk>
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.html
Received 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.