fitsvar.sb.iso | R Documentation |
Fits a ‘nonparametric’ isotropic Shapiro-Botha variogram model by WLS through
quadratic programming.
Following Gorsich and Genton (2004), the nodes are selected as the scaled
roots of Bessel functions (see disc.sb
).
fitsvar.sb.iso(
esv,
dk = 4 * ncol(esv$data$x),
nx = NULL,
rmax = esv$grid$max,
min.contrib = 10,
method = c("cressie", "equal", "npairs", "linear"),
iter = 10,
tol = sqrt(.Machine$double.eps)
)
esv |
pilot semivariogram estimate, a |
dk |
dimension of the kappa function ( |
nx |
number of discretization nodes. Defaults to |
rmax |
maximum lag considered in the discretization (range of the fitted variogram on output). |
min.contrib |
minimum number of (equivalent) contributing pairs (pilot estimates with a lower number are ignored, with a warning). |
method |
string indicating the WLS fitting method to be used
(e.g. |
iter |
maximum number of interations of the WLS algorithm (used only
if |
tol |
absolute convergence tolerance (used only
if |
The fit is done using a (possibly iterated) weighted least squares criterion, minimizing:
WLS(\theta) = \sum_i w_i[(\hat{\gamma}(h_i)) - \gamma(\theta; h_i)]^2.
The different options for the argument method
define the WLS algorithm used:
"cressie"
The default method. The procedure is
iterative, with w_i = 1
(OLS) used for the first step
and with the weights recalculated at each iteration,
following Cressie (1985), until convergence:
w_i =
N(h_i)/\gamma(\hat{\theta}; h_i)^2,
where N(h_i)
is the (equivalent) number of contributing pairs in the
estimation at lag h_i
.
"equal"
Ordinary least squares: w_i = 1
.
"npairs"
w_i = N(h_i).
"linear"
w_i = N(h_i)/h_i^2
(default fitting method in gstat package).
Function solve.QP
of quadprog package is used
to solve a strictly convex quadratic program. To avoid problems, the Cholesky decomposition
of the matrix corresponding to the original problem is computed using chol
with pivot = TRUE
.
If this matrix is only positive semi-definite (non-strictly convex QP),
the number of discretization nodes will be less than nx
.
Returns the fitted variogram model, an object of class
fitsvar
.
A svarmod
object
with additional components esv
(pilot semivariogram estimate) and fit
containing:
u |
vector of lags/distances. |
sv |
vector of pilot semivariogram estimates. |
fitted.sv |
vector of fitted semivariances. |
w |
vector of (least squares) weights. |
wls |
value of the objective function. |
method |
string indicating the WLS fitting method used. |
iter |
number of WLS iterations (if |
Ball, J.S. (2000) Automatic computation of zeros of Bessel functions and other special functions. SIAM Journal on Scientific Computing, 21, 1458-1464.
Cressie, N. (1985) Fitting variogram models by weighted least squares. Mathematical Geology, 17, 563-586.
Cressie, N. (1993) Statistics for Spatial Data. New York. Wiley.
Fernandez Casal R., Gonzalez Manteiga W. and Febrero Bande M. (2003) Flexible Spatio-Temporal Stationary Variogram Models, Statistics and Computing, 13, 127-136.
Gorsich, D.J. and Genton, M.G. (2004) On the discretization of nonparametric covariogram estimators. Statistics and Computing, 14, 99-108.
Shapiro, A. and Botha, J.D. (1991) Variogram fitting with a general class of conditionally non-negative definite functions. Computational Statistics and Data Analysis, 11, 87-96.
svarmod.sb.iso
, disc.sb
, plot.fitsvar
.
# Trend estimation
lp <- locpol(aquifer[,1:2], aquifer$head, nbin = c(41,41),
h = diag(100, 2), hat.bin = TRUE)
# 'np.svariso.corr()' requires a 'lp$locpol$hat' component
# Variogram estimation
esvar <- np.svariso.corr(lp, maxlag = 150, nlags = 60, h = 60, plot = FALSE)
# Variogram fitting
svm2 <- fitsvar.sb.iso(esvar) # dk = 2
svm3 <- fitsvar.sb.iso(esvar, dk = 0) # To avoid negative covariances...
svm4 <- fitsvar.sb.iso(esvar, dk = 10) # To improve fit...
plot(svm4, main = "Nonparametric bias-corrected semivariogram and fitted models", legend = FALSE)
plot(svm3, add = TRUE)
plot(svm2, add = TRUE, lty = 3)
legend("bottomright", legend = c("NP estimates", "fitted model (dk = 10)", "dk = 0", "dk = 2"),
lty = c(NA, 1, 1, 3), pch = c(1, NA, NA, NA), lwd = c(1, 2, 1, 1))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.