Variography
Before using BMEmapping
, the user must fit a variogram
model to the spatial data. This step involves specifying the type of
variogram and its associated parameters:
model
: The variogram model type. Supported options
are “exp” (Exponential), “sph” (Spherical), and “gau” (Gaussian). The
appropriate model should be selected based on the spatial structure of
the data.
nugget
: The nugget effect of the variogram,
representing measurement error or microscale variation.
sill
: The sill of the variogram, indicating the
plateau value of the semivariance.
range
: The range (or effective range) of the
variogram, representing the distance beyond which spatial correlation
becomes negligible.
A recommended tool for variogram modeling is the
gstat package, which provides a robust suite of
functions for fitting and analyzing variograms.
BME Prediction
Using the utsnowload
dataset, you can prepare the
necessary input variables as shown below. In this example, we designate
the last 5 soft data locations (locations 228 to 232)
as the prediction locations.
# prediction location
x <- utsnowload[228:232, c("latitude", "longitude")]
x
#> latitude longitude
#> 228 40.3000 -111.2550
#> 229 40.4447 -111.7075
#> 230 40.7908 -111.4078
#> 231 37.7064 -112.1456
#> 232 40.9139 -111.3983
The hard and soft-interval data are assigned as
# hard data locations
ch <- utsnowload[1:67, c("latitude", "longitude")]
# soft data locations
cs <- utsnowload[68:227, c("latitude", "longitude")]
# hard data values
zh <- utsnowload[1:67, c("hard")]
# lower bounds
a <- utsnowload[68:227, c("lower")]
# upper bounds
b <- utsnowload[68:227, c("upper")]
The variogram model and parameters are given as:
# variogram model and parameters
model <- "exp"
nugget <- 0.0953
sill <- 0.3639
range <- 1.0787
The prob_zk
function accepts all the data and variogram
input arguments explained above. The numerical estimation of the
posterior density for prediction location is computed as
prob_zk(x[1,], ch, cs, zh, a, b, model, nugget, sill, range, plot = TRUE)

#> zk_i prob_zk_i
#> 1 -4.25954062 0.00000
#> 2 -4.12336359 0.00000
#> 3 -3.98718656 0.00000
#> 4 -3.85100953 0.00000
#> 5 -3.71483251 0.00000
#> 6 -3.57865548 0.00000
#> 7 -3.44247845 0.00000
#> 8 -3.30630142 0.00000
#> 9 -3.17012440 0.00000
#> 10 -3.03394737 0.00000
#> 11 -2.89777034 0.00000
#> 12 -2.76159331 0.00000
#> 13 -2.62541629 0.00000
#> 14 -2.48923926 0.00001
#> 15 -2.35306223 0.00004
#> 16 -2.21688520 0.00012
#> 17 -2.08070818 0.00035
#> 18 -1.94453115 0.00095
#> 19 -1.80835412 0.00238
#> 20 -1.67217709 0.00560
#> 21 -1.53600007 0.01230
#> 22 -1.39982304 0.02523
#> 23 -1.26364601 0.04831
#> 24 -1.12746898 0.08637
#> 25 -0.99129196 0.14421
#> 26 -0.85511493 0.22485
#> 27 -0.71893790 0.32736
#> 28 -0.58276087 0.44507
#> 29 -0.44658385 0.56505
#> 30 -0.31040682 0.66989
#> 31 -0.17422979 0.74160
#> 32 -0.03805276 0.76665
#> 33 0.09812426 0.74009
#> 34 0.23430129 0.66716
#> 35 0.37047832 0.56160
#> 36 0.50665535 0.44146
#> 37 0.64283237 0.32405
#> 38 0.77900940 0.22212
#> 39 0.91518643 0.14217
#> 40 1.05136346 0.08498
#> 41 1.18754048 0.04743
#> 42 1.32371751 0.02472
#> 43 1.45989454 0.01203
#> 44 1.59607157 0.00547
#> 45 1.73224859 0.00232
#> 46 1.86842562 0.00092
#> 47 2.00460265 0.00034
#> 48 2.14077968 0.00012
#> 49 2.27695670 0.00004
#> 50 2.41313373 0.00001
The plot of the posterior density becomes smoother as the value of
n
increases.
The bme_predict
function accepts the same arguments as
the prob_zk
function, with the addition of a
type
argument, which specifies the preferred type of
prediction (either the posterior mean or mode). Using the data provided,
we can predict the mode and mean of the posterior density at the
prediction location location by:
# posterior mode
bme_predict(x, ch, cs, zh, a, b, model, nugget, sill, range, type = "mode")
#> latitude longitude mode
#> 228 40.3000 -111.2550 -0.0381
#> 229 40.4447 -111.7075 0.0981
#> 230 40.7908 -111.4078 -0.1742
#> 231 37.7064 -112.1456 -0.4466
#> 232 40.9139 -111.3983 -0.1742
# posterior mean
bme_predict(x, ch, cs, zh, a, b, model, nugget, sill, range, type = "mean")
#> latitude longitude mean variance
#> 228 40.3000 -111.2550 -0.0401 0.2708
#> 229 40.4447 -111.7075 0.0761 0.2319
#> 230 40.7908 -111.4078 -0.1384 0.2941
#> 231 37.7064 -112.1456 -0.4400 0.2859
#> 232 40.9139 -111.3983 -0.1744 0.2968
Leave-One-Out Cross-Validation (LOOCV) for Model Evaluation
LOOCV is used to assess prediction accuracy by successively removing
one hard data point at a time—where true values are known—and predicting
its value using the remaining hard data and all of the soft-interval
data. A variogram model is fitted to the reduced dataset, and the
predicted value at the excluded location is compared to its observed
value. Soft data locations are excluded from the validation set, as
their true values are unobservable.
The bme_cv
function performs LOOCV for at hard data
locations and returns key performance metrics, including mean
error (ME), mean absolute error (MAE), and
root mean squared error (RMSE) of the prediction
residuals. These statistics offer insight into the model’s bias, average
prediction accuracy, and the variability of prediction errors,
respectively.
Functionally, bme_cv
accepts similar arguments as the
bme_predict
function. Given the necessary data inputs and
variogram parameters, LOOCV can be applied to evaluate the posterior
mean predictions as follows:
bme_cv(ch, cs, zh, a, b, model, nugget, sill, range, type = "mean")
#> $results
#> latitude longitude observed mean variance residual fold
#> 1 40.44 -112.24 0.09696012 -0.2065 0.3598 0.3035 1
#> 2 39.94 -112.41 0.12258678 -0.3423 0.3427 0.4649 2
#> 3 37.51 -113.40 -0.02302358 -0.0726 0.3514 0.0496 3
#> 4 37.49 -113.85 0.50354362 -0.1631 0.3900 0.6666 4
#> 5 39.31 -109.53 -0.68611327 -0.2303 0.4444 -0.4558 5
#> 6 40.72 -109.54 -0.53000397 -0.7366 0.3024 0.2066 6
#> 7 40.61 -109.89 -0.71923519 -0.8916 0.3152 0.1724 7
#> 8 40.91 -109.96 -1.31503404 -1.0151 0.2933 -0.2999 8
#> 9 40.74 -109.67 -0.94879597 -0.7044 0.2795 -0.2444 9
#> 10 40.92 -110.19 -1.39798035 -1.0139 0.3175 -0.3841 10
#> 11 40.95 -110.48 -1.21900906 -0.9611 0.2218 -0.2579 11
#> 12 40.60 -110.43 -1.24787225 -0.8706 0.2713 -0.3773 12
#> 13 40.55 -110.69 -0.55027484 -0.6954 0.2599 0.1451 13
#> 14 40.91 -110.50 -1.06708711 -1.0866 0.2119 0.0195 14
#> 15 40.72 -110.47 -1.14044998 -0.9950 0.2578 -0.1454 15
#> 16 40.58 -110.59 -0.94551554 -0.8009 0.2416 -0.1446 16
#> 17 40.86 -110.80 -0.83840015 -0.5465 0.2681 -0.2919 17
#> 18 40.77 -110.01 -1.24671792 -1.0531 0.2734 -0.1936 18
#> 19 40.80 -110.88 -0.65036211 -0.4763 0.2321 -0.1741 19
#> 20 40.68 -110.95 -0.37127802 -0.4399 0.2586 0.0686 20
#> 21 39.89 -110.75 -0.80367306 -0.3605 0.3668 -0.4432 21
#> 22 39.96 -110.99 -0.54230365 -0.2677 0.2912 -0.2746 22
#> 23 41.38 -111.94 0.94099563 0.7969 0.1807 0.1441 23
#> 24 41.31 -111.45 0.24796667 0.0273 0.2867 0.2207 24
#> 25 41.41 -111.83 0.47642403 0.6856 0.2460 -0.2092 25
#> 26 41.38 -111.92 1.25233814 0.6507 0.1735 0.6016 26
#> 27 41.90 -111.63 0.61655171 0.0339 0.3443 0.5827 27
#> 28 41.68 -111.42 0.18443361 -0.0173 0.3117 0.2017 28
#> 29 41.41 -111.54 0.11223798 0.2098 0.2246 -0.0976 29
#> 30 41.47 -111.50 0.10561343 0.1328 0.2329 -0.0272 30
#> 31 40.85 -111.05 -0.10690304 -0.3160 0.1908 0.2091 31
#> 32 40.89 -111.07 -0.29946212 -0.2456 0.2007 -0.0539 32
#> 33 40.16 -111.21 0.00344554 -0.1387 0.3134 0.1421 33
#> 34 40.99 -111.82 0.78786432 0.0856 0.2765 0.7023 34
#> 35 40.43 -111.62 0.39822325 0.0749 0.2780 0.3233 35
#> 36 40.36 -111.09 -0.24414027 -0.2252 0.3183 -0.0189 36
#> 37 40.61 -111.10 -0.52669066 -0.2218 0.2720 -0.3049 37
#> 38 40.76 -111.63 0.14568497 0.2201 0.2832 -0.0744 38
#> 39 40.79 -111.12 -0.10923301 -0.3191 0.2304 0.2099 39
#> 40 39.68 -111.32 -0.08382941 -0.2960 0.2652 0.2122 40
#> 41 39.31 -111.43 -0.78984433 -0.4473 0.2903 -0.3425 41
#> 42 39.14 -111.56 -0.38648680 -0.6416 0.2396 0.2551 42
#> 43 39.05 -111.47 -0.57739062 -0.5946 0.2228 0.0172 43
#> 44 39.87 -111.28 -0.22947205 -0.0731 0.1994 -0.1564 44
#> 45 39.89 -111.25 -0.03805984 -0.1976 0.2003 0.1595 45
#> 46 39.45 -111.27 -0.42606551 -0.4756 0.3043 0.0495 46
#> 47 39.13 -111.44 -0.52777166 -0.5962 0.2269 0.0684 47
#> 48 39.01 -111.58 -0.81486819 -0.4973 0.2491 -0.3176 48
#> 49 39.93 -111.63 0.06849776 -0.0867 0.2983 0.1552 49
#> 50 38.77 -111.68 -0.68746363 -0.6272 0.1908 -0.0603 50
#> 51 38.68 -111.60 -1.04793061 -0.6279 0.2834 -0.4200 51
#> 52 38.21 -111.48 -1.40848147 -0.6012 0.3933 -0.8073 52
#> 53 38.80 -111.68 -0.43759896 -0.7310 0.1964 0.2934 53
#> 54 37.84 -111.88 -0.73581358 -0.4816 0.4018 -0.2542 54
#> 55 38.51 -112.02 -0.90807705 -0.7382 0.3365 -0.1699 55
#> 56 38.48 -112.39 -0.67118202 -0.6298 0.2905 -0.0414 56
#> 57 38.30 -112.36 -0.76527983 -0.5643 0.2435 -0.2010 57
#> 58 38.30 -112.44 -0.51835705 -0.5553 0.2232 0.0369 58
#> 59 38.88 -112.25 -0.24704072 -0.4462 0.3438 0.1992 59
#> 60 37.58 -112.90 -0.42302609 -0.3781 0.2050 -0.0449 60
#> 61 37.49 -112.58 0.00732065 -0.1742 0.2318 0.1815 61
#> 62 37.49 -112.51 0.02427501 -0.1263 0.2205 0.1506 62
#> 63 37.66 -112.74 -0.76376457 -0.3345 0.2746 -0.4293 63
#> 64 37.57 -112.84 -0.28791382 -0.4501 0.2057 0.1622 64
#> 65 37.53 -113.05 -0.07280592 -0.3232 0.2927 0.2504 65
#> 66 38.48 -109.27 -0.90950964 -0.3653 0.3869 -0.5442 66
#> 67 37.81 -109.49 -0.39635792 -0.3522 0.3680 -0.0442 67
#>
#> $metrics
#> ME MAE RMSE
#> 1 -0.0102 0.2378 0.2953