[Rd] request for patch in "drop1" (add.R)
Ben Bolker
bbolker at gmail.com
Wed Feb 23 21:38:52 CET 2011
On 11-02-23 03:20 PM, Martin Maechler wrote:
>>>>>> Ben Bolker <bbolker at gmail.com>
>>>>>> on Wed, 23 Feb 2011 09:14:37 -0500 writes:
>
> > By changing three lines in drop1 from access based on $
> > to access based on standard accessor methods (terms() and
> > residuals()), it becomes *much* easier to extend drop1 to
> > work with other model types. The use of $ rather than
> > accessors in this context seems to be an oversight rather
> > than a design decision, but maybe someone knows better ...
>
> > In particular, if one makes these changes (which I am
> > pretty certain will not break anything, as the original
> > code basically mimicked the default methods anyway), it
> > becomes possible to make drop1() work with mer objects
> > (Doug Bates's new mixed model code) merely by defining:
>
> > terms.mer <- function(x, ...) {
> > attr(x at frame,"terms")
> > }
>
> > extractAIC.default <- function(fit, scale=0, k=2, ...) {
> > L <- logLik(fit)
> > edf <- attr(L,"df")
> > c(edf,-2*L+2*edf)
> > }
>
> > Adding this definition of extractAIC.default also makes drop1() work
> > with lme fits ...
>
> > Comments? Should I submit to the bug database as "enhancement
> > request"? Are there any hidden downsides to this?
>
> drawback: a possible very small performance cut for the cases
> where the "$" access is ok. But that should not count.
>
> I like the idea.... {it's a pity that only S3 methods work that way,
> because residuals(), terms(), etc... are unfortunately not
> general (implicit) S4 generics but just S3 ones..
>
> I'm currently testing your change, plus some more in step().
> However, for step() to work automagically there is more needed.
> It currently relies in more places on 'object' being a list to
> which you can append new components, basically by
> fit <- object
> fit$new1 <- ...
> fit$new2 <- ...
>
> That would have to be changed to something like
> fit <- list(obj = object)
> fit$new1 <- ...
> fit$new2 <- ...
> and more changes where 'fit' has to be replaced by 'fit$obj'.
> Would that not be of interest as well?
>
> Martin
Potentially, but I am personally much more interested in enabling
drop1(), which seems to be a much more legitimate tool for testing terms
in models than step(), which is so easy to abuse ...
Ben Bolker
More information about the R-devel
mailing list