R: Predict from Smoothing Spline Fit

predict.smooth.spline {stats} | R Documentation

## Predict from Smoothing Spline Fit

### Description

Predict a smoothing spline fit at new points, return the derivative if desired. The predicted fit is linear beyond the original data.

### Usage

    ## S3 method for class 'smooth.spline'
    predict(object, x, deriv = 0, ...)

### Arguments

`object` | a fit from `smooth.spline`.
`x` | the new values of x.
`deriv` | integer; the order of the derivative required.
`...` | further arguments passed to or from other methods.

### Value

A list with components

`x` | The input `x`.
`y` | The fitted values or derivatives at `x`.

### See Also

`smooth.spline`

### Examples

    require(graphics)

    attach(cars)
    cars.spl <- smooth.spline(speed, dist, df = 6.4)

    ## "Proof" that the derivatives are okay, by comparing with approximation
    diff.quot <- function(x, y) {
      ## Difference quotient (central differences where available)
      n <- length(x); i1 <- 1:2; i2 <- (n-1):n
      c(diff(y[i1]) / diff(x[i1]), (y[-i1] - y[-i2]) / (x[-i1] - x[-i2]),
        diff(y[i2]) / diff(x[i2]))
    }

    xx <- unique(sort(c(seq(0, 30, by = .2), kn <- unique(speed))))
    i.kn <- match(kn, xx)   # indices of knots within xx
    op <- par(mfrow = c(2,2))
    plot(speed, dist, xlim = range(xx), main = "Smooth.spline & derivatives")
    lines(pp <- predict(cars.spl, xx), col = "red")
    points(kn, pp$y[i.kn], pch = 3, col = "dark red")
    mtext("s(x)", col = "red")
    for(d in 1:3){
      n <- length(pp$x)
      plot(pp$x, diff.quot(pp$x,pp$y), type = "l", xlab = "x", ylab = "",
           col = "blue", col.main = "red",
           main = paste0("s" ,paste(rep("'", d), collapse = ""), "(x)"))
      mtext("Difference quotient approx.(last)", col = "blue")
      lines(pp <- predict(cars.spl, xx, deriv = d), col = "red")

      points(kn, pp$y[i.kn], pch = 3, col = "dark red")
      abline(h = 0, lty = 3, col = "gray")
    }
    detach(); par(op)

[Package stats version 3.1.2 Index]