| mpspline {GSIF} | R Documentation | 
Fits a mass preserving spline to a soil profile data.
## 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)
| obj | object of class  | 
| 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 | 
Returns a list with four elements:
idcolsite ID column
var.fittedmatrix; are are spline-estimated values of the target variable at observed depths (upper and lower depths are indicated as attributes)
var.stdmatrix; are spline-estimated values of the target variable at standard depths
var.1cmmatrix; are spline-estimated values of the target variable using the 1 cm increments
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.
Brendan Malone and Tomislav Hengl
Bishop, T.F.A., McBratney, A.B., Laslett, G.M., (1999) Modelling soil attribute depth functions with equal-area quadratic smoothing splines. Geoderma, 91(1-2): 27-45.
Malone, B.P., McBratney, A.B., Minasny, B., Laslett, G.M. (2009) Mapping continuous depth functions of soil carbon storage and available water capacity. Geoderma, 154(1-2): 138-152.
stats::spline 
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') )