# mba.points: Point approximation from bivariate scattered data using... In MBA: Multilevel B-Spline Approximation

## Description

The function `mba.points` returns points on a surface approximated from a bivariate scatter of points using multilevel B-splines.

## Usage

 ```1 2``` ```mba.points(xyz, xy.est, n = 1, m = 1, h = 8, extend = TRUE, verbose = TRUE, ...) ```

## Arguments

 `xyz` a n x 3 matrix or data frame, where n is the number of observed points. The three columns correspond to point x, y, and z coordinates. The z value is the response at the given x, y coordinates. `xy.est` a p x 2 matrix or data frame, where p is the number of points for which to estimate a z. The two columns correspond to x, y point coordinates where a z estimate is required. `n` initial size of the spline space in the hierarchical construction along the x axis. If the rectangular domain is a square, n = m = 1 is recommended. If the x axis is k times the length of the y axis, n = 1, m = k is recommended. The default is n = 1. `m` initial size of the spline space in the hierarchical construction along the y axis. If the y axis is k times the length of the x axis, m = 1, n = k is recommended. The default is m = 1. `h` Number of levels in the hierarchical construction. If, e.g., n = m = 1 and h = 8, the resulting spline surface has a coefficient grid of size 2^h + 3 = 259 in each direction of the spline surface. See references for additional information. `extend` if FALSE, points in `xy.est` that fall outside of the domain defined by `xyz` are set to NA with a warning; otherwise, the domain is extended to accommodate points in `xy.est` with a warning. `verbose` if TRUE, warning messages are printed to the screen. `...` currently no additional arguments.

## Value

List with 1 component:

 `xyz.est` a p x 3 matrix. The first two columns are `xy.est` and the third column is the corresponding z estimates.

## Note

The function `mba.points` relies on the Multilevel B-spline Approximation (MBA) algorithm. The underlying code was developed at SINTEF Applied Mathematics by Dr. <c3><98>yvind Hjelle. Dr. <c3><98>yvind Hjelle based the algorithm on the paper by the originators of Multilevel B-splines:

S. Lee, G. Wolberg, and S. Y. Shin. (1997) Scattered data interpolation with multilevel B-splines. IEEE Transactions on Visualization and Computer Graphics, 3(3):229–244.

For additional documentation and references see:

`mba.surf`
 ``` 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``` ```data(LIDAR) ##split the LIDAR dataset into training and validation sets tr <- sample(1:nrow(LIDAR),trunc(0.5*nrow(LIDAR))) ##look at how smoothing changes z-approximation, ##careful the number of B-spline surface coefficients ##increases at ~2^h in each direction for(i in 1:10){ mba.pts <- mba.points(LIDAR[tr,], LIDAR[-tr,c("x","y")], h=i)\$xyz.est print(sum(abs(LIDAR[-tr,"z"]-mba.pts[,"z"]))/nrow(mba.pts)) } ## Not run: ##rgl or scatterplot3d libraries can be fun library(rgl) ##exaggerate z a bit for effect and take a smaller subset of LIDAR LIDAR[,"z"] <- 10*LIDAR[,"z"] tr <- sample(1:nrow(LIDAR),trunc(0.99*nrow(LIDAR))) ##get the "true" surface mba.int <- mba.surf(LIDAR[tr,], 100, 100, extend=TRUE)\$xyz.est open3d() surface3d(mba.int\$x, mba.int\$y, mba.int\$z) ##now the point estimates mba.pts <- mba.points(LIDAR[tr,], LIDAR[-tr,c("x","y")])\$xyz.est spheres3d(mba.pts[,"x"], mba.pts[,"y"], mba.pts[,"z"], radius=5, color="red") ## End(Not run) ```