passing an extra argument to an S3 generic
You do not provide mlm.influence() so your code can't be reproduced. Or did you mean to put lm.influence() in the formals to your hatvalues.mlm ? If yes, then 1) you have a typo 2) lm.influence doesn't allow you to pass on arguments, maybe try influence.lm instead. Elai
On Thu, Feb 9, 2012 at 1:42 PM, Michael Friendly <friendly at yorku.ca> wrote:
I'm trying to write some functions extending influence measures to multivariate linear models and also allow subsets of size m>=1 to be considered for deletion diagnostics. ?I'd like these to work roughly parallel to those functions for the univariate lm where only single case deletion (m=1) diagnostics are considered. Corresponding to stats::hatvalues.lm, the S3 method for class "lm" objects,
hatvalues <-function (model, ...)
UseMethod("hatvalues")
hatvalues.lm <-
function (model, infl = lm.influence(model, do.coef = FALSE), ? ?...)
{
? ?hat <- infl$hat
? ?names(hat) <- names(infl$wt.res)
? ?hat
}
I have, for class "mlm" objects
hatvalues.mlm <- function(model, m=1, infl=mlm.influence(model, m=m, do.coef
= FALSE), ...)
{
? ?hat <- infl$H
? ?m <- infl$m
? ?names(hat) <- if(m==1) infl$subsets else apply(infl$subsets,1, paste,
collapse=',')
? ?hat
}
where mlm.influence() does the calculations, but also allows the m= argument
to specify subset size.
Yet when I test this I can't seem to pass the m= argument directly, so that
it gets stuffed in to the infl=
call to mlm.influence.
# fit an mlm
library(heplots)
Rohwer2 <- subset(Rohwer, subset=group==2)
rownames(Rohwer2)<- 1:nrow(Rohwer2)
Rohwer.mod <- lm(cbind(SAT, PPVT, Raven) ~ n+s+ns+na+ss, data=Rohwer2)
class(Rohwer.mod)
[1] "mlm" "lm" ## this doesn't work, as I would like it to, calling the hatvalues.mlm method, but passing m=2:
hatvalues(Rohwer.mod, m=2)
Error in UseMethod("hatvalues") :
?no applicable method for 'hatvalues' applied to an object of class
"c('double', 'numeric')"
I don't understand why this doesn't just call hatvalues.mlm, since
Rohwer.mod is of class "mlm".
# These work -- calling hatvalues.mlm explicitly, or passing the infl=
argument with the call to
# mlm.influence
hatvalues.mlm(Rohwer.mod, m=2) hatvalues(Rohwer.mod, infl=mlm.influence(Rohwer.mod,m=2))
Can someone help me understand what is wrong and how to make the .mlm method allow m= to be passed directly to the infl= computation? thx, -Michael -- Michael Friendly ? ? Email: friendly AT yorku DOT ca Professor, Psychology Dept. York University ? ? ?Voice: 416 736-5115 x66249 Fax: 416 736-5814 4700 Keele Street ? ?Web: ? http://www.datavis.ca Toronto, ONT ?M3J 1P3 CANADA
______________________________________________ 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.