1## Obtain fitted values from ssanova objects 2fitted.ssanova <- function(object,...) 3{ 4 mf <- object$mf 5 if (!is.null(object$random)) mf$random <- I(object$random$z) 6 predict(object,mf) 7} 8 9## Obtain residuals from ssanova objects 10residuals.ssanova <- function(object,...) 11{ 12 y <- model.response(object$mf,"numeric") 13 as.numeric(y-fitted.ssanova(object)) 14} 15 16## Obtain fitted values in working scale from gssanova objects 17fitted.gssanova <- function(object,...) 18{ 19 as.numeric(object$eta) 20} 21 22## Obtain residuals from gssanova objects 23residuals.gssanova <- function(object,type="working",...) 24{ 25 if (object$family=="polr") { 26 y <- model.response(object$mf) 27 if (!is.factor(y)) 28 stop("gss error in gssanova1: need factor response for polr family") 29 lvls <- levels(y) 30 if (nlvl <- length(lvls)<3) 31 stop("gss error in gssanova1: need at least 3 levels to fit polr family") 32 y <- outer(y,lvls,"==") 33 } 34 else y <- model.response(object$mf,"numeric") 35 wt <- model.weights(object$mf) 36 offset <- NULL 37 if ((object$family=="nbinomial")&(!is.null(object$nu))) y <- cbind(y,object$nu) 38 dat <- switch(object$family, 39 binomial=mkdata.binomial(y,object$eta,wt,offset), 40 nbinomial=mkdata.nbinomial(y,object$eta,wt,offset,object$nu), 41 polr=mkdata.polr(y,object$eta,wt,offset,object$nu), 42 poisson=mkdata.poisson(y,object$eta,wt,offset), 43 inverse.gaussian=mkdata.inverse.gaussian(y,object$eta,wt,offset), 44 Gamma=mkdata.Gamma(y,object$eta,wt,offset), 45 weibull=mkdata.weibull(y,object$eta,wt,offset,list(object$nu,FALSE)), 46 lognorm=mkdata.lognorm(y,object$eta,wt,offset,list(object$nu,FALSE)), 47 loglogis=mkdata.loglogis(y,object$eta,wt,offset,list(object$nu,FALSE))) 48 res <- as.numeric(dat$ywk - object$eta) 49 if (!is.na(charmatch(type,"deviance"))) { 50 dev.resid <- switch(object$family, 51 binomial=dev.resid.binomial(y,object$eta,wt), 52 nbinomial=dev.resid.nbinomial(y,object$eta,wt), 53 polr=dev.resid.polr(y,object$eta,wt,object$nu), 54 poisson=dev.resid.poisson(y,object$eta,wt), 55 inverse.gaussian=dev.resid.inverse.gaussian(y,object$eta,wt), 56 Gamma=dev.resid.Gamma(y,object$eta,wt), 57 weibull=dev.resid.weibull(y,object$eta,wt,object$nu), 58 lognorm=dev.resid.lognorm(y,object$eta,wt,object$nu), 59 loglogis=dev.resid.loglogis(y,object$eta,wt,object$nu)) 60 res <- sqrt(dev.resid)*sign(res) 61 } 62 res 63} 64