predict.smooth.spline         package:stats         R Documentation

_P_r_e_d_i_c_t _f_r_o_m _S_m_o_o_t_h_i_n_g _S_p_l_i_n_e _F_i_t

_D_e_s_c_r_i_p_t_i_o_n:

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

_U_s_a_g_e:

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

_A_r_g_u_m_e_n_t_s:

  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.

_V_a_l_u_e:

     A list with components 

       x: The input 'x'.

       y: The fitted values or derivatives at 'x'.

_S_e_e _A_l_s_o:

     'smooth.spline'

_E_x_a_m_p_l_e_s:

     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= paste("s",paste(rep("'",d), collapse=""),"(x)", sep=""))
       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)

