Description Usage Arguments Details Value Note Author(s) References See Also Examples

Fit thin plate splines of any order with user specified knots

1 2 |

`x` |
the design data points |

`y` |
the observation vector |

`m` |
the order of the spline |

`knots` |
the placement the thin plate spline basis |

`scale.type` |
"range" (default), the x and knots will be rescaled with respect to x; "none", nothing is done on x and knots |

`method` |
"v", GCV is used for choosing lambda; "d", user specified lambda |

`lambda` |
only used when method="d" |

`cost` |
the fudge factor for inflating the model degrees of freedom, default to be 1 |

`nstep.cv` |
the number of initial steps for GCV grid search |

`verbose` |
whether some computational details should be outputed |

`tau` |
the truncation ratio used in SVD when knots is specified by the user, some possible values are 1, 10, 100, ... |

The minimization problem for this function is

*
sum((y_i - f(x_i))^2) + lambda*J_m(f), *

where *J_m(.)* is the m-the order thin plate spline penalty functional.

If scale.type="range", each column of x is rescaled to [0 1] in the following way x' = (x - min(x))/range(x), and the knots is rescaled w.r.t. min(x) and range(x) in the same way.

When the cost argument is used, the GCV score is computed as

*
GCV(lambda) = n*RSS(λ)/(n - cost*tr(A))^2. *

A Tps object of the following components

`x ` |
same as input |

`y ` |
same as input |

`m ` |
same as input |

`knots` |
same as input |

`scale.type` |
same as input |

`method` |
same as input |

`lambda` |
same as input |

`cost` |
same as input |

`nstep.cv` |
same as input |

`tau` |
same as input |

`df` |
model degrees of freedom |

`gcv` |
gcv score of the model adjusted for the fudge factor |

`xs` |
scaled design points |

`ks` |
scaled knots design |

`c` |
coefficient c |

`d` |
coefficient d |

`yhat` |
predicted values at the data points |

`svals` |
singular values of the matrix decomposition |

`gcv.grid` |
gcv grid table, number of rows=nstep.cv |

`call` |
the call to this function |

This function uses GCVPACK fortran code with some addition and modification by the author.

Xianhong Xie

D. Bates, M. Lindstrom, G. Wahba, B. Yandell (1987), GCVPACK – routines for generalized cross-validation. Commun. Statist.-Simula., 16(1), 263-297.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | ```
#define the test function
f <- function(x, y) { .75*exp(-((9*x-2)^2 + (9*y-2)^2)/4) +
.75*exp(-((9*x+1)^2/49 + (9*y+1)^2/10)) +
.50*exp(-((9*x-7)^2 + (9*y-3)^2)/4) -
.20*exp(-((9*x-4)^2 + (9*y-7)^2)) }
#generate a data set with the test function
set.seed(200)
N <- 13; xr <- (2*(1:N) - 1)/(2*N); yr <- xr
zr <- outer(xr, yr, f); zrmax <- max(abs(zr))
noise <- rnorm(N^2, 0, 0.07*zrmax)
zr <- zr + noise #this is the noisy data we will use
#convert the data into column form
xc <- rep(xr, N)
yc <- rep(yr, rep(N,N))
zc <- as.vector(zr)
#fit the thin plate spline with all the data points as knots
tpsfit1 <- fitTps(cbind(xc,yc), zc, m=2, scale.type="none")
persp(xr, yr, matrix(predict(tpsfit1),N,N), theta=130, phi=20,
expand=0.45, xlab="x1", ylab="x2", zlab="y", xlim=c(0,1),
ylim=c(0,1),zlim=range(zc), ticktype="detailed", scale=FALSE,
main="GCV Smooth I")
#fit the thin plate spline with subset of data points as knots
grid.list <- list(xc=seq(2/13,11/13,len=10),
yc=seq(2/13,11/13,len=10))
knots.grid <- expand.grid(grid.list)
tpsfit2 <- fitTps(cbind(xc,yc), zc, m=2, knots=knots.grid)
persp(xr, yr, matrix(predict(tpsfit2),N,N), theta=130, phi=20,
expand=0.45, xlab="x1", ylab="x2", zlab="y", xlim=c(0,1),
ylim=c(0,1),zlim=range(zc), ticktype="detailed", scale=FALSE,
main="GCV Smooth II")
``` |

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.