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