Skip to content

stepAIC invalid scope argument

5 messages · Adaikalavan Ramasamy, Brian Ripley

#
I am trying to replicate the first example from stepAIC from the MASS
package with my own dataset but am running into error. If someone can
point where I have gone wrong, I would appreciate it very much. 

Here is an example :

 set.seed(1)
 df   <- data.frame( x1=rnorm(1000), x2=rnorm(1000), x3=rnorm(1000) )
 df$y <- 0.5*df$x1 + rnorm(1000, mean=8, sd=0.5)
 # pairs(df); head(df)

 lo  <- aov( y ~ 1, data=df )
 hi  <- aov( y ~ .^2, data=df )
 mid <- aov( y ~ x2 + x3, data=df )

Running any of the following commands

 stepAIC( mid, scope=list(upper = ~x1 + x2 + x3 , lower = ~1) )
 stepAIC( mid, scope=list(upper = hi , lower = lo) )
 addterm( mid, ~ x1 + x2 + x3 )
 addterm( lo, hi )

gives the same error message : 
  Error in eval(expr, envir, enclos) : invalid second argument

Here is a traceback of the first failed command :
 14: eval(predvars, data, env)
 13: model.frame.default(formula = y ~ x2 + x3 + x1, data = df, drop.unused.levels = TRUE)
 12: model.frame(formula = y ~ x2 + x3 + x1, data = df, drop.unused.levels = TRUE)
 11: eval(expr, envir, enclos)
 10: eval(mf, parent.frame())
 9: lm(formula = y ~ x2 + x3 + x1, data = df, method = "model.frame")
 8: eval(expr, envir, enclos)
 7: eval(fcall, env, parent.frame())
 6: model.frame.lm(fob, xlev = object$xlevels)
 5: model.frame(fob, xlev = object$xlevels)
 4: stats:::add1.lm(object, scope = scope, scale = scale)
 3: addterm.lm(fit, scope$add, scale = scale, trace = max(0, trace - 1), k = k, ...)
 2: addterm(fit, scope$add, scale = scale, trace = max(0, trace - 1), k = k, ...)
 1: stepAIC(mid, scope = list(upper = ~x1 + x2 + x3, lower = ~1))

Any pointers would be much appreciated. Thank you.

Regards, Adai
#
You are right, it works fine with a different name. Its a bad habit that
I need to shake off.

The error message said that the second argument was invalid. The second
argument in stepAIC and addterm is 'scope' and thus the title.

Thank you again.

Regards, Adai
On Mon, 2005-08-15 at 15:23 +0100, Prof Brian Ripley wrote:
#
Try not to use the name of an R object ... the error is caused by using 
'df' as the second argument to eval().

It works with DF in place of df.

I don;t understand your subject line: that is not the error message you 
received.
On Mon, 15 Aug 2005, Adaikalavan Ramasamy wrote:

            

  
    
#
In case it is unclear why in this case there is a problem: you are running 
a function (here model.frame) in the stats namespace and so it looks in 
the stats namespace before the workspace when looking for 'df'.
On Mon, 15 Aug 2005, Prof Brian Ripley wrote:

            

  
    
#
On Mon, 15 Aug 2005, Adaikalavan Ramasamy wrote:

            
OK, we'll improve the error message ....