R: Pointwise Bivariate Interpolation for Irregular Data

interpp {akima} | R Documentation

## Pointwise Bivariate Interpolation for Irregular Data

### Description

These functions implement bivariate interpolation onto a set of points for irregularly spaced input data. These functions are only for backward compatibility, use `interpp` instead.

If `linear` is \codeTRUE, linear interpolation is used in the triangles bounded by data points, otherwise cubic interpolation is done.

If `extrap` is `FALSE`, z-values for points outside the convex hull are returned as `NA`. No extrapolation can be performed for linear interpolation.

The `interpp` function handles duplicate `(x,y)` points in different ways. As default it will stop with an error message. But it can give duplicate points an unique `z` value according to the parameter `duplicate` (`mean`,`median` or any other user defined function).

The triangulation scheme used by `interp` works well if `x` and `y` have similar scales but will appear stretched if they have very different scales. The spreads of `x` and `y` must be within four orders of magnitude of each other for `interpp` to work.

### Usage

    interpp(x, y=NULL, z, xo, yo=NULL, linear=TRUE, extrap=FALSE,
            duplicate = "error", dupfun = NULL,
            jitter = 10^-12, jitter.iter = 6, jitter.random = FALSE)

### Arguments

`x` | vector of x-coordinates of data points or a `SpatialPointsDataFrame` object. Missing values are not accepted.
`y` | vector of y-coordinates of data points. Missing values are not accepted. If left as NULL indicates that `x` should be a `SpatialPointsDataFrame` and `z` names the variable of interest in this dataframe.
`z` | vector of z-coordinates of data points or a character variable naming the variable of interest in the `SpatialPointsDataFrame` `x`. Missing values are not accepted. `x`, `y`, and `z` must be the same length (execpt if `x` is a `SpatialPointsDataFrame`) and may contain no fewer than four points. The points of `x` and `y` cannot be collinear, i.e, they cannot fall on the same line (two vectors `x` and `y` such that `y = ax + b` for some `a`, `b` will not be accepted).
`xo` | vector of x-coordinates of points at which to evaluate the interpolating function. If `x` is a `SpatialPointsDataFrame` this has also to be a `SpatialPointsDataFrame`.
`yo` | vector of y-coordinates of points at which to evaluate the interpolating function. If operating on `SpatialPointsDataFrame`s this is left as `NULL`
`linear` | logical – indicating wether linear or spline interpolation should be used.
`extrap` | logical flag: should extrapolation be used outside of the convex hull determined by the data points? Not possible for linear interpolation.
`duplicate` | indicates how to handle duplicate data points. Possible values are `"error"` - produces an error message, `"strip"` - remove duplicate z values, `"mean"`,`"median"`,`"user"` - calculate mean , median or user defined function of duplicate z values.
`dupfun` | this function is applied to duplicate points if `duplicate="user"`
`jitter` | Jitter of amount of `diff(range(XX))*jitter` (XX=x or y) will be added to coordinates if collinear points are detected. Afterwards interpolation will be tried once again. Note that the jitter is not generated randomly unless `jitter.random` is set to `TRUE`. This ensures reproducable result. `tri.mesh` of package `tripack` uses the same jitter mechanism. That means you can plot the triangulation on top of the interpolation and see the same triangulation as used for interpolation, see examples below.
`jitter.iter` | number of iterations to retry with jitter, amount will be increased in each iteration by `iter^1.5`
`jitter.random` | logical, see `jitter`, defaults to `FALSE`

### Value

list with 3 components:

`x` | vector of x-coordinates of output points, the same as the input argument `xo`.
`y` | vector of y-coordinates of output points, the same as the input argument `yo`.
`z` | fitted z-values. The value `z[i]` is computed at the x,y point `x[i], y[i]`.

If input is `SpatialPointsDataFrame` than an according `SpatialPointsDataFrame` is returned.

### NOTE

Use `interp` if interpolation on a regular grid is wanted.

See `interp` for more details.

### References

Akima, H. (1978). A Method of Bivariate Interpolation and Smooth Surface Fitting for Irregularly Distributed Data Points. ACM Transactions on Mathematical Software, 4, 148-164.

Akima, H. (1996). Algorithm 761: scattered-data surface fitting that has the accuracy of a cubic polynomial. ACM Transactions on Mathematical Software, 22, 362-371.

R. J. Renka (1996). Algorithm 751: TRIPACK: a constrained two-dimensional Delaunay triangulation package. ACM Transactions on Mathematical Software. 22, 1-8.

### See Also

`contour`, `image`, `approxfun`, `splinefun`, `outer`, `expand.grid`, `interp`, `aspline`.

### Examples

    data(akima)
    # linear interpolation at points (1,2), (5,6) and (10,12)
    akima.lip<-interpp(akima$x, akima$y, akima$z,c(1,5,10),c(2,6,12))
    akima.lip$z
    # spline interpolation
    akima.sip<-interpp(akima$x, akima$y, akima$z,c(1,5,10),c(2,6,12),
      linear=FALSE)
    akima.sip$z
    ## Not run:
        ## interaction with sp objects:
        library(sp)
        ## take 30 sample points out of meuse grid:
        data(meuse.grid)
        m0 <- meuse.grid[sample(1:3103,30),]
        coordinates(m0) <- ~x+y
        ## interpolate on this 30 points:
        ## note: both "meuse" and "m0" are sp objects
        ## (SpatialPointsDataFrame) !!
        ## arguments z and xo have to named, y has to be omitted!
        ipp <- interpp(meuse,z="zinc",xo=m0)
        spplot(ipp)

    ## End(Not run)

[Package akima version 0.6-2 Index]