Fits a mass preserving spline

Description

Fits a mass preserving spline to a soil profile data.

Usage

1
2
3
4
## S4 method for signature 'SoilProfileCollection'
mpspline(obj, var.name, 
        lam = 0.1, d = t(c(0,5,15,30,60,100,200)), vlow = 0, 
        vhigh = 1000, show.progress=TRUE)

Arguments

obj

object of class "SoilProfileCollection"

var.name

character; target variable name (must be a numeric variable)

lam

numeric; lambda the smoothing parameter

d

numeric; standard depths

vlow

numeric; smallest value of the target variable (smaller values will be replaced)

vhigh

numeric; highest value of the target variable (larger values will be replaced)

show.progress

logical; specifies whether to display the progress bar

Value

Returns a list with four elements:

idcol

site ID column

var.fitted

matrix; are are spline-estimated values of the target variable at observed depths (upper and lower depths are indicated as attributes)

var.std

matrix; are spline-estimated values of the target variable at standard depths

var.1cm

matrix; are spline-estimated values of the target variable using the 1 cm increments

Note

Target variable needs to be a numeric vector measured at least 2 horizons for the spline to be fitted. Profiles with 1 horizon are accepted and processed as per output requirements, but no spline is fitted as such. Only positive numbers for upper and lower depths can be accepted. It is assumed that soil variables collected per horizon refer to block support i.e. they represent averaged values for the whole horizon. This operation can be time-consuming for large data sets.

Author(s)

Brendan Malone and Tomislav Hengl

References

See Also

stats::spline

Examples

 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
library(aqp)
library(plyr)
library(sp)
## sample profile from Nigeria:
lon = 3.90; lat = 7.50; id = "ISRIC:NG0017"; FAO1988 = "LXp" 
top = c(0, 18, 36, 65, 87, 127) 
bottom = c(18, 36, 65, 87, 127, 181)
ORCDRC = c(18.4, 4.4, 3.6, 3.6, 3.2, 1.2)
munsell = c("7.5YR3/2", "7.5YR4/4", "2.5YR5/6", "5YR5/8", "5YR5/4", "10YR7/3")
## prepare a SoilProfileCollection:
prof1 <- join(data.frame(id, top, bottom, ORCDRC, munsell), 
         data.frame(id, lon, lat, FAO1988), type='inner')
depths(prof1) <- id ~ top + bottom
site(prof1) <- ~ lon + lat + FAO1988 
coordinates(prof1) <- ~ lon + lat
proj4string(prof1) <- CRS("+proj=longlat +datum=WGS84")
## fit a spline:
ORCDRC.s <- mpspline(prof1, var.name="ORCDRC")
str(ORCDRC.s)

## Example with multiple soil profiles
## Make some fake, but reasonable profiles:
rand.prof <- ldply(1:20, random_profile, n=c(6, 7, 8), n_prop=1, method='LPP')
## promote to SPC and plot
depths(rand.prof ) <- id ~ top + bottom
plot(rand.prof, color='p1')
## fit MP spline by profile
try( m <- mpspline(rand.prof, 'p1') )

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.