1abs.error.pred <- function(fit, lp=NULL, y=NULL) 2{ 3 if(!length(y)) y <- fit$y 4 if(!length(lp)) lp <- fit$fitted.values 5 if(!length(lp)) lp <- fit$linear.predictors 6 if(!(length(y) && length(lp))) 7 stop('must specify lp and y or specify y=T in the fit') 8 9 s <- is.na(y + lp) 10 11 if(any(s)) { 12 y <- y[!s] 13 lp <- lp[!s] 14 } 15 16 my <- median(y) 17 mlp <- median(lp) 18 meanr <- mean( abs( lp - mlp)) 19 meant <- mean( abs( y - my )) 20 meane <- mean( abs( lp - y )) 21 medr <- median(abs( lp - mlp)) 22 medt <- median(abs( y - my )) 23 mede <- median(abs( lp - y )) 24 25 differences <- cbind(c(meanr,meane,meant), 26 c(medr ,mede ,medt ) ) 27 28 dimnames(differences) <- list(c('|Yi hat - median(Y hat)|', 29 '|Yi hat - Yi|', 30 '|Yi - median(Y)|'), 31 c('Mean','Median')) 32 33 ratios <- cbind(c(meanr/meant, meane/meant), 34 c( medr/ medt, mede/ medt)) 35 dimnames(ratios) <- list(c('|Yi hat - median(Y hat)|/|Yi - median(Y)|', 36 '|Yi hat - Yi|/|Yi - median(Y)|'), 37 c('Mean','Median')) 38 structure(list(differences=differences,ratios=ratios),class='abs.error.pred') 39} 40 41print.abs.error.pred <- function(x, ...) 42{ 43 cat('\nMean/Median |Differences|\n\n') 44 print(x$differences) 45 cat('\n\nRatios of Mean/Median |Differences|\n\n') 46 print(x$ratios) 47 invisible() 48} 49