hatMat function

Hat Matrix of a Smoother

Hat Matrix of a Smoother

Compute the hat matrix or smoother matrix, of any (linear) smoother, smoothing splines, by default.

hatMat(x, trace= FALSE, pred.sm = function(x, y, ...) predict(smooth.spline(x, y, ...), x = x)$y, ...)

Arguments

  • x: numeric vector or matrix.

  • trace: logical indicating if the whole hat matrix, or only its trace, i.e. the sum of the diagonal values should be computed.

  • pred.sm: a function of at least two arguments (x,y)

    which returns fitted values, i.e. y.haty.hat, of length compatible to x (and y).

  • ...: optionally further arguments to the smoother function pred.sm.

Returns

The hat matrix HH (if trace = FALSE as per default) or a number, tr(H)tr(H), the trace of HH, i.e., sum(i)H[i,i]sum(i) H[i,i].

Note that dim(H) == c(n, n) where n <- length(x) also in the case where some x values are duplicated (aka ties).

References

Hastie and Tibshirani (1990). Generalized Additive Models. Chapman & Hall.

Author(s)

Martin Maechler maechler@stat.math.ethz.ch

See Also

smooth.spline, etc. Note the demo, demo("hatmat-ex").

Examples

require(stats) # for smooth.spline() or loess() x1 <- c(1:4, 7:12) H1 <- hatMat(x1, spar = 0.5) # default : smooth.spline() matplot(x1, H1, type = "l", main = "columns of smoother hat matrix") ## Example 'pred.sm' arguments for hatMat() : pspl <- function(x,y,...) predict(smooth.spline(x,y, ...), x = x)$y pksm <- function(x,y,...) ksmooth(sort(x),y, "normal", x.points=x, ...)$y ## Rather than ksmooth(): if(require("lokern")) pksm2 <- function(x,y,...) glkerns(x,y, x.out=x, ...)$est ## Explaining 'trace = TRUE' all.equal(sum(diag((hatMat(c(1:4, 7:12), df = 4)))), hatMat(c(1:4, 7:12), df = 4, trace = TRUE), tol = 1e-12) ## ksmooth() : Hk <- hatMat(x1, pr = pksm, bandwidth = 2) cat(sprintf("df = %.2f\n", sum(diag(Hk)))) image(Hk) Matrix::printSpMatrix(as(round(Hk, 2), "sparseMatrix")) ##---> see demo("hatmat-ex") for more (and larger) examples
  • Maintainer: Martin Maechler
  • License: GPL (>= 2)
  • Last published: 2024-11-05