There is a slight problem with the code. Due to the collapse=Œ+¹ argument,
the code only works if there are >1 predictor variables. How can I amend
code so it also works if number of predictor variable==1?
 
# WORKING ­ LENGTH OF EACH SET OF PREDICTOR >1

DV <- c("mpg", "drat", "gear")
IV <- list(c("cyl", "disp", "hp"), c("wt", "qsec"), c("carb", "hp"))
fits <- vector("list", length(DV))

for(i in seq(DV)) {
  fit <- lm(formula=paste(DV[i], paste(IV[[i]], collapse="+"), sep="~"),
data=mtcars) 
  plot(fit$fitted, fit$resid, main=paste("DV", DV[i], sep="="))
  lapply(fit$model[, -1], function(x) plot(x, fit$resid))
  fits[[i]] <- fit 
}

# NOT WORKING ­ LENGTH OF LAST PREDICTOR (CARB) ==1

DV <- c("mpg", "drat", "gear")
IV <- list(c("cyl", "disp", "hp"), c("wt", "qsec"), c("carb"))
fits <- vector("list", length(DV))

for(i in seq(DV)) {
  fit <- lm(formula=paste(DV[i], paste(IV[[i]], collapse="+"), sep="~"),
data=mtcars) 
  plot(fit$fitted, fit$resid, main=paste("DV", DV[i], sep="="))
  lapply(fit$model[, -1], function(x) plot(x, fit$resid))
  fits[[i]] <- fit 
}

Many thanks
Ross

From:  Jean V Adams <jvad...@usgs.gov>
Date:  Tuesday, 6 November 2012 19:20
To:  Ross Ahmed <rossah...@googlemail.com>
Cc:  <r-help@r-project.org>
Subject:  Re: [R] Apply same linear model to subset of dataframe

Ross,

You can store the lm() results in a list, if you like.
For example:

DV <- c("mpg", "drat", "gear")
IV <- list(c("cyl", "disp", "hp"), c("wt", "qsec"), c("carb", "hp"))
fits <- vector("list", length(DV))

for(i in seq(DV)) {
        fit <- lm(formula=paste(DV[i], paste(IV[[i]], collapse="+"),
sep="~"), data=mtcars)
        plot(fit$fitted, fit$resid, main=paste("DV", DV[i], sep="="))
        lapply(fit$model[, -1], function(x) plot(x, fit$resid))
        fits[[i]] <- fit
        }

Jean



Ross Ahmed <rossah...@googlemail.com> wrote on 11/06/2012 09:25:13 AM:
> 
> Thanks Jean
> 
> This works for the plots, but it only stores the last lm() computed
> 
> Ross
> 
> From: Jean V Adams <jvad...@usgs.gov>
> Date: Tuesday, 6 November 2012 14:12
> To: Ross Ahmed <rossah...@googlemail.com>
> Cc: <r-help@r-project.org>
> Subject: Re: [R] Apply same linear model to subset of dataframe
> 
> Ross,
> 
> Here's one way to condense the code ...
> 
> DV <- c("mpg", "drat", "gear")
> IV <- list(c("cyl", "disp", "hp"), c("wt", "qsec"), c("carb", "hp"))
> 
> for(i in seq(DV)) {
>         fit <- lm(formula=paste(DV[i], paste(IV[[i]], collapse="+"),
> sep="~"), data=mtcars)
>         plot(fit$fitted, fit$resid, main=paste("DV", DV[i], sep="="))
>         lapply(fit$model[, -1], function(x) plot(x, fit$resid))
>         }
> 
> Jean
> 
> 
> 
> Ross Ahmed <rossah...@googlemail.com> wrote on 11/04/2012 09:57:34 AM:
> > 
> > I have applied the same linear model to several different subsets of a
> > dataset. I recently read that in R, code should never be repeated.I feel my
> > code as it currently stands has a lot of repetition, which could be
> > condensed into fewer lines. I will use the mtcars dataset to replicatewhat
> > I have done. My question is: how can I use fewer lines of code (for example
> > using a for loop, a function or plyr) to achieve the same output as below?
> >   
> > data(mtcars)
> > 
> > # Apply the same model to the dataset but choosing different combinations of
> > dependent (DV) and independent (IV) variables in each case:
> > lm.mpg= lm(mpg~cyl+disp+hp, data=mtcars)
> > lm.drat = lm(drat~wt+qsec, data=mtcars)
> > lm.gear = lm(gear~carb+hp, data=mtcars)
> > 
> > # Plot residuals against fitted values for each model
> > plot(lm.mpg$fitted,lm.mpg$residuals, main = "lm.mpg")
> > plot(lm.drat$fitted,lm.drat$residuals, main = "lm.drat")
> > plot(lm.gear$fitted,lm.gear$residuals, main = "lm.gear")
> > 
> > # Plot residuals against IVs for each model
> > plotResIV <- function (IV,lmResiduals)
> >   {
> >   lapply(IV, function (x) plot(x,lmResiduals))
> > }
> > 
> > plotResIV(lm.mpg$model[,-1],lm.mpg$residuals)
> > plotResIV(lm.drat$model[,-1],lm.drat$residuals)
> > plotResIV(lm.gear$model[,-1],lm.gear$residuals)
> > 
> > Many thanks
> > Ross Ahmed


        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to