Re: [R] How can one make stepAIC and lme

From: Jorunn Slagstad <jorunn.slagstad_at_gmail.com>
Date: Tue, 13 May 2008 15:46:28 +0200

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.
>
______________________________________________ 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.
Received on Tue 13 May 2008 - 13:57:23 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 13 May 2008 - 18:30:38 GMT.

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

list of date sections of archive