[R] How can one make stepAIC and lme

Jorunn Slagstad jorunn.slagstad at gmail.com
Tue May 13 15:46:28 CEST 2008


Hi again,

I've tried using with() inside my function in the following manner:

library(nlme)
library(MASS)
PredRes<-function(D1)
{
with(D1, {lmemod<-lme(distance~age*Sex, random=~1|Subject,
data=subset(D1,age!=14), method="ML")
themod<-stepAIC(lmemod,dir="both")
summary(themod)
prs=predict(themod,newdata=subset(D1,age==14))
obs<-subset(D1,age==14)$distance
print(mean(obs-prs))
} )
}

but the error message still reads:

> PredRes(Orthodont)
Start:  AIC=345.12
distance ~ age * Sex

Error in subset(D1, age != 14) : object "D1" not found

Does this mean that the only option for making a function of this type
work is to use the "<<-" operator?

--
Regards
Jorunn



2008/5/9 Prof Brian Ripley <ripley at stats.ox.ac.uk>:
> It's a known scoping issue in lme -- you are doing this from a function.
>  Make sure your dataset is visible -- e.g. use with().
>
>
>
>  On Fri, 9 May 2008, Jorunn Slagstad wrote:
>
>
> > Dear R-help
> >
> > I'm working on a large dataset which I have divided into 20 subsets based
> on similar features. Each subset consists of observations from different
> locations and I wish to use the location as a random effect.
> > For each group I want to select regressors by a stepwise procedure and
> include a random effect on the intercept. I use stepAIC() and lme(). (The
> lmer()-function doesn't work with the stepAIC()-function.)
> >
> > Since I have many groups, and I wish to do the same thing for each group,
> I have constructed a function which takes the dataset as input variable and
> gives a prediction result (here mean absolute error) as output.
> >
> > This is an example using the Orthodont dataset:
> >
> > library(MASS)
> > library(nlme)
> > PredRes<-function(D1)
> > {
> > lmemod=lme(distance~age*Sex, random=~1|Subject,
> data=subset(D1,age!=14),method="ML")
> > themod=stepAIC(lmemod,dir="both")
> > prs=predict(themod,newdata=subset(D1,age==14))
> > obs<-subset(D1,age==14)$distance
> > print(mean(obs-prs))
> > }
> >
> > Using this function with D1=Orthodont gives:
> >
> >
> > > PredRes(Orthodont)
> > >
> > Start:  AIC=345.12
> > distance ~ age * Sex
> >
> > Error in subset(D1, age != 14) : object "D1" not found
> >
> > The code works when I take Orthodont in directly:
> >
> >
> > > lmemod=lme(distance~age*Sex, random=~1|Subject,
> data=subset(Orthodont,age!=14),method="ML")
> > > themod=stepAIC(lmemod,dir="both")
> > >
> > Start:  AIC=345.12
> > distance ~ age * Sex
> >
> >         Df    AIC
> > - age:Sex  1 344.49
> > <none>       345.12
> >
> > Step:  AIC=344.49
> > distance ~ age + Sex
> >
> >         Df    AIC
> > <none>       344.49
> > + age:Sex  1 345.12
> > - Sex      1 348.70
> > - age      1 371.77
> >
> > > prs=predict(themod,newdata=subset(Orthodont,age==14))
> > > obs<-subset(Orthodont,age==14)$distance
> > > print(mean(obs-prs))
> > >
> > [1] 0.2962963
> >
> > How can I make this code work with dataset av input variable in a
> function?
> >
> > I'm using R version:
> >
> > Version:
> > platform = x86_64-unknown-linux-gnu
> > arch = x86_64
> > os = linux-gnu
> > system = x86_64, linux-gnu
> > status =
> > major = 2
> > minor = 6.0
> > year = 2007
> > month = 10
> > day = 03
> > svn rev = 43063
> > language = R
> > version.string = R version 2.6.0 (2007-10-03)
> >
> > Locale:
> >
> LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C
> >
> > Search Path:
> > .GlobalEnv, package:MASS, package:nlme, package:stats, package:graphics,
> package:grDevices, package:utils, package:datasets, package:methods,
> Autoloads, package:base
> >
> > By the way the R version 2.7.0 Patched (2008-05-08 r45647) gives the same
> error message.
> >
> > --
> > Regards
> > Jorunn Slagstad
> >
> > ______________________________________________
> > R-help at 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.
> >
> >
>
>  --
>  Brian D. Ripley,                  ripley at stats.ox.ac.uk
>  Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
>  University of Oxford,             Tel:  +44 1865 272861 (self)
>  1 South Parks Road,                     +44 1865 272866 (PA)
>  Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>
>
>
>  ______________________________________________
>  R-help at 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.
>



More information about the R-help mailing list