<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "https://jats.nlm.nih.gov/nlm-dtd/publishing/3.0/journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="research-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">GMD</journal-id><journal-title-group>
    <journal-title>Geoscientific Model Development</journal-title>
    <abbrev-journal-title abbrev-type="publisher">GMD</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Geosci. Model Dev.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">1991-9603</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/gmd-19-4633-2026</article-id><title-group><article-title>Spatialize v1.0: a Python/C<inline-formula><mml:math id="M1" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula> library  for ensemble spatial interpolation</article-title><alt-title>Spatialize: a library for ensemble spatial interpolation</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes" rid="aff1 aff2">
          <name><surname>Navarro</surname><given-names>Felipe</given-names></name>
          <email>felipe.navarro@amtc.cl</email>
        <ext-link>https://orcid.org/0000-0002-6951-3504</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Egaña</surname><given-names>Alvaro F.</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-8720-4783</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Ehrenfeld</surname><given-names>Alejandro</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Garrido</surname><given-names>Felipe</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Valenzuela</surname><given-names>María Jesús</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Sánchez-Pérez</surname><given-names>Juan F.</given-names></name>
          
        </contrib>
        <aff id="aff1"><label>1</label><institution>Advanced Mining Technology Center (AMTC), Universidad de Chile, Avenida Tupper 2007, RM, Santiago, Chile</institution>
        </aff>
        <aff id="aff2"><label>2</label><institution>Advanced Laboratory for Geostatistical Supercomputing (ALGES), Department of Mining Engineering – AMTC,  Faculty of Mathematical and Physical Sciences, Universidad de Chile, Avenida Tupper 2069, RM, Santiago, Chile</institution>
        </aff>
        <aff id="aff3"><label>3</label><institution>Department of Applied Physics and Naval Technology, Universidad Politécnica de Cartagena (UPCT), Cartagena, Spain</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Felipe Navarro (felipe.navarro@amtc.cl)</corresp></author-notes><pub-date><day>1</day><month>June</month><year>2026</year></pub-date>
      
      <volume>19</volume>
      <issue>10</issue>
      <fpage>4633</fpage><lpage>4660</lpage>
      <history>
        <date date-type="received"><day>8</day><month>July</month><year>2025</year></date>
           <date date-type="rev-request"><day>29</day><month>August</month><year>2025</year></date>
           <date date-type="rev-recd"><day>12</day><month>April</month><year>2026</year></date>
           <date date-type="accepted"><day>29</day><month>April</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 Felipe Navarro et al.</copyright-statement>
        <copyright-year>2026</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026.html">This article is available from https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026.html</self-uri><self-uri xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026.pdf">The full text article is available as a PDF file from https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e154">In this paper, we present Spatialize, an open-source library that implements <italic>ensemble spatial interpolation</italic>, a novel method that combines the simplicity of basic interpolation methods with the power of classical geostatistical tools, like Kriging. It leverages the richness of stochastic modelling and ensemble learning, making it robust, scalable and suitable for large datasets. In addition, Spatialize provides a powerful framework for uncertainty quantification, offering both point estimates and empirical posterior distributions. It is implemented in Python 3.x, with a C<inline-formula><mml:math id="M2" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula> core for improved performance, and is designed to be easy to use, requiring minimal user intervention. This library aims to bridge the gap between expert and non-expert users of geostatistics by providing automated tools that rival traditional geostatistical methods. Here, we present a detailed description of Spatialize along with a wealth of examples of its use.</p>
  </abstract>
    
<funding-group>
<award-group id="gs1">
<funding-source>Agencia Nacional de Investigación y Desarrollo</funding-source>
<award-id>AFB230001</award-id>
<award-id>IT23I013</award-id>
<award-id>TA24I10053</award-id>
<award-id>CIA250010</award-id>
</award-group>
</funding-group>
</article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d2e179">A significant challenge in the field of geosciences is the issue of sparsity that is often observed in spatial databases, such as soil properties, climate data, or mineral concentrations, which are characterised at limited point locations <xref ref-type="bibr" rid="bib1.bibx25" id="paren.1"/>. The presence of these data gaps hinders a comprehensive understanding of the variable's domain. The central issue, therefore, is estimating values at unmeasured locations. Various spatial interpolation algorithms have been developed for this purpose.</p>
      <p id="d2e185">Geostatistics is a field focused on the analysis, estimation, and modelling of spatial variables. Unlike traditional statistics, geostatistics emphasises the spatial dependencies between observations <xref ref-type="bibr" rid="bib1.bibx29" id="paren.2"/>. The Kriging technique, the most relevant exponent of geostatistical interpolation <xref ref-type="bibr" rid="bib1.bibx30 bib1.bibx21" id="paren.3"/>, was initially devised for the estimation of gold reserves <xref ref-type="bibr" rid="bib1.bibx22 bib1.bibx44" id="paren.4"/>. As an unbiased linear estimator that minimises estimation error at each position, Kriging is commonly referred to as BLUE (Best Linear Unbiased Estimator) <xref ref-type="bibr" rid="bib1.bibx30 bib1.bibx12 bib1.bibx43 bib1.bibx2" id="paren.5"/>. Beyond providing robust estimates, Kriging also facilitates the calculation of estimation variance, which is widely used for assessing spatial prediction uncertainty <xref ref-type="bibr" rid="bib1.bibx2 bib1.bibx43" id="paren.6"/>. A variety of user-friendly tools are available for the implementation of Kriging, including <ext-link xlink:href="https://pykrige.readthedocs.io/en/latest/">PyKrige</ext-link> (last access: 28 May 2026), <ext-link xlink:href="https://pysal.org/">PySAL</ext-link> (last access: 28 May 2026), <ext-link xlink:href="https://cran.r-project.org/web/packages/gstat/gstat.pdf">gstat</ext-link> (last access: 28 May 2026), <ext-link xlink:href="https://cran.r-project.org/web/packages/automap/automap.pdf">automap</ext-link> (last access: 28 May 2026), <ext-link xlink:href="https://cran.r-project.org/web/packages/geoR/geoR.pdf">geoR</ext-link> (last access: 28 May 2026), and <ext-link xlink:href="https://cran.r-project.org/web/packages/fields/fields.pdf">fields</ext-link> (last access: 28 May 2026). Nevertheless, it should be noted that the use of Kriging without actual knowledge of the model may result in suboptimal and misleading outcomes <xref ref-type="bibr" rid="bib1.bibx36 bib1.bibx3" id="paren.7"/>. In particular, parameter selection and spatial continuity modelling have a significant effect on the accuracy of Kriging estimates <xref ref-type="bibr" rid="bib1.bibx2 bib1.bibx6 bib1.bibx37" id="paren.8"/>. However, the correct determination of these inputs requires substantial expertise and data <xref ref-type="bibr" rid="bib1.bibx12 bib1.bibx46 bib1.bibx37 bib1.bibx9" id="paren.9"/>, which creates a significant barrier for most potential users. Moreover, the task becomes increasingly complex when the variables under study are of a dynamic, spatio-temporal nature <xref ref-type="bibr" rid="bib1.bibx41 bib1.bibx4" id="paren.10"/>, or are not structurable as a regular grid <xref ref-type="bibr" rid="bib1.bibx36" id="paren.11"/>.</p>
      <p id="d2e239">In summary, spatial interpolation tasks, when assessed from the perspective of classical geostatistical analysis, can be time-consuming and require considerable expertise. Consequently, there is a need for more straightforward yet effective spatial interpolation methods that can address highly dynamic spatial problems without necessitating manual spatial analysis tasks.</p>
      <p id="d2e242">In contrast to geostatistical approaches, deterministic models employ straightforward calculations; nevertheless, they are only capable of producing estimations <xref ref-type="bibr" rid="bib1.bibx25" id="paren.12"/>, and thus do not offer uncertainty quantifications.  The most widely applied of these methods is inverse distance weighting (IDW), a simple yet powerful spatial interpolation method that uses a weighted average of surrounding point values to estimate the unknown value at an unsampled location <xref ref-type="bibr" rid="bib1.bibx33" id="paren.13"/>.  In recent years, variants of IDW have been successfully used in a variety of applications, including estimation of air pollution levels <xref ref-type="bibr" rid="bib1.bibx27" id="paren.14"/>, soil moisture <xref ref-type="bibr" rid="bib1.bibx1" id="paren.15"/> and water quality <xref ref-type="bibr" rid="bib1.bibx20" id="paren.16"/>. The main limitation of IDW is that it does not take into account the spatial structure or correlation of the variable being interpolated. This can lead to over-smoothing or under-smoothing of the estimated values, depending on the degree of spatial correlation in the data <xref ref-type="bibr" rid="bib1.bibx28" id="paren.17"/>.</p>
      <p id="d2e265">Another promising approach for spatial interpolation is the use of machine learning-based methods, which can learn complex spatial relationships from large datasets without requiring manual spatial modelling <xref ref-type="bibr" rid="bib1.bibx26 bib1.bibx21" id="paren.18"/>. For example, <xref ref-type="bibr" rid="bib1.bibx24" id="text.19"/> and <xref ref-type="bibr" rid="bib1.bibx45" id="text.20"/> proposed deep learning-based spatial interpolation methods to estimate solar radiation and interpolate seismic data, respectively. Nevertheless, challenges that arise from deep learning models are, firstly, the need for large amounts of data and computational resources to train them, and secondly, the necessity to measure additional variables other than the one under study. This is especially true for complex spatial-temporal problems, where the number of input variables and temporal observations can be substantial <xref ref-type="bibr" rid="bib1.bibx14" id="paren.21"/>.  A further challenge in using deep learning for spatial interpolation is the difficulty of interpreting the results. These models are often referred to as “black boxes”, meaning that the process by which predictions are derived remains uncertain. This can be problematic in situations where transparency and interpretability are important, such as in environmental applications <xref ref-type="bibr" rid="bib1.bibx38 bib1.bibx32 bib1.bibx42" id="paren.22"/>.</p>
      <p id="d2e283">In addressing the need for a simple and flexible spatial interpolation technique, able to adapt to highly dynamic phenomena, scalable to big data, interpretable, and most importantly widely accessible to the entire geoscientific community, <xref ref-type="bibr" rid="bib1.bibx31" id="text.23"/> and <xref ref-type="bibr" rid="bib1.bibx11" id="text.24"/> independently proposed a new state-of-the-art spatial interpolation method based on ensemble learning. This method combines the simplicity of methods such as IDW with the power of Kriging spatial analysis, which the authors of the latter named Ensemble Spatial Interpolation (ESI).  This model is able to provide reliable estimates that are comparable to those of Kriging, while eliminating the need for manual spatial continuity modelling.  Its main features are: (a) it is based on a stochastic space partitioning process, which aids in managing large datasets; (b) it is built under an ensemble scheme, which guarantees robustness despite the use of weak local interpolation functions with small subsets of data, and (c) it provides a powerful framework for uncertainty quantification, as it is based on a Bayesian scheme, thus yielding an empirical posterior distribution of the estimate (instead of a single point estimate).</p>
      <p id="d2e292">The aim of this article is to present <monospace>spatialize</monospace>, a novel software library that facilitates an efficient implementation of ESI. <monospace>Spatialize</monospace> has been designed to be easy to use, efficient and flexible. The core of the library is implemented in C<inline-formula><mml:math id="M3" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula> with a Python 3.x programming API. It is available as an open-source project, making it accessible to researchers and practitioners in industry and academia.  The subsequent sections provide a comprehensive overview of the ESI model and the <monospace>Spatialize</monospace> library, including its features and capabilities. We also present several examples of how the library can be used in practical applications. Finally, the future directions of the library and its potential impact on spatial interpolation research and practice will be discussed.</p>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Ensemble spatial interpolation</title>
      <p id="d2e322">Ensemble learning is usually regarded as the statistical and computational conception of the “wisdom of the crowd”, whose idea is to collect and combine the points of view of many experts to produce an ensemble result <xref ref-type="bibr" rid="bib1.bibx11" id="paren.25"/>. An ensemble model <inline-formula><mml:math id="M4" display="inline"><mml:mover accent="true"><mml:mi>z</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover></mml:math></inline-formula> can be formulated as:

          <disp-formula id="Ch1.E1" content-type="numbered"><label>1</label><mml:math id="M5" display="block"><mml:mrow><mml:mover accent="true"><mml:mi>z</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mi>G</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></disp-formula>

        where <inline-formula><mml:math id="M6" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> is a vector  of covariances and <inline-formula><mml:math id="M7" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> is a set of weak voter (regression, classification, interpolation, etc.) functions. Function <inline-formula><mml:math id="M8" display="inline"><mml:mi>G</mml:mi></mml:math></inline-formula> is an aggregation function that combines the responses from each voter function and it can be as simple as majority voting for classification <xref ref-type="bibr" rid="bib1.bibx13 bib1.bibx8 bib1.bibx10 bib1.bibx16 bib1.bibx39" id="paren.26"/>, averaging for regression, or more sophisticated approaches such as a mixture of experts (MoE) <xref ref-type="bibr" rid="bib1.bibx18 bib1.bibx17 bib1.bibx19 bib1.bibx7" id="paren.27"/>.</p>

      <fig id="F1" specific-use="star"><label>Figure 1</label><caption><p id="d2e445">Generative process to draw a time-dependent stochastic partition set of size <inline-formula><mml:math id="M9" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula>. Time goes along the <inline-formula><mml:math id="M10" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>-axis, ending at time given by <inline-formula><mml:math id="M11" display="inline"><mml:mrow><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, where <inline-formula><mml:math id="M12" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> controls the average depth for the trees in the forest. Red lines indicate the current time partition cut. <italic>Note:</italic> Reprinted from “Ensemble Spatial Interpolation: A New Approach to Natural or Anthropogenic Variable Assessment”, by <xref ref-type="bibr" rid="bib1.bibx11" id="text.28"/>, Natural Resources Research, 30, 3777–3793.</p></caption>
        <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f01.png"/>

      </fig>


<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>Weak voter function set generation</title>
      <p id="d2e506">In the ESI model, the construction of the set of weak voter functions is achieved through the concept of “bootstrapping the space” <xref ref-type="bibr" rid="bib1.bibx11" id="paren.29"/>, which involves generating different spatial configurations through random partitioning of the space where the data are located. These partitions are generated in a way that any combination of data is possible, while preserving their spatial locations and avoiding data clustering (Fig. <xref ref-type="fig" rid="F1"/>).  Each partition creates unique data subsets within the partition cells, where any spatial interpolation method can be applied. An unmeasured location is then estimated by combining (aggregating) the estimates derived from all the partition elements across the set of partitions where that location falls <xref ref-type="bibr" rid="bib1.bibx11" id="paren.30"/>.</p>
      <p id="d2e517">It is well known that a spatial partition data structure can be represented as a tree <xref ref-type="bibr" rid="bib1.bibx40" id="paren.31"/>, where nodes represent partition spaces and edges indicate containment relationships. This representation enables efficient spatial data querying and operations on the data contained in the spaces, similar to how certain related hierarchical data structures, such as k-d trees and octrees, are used in spatial indexing. Thus, in practice, generating a set of random partitions is equivalent to generating a forest of random tree structures, analogous to how multiple decision trees form a random forest.</p>
      <p id="d2e523">The <monospace>spatialize</monospace> library uses two methodologies to generate these partitions of space:</p>
      <p id="d2e529"><italic>(a) Mondrian Forests (MF):</italic> As proposed by <xref ref-type="bibr" rid="bib1.bibx11" id="text.32"/> and introduced by <xref ref-type="bibr" rid="bib1.bibx23" id="text.33"/>. The latter is a non-parametric Bayesian strategy that is employed for both classification and online regression, which has been demonstrated to be as efficacious as other high-level ensemble learning methods, such as random forests <xref ref-type="bibr" rid="bib1.bibx5" id="paren.34"/> or additive trees <xref ref-type="bibr" rid="bib1.bibx15" id="paren.35"/>.</p>
      <p id="d2e547">In the context of ESI, MF is a collection of random tree structures defined as:

            <disp-formula id="Ch1.E2" content-type="numbered"><label>2</label><mml:math id="M13" display="block"><mml:mrow><mml:mtext>MF</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo><mml:mo>,</mml:mo><mml:mtext>   </mml:mtext><mml:msub><mml:mi>T</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>∼</mml:mo><mml:mtext>MT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M14" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> is the number of random tree structures in the forest and <inline-formula><mml:math id="M15" display="inline"><mml:mrow><mml:mtext>MT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is the generative process, described in Algorithm 1, which produces random samples of tree structures. The latter represents random space partitions of the target domain <inline-formula><mml:math id="M16" display="inline"><mml:mi mathvariant="normal">Θ</mml:mi></mml:math></inline-formula> that are assumed to be <inline-formula><mml:math id="M17" display="inline"><mml:mrow><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>=</mml:mo><mml:mo>[</mml:mo><mml:msub><mml:mi>a</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>b</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>]</mml:mo><mml:mo>×</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>×</mml:mo><mml:mo>[</mml:mo><mml:msub><mml:mi>a</mml:mi><mml:mi>d</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>b</mml:mi><mml:mi>d</mml:mi></mml:msub><mml:mo>]</mml:mo><mml:mo>⊂</mml:mo><mml:msup><mml:mi mathvariant="double-struck">R</mml:mi><mml:mi>d</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>.</p><boxed-text content-type="algorithm" position="float" id="Ch1.Prog1"><label>Algorithm 1</label><caption><p id="d2e708"><inline-formula><mml:math id="M18" display="inline"><mml:mrow><mml:mtext>MT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> Sampling Algorithm</p></caption><disp-quote content-type="algorithmic" specific-use="numbering{1}"><list>

    <list-item>

      <p id="d2e732" specific-use="STATE"><bold>procedure</bold> Main()</p>
            </list-item>

    <list-item>

      <p id="d2e740" specific-use="STATE">SampleMT(<inline-formula><mml:math id="M19" display="inline"><mml:mrow><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi></mml:mrow></mml:math></inline-formula>)  {<inline-formula><mml:math id="M20" display="inline"><mml:mrow><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>=</mml:mo><mml:mo>[</mml:mo><mml:msub><mml:mi>a</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>b</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>]</mml:mo><mml:mo>×</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>×</mml:mo><mml:mo>[</mml:mo><mml:msub><mml:mi>a</mml:mi><mml:mi>d</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>b</mml:mi><mml:mi>d</mml:mi></mml:msub><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>}</p>
            </list-item>

    <list-item>

      <p id="d2e808" specific-use="STATE"><bold>end procedure</bold></p>
            </list-item>

    <list-item>

      <p id="d2e815" specific-use="STATE"><bold>procedure</bold> SampleMT(<inline-formula><mml:math id="M21" display="inline"><mml:mrow><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi></mml:mrow></mml:math></inline-formula>)</p>
            </list-item>

    <list-item>

      <p id="d2e835" specific-use="STATE">SampleMTBranch(<inline-formula><mml:math id="M22" display="inline"><mml:mrow><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula>)</p>
            </list-item>

    <list-item>

      <p id="d2e858" specific-use="STATE"><bold>end procedure</bold></p>
            </list-item>

    <list-item>

      <p id="d2e865" specific-use="STATE"><bold>procedure</bold> SampleMTBranch(<inline-formula><mml:math id="M23" display="inline"><mml:mrow><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">τ</mml:mi></mml:mrow></mml:math></inline-formula>)</p>
            </list-item>

    <list-item>

      <p id="d2e889" specific-use="STATE"><inline-formula><mml:math id="M24" display="inline"><mml:mrow><mml:mi>E</mml:mi><mml:mo>∼</mml:mo><mml:mtext>Exp</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="italic">μ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>   {<inline-formula><mml:math id="M25" display="inline"><mml:mi mathvariant="italic">μ</mml:mi></mml:math></inline-formula> is a measure on <inline-formula><mml:math id="M26" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="double-struck">R</mml:mi><mml:mi>d</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>}</p>
            </list-item>

    <list-item>

      <p id="d2e937" specific-use="IF"><bold>if</bold> <inline-formula><mml:math id="M27" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="italic">τ</mml:mi><mml:mo>+</mml:mo><mml:mi>E</mml:mi><mml:mo>)</mml:mo><mml:mo>&lt;</mml:mo><mml:mi mathvariant="italic">λ</mml:mi></mml:mrow></mml:math></inline-formula> <bold>then</bold> <list>
    <list-item>
      <p id="d2e968" specific-use="STATE"><inline-formula><mml:math id="M28" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mo>∼</mml:mo><mml:mtext>Discrete</mml:mtext><mml:mo>(</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>d</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></p></list-item>
    <list-item>
      <p id="d2e1006" specific-use="STATE"><inline-formula><mml:math id="M29" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mo>∼</mml:mo><mml:mi>U</mml:mi><mml:mo>(</mml:mo><mml:mo>[</mml:mo><mml:msub><mml:mi>a</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>b</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>]</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></p></list-item>
    <list-item>
      <p id="d2e1049" specific-use="STATE">SampleMTBranch(<inline-formula><mml:math id="M30" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>&gt;</mml:mo></mml:msup><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>,</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="italic">τ</mml:mi><mml:mo>+</mml:mo><mml:mi>E</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>)</p></list-item>
    <list-item>
      <p id="d2e1081" specific-use="STATE">SampleMTBranch(<inline-formula><mml:math id="M31" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>&lt;</mml:mo></mml:msup><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>,</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="italic">τ</mml:mi><mml:mo>+</mml:mo><mml:mi>E</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>)</p></list-item></list></p>
            </list-item>

    <list-item>

      <p id="d2e1114" specific-use="ENDIF"><bold>end</bold> <bold>if</bold></p>
            </list-item>

    <list-item>

      <p id="d2e1124" specific-use="STATE"><bold>end procedure</bold></p>
            </list-item>
          </list></disp-quote></boxed-text>

      <fig id="F2" specific-use="star"><label>Figure 2</label><caption><p id="d2e1132">Generative process to draw a topological stochastic partition set of size <inline-formula><mml:math id="M32" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula>. The number of Voronoi nuclei is given by <inline-formula><mml:math id="M33" display="inline"><mml:mrow><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, where <inline-formula><mml:math id="M34" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> controls the average depth for the partitions in the forest. Red points indicate the selected locations, among the sampled locations, for the nuclei.</p></caption>
          <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f02.png"/>

        </fig>

      <p id="d2e1169">Algorithm 1 implements a temporal stochastic process that generates Mondrian partitions, i.e. nested random partitions aligned with coordinate axes.  Parameter <inline-formula><mml:math id="M35" display="inline"><mml:mi mathvariant="italic">λ</mml:mi></mml:math></inline-formula> represents the process's finite lifetime, while <inline-formula><mml:math id="M36" display="inline"><mml:mi mathvariant="italic">τ</mml:mi></mml:math></inline-formula> represents the elapsed time through recursion levels. The recursive partitioning process is as follows: Line 8 samples the “time” until the next cut in the sub-box <inline-formula><mml:math id="M37" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula> from an exponential distribution, parametrized such that <inline-formula><mml:math id="M38" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>(</mml:mo><mml:mi>E</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:mi mathvariant="italic">μ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, where <inline-formula><mml:math id="M39" display="inline"><mml:mrow><mml:mi mathvariant="italic">μ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msubsup><mml:mo>∑</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi>d</mml:mi></mml:msubsup><mml:mo>(</mml:mo><mml:msubsup><mml:mi>b</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="italic">θ</mml:mi></mml:msubsup><mml:mo>-</mml:mo><mml:msubsup><mml:mi>a</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="italic">θ</mml:mi></mml:msubsup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. This ensures smaller sub-boxes are less likely to be partitioned.  In line 10, the dimension to be partitioned is selected, where <inline-formula><mml:math id="M40" display="inline"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> determines the probability of selecting dimension <inline-formula><mml:math id="M41" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula>. For a sub-box <inline-formula><mml:math id="M42" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M43" display="inline"><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is proportional to <inline-formula><mml:math id="M44" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:msubsup><mml:mi>b</mml:mi><mml:mi>k</mml:mi><mml:mi mathvariant="italic">θ</mml:mi></mml:msubsup><mml:mo>-</mml:mo><mml:msubsup><mml:mi>a</mml:mi><mml:mi>k</mml:mi><mml:mi mathvariant="italic">θ</mml:mi></mml:msubsup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, favouring the partition of larger sides.  In line 11, the cut point is randomly determined along the selected dimension, creating sub-boxes <inline-formula><mml:math id="M45" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>&gt;</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M46" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>&lt;</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula>. Figure <xref ref-type="fig" rid="F1"/> illustrates the partitioning process, with each red line representing a cut at time <inline-formula><mml:math id="M47" display="inline"><mml:mi>t</mml:mi></mml:math></inline-formula> for all <inline-formula><mml:math id="M48" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e1375"><italic>(b) Voronoi Forests (VF):</italic> A variation of (a) which employs Voronoi partitions instead of Mondrian trees, in a manner analogous to that described by <xref ref-type="bibr" rid="bib1.bibx31" id="text.36"/>. However, rather than using a fixed number of nuclei, <monospace>spatialize</monospace> employs a random number per partition, calibrated to ensure that the expected number of data points per cell matches that of a Mondrian tree.</p>
      <p id="d2e1386">Thus, a Voronoi Forest (VF) is a collection of structures defined as:

            <disp-formula id="Ch1.E3" content-type="numbered"><label>3</label><mml:math id="M49" display="block"><mml:mrow><mml:mtext>VF</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo><mml:mo>,</mml:mo><mml:mtext>     </mml:mtext><mml:msub><mml:mi>T</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>∼</mml:mo><mml:mtext>VT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></disp-formula>

          
          where <inline-formula><mml:math id="M50" display="inline"><mml:mrow><mml:mtext>VT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is the generative process that produces a Voronoi partition.  The process begins with the selection of <inline-formula><mml:math id="M51" display="inline"><mml:mi>K</mml:mi></mml:math></inline-formula>, the number of Voronoi nuclei, which is drawn from a Poisson distribution with parameter <inline-formula><mml:math id="M52" display="inline"><mml:mi mathvariant="italic">λ</mml:mi></mml:math></inline-formula>.  Next, a random sample of <inline-formula><mml:math id="M53" display="inline"><mml:mi>K</mml:mi></mml:math></inline-formula> nuclei, denoted by <inline-formula><mml:math id="M54" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="normal">Φ</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo><mml:mo>⊆</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi></mml:mrow></mml:math></inline-formula>, is randomly generated. Finally, the target domain <inline-formula><mml:math id="M55" display="inline"><mml:mi mathvariant="normal">Θ</mml:mi></mml:math></inline-formula> is partitioned by assigning all contained locations <inline-formula><mml:math id="M56" display="inline"><mml:mrow><mml:mi>x</mml:mi><mml:mo>∈</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi></mml:mrow></mml:math></inline-formula> to the nearest nuclei based on the Euclidean distance. A Voronoi cell is thus defined by <inline-formula><mml:math id="M57" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mi>x</mml:mi><mml:mo>∈</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>:</mml:mo><mml:mo>‖</mml:mo><mml:mi>x</mml:mi><mml:mo>-</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>‖</mml:mo><mml:mo>≤</mml:mo><mml:mo>‖</mml:mo><mml:mi>x</mml:mi><mml:mo>-</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>‖</mml:mo><mml:mspace linebreak="nobreak" width="0.33em"/><mml:mo>∀</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>∈</mml:mo><mml:msub><mml:mi mathvariant="normal">Φ</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>≠</mml:mo><mml:mi>i</mml:mi><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula>. The process of generating a Voronoi Forest is illustrated in Fig. <xref ref-type="fig" rid="F2"/>.</p>
<sec id="Ch1.S2.SS1.SSS1">
  <label>2.1.1</label><title>Model training</title>
      <p id="d2e1645">Let us define <italic>conditioning data</italic> as a set <inline-formula><mml:math id="M58" display="inline"><mml:mrow><mml:mi mathvariant="script">M</mml:mi><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>z</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:msubsup><mml:mo mathvariant="italic">}</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> of <inline-formula><mml:math id="M59" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> measurements of a variable of interest, obtained at specific spatial locations <inline-formula><mml:math id="M60" display="inline"><mml:mrow><mml:mi mathvariant="script">P</mml:mi><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mtext mathvariant="bold">x</mml:mtext><mml:mi>j</mml:mi></mml:msub><mml:msubsup><mml:mo mathvariant="italic">}</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> within a particular region of a <inline-formula><mml:math id="M61" display="inline"><mml:mi>d</mml:mi></mml:math></inline-formula>-dimensional space.  The classical formulation of spatial interpolation can be stated as: find a <inline-formula><mml:math id="M62" display="inline"><mml:mi>d</mml:mi></mml:math></inline-formula>-variate function <inline-formula><mml:math id="M63" display="inline"><mml:mrow><mml:msub><mml:mtext mathvariant="bold">S</mml:mtext><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> that fulfils the condition <inline-formula><mml:math id="M64" display="inline"><mml:mrow><mml:msub><mml:mtext mathvariant="bold">S</mml:mtext><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mtext mathvariant="bold">x</mml:mtext><mml:mi>j</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>z</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M65" display="inline"><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula><fn id="Ch1.Footn1"><p id="d2e1825">The sub-index (<inline-formula><mml:math id="M66" display="inline"><mml:mrow><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math></inline-formula>) indicates that the interpolation function is constructed using both the values of the measurements and their locations.</p></fn>.</p>
      <p id="d2e1841">Now, let us assume <inline-formula><mml:math id="M67" display="inline"><mml:mrow><mml:mi mathvariant="script">P</mml:mi><mml:mo>⊂</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi></mml:mrow></mml:math></inline-formula>. Then, both a Mondrian Forest, <inline-formula><mml:math id="M68" display="inline"><mml:mrow><mml:mtext>MF</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, and a Voronoi Forest, <inline-formula><mml:math id="M69" display="inline"><mml:mrow><mml:mtext>VF</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, can be “trained” when a set of <inline-formula><mml:math id="M70" display="inline"><mml:mi>d</mml:mi></mml:math></inline-formula>-dimensional data points (the conditioning data) are used to condition the sampling of <inline-formula><mml:math id="M71" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula>. We see, then, that:</p>

      <fig id="F3" specific-use="star"><label>Figure 3</label><caption><p id="d2e1935">Tree structure schema. <bold>(a)</bold> Decision tree structure. <bold>(b)</bold> The spatial partition corresponding to the decision tree structure shown in <bold>(a)</bold>. Black points represent conditioning data. <italic>Note:</italic> Reprinted from “Ensemble Spatial Interpolation: A New Approach to Natural or Anthropogenic Variable Assessment”, by <xref ref-type="bibr" rid="bib1.bibx11" id="text.37"/>, Natural Resources Research, 30, 3777–3793.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f03.png"/>

          </fig>

      <fig id="F4" specific-use="star"><label>Figure 4</label><caption><p id="d2e1962">Illustration of <inline-formula><mml:math id="M72" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> given a set of data points, which enables Algorithm 1 to be trained using sample data. <italic>Note:</italic> Reprinted from “Ensemble Spatial Interpolation: A New Approach to Natural or Anthropogenic Variable Assessment”, by <xref ref-type="bibr" rid="bib1.bibx11" id="text.38"/>, Natural Resources Research, 30, 3777–3793.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f04.png"/>

          </fig>

</sec>
<sec id="Ch1.S2.SS1.SSSx1" specific-use="unnumbered">
  <title>(a) When using Mondrian Forests</title>
      <p id="d2e1994">A trained Mondrian Forest is defined as:

              <disp-formula id="Ch1.E4" content-type="numbered"><label>4</label><mml:math id="M73" display="block"><mml:mrow><mml:mtext>MF</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo><mml:mo>,</mml:mo><mml:mtext>   </mml:mtext><mml:msub><mml:mi>T</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>∼</mml:mo><mml:mtext>MT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>)</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e2075">A Mondrian tree can be trained by conditioning the partitioning process to the data (Fig. <xref ref-type="fig" rid="F3"/>b). Thus, a trained random partition set, <inline-formula><mml:math id="M74" display="inline"><mml:mrow><mml:mtext>MF</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, can be obtained by modifying Algorithm 1 as follows: <list list-type="bullet"><list-item>
      <p id="d2e2108">For any box <inline-formula><mml:math id="M75" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula> define <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:mi>k</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> as the smallest sub-box containing all conditioning positions in <inline-formula><mml:math id="M77" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula> (see Fig. <xref ref-type="fig" rid="F4"/>).</p></list-item><list-item>
      <p id="d2e2153">The probability of splitting a sub-box (line 8) is replaced by: Sample <inline-formula><mml:math id="M78" display="inline"><mml:mrow><mml:mi>E</mml:mi><mml:mo>∼</mml:mo><mml:mtext>Exp</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="italic">μ</mml:mi><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>.</p></list-item><list-item>
      <p id="d2e2184">Lines 10 and 11 in Algorithm 1 are adjusted to work on <inline-formula><mml:math id="M79" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> instead of <inline-formula><mml:math id="M80" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula>.</p></list-item></list></p>
      <p id="d2e2205">As a result of this modification, sub-boxes containing highly concentrated data are more likely to be partitioned. This offers the advantage of ensuring that most leaf nodes (i.e. the resulting sub-boxes) contain a reasonable amount of conditioning data, thus avoiding spatial clustering.</p>
</sec>
<sec id="Ch1.S2.SS1.SSSx2" specific-use="unnumbered">
  <title>(b) When using Voronoi Forests</title>
      <p id="d2e2214">A trained Voronoi Forest (VF) is defined as:

              <disp-formula id="Ch1.E5" content-type="numbered"><label>5</label><mml:math id="M81" display="block"><mml:mrow><mml:mtext>VF</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo><mml:mo>,</mml:mo><mml:mtext>     </mml:mtext><mml:msub><mml:mi>T</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>∼</mml:mo><mml:mtext>VT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>)</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e2295">A trained random partition set, <inline-formula><mml:math id="M82" display="inline"><mml:mrow><mml:mtext>VF</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, can be obtained by sampling the <inline-formula><mml:math id="M83" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> sets of Voronoi nuclei from the locations at which measurements of the variable of interest are available, as opposed to being sampled from <inline-formula><mml:math id="M84" display="inline"><mml:mi mathvariant="normal">Θ</mml:mi></mml:math></inline-formula>. For each tree, this results in the set <inline-formula><mml:math id="M85" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="normal">Φ</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> where <inline-formula><mml:math id="M86" display="inline"><mml:mrow><mml:mi>K</mml:mi><mml:mo>≤</mml:mo><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M87" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="normal">Φ</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo>⊆</mml:mo><mml:mi mathvariant="script">P</mml:mi></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e2402">Thus, the process to obtain samples from <inline-formula><mml:math id="M88" display="inline"><mml:mrow><mml:mtext>VT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is as follows: <list list-type="bullet"><list-item>
      <p id="d2e2429">Sample <inline-formula><mml:math id="M89" display="inline"><mml:mrow><mml:mi>K</mml:mi><mml:mo>∼</mml:mo><mml:mtext>Poisson</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>≤</mml:mo><mml:mi>K</mml:mi><mml:mo>≤</mml:mo><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.</p></list-item><list-item>
      <p id="d2e2467">Sample <inline-formula><mml:math id="M90" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="normal">Φ</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> from the measured locations <inline-formula><mml:math id="M91" display="inline"><mml:mi mathvariant="script">P</mml:mi></mml:math></inline-formula></p></list-item><list-item>
      <p id="d2e2510">Establish each Voronoi cell as <inline-formula><mml:math id="M92" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mi>x</mml:mi><mml:mo>∈</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>:</mml:mo><mml:mo>‖</mml:mo><mml:mi>x</mml:mi><mml:mo>-</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>‖</mml:mo><mml:mo>≤</mml:mo><mml:mo>‖</mml:mo><mml:mi>x</mml:mi><mml:mo>-</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>‖</mml:mo><mml:mspace width="0.33em" linebreak="nobreak"/><mml:mo>∀</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>∈</mml:mo><mml:msub><mml:mi mathvariant="normal">Φ</mml:mi><mml:mi>K</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>≠</mml:mo><mml:mi>i</mml:mi><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula>.</p></list-item></list></p>
      <p id="d2e2591">Sampling from the measured locations <inline-formula><mml:math id="M93" display="inline"><mml:mi mathvariant="script">P</mml:mi></mml:math></inline-formula> ensures that all partition cells <inline-formula><mml:math id="M94" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>K</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, generated by sampling <inline-formula><mml:math id="M95" display="inline"><mml:mrow><mml:mtext>VT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, will contain at least one measured location.</p>
</sec>
<sec id="Ch1.S2.SS1.SSS2">
  <label>2.1.2</label><title>Weak voter function set</title>
      <p id="d2e2654">For an unmeasured position <inline-formula><mml:math id="M96" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>∈</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi></mml:mrow></mml:math></inline-formula>, we define <inline-formula><mml:math id="M97" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>⊂</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> as the set of conditioning data points contained within the partition cell where <inline-formula><mml:math id="M98" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> falls into in tree <inline-formula><mml:math id="M99" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e2717">Then, let us consider a base interpolation function <inline-formula><mml:math id="M100" display="inline"><mml:mrow><mml:msub><mml:mtext mathvariant="bold">S</mml:mtext><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, which can be any spatial interpolator for which no additional information, other than measurements and their locations, is required to interpolate new positions – such as Kriging or IDW.</p>
      <p id="d2e2740">Now, for each tree <inline-formula><mml:math id="M101" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, let <inline-formula><mml:math id="M102" display="inline"><mml:mrow><mml:msub><mml:mtext mathvariant="bold">S</mml:mtext><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> be the base interpolation function restricted to <inline-formula><mml:math id="M103" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. Thus, the <inline-formula><mml:math id="M104" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula>th weak voter function for <inline-formula><mml:math id="M105" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> is obtained by applying the base interpolator <inline-formula><mml:math id="M106" display="inline"><mml:mrow><mml:msub><mml:mtext mathvariant="bold">S</mml:mtext><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> to estimate the value at <inline-formula><mml:math id="M107" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> using only the points in <inline-formula><mml:math id="M108" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e2841">Formally, the weak voter function set is defined as:

              <disp-formula id="Ch1.E6" content-type="numbered"><label>6</label><mml:math id="M109" display="block"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mtext mathvariant="bold">S</mml:mtext><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mtext>     </mml:mtext><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:mi>m</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
</sec>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Interpolation using the trained model</title>
      <p id="d2e2913">Let us denote <inline-formula><mml:math id="M110" display="inline"><mml:mrow><mml:msubsup><mml:mi>x</mml:mi><mml:mi>k</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:mo>=</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mtext mathvariant="bold">S</mml:mtext><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> as the <inline-formula><mml:math id="M111" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula>th weak voter function for <inline-formula><mml:math id="M112" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula>. Then, <inline-formula><mml:math id="M113" display="inline"><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:msubsup><mml:mi>x</mml:mi><mml:mi>k</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:msubsup><mml:mo mathvariant="italic">}</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi>m</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> corresponds to the set of weak voter functions for <inline-formula><mml:math id="M114" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> resulting from all <inline-formula><mml:math id="M115" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> trees.</p>
      <p id="d2e3029">Thus, the interpolation function <inline-formula><mml:math id="M116" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">Z</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> corresponds to the aggregation of these weak voter functions:

            <disp-formula id="Ch1.E7" content-type="numbered"><label>7</label><mml:math id="M117" display="block"><mml:mrow><mml:msup><mml:mi>e</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="script">Z</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mi>G</mml:mi><mml:mfenced close=")" open="("><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:msubsup><mml:mi>x</mml:mi><mml:mi>k</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:msubsup><mml:mo mathvariant="italic">}</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi>m</mml:mi></mml:msubsup></mml:mrow></mml:mfenced><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e3116">The simplest choice for the aggregation function <inline-formula><mml:math id="M118" display="inline"><mml:mi>G</mml:mi></mml:math></inline-formula> is the mean <inline-formula><mml:math id="M119" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mo>⋅</mml:mo><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>. In this case, the interpolation function becomes:

            <disp-formula id="Ch1.E8" content-type="numbered"><label>8</label><mml:math id="M120" display="block"><mml:mrow><mml:msubsup><mml:mi>e</mml:mi><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi>m</mml:mi></mml:mfrac></mml:mstyle><mml:munderover><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi>m</mml:mi></mml:munderover><mml:msubsup><mml:mi>x</mml:mi><mml:mi>k</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
</sec>
<sec id="Ch1.S2.SS3">
  <label>2.3</label><title>Interpolation precision modelling</title>
      <p id="d2e3189">A precision model <inline-formula><mml:math id="M121" display="inline"><mml:mrow><mml:msup><mml:mi>p</mml:mi><mml:mo>∗</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> for <inline-formula><mml:math id="M122" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="script">Z</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="script">M</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> can be defined using a loss function <inline-formula><mml:math id="M123" display="inline"><mml:mi mathvariant="double-struck">L</mml:mi></mml:math></inline-formula> as follows:

            <disp-formula id="Ch1.E9" content-type="numbered"><label>9</label><mml:math id="M124" display="block"><mml:mrow><mml:msup><mml:mi>p</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="double-struck">E</mml:mi><mml:mrow><mml:mover accent="true"><mml:mi>P</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mfenced close=")" open="("><mml:mrow><mml:mo mathvariant="italic">{</mml:mo><mml:msubsup><mml:mi>x</mml:mi><mml:mi>k</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:msub><mml:mo mathvariant="italic">}</mml:mo><mml:mi>m</mml:mi></mml:msub></mml:mrow></mml:mfenced></mml:mrow></mml:msub><mml:mfenced open="(" close=")"><mml:mrow><mml:mi mathvariant="double-struck">L</mml:mi><mml:mfenced open="(" close=")"><mml:mrow><mml:msup><mml:mi>e</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>,</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:msubsup><mml:mi>x</mml:mi><mml:mi>k</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:msub><mml:mo mathvariant="italic">}</mml:mo><mml:mi>m</mml:mi></mml:msub></mml:mrow></mml:mfenced></mml:mrow></mml:mfenced><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e3305">Equation (<xref ref-type="disp-formula" rid="Ch1.E9"/>) represents a generalisation of the mean-variance concept within the context of Bayesian variability. Here, <inline-formula><mml:math id="M125" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">E</mml:mi><mml:mrow><mml:mover accent="true"><mml:mi>P</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, represents the expectation over the posterior distribution, averages <inline-formula><mml:math id="M126" display="inline"><mml:mi mathvariant="double-struck">L</mml:mi></mml:math></inline-formula> over all sampled partitions, weighted by their posterior probability.</p>
      <p id="d2e3338">When using the mean-based interpolator <inline-formula><mml:math id="M127" display="inline"><mml:mrow><mml:msubsup><mml:mi>e</mml:mi><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>∗</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula>, we can define an associated interpolation variance (or error) <inline-formula><mml:math id="M128" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">V</mml:mi><mml:mrow><mml:msubsup><mml:mi>e</mml:mi><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>∗</mml:mo></mml:msubsup></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> as:

            <disp-formula id="Ch1.E10" content-type="numbered"><label>10</label><mml:math id="M129" display="block"><mml:mrow><mml:msubsup><mml:mi>p</mml:mi><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="double-struck">V</mml:mi><mml:mrow><mml:msubsup><mml:mi>e</mml:mi><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>∗</mml:mo></mml:msubsup></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>∗</mml:mo></mml:msup><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mi>m</mml:mi></mml:mfrac></mml:mstyle><mml:munderover><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi>m</mml:mi></mml:munderover><mml:msup><mml:mfenced close=")" open="("><mml:mrow><mml:msubsup><mml:mi>x</mml:mi><mml:mi>k</mml:mi><mml:mo>∗</mml:mo></mml:msubsup><mml:mo>-</mml:mo><mml:msubsup><mml:mi>e</mml:mi><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>∗</mml:mo></mml:msubsup></mml:mrow></mml:mfenced><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
</sec>
<sec id="Ch1.S2.SS4">
  <label>2.4</label><title>Rule of thumb for parameter choice</title>
<sec id="Ch1.S2.SS4.SSS1">
  <label>2.4.1</label><title>When using Mondrian Forests</title>
      <p id="d2e3473">The domain parameter <inline-formula><mml:math id="M130" display="inline"><mml:mi mathvariant="normal">Θ</mml:mi></mml:math></inline-formula> can be considered as any bounding box containing the positions of the conditioning data <inline-formula><mml:math id="M131" display="inline"><mml:mi mathvariant="script">P</mml:mi></mml:math></inline-formula>. Thus, in practice, the only two parameters of the model are: <list list-type="bullet"><list-item>
      <p id="d2e3492">The number of partitions (or tree structures) <inline-formula><mml:math id="M132" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula>. A reasonable suggestion for this parameter is that higher is better, keeping in mind that higher values will directly impact time performance. Experiments have shown that certain stability is reached for <inline-formula><mml:math id="M133" display="inline"><mml:mrow><mml:mi>m</mml:mi><mml:mo>≥</mml:mo><mml:mn mathvariant="normal">500</mml:mn></mml:mrow></mml:math></inline-formula> <xref ref-type="bibr" rid="bib1.bibx11" id="paren.39"/>, so this would be a good starting point.</p></list-item><list-item>
      <p id="d2e3518">The process lifetime <inline-formula><mml:math id="M134" display="inline"><mml:mi mathvariant="italic">λ</mml:mi></mml:math></inline-formula>. The only restriction for this parameter is that it must be positive. This renders the selection, or any sensitivity analysis, of its value challenging. In order to address this issue, a function of a normalised parameter <inline-formula><mml:math id="M135" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is used to obtain suitable values for <inline-formula><mml:math id="M136" display="inline"><mml:mi mathvariant="italic">λ</mml:mi></mml:math></inline-formula>, which is defined as follows:<disp-formula id="Ch1.E11" content-type="numbered"><label>11</label><mml:math id="M137" display="block"><mml:mrow><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:mi mathvariant="italic">μ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>)</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e3595">In practice, <inline-formula><mml:math id="M138" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> controls the average tree depth in the forest, determining how finely the space is partitioned. In this way, <inline-formula><mml:math id="M139" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0</mml:mn></mml:mrow></mml:math></inline-formula> will generate the coarsest partition, while <inline-formula><mml:math id="M140" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>→</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> will generate finer ones.  <inline-formula><mml:math id="M141" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> must be carefully chosen to ensure that the base interpolation function <inline-formula><mml:math id="M142" display="inline"><mml:mrow><mml:msub><mml:mtext mathvariant="bold">S</mml:mtext><mml:mrow><mml:msub><mml:mi mathvariant="script">L</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> has sufficient sample data. Once <inline-formula><mml:math id="M143" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> has been defined, it is recommended to use cross-validation to find the optimal <inline-formula><mml:math id="M144" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula>, typically within <inline-formula><mml:math id="M145" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0.7</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0.95</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>.</p></list-item></list></p>
</sec>
<sec id="Ch1.S2.SS4.SSS2">
  <label>2.4.2</label><title>When using Voronoi Forests</title>
      <p id="d2e3690">As seen in Mondrian Forest, the domain parameter <inline-formula><mml:math id="M146" display="inline"><mml:mi mathvariant="normal">Θ</mml:mi></mml:math></inline-formula> may be regarded as any bounding box encompassing <inline-formula><mml:math id="M147" display="inline"><mml:mi mathvariant="script">P</mml:mi></mml:math></inline-formula>. Consequently, the parameters of the model remain identical, yet their respective roles and practical considerations differ: <list list-type="bullet"><list-item>
      <p id="d2e3709">The number of partitions (or tree structures) <inline-formula><mml:math id="M148" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula>. A reasonable suggestion for this parameter is that higher is better, keeping in mind that higher values will directly impact time performance. However, the possibility of reaching stability for a certain value of <inline-formula><mml:math id="M149" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> is yet to be studied in the context of Voronoi Forests.</p></list-item><list-item>
      <p id="d2e3727">The process lifetime <inline-formula><mml:math id="M150" display="inline"><mml:mi mathvariant="italic">λ</mml:mi></mml:math></inline-formula>. This parameter determines the expected number of Voronoi nuclei for each partition.  In the context of Voronoi Forest, <inline-formula><mml:math id="M151" display="inline"><mml:mi mathvariant="italic">λ</mml:mi></mml:math></inline-formula> is related to the mean of the Poisson distribution. Although the only theoretical restriction for this parameter is that it must be greater than one, in <monospace>spatialize</monospace>, it is also constrained to match the expected number of leaves in a Mondrian tree. To this end, <inline-formula><mml:math id="M152" display="inline"><mml:mi mathvariant="italic">λ</mml:mi></mml:math></inline-formula> is calculated by multiplying the parameter <inline-formula><mml:math id="M153" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula>, defined in the context of Mondrian forests, by a factor according to the number of observations <inline-formula><mml:math id="M154" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, as follows:<disp-formula id="Ch1.E12" content-type="numbered"><label>12</label><mml:math id="M155" display="block"><mml:mrow><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:mo>×</mml:mo><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub><mml:mo>×</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>∈</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e3824">As in the case of Mondrian partitions, <inline-formula><mml:math id="M156" display="inline"><mml:mi mathvariant="italic">α</mml:mi></mml:math></inline-formula> also controls how coarse or fine the partitions are by affecting the number of Voronoi nuclei. Thus, <inline-formula><mml:math id="M157" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.25</mml:mn></mml:mrow></mml:math></inline-formula> will generate the coarsest partition, while <inline-formula><mml:math id="M158" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>→</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> will generate finer ones.</p></list-item></list></p>
      <p id="d2e3858">In the context of sampling from a trained tree <inline-formula><mml:math id="M159" display="inline"><mml:mrow><mml:mtext>VT</mml:mtext><mml:mo>(</mml:mo><mml:mi mathvariant="normal">Θ</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>|</mml:mo><mml:mi mathvariant="script">P</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, additional considerations arise with respect to <inline-formula><mml:math id="M160" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M161" display="inline"><mml:mi mathvariant="italic">λ</mml:mi></mml:math></inline-formula>.  Firstly, the number of nuclei, <inline-formula><mml:math id="M162" display="inline"><mml:mrow><mml:mi>K</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, must not exceed the number of observations, <inline-formula><mml:math id="M163" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.  Secondly, as <inline-formula><mml:math id="M164" display="inline"><mml:mrow><mml:mi>K</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">λ</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mo>→</mml:mo><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, when sampling from <inline-formula><mml:math id="M165" display="inline"><mml:mi mathvariant="script">P</mml:mi></mml:math></inline-formula>, the number of possible Voronoi nuclei combinations decreases, and thus a large <inline-formula><mml:math id="M166" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> value may result in duplicated partitions. To avoid such inefficiencies, it is recommended that <inline-formula><mml:math id="M167" display="inline"><mml:mrow><mml:mi>m</mml:mi><mml:mo>≪</mml:mo><mml:mfenced open="(" close=")"><mml:mfrac linethickness="0"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>s</mml:mi></mml:msub></mml:mrow><mml:mi>K</mml:mi></mml:mfrac></mml:mfenced></mml:mrow></mml:math></inline-formula>, or alternatively, not employing trained trees (also possible on <monospace>spatialize</monospace>). Alternatively, <monospace>spatialize</monospace> also permits the direct sampling of <inline-formula><mml:math id="M168" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="normal">Φ</mml:mi><mml:mi>K</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> from <inline-formula><mml:math id="M169" display="inline"><mml:mi mathvariant="normal">Θ</mml:mi></mml:math></inline-formula> (i.e. not employing trained trees).</p>
</sec>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>The spatialize library</title>
      <p id="d2e4025"><monospace>Spatialize</monospace> is an open source library for spatial analysis which offers different tools for implementing the Ensemble Spatial Interpolation (ESI) model. The main motivation behind the development of the <monospace>spatialize</monospace> library was to provide the scientific and technical community with a robust and automated spatial estimation tool that can be used across different disciplines by researchers and professionals who are not experts in geostatistics. In this sense, <monospace>spatialize</monospace> provides automated tools that eliminate the need for manual spatial analysis and extensive domain expertise.</p>
      <p id="d2e4036">The <monospace>spatialize</monospace> library is organized into three functional layers.  First, the API is implemented in Python, offering three high-level functions: <monospace>esi_griddata()</monospace> performs ESI estimation on regular grids, <monospace>esi_nongriddata()</monospace> generates estimates at arbitrary spatial locations, and <monospace>esi_hparams_search()</monospace> searches for optimal ESI parameters. The latter employs cross-validation to determine the parameter combination that yields the minimum error out of a previously defined set.  Second, the library provides aggregation functions according to Eq. (<xref ref-type="disp-formula" rid="Ch1.E1"/>), as well as precision estimation functions following Eq. (<xref ref-type="disp-formula" rid="Ch1.E9"/>), including a class for implementing custom precision functions. Test datasets are also included.  Third, the spatial estimation methods are efficiently implemented in C<inline-formula><mml:math id="M170" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula> for optimal performance.</p>
      <p id="d2e4066">The three main functions – <monospace>esi_hparams_search()</monospace>, <monospace>esi_griddata()</monospace>, and <monospace>esi_nongriddata()</monospace> – share three mandatory parameters: <monospace>points</monospace>, an <inline-formula><mml:math id="M171" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula>-samples <inline-formula><mml:math id="M172" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> <inline-formula><mml:math id="M173" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula>-dimensions array specifying sample locations; <monospace>values</monospace>, an <inline-formula><mml:math id="M174" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula>-samples <inline-formula><mml:math id="M175" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> <inline-formula><mml:math id="M176" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula> array containing the observed values at these locations; and <monospace>xi</monospace>, the query locations where estimates are required (as a standard array for non-gridded data or a meshgrid for gridded data).  Optional arguments include ESI-specific parameters (<monospace>n_partitions</monospace>, <monospace>alpha</monospace>, <monospace>data_cond</monospace>, <monospace>agg_function</monospace>, <monospace>seed</monospace>, <monospace>local_interpolator</monospace>, and <monospace>p_process</monospace>) and local interpolator-specific parameters. A comprehensive description of these functions and their arguments can be found in the user manual, which is provided as supplementary material.</p>
      <p id="d2e4153"><monospace>Spatialize 1.0.2</monospace> offers two alternatives for ESI local interpolators: Inverse Distance Weighting (IDW), a deterministic interpolator that assigns greater weighting to points in closer proximity, and an Ordinary Kriging variant with a normalized covariance matrix.  Additionally, an implementation of traditional IDW is provided.  In a different vein, two space partitioning methods are available, Mondrian Forests and Voronoi Forests<fn id="Ch1.Footn2"><p id="d2e4158">Currently, <monospace>spatialize</monospace> offers support for up to two dimensions when using Voronoi partitions and five dimensions when using Mondrian. For the 4D (space-time) and 5D (spatial with two angles, for fault description, for example) case, the implementation includes only IDW as local ESI interpolator.</p></fn>.</p>

<table-wrap id="T1" specific-use="star"><label>Table 1</label><caption><p id="d2e4169">Comparison of <monospace>spatialize</monospace> with commonly used spatial interpolation libraries.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="9">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="center"/>
     <oasis:colspec colnum="3" colname="col3" align="center"/>
     <oasis:colspec colnum="4" colname="col4" align="center"/>
     <oasis:colspec colnum="5" colname="col5" align="center"/>
     <oasis:colspec colnum="6" colname="col6" align="center"/>
     <oasis:colspec colnum="7" colname="col7" align="center"/>
     <oasis:colspec colnum="8" colname="col8" align="center"/>
     <oasis:colspec colnum="9" colname="col9" align="center"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Feature</oasis:entry>
         <oasis:entry colname="col2">Spatialize v1.0.2</oasis:entry>
         <oasis:entry colname="col3">SciPy</oasis:entry>
         <oasis:entry colname="col4">scikit-learn</oasis:entry>
         <oasis:entry colname="col5">PyKrige</oasis:entry>
         <oasis:entry colname="col6">GSTools</oasis:entry>
         <oasis:entry colname="col7">Pyinterpolate</oasis:entry>
         <oasis:entry colname="col8">gstat</oasis:entry>
         <oasis:entry colname="col9">geoR</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry namest="col1" nameend="col7"><italic>Core Interpolation Methods</italic></oasis:entry>
         <oasis:entry colname="col8"/>
         <oasis:entry colname="col9"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Ensemble Spatial Interpolation</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">–</oasis:entry>
         <oasis:entry colname="col7">–</oasis:entry>
         <oasis:entry colname="col8">–</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Simple Kriging</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Ordinary Kriging</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">✓<sup>a</sup></oasis:entry>
         <oasis:entry colname="col5">✓</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Universal Kriging</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">✓</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Inverse distance weighting</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">✓<sup>b</sup></oasis:entry>
         <oasis:entry colname="col4">✓<sup>c</sup></oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">–</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Radial basis functions</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">✓</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">–</oasis:entry>
         <oasis:entry colname="col7">–</oasis:entry>
         <oasis:entry colname="col8">–</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry namest="col1" nameend="col6"><italic>Uncertainty Quantification</italic></oasis:entry>
         <oasis:entry colname="col7"/>
         <oasis:entry colname="col8"/>
         <oasis:entry colname="col9"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Kriging variance/uncertainty</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">✓<sup>a</sup></oasis:entry>
         <oasis:entry colname="col5">✓</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Empirical posterior distributions</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">–</oasis:entry>
         <oasis:entry colname="col7">–</oasis:entry>
         <oasis:entry colname="col8">–</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Custom loss functions</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">–</oasis:entry>
         <oasis:entry colname="col7">–</oasis:entry>
         <oasis:entry colname="col8">–</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry namest="col1" nameend="col6"><italic>User Input</italic></oasis:entry>
         <oasis:entry colname="col7"/>
         <oasis:entry colname="col8"/>
         <oasis:entry colname="col9"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Automatic parameter fitting</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">✓</oasis:entry>
         <oasis:entry colname="col5">✓</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓<sup>d</sup></oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Manual variogram selection</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">✓</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry namest="col1" nameend="col6"><italic>Spatial Support</italic></oasis:entry>
         <oasis:entry colname="col7"/>
         <oasis:entry colname="col8"/>
         <oasis:entry colname="col9"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Gridded data</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">✓</oasis:entry>
         <oasis:entry colname="col4">✓</oasis:entry>
         <oasis:entry colname="col5">✓</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Non-gridded data</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">✓</oasis:entry>
         <oasis:entry colname="col4">✓</oasis:entry>
         <oasis:entry colname="col5">✓</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">High-dimensional (<inline-formula><mml:math id="M188" display="inline"><mml:mo lspace="0mm">&gt;</mml:mo></mml:math></inline-formula> 3D)</oasis:entry>
         <oasis:entry colname="col2">✓<sup>e</sup></oasis:entry>
         <oasis:entry colname="col3">✓<sup>f</sup></oasis:entry>
         <oasis:entry colname="col4">✓</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">–</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry namest="col1" nameend="col6"><italic>Scalability and Performance</italic></oasis:entry>
         <oasis:entry colname="col7"/>
         <oasis:entry colname="col8"/>
         <oasis:entry colname="col9"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Parallelization support</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">✓</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">C<inline-formula><mml:math id="M191" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula>/compiled core</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">–</oasis:entry>
         <oasis:entry colname="col7">–</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry namest="col1" nameend="col6"><italic>API Language</italic></oasis:entry>
         <oasis:entry colname="col7"/>
         <oasis:entry colname="col8"/>
         <oasis:entry colname="col9"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Python</oasis:entry>
         <oasis:entry colname="col2">✓</oasis:entry>
         <oasis:entry colname="col3">✓</oasis:entry>
         <oasis:entry colname="col4">✓</oasis:entry>
         <oasis:entry colname="col5">✓</oasis:entry>
         <oasis:entry colname="col6">✓</oasis:entry>
         <oasis:entry colname="col7">✓</oasis:entry>
         <oasis:entry colname="col8">–</oasis:entry>
         <oasis:entry colname="col9">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">R</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">–</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
         <oasis:entry colname="col5">–</oasis:entry>
         <oasis:entry colname="col6">–</oasis:entry>
         <oasis:entry colname="col7">–</oasis:entry>
         <oasis:entry colname="col8">✓</oasis:entry>
         <oasis:entry colname="col9">✓</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table><table-wrap-foot><p id="d2e4175"><sup>a</sup> Through Gaussian Process Regression (<monospace>GaussianProcessRegressor</monospace>). <sup>b</sup> Must be manually implemented using (<monospace>scipy.spatial.distance</monospace>). <sup>c</sup> Through k-nearest neighbors (<monospace>KNeighborsRegressor</monospace>). <sup>d</sup> Available using <monospace>automap</monospace>. <sup>e</sup> Only available with Mondrian partitions. <sup>f</sup> RBFInterpolator supports arbitrary dimensions.</p></table-wrap-foot></table-wrap>

      <p id="d2e5017">Table <xref ref-type="table" rid="T1"/> offers a comparative analysis of the capabilities of <monospace>spatialize</monospace> and those of libraries commonly utilized for spatial interpolation.</p>
      <p id="d2e5025">The functionality of the aforementioned tools is demonstrated in the subsequent section.</p>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Usage examples</title>
      <p id="d2e5036">The standard usage of spatialize follows a clear roadmap: <list list-type="custom"><list-item><label>1.</label>
      <p id="d2e5041">definition of inputs (<monospace>points</monospace>, <monospace>values</monospace>, <monospace>xi</monospace>);</p></list-item><list-item><label>2.</label>
      <p id="d2e5054">hyperparameter optimization using the <monospace>esi_hparams_search</monospace> function;</p></list-item><list-item><label>3.</label>
      <p id="d2e5061">execution of the ESI algorithm using either <monospace>esi_griddata()</monospace> or <monospace>esi_nongriddata()</monospace>;</p></list-item><list-item><label>4.</label>
      <p id="d2e5071">retrieving the estimation with <monospace>result.estimation()</monospace> and the uncertainty quantification with <monospace>result.precision()</monospace>.</p></list-item></list></p>
      <p id="d2e5080">This section presents usage examples demonstrating the core functionality of <monospace>spatialize</monospace>, including hyperparameter optimization, gridded and non-gridded data estimation, and uncertainty quantification.</p>
      <p id="d2e5086">These examples illustrate how automated grid searches over ESI parameters make geostatistical spatial estimation accessible without requiring expert selection of a priori parameters, while achieving performance comparable to or better than other automatic spatial estimation tools, as well as offering uncertainty quantifications. For comparison, examples using <monospace>SciPy</monospace> and <monospace>PyKrige</monospace> are also presented.</p>
<sec id="Ch1.S4.SS1">
  <label>4.1</label><title>Datasets</title>
      <p id="d2e5102">The examples are built upon two distinct case studies: a synthetic dataset and a real-world dataset.</p>
<sec id="Ch1.S4.SS1.SSS1">
  <label>4.1.1</label><title>Synthetic dataset</title>
      <p id="d2e5112">The synthetic dataset consists of a two-dimensional surface defined by a cubic-type function, adapted from the <monospace>scipy.inter</monospace>
<monospace>polate.griddata</monospace> documentation. This function exhibits non-linear spatial variation with oscillatory features, making it suitable for evaluating interpolation performance under controlled conditions.</p>
      <p id="d2e5121">The dataset comprises a regular grid of 100 <inline-formula><mml:math id="M192" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 200 points spanning the unit square <inline-formula><mml:math id="M193" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>]</mml:mo><mml:mo>×</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, with 1000 randomly sampled data points and ground truth values available at all grid locations.</p>
      <p id="d2e5159">The primary purpose of using synthetic data is to enable thorough quantitative performance evaluation by calculating error metrics (RMSE, MAE, etc.) across the entire estimation grid. This is not possible in real-world applications, where reference values are typically limited to sampled locations.</p>

      <fig id="F5" specific-use="star"><label>Figure 5</label><caption><p id="d2e5165"><bold>(a)</bold> Ground truth cubic function alongside <bold>(b)</bold> randomly sampled conditioning data (<inline-formula><mml:math id="M194" display="inline"><mml:mrow><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1000</mml:mn></mml:mrow></mml:math></inline-formula>) used for spatial interpolation.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f05.png"/>

          </fig>

      <p id="d2e5191">Code snippet 1 shows the generation of the grid, sampling points, and corresponding values generated by the cubic type function. Figure <xref ref-type="fig" rid="F5"/> illustrates the underlying function alongside the randomly sampled conditioning data used for interpolation.</p>
      <p id="d2e5197"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g01.png"/></p>
      <p id="d2e5205">In this case study, we evaluate <monospace>spatialize</monospace> performance on gridded estimation using the <monospace>esi_griddata()</monospace> function.  We compare ESI implementations with IDW and Kriging as local interpolators (ESI-IDW and ESI-Kriging, respectively) against traditional IDW and <monospace>SciPy</monospace> interpolators.  We employ the <monospace>esi_hparams_search()</monospace> function to automatically optimize ESI hyperparameters through grid search, demonstrating the library's capability for automated tuning without requiring expert knowledge.  Additionally, we demonstrate the process of quantifying uncertainty through built-in and custom loss functions.</p>
</sec>
<sec id="Ch1.S4.SS1.SSS2">
  <label>4.1.2</label><title>Real-world dataset</title>
      <p id="d2e5228">The real-world dataset consists of copper grade measurements from drill holes in the Andes, representing a typical mineral exploration scenario with sparse spatial sampling. The irregular sampling pattern reflects realistic exploration drilling strategies where sample locations are constrained by geological, topographical, and economic factors.</p>
      <p id="d2e5231">The dataset comprises 400 copper grade measurements at irregularly spaced locations over a <inline-formula><mml:math id="M195" display="inline"><mml:mrow><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">400</mml:mn><mml:mo>]</mml:mo><mml:mo>×</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">600</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> spatial extent. The estimation domain is discretized using a regular two-dimensional grid with uniform 2-unit spacing, resulting in 200 <inline-formula><mml:math id="M196" display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 300 nodes for a total of 60 000 estimation points.</p>
      <p id="d2e5269">The dataset employed for this example, as well as corresponding Ordinary Kriging baseline estimates, are available directly through <monospace>spatialize</monospace>, as shown in Code snippet 2.</p>
      <p id="d2e5275"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g02.png"/></p>
      <p id="d2e5284">The available samples are displayed in Fig. <xref ref-type="fig" rid="F6"/>.</p>

      <fig id="F6"><label>Figure 6</label><caption><p id="d2e5291">Copper grade measurements used for spatial interpolation.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f06.png"/>

          </fig>

      <p id="d2e5300">In this case study, we demonstrate <monospace>spatialize</monospace> performance on real-world non-gridded data using the <monospace>esi_nongriddata()</monospace> function. We compare ESI-IDW with different partitioning strategies (Mondrian and Voronoi) against ESI-Kriging and Ordinary Kriging.  We assess performance via cross-validation, since ground truth values are unavailable at unsampled locations.</p>
</sec>
</sec>
<sec id="Ch1.S4.SS2">
  <label>4.2</label><title>Synthetic data case study</title>
      <p id="d2e5319">This section presents the procedure and results from the synthetic data case study, demonstrating the use of <monospace>spatialize</monospace> on gridded data.</p>
<sec id="Ch1.S4.SS2.SSS1">
  <label>4.2.1</label><title>Spatialize: ESI-IDW implementation</title>
      <p id="d2e5332">We begin by implementing ESI with IDW as local interpolator.</p>
      <p id="d2e5335">First, we perform a parameter search using the <monospace>esi_hparams_search</monospace> function.  As shown in Code snippet 3, this function receives ranges or sets of parameters that produce different combinations for interpolation. We define a comprehensive set of combinations, including different exponent values, alpha values, and aggregation functions.  Additionally, we use the Voronoi partitioning method because it generates more regular partition elements, which aligns well with the radial nature of the local IDW interpolator.</p>
      <p id="d2e5341">Since interpolation methods reproduce reference data values at grid points by construction, the parameter search function employs K-fold cross-validation to calculate the error. <inline-formula><mml:math id="M197" display="inline"><mml:mi>K</mml:mi></mml:math></inline-formula> points are removed from the dataset in each iteration, and the estimation error is calculated at these locations. The final error metric is obtained by averaging across all iterations. In this example, we use <inline-formula><mml:math id="M198" display="inline"><mml:mrow><mml:mi>K</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:math></inline-formula>.</p>

      <fig id="F7" specific-use="star"><label>Figure 7</label><caption><p id="d2e5366">Cross-validation error for grid search using IDW as local interpolator. <bold>(a)</bold> Histogram of errors; <bold>(b)</bold> errors in the sequence of scenarios during the search.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f07.png"/>

          </fig>

      <fig id="F8" specific-use="star"><label>Figure 8</label><caption><p id="d2e5383"><bold>(a)</bold> ESI grid search best estimation using IDW as local interpolator; <bold>(b)</bold> Precision obtained with MSE (default) loss function.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f08.png"/>

          </fig>

      <p id="d2e5397">In Code snippet 3, the object <monospace>search_result</monospace> stores the grid search results. Figure <xref ref-type="fig" rid="F7"/> displays the cross-validation errors for the 100+ parameter combinations evaluated during the search. The dual visualization provides complementary insights: the histogram (left panel) shows the distribution of estimation errors, while the sequential plot (right panel) reveals the evolution of error across scenarios. This plot can be quickly obtained using the method <monospace>search_result.plot_cv_error()</monospace>.</p>
      <p id="d2e5408"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g03.png"/></p>
      <p id="d2e5416">The minimum error of 0.0114 was achieved in scenario number 8, which corresponds to the following parameters:</p>
      <p id="d2e5421"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g04.png"/></p>
      <p id="d2e5429">Finally, Code snippet 4 performs the ESI-IDW estimation using the optimal parameters found in the search. For convenience, the estimation function is designed to accept the dictionary returned by the method <monospace>search_result.best_result()</monospace> directly as an argument<fn id="Ch1.Footn3"><p id="d2e5435">The <monospace>n_partitions</monospace> parameter can be overwritten in the ESI implementation, which allows for the use of a smaller number of partitions in the grid search for faster parameter optimization.</p></fn>.  The estimates can be then retrieved using the <monospace>result.estimation()</monospace> method, while their corresponding precision is obtained through <monospace>result.precision()</monospace>.</p>
      <p id="d2e5448"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g05.png"/></p>
      <p id="d2e5456">Figure <xref ref-type="fig" rid="F8"/> presents the ESI-IDW estimation alongside its corresponding precision map, calculated with the default loss function (MSE). The resulting interpolation partially captures the structural features of the reference function, though some differences remain, particularly in regions characterized by pronounced spatial variation. Accordingly, the precision map reveals elevated uncertainty in these same regions.</p>
</sec>
<sec id="Ch1.S4.SS2.SSS2">
  <label>4.2.2</label><title>Spatialize: ESI-Kriging implementation</title>
      <p id="d2e5469">We now employ Kriging as the local interpolator for ESI, following the same parameter search and estimation procedure described in the ESI-IDW example. The underlying partitioning is carried out using the Mondrian forest process.</p>
      <p id="d2e5472">Code snippet 5 implements the parameter optimization process. We evaluate four omnidirectional variogram models across a range of nugget and sill values. The function generates and compares all possible parameter combinations to identify the optimal configuration.</p>
      <p id="d2e5475"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g06.png"/></p>

      <fig id="F9" specific-use="star"><label>Figure 9</label><caption><p id="d2e5486">Cross-validation error for ESI grid search using Kriging as local interpolator. <bold>(a)</bold> Histogram of errors; <bold>(b)</bold> Errors in the sequence of scenarios during the search.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f09.png"/>

          </fig>

      <p id="d2e5501">Figure <xref ref-type="fig" rid="F9"/> shows the cross-validation error frequency graphs (left) and the different error levels for each scenario (right).</p>
      <p id="d2e5506">Finally, we perform the estimation based on the parameters of the scenario with the lowest cross-validation error, which in this case has a value of 0.0053 at index 603. The optimal parameters are the following:</p>
      <p id="d2e5509"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g07.png"/></p>
      <p id="d2e5517">Code snippet 6 shows the implementation of ESI, applying the optimized parameters through the <monospace>best_params_found</monospace> argument. Just as in the ESI-IDW case, using <monospace>result.estimation()</monospace> returns the estimates, while <monospace>result.precision()</monospace> computes their precision.</p>
      <p id="d2e5529"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g08.png"/></p>

      <fig id="F10" specific-use="star"><label>Figure 10</label><caption><p id="d2e5540"><bold>(a)</bold> ESI grid search best estimation using Kriging as local interpolator; <bold>(b)</bold> Precision obtained with MSE (default) loss function.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f10.png"/>

          </fig>

      <p id="d2e5554">Figure <xref ref-type="fig" rid="F10"/> presents the ESI-Kriging estimation alongside its corresponding precision map, calculated with the default loss function (MSE). The ESI-Kriging interpolation successfully recovers the structural features of the reference function, despite the absence of domain-specific knowledge or formal variographic analysis in the model specification. The precision map reveals generally low uncertainty throughout the domain, with localized increases near boundaries of high-gradient regions, consistent with expected interpolation behaviour in areas of rapid spatial variation.</p>
</sec>
<sec id="Ch1.S4.SS2.SSS3">
  <label>4.2.3</label><title>Spatialize: custom precision functions</title>
      <p id="d2e5567">In this section, we demonstrate the implementation of custom precision metrics for ESI estimates. As a reminder, precision in ESI is calculated by aggregating a loss function that compares each partition-specific ESI estimate with the final aggregated estimation.</p>
      <p id="d2e5570">The <monospace>spatialize</monospace> library provides a modular framework for implementing custom loss functions. For instance, Code Snippet 7 demonstrates a custom implementation of the operational error loss, which is also available as a built-in class in the <monospace>lossfunction</monospace> module.</p>
      <p id="d2e5580"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g09.png"/></p>
      <p id="d2e5588">The function architecture consists of two nested components: an outer function that computes necessary parameters, and an inner function decorated with <monospace>@loss()</monospace> that specifies both the point-wise error calculation and the aggregation method for combining scenario-specific losses into a single precision layer.  The operational error precision can then be obtained by using <monospace>result.precision(op_error_precision)</monospace>.</p>

      <fig id="F11" specific-use="star"><label>Figure 11</label><caption><p id="d2e5600">Mean squared error and operational error precision for an ESI-IDW interpolation. <bold>(a)</bold> The original cubic type function; <bold>(b)</bold> ESI-IDW interpolation; <bold>(c)</bold> Mean squared error precision; <bold>(d)</bold> Operational error precision.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f11.png"/>

          </fig>

      <fig id="F12" specific-use="star"><label>Figure 12</label><caption><p id="d2e5623">Mean squared error and operational error for an ESI-Kriging interpolation. <bold>(a)</bold> The original cubic type function; <bold>(b)</bold> ESI-Kriging interpolation; <bold>(c)</bold> Mean squared error precision; <bold>(d)</bold> Operational error precision.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f12.png"/>

          </fig>

      <p id="d2e5644">Figures <xref ref-type="fig" rid="F11"/> and <xref ref-type="fig" rid="F12"/> compare the default MSE-based precision (contained in the <monospace>ESIResult</monospace> object) with the precision calculated using the custom operational error function for ESI-IDW and ESI-Kriging, respectively.</p>
      <p id="d2e5654">Both precision functions illustrate that ESI-IDW estimates have a higher uncertainty than those produced by ESI-Kriging in this scenario. However, each loss function highlights different aspects of this uncertainty. The mean squared error precision emphasizes regions of higher uncertainty, whereas the operational error precision clearly delineates the uncertainty in the spatial structure itself as represented by the interpolation.</p>
</sec>
<sec id="Ch1.S4.SS2.SSS4">
  <label>4.2.4</label><title>Comparison with traditional IDW</title>
      <p id="d2e5666">To demonstrate the added value of ensemble spatial interpolation, we now compare the estimates provided by standard IDW interpolation against the previously presented ESI-IDW estimations.</p>
      <p id="d2e5669">First, Code snippet 8 implements an automated hyperparameter optimization using the <monospace>idw_hparams_search</monospace> function, analogous to the <monospace>esi_hparams_search</monospace> function.</p>
      <p id="d2e5678"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g10.png"/></p>

      <fig id="F13" specific-use="star"><label>Figure 13</label><caption><p id="d2e5689">Cross-validation error for grid search for IDW interpolator without ESI. <bold>(a)</bold> Histogram of errors; <bold>(b)</bold> Errors in the sequence of scenarios during the search.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f13.png"/>

          </fig>

      <p id="d2e5704">Figure <xref ref-type="fig" rid="F13"/> illustrates the cross-validation errors for each scenario in the grid search. The minimum error obtained has a value of 0.0155 at index 0. This scenario used a radius of 0.07 and an exponent of 0.001.</p>
      <p id="d2e5709">Then, we generate estimates using the best hyperparameters found in the search, as shown in Code snippet 9.</p>
      <p id="d2e5712"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g11.png"/></p>

      <fig id="F14" specific-use="star"><label>Figure 14</label><caption><p id="d2e5722">Best estimation using IDW interpolator without ESI. <bold>(a)</bold> The original cubic type function; <bold>(b)</bold> Traditional IDW interpolation.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f14.png"/>

          </fig>

      <p id="d2e5738">Figure <xref ref-type="fig" rid="F14"/> shows the IDW estimates obtained using the optimal parameters. While the interpolator partially recovers the original image structures, ESI-IDW (Fig. <xref ref-type="fig" rid="F8"/>) achieves notably superior resemblance to the reference image.</p>
</sec>
<sec id="Ch1.S4.SS2.SSS5">
  <label>4.2.5</label><title>Comparison with SciPy</title>
      <p id="d2e5753">To benchmark our results against established Python interpolation tools, we employ the <monospace>griddata</monospace> function from the <monospace>scipy.interpolate</monospace> module using three standard methods: “nearest neighbour”, “linear” and “cubic” interpolation. Code snippet 10 demonstrates the implementation of these three approaches.</p>
      <p id="d2e5762"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g12.png"/></p>

      <fig id="F15" specific-use="star"><label>Figure 15</label><caption><p id="d2e5772">Comparison of <monospace>SciPy</monospace> estimates for the same gridded dataset. <bold>(a)</bold> Nearest-neighbour interpolation; <bold>(b)</bold> Linear interpolation; <bold>(c)</bold> Piecewise cubic interpolation.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f15.png"/>

          </fig>

      <p id="d2e5794">Figure <xref ref-type="fig" rid="F15"/> presents the estimates generated by the three <monospace>SciPy</monospace> interpolation methods. Since the ground-truth function is cubic, the cubic interpolator unsurprisingly achieves the best visual reconstruction. This illustrates the inductive bias effect: when prior knowledge about the underlying function is available, selecting a matching interpolator yields superior results. However, in practical scenarios lacking such previous knowledge, choosing an appropriate interpolator becomes challenging.</p>
      <p id="d2e5802">Finally, it should be noted that the interpolators implemented in the <monospace>SciPy</monospace> library are deterministic and therefore do not provide uncertainty quantification.</p>

      <fig id="F16" specific-use="star"><label>Figure 16</label><caption><p id="d2e5810">Comparison of ESI and SciPy estimates for the same gridded dataset. <bold>(a)</bold> ESI-IDW interpolation; <bold>(b)</bold> ESI-Kriging interpolation; <bold>(c)</bold> IDW interpolation; <bold>(d)</bold> SciPy nearest-neighbour interpolation; <bold>(e)</bold> SciPy linear interpolation; <bold>(f)</bold> SciPy piecewise cubic interpolation.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f16.png"/>

          </fig>

</sec>
<sec id="Ch1.S4.SS2.SSS6">
  <label>4.2.6</label><title>Performance comparison</title>
      <p id="d2e5846">This section provides a visual and quantitative comparison of all interpolators employed in the synthetic data case study.</p>
      <p id="d2e5849">Figure <xref ref-type="fig" rid="F16"/> presents the estimates side-by-side. Visually, ESI Kriging, along with the linear and cubic interpolators, appear to offer the best reconstruction of the target image. Notably, ESI achieves acceptable results without prior structural assumptions, as opposed to the <monospace>SciPy</monospace> interpolators.</p>

      <fig id="F17" specific-use="star"><label>Figure 17</label><caption><p id="d2e5859">Comparison of ESI and SciPy estimation errors for the same gridded dataset. <bold>(a)</bold> ESI-IDW interpolation; <bold>(b)</bold> ESI-Kriging interpolation; <bold>(c)</bold> IDW interpolation; <bold>(d)</bold> SciPy nearest-neighbour interpolation; <bold>(e)</bold> SciPy linear interpolation; <bold>(f)</bold> SciPy piecewise cubic interpolation.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f17.png"/>

          </fig>

      <p id="d2e5888">Figure <xref ref-type="fig" rid="F17"/> presents error maps for each method. Notably, the error patterns of methods that failed to fully reproduce the target structure visually – such as ESI-IDW, IDW, and nearest-neighbor interpolation – exhibit the cubic spatial structure itself, indicating their inability to capture it. In contrast, the error maps of ESI-Kriging, linear interpolation, and cubic interpolation show minimal structural patterns, confirming their superior capture of the underlying function. Additionally, all methods exhibit higher errors in areas with more pronounced value gradients.</p>
      <p id="d2e5893">Finally, Table <xref ref-type="table" rid="T2"/> presents the mean absolute error (MAE), root mean squared error (RMSE), and mean squared error (MSE) for all interpolations. The cubic interpolator achieves the lowest values across all three metrics, which is expected given the cubic nature of the underlying spatial structure. ESI-Kriging achieves the second-best performance, followed by the linear interpolator. Classic IDW demonstrates the highest errors.</p>

<table-wrap id="T2"><label>Table 2</label><caption><p id="d2e5902">Performance metrics for ESI and SciPy interpolations for the same gridded dataset.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="center"/>
     <oasis:colspec colnum="3" colname="col3" align="center"/>
     <oasis:colspec colnum="4" colname="col4" align="center"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2">MAE</oasis:entry>
         <oasis:entry colname="col3">RMSE</oasis:entry>
         <oasis:entry colname="col4">MSE</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">ESI IDW</oasis:entry>
         <oasis:entry colname="col2">0.011126</oasis:entry>
         <oasis:entry colname="col3">0.018622</oasis:entry>
         <oasis:entry colname="col4">0.000347</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ESI Kriging</oasis:entry>
         <oasis:entry colname="col2">0.004882</oasis:entry>
         <oasis:entry colname="col3">0.010482</oasis:entry>
         <oasis:entry colname="col4">0.000110</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">IDW</oasis:entry>
         <oasis:entry colname="col2">0.018195</oasis:entry>
         <oasis:entry colname="col3">0.028064</oasis:entry>
         <oasis:entry colname="col4">0.000788</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Nearest</oasis:entry>
         <oasis:entry colname="col2">0.012256</oasis:entry>
         <oasis:entry colname="col3">0.020766</oasis:entry>
         <oasis:entry colname="col4">0.000431</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Linear</oasis:entry>
         <oasis:entry colname="col2">0.005840</oasis:entry>
         <oasis:entry colname="col3">0.012281</oasis:entry>
         <oasis:entry colname="col4">0.000151</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Cubic</oasis:entry>
         <oasis:entry colname="col2">0.001769</oasis:entry>
         <oasis:entry colname="col3">0.005118</oasis:entry>
         <oasis:entry colname="col4">0.000026</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e6030">Although ESI-IDW did not achieve exceptional performance in this case study, its superior results relative to traditional IDW highlight the value of the ensemble framework in enhancing the performance of a fundamentally deterministic interpolation method.</p>
</sec>
</sec>
<sec id="Ch1.S4.SS3">
  <label>4.3</label><title>Real-world case study</title>
      <p id="d2e6042">This section presents the procedure and results from the real-world data case study, demonstrating the use of <monospace>spatialize</monospace> on non-gridded data.</p>
<sec id="Ch1.S4.SS3.SSS1">
  <label>4.3.1</label><title>Spatialize: ESI-IDW with Mondrian partitioning</title>
      <p id="d2e6056">We begin by implementing ESI with IDW as local interpolator.  As mentioned within Sect. <xref ref-type="sec" rid="Ch1.S2.SS1"/>, both Mondrian Forest and Voronoi Forest can be used as the partitioning method in the case of ESI-IDW<fn id="Ch1.Footn4"><p id="d2e6061">In contrast, when using Kriging local interpolation, <monospace>spatialize</monospace> currently implements only the Mondrian Forest partitioning approach.</p></fn>.  In this first example, we employ Mondrian partitions.</p>
      <p id="d2e6068">First, we employ the <monospace>esi_hparams_search()</monospace> function to obtain optimal parameters for the estimation. The evaluated set is shown in Code snippet 11.</p>
      <p id="d2e6074"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g13.png"/></p>
      <p id="d2e6082">Figure <xref ref-type="fig" rid="F18"/> illustrates the cross-validation errors of the 168 search scenarios.</p>

      <fig id="F18" specific-use="star"><label>Figure 18</label><caption><p id="d2e6090">Cross-validation error for the ESI-IDW non-gridded estimation parameter grid search. <bold>(a)</bold> Histogram of errors; <bold>(b)</bold> Errors in the sequence of scenarios during the search.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f18.png"/>

          </fig>

      <p id="d2e6105">The best-case scenario has the following parameters:</p>
      <p id="d2e6108"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g14.png"/></p>
      <p id="d2e6116">As observed, the optimal exponent for the IDW interpolator is relatively high. Recall that when the exponent equals zero, the local estimate becomes a simple average of all neighbors, producing a smoothing effect similar to Kriging. Conversely, as the exponent approaches infinity, IDW converges to a nearest neighbor estimator, resulting in more abrupt spatial transitions.</p>
      <p id="d2e6119">With these optimal parameters, we then perform the corresponding estimation using the <monospace>esi_nongriddata()</monospace> function, as shown in Code snippet 12.</p>
      <p id="d2e6125"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g15.png"/></p>
      <p id="d2e6134">Just like in the gridded-data case, the estimates can be retrieved using the <monospace>result.estimation()</monospace> method, while their corresponding precision is obtained through <monospace>result.precision()</monospace>.</p>
      <p id="d2e6143">Once we obtain the prediction, we use the <monospace>lf.OperationalErrorLoss()</monospace> function to implement the “Operational Error” loss function for ESI precision calculations:</p>
      <p id="d2e6149"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g16.png"/></p>
      <p id="d2e6157">This loss function can then be passed to the precision method: <monospace>result.precision(op_error)</monospace>.</p>

      <fig id="F19" specific-use="star"><label>Figure 19</label><caption><p id="d2e6165"><bold>(a)</bold> Best parameter non-gridded estimation with ESI-IDW; <bold>(b)</bold> Precision obtained with operational error loss function.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f19.png"/>

          </fig>

      <p id="d2e6180">Figure <xref ref-type="fig" rid="F19"/> shows the resulting estimation and the corresponding precision based on the operational error loss function. The figure exhibits a somewhat pixelated texture, which can be attributed to the high optimal exponent value for the local IDW interpolator. The precision map reveals elevated uncertainty near regions corresponding to the maximum estimated values.</p>
</sec>
<sec id="Ch1.S4.SS3.SSS2">
  <label>4.3.2</label><title>Spatialize: ESI-IDW with Voronoi partitioning</title>
      <p id="d2e6193">We now employ ESI-IDW with Voronoi as the partitioning method, following the same parameter search configuration and estimation procedure described in the Mondrian example.</p>
      <p id="d2e6196">Figure <xref ref-type="fig" rid="F20"/> illustrates the cross-validation errors across the 336 evaluated parameter combinations. Note that the Voronoi partitioning method yields twice the number of search scenarios compared to Mondrian partitioning, as the <monospace>data_cond</monospace> parameter offers two options: conditioning the partition on sample locations or using an unconditioned partition.</p>

      <fig id="F20" specific-use="star"><label>Figure 20</label><caption><p id="d2e6206">Cross-validation error for the ESI-IDW non-gridded estimation parameter grid search, using Voronoi partitioning method. <bold>(a)</bold> Histogram of errors; <bold>(b)</bold> Errors in the sequence of scenarios during the search.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f20.png"/>

          </fig>

      <p id="d2e6222">In this case, the best-case scenario has the following parameters:</p>
      <p id="d2e6225"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g17.png"/></p>
      <p id="d2e6233">As in the previous case using Mondrian partitioning, the optimal exponent for the local interpolator is relatively high, implying that the resulting estimates should exhibit abrupt spatial transitions. However, cross-validation selected a coarser partition for Voronoi (<inline-formula><mml:math id="M199" display="inline"><mml:mrow><mml:mtext>alpha</mml:mtext><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn></mml:mrow></mml:math></inline-formula>) than for Mondrian (<inline-formula><mml:math id="M200" display="inline"><mml:mrow><mml:mtext>alpha</mml:mtext><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.9</mml:mn></mml:mrow></mml:math></inline-formula>). Although the alpha parameter controls partition granularity in both methods, its operational mechanism differs between them, explaining this discrepancy.</p>

      <fig id="F21" specific-use="star"><label>Figure 21</label><caption><p id="d2e6263">a) Best parameter non-gridded estimation with ESI-IDW; <bold>(b)</bold> Precision obtained with operational error loss function, this time with Voronoi partition method.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f21.png"/>

          </fig>

      <p id="d2e6275">Next, we perform the corresponding ESI estimation using the <monospace>esi_nongriddata()</monospace> function with the optimal parameters for Voronoi partitioning. Figure <xref ref-type="fig" rid="F21"/> presents the resulting estimates and their associated precision based on the operational error loss function.</p>
      <p id="d2e6284">As observed with Mondrian partitioning, the estimates exhibit abrupt spatial transitions.  However, the precision map exhibits substantially higher values, indicating greater uncertainty in the Voronoi implementation. Whether this elevated uncertainty reflects geometric differences between the partitioning methods or the contrasting optimal alpha remains unclear and requires further investigation.</p>
</sec>
<sec id="Ch1.S4.SS3.SSS3">
  <label>4.3.3</label><title>Spatialize: ESI-Kriging</title>
      <p id="d2e6296">Analogous to the ESI-IDW case, we present estimates for the ESI-Kriging case, where Kriging serves as the local interpolator for ESI <fn id="Ch1.Footn5"><p id="d2e6299">The Voronoi partitioning method cannot be applied with the local Kriging interpolator, as this functionality has not yet been implemented in <monospace>spatialize</monospace>.</p></fn>.</p>
      <p id="d2e6306">The parameter grid, presented in Code snippet 13, includes four omnidirectional covariance function models, each evaluated across multiple values of alpha, nugget, range, and sill parameters.</p>
      <p id="d2e6309"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g18.png"/></p>

      <fig id="F22" specific-use="star"><label>Figure 22</label><caption><p id="d2e6320">Cross-validation error for the ESI-Kriging non-gridded estimation parameter grid search. <bold>(a)</bold> Histogram of errors; <bold>(b)</bold> Errors in the sequence of scenarios during the search.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f22.png"/>

          </fig>

      <p id="d2e6335">Figure <xref ref-type="fig" rid="F22"/> illustrates the cross-validation error for all evaluated parameter combinations.</p>
      <p id="d2e6340">In this case, the optimal parameters are:</p>
      <p id="d2e6343"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g19.png"/></p>

      <fig id="F23" specific-use="star"><label>Figure 23</label><caption><p id="d2e6353"><bold>(a)</bold> Best parameter non-gridded estimation with ESI-Kriging; <bold>(b)</bold> Precision obtained with operational error loss function.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f23.png"/>

          </fig>

      <p id="d2e6368">Using the optimal parameters, we generate the corresponding estimates via the <monospace>esi_nongriddata()</monospace> function. We compute the precision using the operational error loss function, following the same procedure as in the ESI-IDW case. Figure <xref ref-type="fig" rid="F23"/> presents the resulting estimation and precision maps. Compared to ESI-IDW, the ESI-Kriging estimates exhibit substantially smoother spatial transitions.</p>
</sec>
<sec id="Ch1.S4.SS3.SSS4">
  <label>4.3.4</label><title>Comparison with Kriging</title>
      <p id="d2e6384">To compare the ESI estimates against the gold standard method in the mining industry, we now present Ordinary Kriging estimates.</p>
      <p id="d2e6387">To produce the Ordinary Kriging estimate, an omnidirectional experimental variogram was computed and fitted to a theoretical variogram model comprising two nested spherical structures (Eq. <xref ref-type="disp-formula" rid="Ch1.E13"/>).

              <disp-formula id="Ch1.E13" content-type="numbered"><label>13</label><mml:math id="M201" display="block"><mml:mtable class="split" rowspacing="0.2ex" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:mi mathvariant="italic">γ</mml:mi><mml:mo>(</mml:mo><mml:mi>h</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mtext>sill</mml:mtext><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mfenced open="(" close=")"><mml:mrow><mml:mn mathvariant="normal">1.5</mml:mn><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mtext>range</mml:mtext><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>-</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn><mml:msup><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mtext>range</mml:mtext><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:mfenced></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>+</mml:mo><mml:msub><mml:mtext>sill</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mfenced close=")" open="("><mml:mrow><mml:mn mathvariant="normal">1.5</mml:mn><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mtext>range</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>-</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn><mml:msup><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mtext>range</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:mfenced></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>

            where:

              <disp-formula id="Ch1.Ex1"><mml:math id="M202" display="block"><mml:mrow><mml:msub><mml:mtext>sill</mml:mtext><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.17</mml:mn><mml:mo>,</mml:mo><mml:msub><mml:mtext>     range</mml:mtext><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">95</mml:mn><mml:mo>,</mml:mo><mml:msub><mml:mtext>     sill</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.14</mml:mn><mml:mo>,</mml:mo><mml:msub><mml:mtext>     range</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">220</mml:mn><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>

      <fig id="F24" specific-use="star"><label>Figure 24</label><caption><p id="d2e6545">Experimental (dots) and theoretical (blue line) variograms for the Global Ordinary Kriging example.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f24.png"/>

          </fig>

      <p id="d2e6555">Both experimental and theoretical variograms are shown in Fig. <xref ref-type="fig" rid="F24"/>.</p>
      <p id="d2e6560">Additionally, we have implemented an automated workflow that employs <monospace>scikit-learn</monospace> to run a parameter grid search for identifying the optimal variogram model, followed by <monospace>PyKrige</monospace> to perform Ordinary Kriging using the identified optimal parameters.</p>
      <p id="d2e6569">This automated approach differs from the process carried out by the expert in three ways: It uses global Kriging instead of domains depending on local stationarities; it determines variogram parameters in a heuristic way rather than through expert judgment; and it assumes that the variogram is the same in all directions (isotropy), ignoring potential anisotropies in the data. The result obtained for the parameter search is as follows:</p>
      <p id="d2e6572"><inline-graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-g20.png"/></p>

      <fig id="F25" specific-use="star"><label>Figure 25</label><caption><p id="d2e6582"><bold>(a)</bold> Global Ordinary Kriging estimation based on non-gridded example data points; <bold>(b)</bold> Automated Kriging estimation with <monospace>PyKrige</monospace>.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f25.png"/>

          </fig>

      <p id="d2e6600">Figure <xref ref-type="fig" rid="F25"/> compares the manual expert implementation of Global Ordinary Kriging (left) – previously presented in <xref ref-type="bibr" rid="bib1.bibx11" id="paren.40"/> – with the automated implementation (right).</p>
      <p id="d2e6608">As we can see in Fig. <xref ref-type="fig" rid="F25"/>, the estimation obtained with the automated algorithm is comparable to the ordinary Kriging performed manually on the basis of expert judgment. This is because the example is an ideal case of isotropy and stationarity, i.e. it fulfils the basic assumptions of a linear method such as Kriging.</p>
</sec>
<sec id="Ch1.S4.SS3.SSS5">
  <label>4.3.5</label><title>Performance comparison</title>
      <p id="d2e6621">This section provides a visual and quantitative comparison of all interpolators employed in the real-world data case study.</p>

      <fig id="F26" specific-use="star"><label>Figure 26</label><caption><p id="d2e6626">Comparison of ESI and Ordinary Kriging estimates for the same non-gridded dataset. <bold>(a)</bold> ESI-IDW-Mondrian interpolation; <bold>(b)</bold> ESI-IDW-Voronoi interpolation; <bold>(c)</bold> ESI-Kriging interpolation; <bold>(d)</bold> PyKrige automated Ordinary Kriging interpolation; <bold>(e)</bold> Ordinary Kriging interpolation.</p></caption>
            <graphic xlink:href="https://gmd.copernicus.org/articles/19/4633/2026/gmd-19-4633-2026-f26.png"/>

          </fig>

      <p id="d2e6650">Figure <xref ref-type="fig" rid="F26"/> presents the estimates side-by-side. Both ESI-IDW implementations yield visually similar results characterized by abrupt spatial transitions. In contrast, ESI-Kriging, PyKrige, and Ordinary Kriging produce substantially smoother estimates.  Notably, ESI-Kriging exhibits moderately less smoothing than the conventional Kriging approaches, potentially achieving a more favourable balance between spatial continuity and preservation of local variability.</p>
      <p id="d2e6656">We employed two approaches for quantitative performance evaluation. First, we performed leave-one-out cross-validation with global hyperparameter optimization, as individual optimization for each of the 400 samples would be computationally prohibitive. Second, we conducted 10-fold cross-validation with hyperparameter optimization performed within each fold.</p>
      <p id="d2e6659">Table <xref ref-type="table" rid="T3"/> presents the mean absolute error (MAE), root mean squared error (RMSE), and mean squared error (MSE) for all automated interpolation methods, obtained using leave-one-out cross-validation.  For both ESI and Kriging methods, parameters were determined from the previously conducted grid searches to avoid re-optimization within each fold. Both ESI-IDW implementations achieve comparable performance, although inferior to ESI-Kriging and Ordinary Kriging, with the Mondrian partitioning yielding slightly smaller errors. Ordinary Kriging, implemented with <monospace>PyKrige</monospace>, achieves the lowest RMSE and MSE values, while ESI-Kriging achieves the lowest MAE. Since RMSE and MSE penalize larger errors more heavily than MAE, these results suggest that ESI-Kriging produces more accurate estimates on average, but is more susceptible to occasional large prediction errors.</p>

<table-wrap id="T3"><label>Table 3</label><caption><p id="d2e6670">Leave-one-out cross-validation performance metrics for ESI and PyKrige interpolations for the same non-gridded dataset.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="center"/>
     <oasis:colspec colnum="3" colname="col3" align="center"/>
     <oasis:colspec colnum="4" colname="col4" align="center"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2">MAE</oasis:entry>
         <oasis:entry colname="col3">RMSE</oasis:entry>
         <oasis:entry colname="col4">MSE</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">ESI IDW Mondrian</oasis:entry>
         <oasis:entry colname="col2">0.096676</oasis:entry>
         <oasis:entry colname="col3">0.151732</oasis:entry>
         <oasis:entry colname="col4">0.023023</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ESI IDW Voronoi</oasis:entry>
         <oasis:entry colname="col2">0.096933</oasis:entry>
         <oasis:entry colname="col3">0.154417</oasis:entry>
         <oasis:entry colname="col4">0.023845</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ESI Kriging</oasis:entry>
         <oasis:entry colname="col2">0.088666</oasis:entry>
         <oasis:entry colname="col3">0.150786</oasis:entry>
         <oasis:entry colname="col4">0.022736</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PyKrige</oasis:entry>
         <oasis:entry colname="col2">0.090447</oasis:entry>
         <oasis:entry colname="col3">0.148988</oasis:entry>
         <oasis:entry colname="col4">0.022197</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e6767">Table <xref ref-type="table" rid="T4"/> presents the mean absolute error (MAE), root mean squared error (RMSE), and mean squared error (MSE) for all automated interpolation methods, obtained using 10-fold cross-validation. ESI-Kriging achieved the best performance across all metrics, followed by <monospace>PyKrige</monospace>'s Ordinary Kriging. As in the leave-one-out case, ESI-IDW with Mondrian partitioning outperformed the Voronoi method. For all methods and metrics, errors were higher than in the leave-one-out case.</p>

<table-wrap id="T4"><label>Table 4</label><caption><p id="d2e6778">K-fold cross-validation performance metrics for ESI and PyKrige interpolations for the same non-gridded dataset (<inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:mi>K</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:math></inline-formula>).</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="center"/>
     <oasis:colspec colnum="3" colname="col3" align="center"/>
     <oasis:colspec colnum="4" colname="col4" align="center"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2">MAE</oasis:entry>
         <oasis:entry colname="col3">RMSE</oasis:entry>
         <oasis:entry colname="col4">MSE</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">ESI IDW Mondrian</oasis:entry>
         <oasis:entry colname="col2">0.102496</oasis:entry>
         <oasis:entry colname="col3">0.161492</oasis:entry>
         <oasis:entry colname="col4">0.026080</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ESI IDW Voronoi</oasis:entry>
         <oasis:entry colname="col2">0.101940</oasis:entry>
         <oasis:entry colname="col3">0.162085</oasis:entry>
         <oasis:entry colname="col4">0.026271</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ESI Kriging</oasis:entry>
         <oasis:entry colname="col2">0.091971</oasis:entry>
         <oasis:entry colname="col3">0.152885</oasis:entry>
         <oasis:entry colname="col4">0.023374</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PyKrige</oasis:entry>
         <oasis:entry colname="col2">0.094391</oasis:entry>
         <oasis:entry colname="col3">0.153786</oasis:entry>
         <oasis:entry colname="col4">0.023650</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e6888">Comparing the two validation approaches reveals two key findings.</p>
      <p id="d2e6891">First, the higher errors across all methods in 10-fold validation – where training datasets are smaller – confirms that interpolation quality decreases with reduced data availability.  Second, while ESI-Kriging outperformed <monospace>PyKrige</monospace> under 10-fold validation, it showed higher RMSE and MSE under leave-one-out validation.  This suggests the ESI ensemble scheme may provide additional benefits when limited data availability makes both parameter optimization and interpolation more challenging. However, these results may be influenced by the specific fold configurations.</p>
      <p id="d2e6897">Given the ideal conditions in this dataset – isotropy, stationarity, and linear spatial correlation, as confirmed by the expert variogram analysis – one might expect Ordinary Kriging to perform best. However, as observed with IDW in the synthetic data case study, ESI's non-linear ensemble scheme proves beneficial, particularly under limited data availability.  Moreover, ESI-Kriging offers competitive performance with automated parameter selection. This provides significant advantages in more complex scenarios involving spatial heterogeneity, where determining appropriate variogram models is challenging or where available models in automatable tools such as <monospace>PyKrige</monospace> may be unsuitable.</p>
</sec>
</sec>
</sec>
<sec id="Ch1.S5" sec-type="conclusions">
  <label>5</label><title>Conclusion and future work</title>
      <p id="d2e6916">We have introduced <monospace>spatialize</monospace>, an open-source Python library that implements <italic>ensemble spatial interpolation</italic> (ESI), a novel data-driven geostatistical technique grounded in computational statistics and ensemble learning principles. The library addresses a critical gap in geostatistics by providing automated functionality with performance comparable to expert-level methods while quantifying prediction uncertainty.</p>
      <p id="d2e6925">The primary strength of <monospace>spatialize</monospace> lies in its minimal requirement for user intervention, enabling researchers without specialized geostatistical expertise to obtain optimal spatial predictions. In cases where user input is necessary – such as hyperparameter selection – the library provides tools that facilitate the process.</p>
      <p id="d2e6931">Our vision is for <monospace>spatialize</monospace> to become one of the leading open-source geostatistical libraries available in Python. To this end, future work includes the following enhancements: <list list-type="bullet"><list-item>
      <p id="d2e6939">Implement additional partition generation processes, such as Mondrian processes with random rotations, to increase the expressiveness and diversity of space partitions.</p></list-item><list-item>
      <p id="d2e6943">Integrate adaptive local interpolators to improve performance in heterogeneous spatial domains.</p></list-item><list-item>
      <p id="d2e6947">Incorporate interpolators compatible with spatial statistical tools, including conditional autoregressive (CAR)-type models.</p></list-item><list-item>
      <p id="d2e6951">Extend functionality to accommodate the estimation of categorical variables.</p></list-item><list-item>
      <p id="d2e6955">Implement GPU support to enhance computational performance and enable seamless integration with platforms such as Google Colab.</p></list-item><list-item>
      <p id="d2e6959">Provide classical geostatistical tools for expert users, including more general Kriging implementations that support nested structures and other advanced configurations.</p></list-item></list></p>
</sec>

      
      </body>
    <back><notes notes-type="codedataavailability"><title>Code and data availability</title>

      <p id="d2e6966">Both the source code for <monospace>spatialize</monospace> and the usage examples shown above are available in the spatialize project on Github <xref ref-type="bibr" rid="bib1.bibx35" id="paren.41"/>, which can be accessed at <uri>https://github.com/alges/spatialize</uri> (28 May 2026). The version presented in this paper is archived on Zenodo at <ext-link xlink:href="https://doi.org/10.5281/zenodo.16782612" ext-link-type="DOI">10.5281/zenodo.16782612</ext-link> <xref ref-type="bibr" rid="bib1.bibx34" id="paren.42"/>, along with a supplementary User Manual.</p>

      <p id="d2e6984">In particular, the usage examples are available to be run in the <monospace>examples/scripted_examples</monospace> folder.</p>

      <p id="d2e6990">The simulated data estimation example (Sect. <xref ref-type="sec" rid="Ch1.S4.SS2"/>) employs the following scripts: 
<list list-type="order"><list-item>
      <p id="d2e6999"><monospace>esi_griddata_mondrian_voronoi.py</monospace></p></list-item><list-item>
      <p id="d2e7004"><monospace>esi_griddata_and_scipy.py</monospace></p></list-item><list-item>
      <p id="d2e7009"><monospace>idw_and_esi_grid_search.py</monospace></p></list-item><list-item>
      <p id="d2e7014"><monospace>esi_custom_precision.py</monospace></p></list-item></list></p>

      <p id="d2e7018">The real-world data estimation example (Sect. <xref ref-type="sec" rid="Ch1.S4.SS3"/>) employs the following scripts: <list list-type="order"><list-item>
      <p id="d2e7025"><monospace>esi_nongriddata.py</monospace></p></list-item><list-item>
      <p id="d2e7030"><monospace>pykrige_example.py</monospace></p></list-item></list></p>

      <p id="d2e7034">The data that is used in the real-world example is part of the <monospace>spatialize</monospace> library package and is installed with it in <monospace>spatialize.resources</monospace>. Besides, the <monospace>spatialize.data</monospace> module contains the functions for loading this data.</p>
  </notes><app-group>
        <supplementary-material position="anchor"><p id="d2e7046">The supplement related to this article is available online at <inline-supplementary-material xlink:href="https://doi.org/10.5194/gmd-19-4633-2026-supplement" xlink:title="pdf">https://doi.org/10.5194/gmd-19-4633-2026-supplement</inline-supplementary-material>.</p></supplementary-material>
        </app-group><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e7055">Research conceptualisation, paper preparation, and analysis were performed by AFE, AE and FN. The ESI framework was first developed by FG, FN and AFE. FN, AFE, AE, FG, MJV, and JFS contributed to the paper edits and technical review.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e7061">The contact author has declared that none of the authors has any competing interests.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e7067">Publisher's note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. The authors bear the ultimate responsibility for providing appropriate place names. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.</p>
  </notes><ack><title>Acknowledgements</title><p id="d2e7073">This work was supported in part by the Chilean National Agency for Research and Development  ANID) under Project FONDEF IT23I013, FONDEF TA24I10053, ANID/BASAL AFB230001 and ANID AMTC CIA250010. We acknowledge the computational resources provided, the useful insights, and the support provided by the whole ALGES team.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e7078">This research has been supported by the Agencia Nacional de Investigación y Desarrollo (grant nos. ANID/BASAL AFB230001, ANID AMTC CIA250010, IT23I013, and TA24I10053).</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d2e7084">This paper was edited by Klaus Klingmüller and reviewed by two anonymous referees.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><label>Abdulwadood et al.(2021)Abdulwadood, Al-Hassany, and Mustafa</label><mixed-citation>Abdulwadood, H. W., Al-Hassany, G. S., and Mustafa, R. I.: IDW Interpolation of Soil Moisture Retention Curve Utilizing GIS, IOP Conference Series: Earth and Environmental Science, 856, 012040, <ext-link xlink:href="https://doi.org/10.1088/1755-1315/856/1/012040" ext-link-type="DOI">10.1088/1755-1315/856/1/012040</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Abzalov(2016)</label><mixed-citation>Abzalov, M.: Applied Mining Geology, vol. 12 of Modern Approaches in Solid Earth Sciences, Springer, <ext-link xlink:href="https://doi.org/10.1007/978-3-319-39264-6" ext-link-type="DOI">10.1007/978-3-319-39264-6</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Assibey-Bonsu(2017)</label><mixed-citation>Assibey-Bonsu, W.: Professor Danie Krige's First Memorial Lecture: The Basic Tenets of Evaluating the Mineral Resource Assets of Mining Companies, as Observed in Professor Danie Krige's Pioneering Work Over Half a Century, in: Geostatistics Valencia 2016, edited by: Gómez-Hernández, J., Rodrigo-Ilarri, J., Rodrigo-Clavero, M. E., Cassiraga, E., and Vargas-Guzmán, J. A., Quantitative Geology and Geostatistics, Springer, 3–25, <ext-link xlink:href="https://doi.org/10.1007/978-3-319-46819-8_1" ext-link-type="DOI">10.1007/978-3-319-46819-8_1</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Boroh et al.(2022)Boroh, Kouayep Lawou, Mfenjou, and Ngounouno</label><mixed-citation>Boroh, A. W., Kouayep Lawou, S., Mfenjou, M. L., and Ngounouno, I.: Comparison of geostatistical and machine learning models for predicting geochemical concentration of iron: case of the Nkout iron deposit (south Cameroon), J. Afr. Earth Sci., 195, 104662, <ext-link xlink:href="https://doi.org/10.1016/j.jafrearsci.2022.104662" ext-link-type="DOI">10.1016/j.jafrearsci.2022.104662</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Breiman(2001)</label><mixed-citation>Breiman, L.: Random forests, Mach. Learn., 45, 5–32, <ext-link xlink:href="https://doi.org/10.1023/A:1010933404324" ext-link-type="DOI">10.1023/A:1010933404324</ext-link>, 2001.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Chilès and Desassis(2018)</label><mixed-citation>Chilès, J.-P. and Desassis, N.: Fifty Years of Kriging, Springer International Publishing, pp. 589–612, <ext-link xlink:href="https://doi.org/10.1007/978-3-319-78999-6_29" ext-link-type="DOI">10.1007/978-3-319-78999-6_29</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Cohen and Intrator(2000)</label><mixed-citation>Cohen, S. and Intrator, N.: A hybrid projection based and Radial Basis Function architecture, in: Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), Springer, <ext-link xlink:href="https://doi.org/10.1007/3-540-45014-9_14" ext-link-type="DOI">10.1007/3-540-45014-9_14</ext-link>, 2000.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Collins et al.(2002)Collins, Schapire, and Singer</label><mixed-citation> Collins, M., Schapire, R. E., and Singer, Y.: Logistic regression, AdaBoost and Bregman distances, Mach. Learn., 48, 253–285, 2002.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>de Sousa Mendes et al.(2020)de Sousa Mendes, Demattê, Souza, Urbina Salazar, and Amorim</label><mixed-citation>de Sousa Mendes, W., Demattê, J. A., Souza, A., Urbina Salazar, D., and Amorim, M.: Geostatistics or machine learning for mapping soil attributes and agricultural practices, Revista Ceres, 67, 330–336, <ext-link xlink:href="https://doi.org/10.1590/0034-737X202067040010" ext-link-type="DOI">10.1590/0034-737X202067040010</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Džeroski and Ženko(2004)</label><mixed-citation>Džeroski, S. and Ženko, B.: Is combining classifiers with stacking better than selecting the best one?, Mach. Learn., 54, 255–273, <ext-link xlink:href="https://doi.org/10.1023/B:MACH.0000015881.36452.6e" ext-link-type="DOI">10.1023/B:MACH.0000015881.36452.6e</ext-link>, 2004.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>Egaña et al.(2021)Egaña, Navarro, Maleki, Grandón, Carter, and Soto</label><mixed-citation>Egaña, A., Navarro, F., Maleki, M., Grandón, F., Carter, F., and Soto, F.: Ensemble Spatial Interpolation: A New Approach to Natural or Anthropogenic Variable Assessment, Natural Resources Research, 30, 3777–3793, <ext-link xlink:href="https://doi.org/10.1007/s11053-021-09860-2" ext-link-type="DOI">10.1007/s11053-021-09860-2</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx12"><label>Fischer and Getis(2009)</label><mixed-citation>Fischer, M. and Getis, A., eds.: Handbook of Applied Spatial Analysis: Software Tools, Methods and Applications, Springer, <ext-link xlink:href="https://doi.org/10.1007/978-3-642-03647-7" ext-link-type="DOI">10.1007/978-3-642-03647-7</ext-link>, 2009.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>Friedman et al.(2000)Friedman, Hastie, Tibshirani, and others</label><mixed-citation>Friedman, J., Hastie, T., and Tibshirani, R.: Additive logistic regression: a statistical view of boosting (with discussion and a rejoinder by the authors), Anna. Stat., 28, 337–407, <ext-link xlink:href="https://doi.org/10.1214/aos/1016218223" ext-link-type="DOI">10.1214/aos/1016218223</ext-link>, 2000.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Hamdi et al.(2022)Hamdi, Shaban, Erradi, Mohamed, Rumi, and Salim</label><mixed-citation>Hamdi, A., Shaban, K., Erradi, A., Mohamed, A., Rumi, S. K., and Salim, F. D.: Spatiotemporal data mining: a survey on challenges and open problems, Artif. Intell. Rev., 55, 1441–1488, <ext-link xlink:href="https://doi.org/10.1007/s10462-021-09994-y" ext-link-type="DOI">10.1007/s10462-021-09994-y</ext-link>, 2022. </mixed-citation></ref>
      <ref id="bib1.bibx15"><label>Hastie et al.(2009)Hastie, Tibshirani, and Friedman</label><mixed-citation>Hastie, T., Tibshirani, R., and Friedman, J.: Elements of Statistical Learning, 2nd edn., Springer, <ext-link xlink:href="https://doi.org/10.1007/978-0-387-84858-7" ext-link-type="DOI">10.1007/978-0-387-84858-7</ext-link>, 2009.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>Hothorn and Lausen(2005)</label><mixed-citation>Hothorn, T. and Lausen, B.: Bundling classifiers by bagging trees, Comput. Stat. Data An., 49, 1068–1078, <ext-link xlink:href="https://doi.org/10.1016/j.csda.2004.06.019" ext-link-type="DOI">10.1016/j.csda.2004.06.019</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Jacobs(1995)</label><mixed-citation>Jacobs, R. A.: Methods For Combining Experts' Probability Assessments, Neural Comput., 7, 867–888, <ext-link xlink:href="https://doi.org/10.1162/neco.1995.7.5.867" ext-link-type="DOI">10.1162/neco.1995.7.5.867</ext-link>, 1995.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>Jacobs et al.(1991)Jacobs, Jordan, Nowlan, and Hinton</label><mixed-citation>Jacobs, R. A., Jordan, M. I., Nowlan, S. J., and Hinton, G. E.: Adaptive Mixtures of Local Experts, Neural Comput., 3, 79–87, <ext-link xlink:href="https://doi.org/10.1162/neco.1991.3.1.79" ext-link-type="DOI">10.1162/neco.1991.3.1.79</ext-link>, 1991.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>Jordan and Xu(1995)</label><mixed-citation>Jordan, M. I. and Xu, L.: Convergence results for the EM approach to mixtures of experts architectures, Neural Networks, 8, 1409–1431, <ext-link xlink:href="https://doi.org/10.1016/0893-6080(95)00014-3" ext-link-type="DOI">10.1016/0893-6080(95)00014-3</ext-link>, 1995.</mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Khouni et al.(2021)Khouni, Louhichi, and Ghrabi</label><mixed-citation>Khouni, I., Louhichi, G., and Ghrabi, A.: Use of GIS based Inverse Distance Weighted interpolation to assess surface water quality: Case of Wadi El Bey, Tunisia, Environmental Technology &amp; Innovation, 24, 101892, <ext-link xlink:href="https://doi.org/10.1016/j.eti.2021.101892" ext-link-type="DOI">10.1016/j.eti.2021.101892</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx21"><label>Kirkwood et al.(2022)Kirkwood, Economou, Pugeault, and Odbert</label><mixed-citation>Kirkwood, C., Economou, T., Pugeault, N., and Odbert, H.: Bayesian Deep Learning for Spatial Interpolation in the Presence of Auxiliary Information, Math. Geosci., 54, 507–531, <ext-link xlink:href="https://doi.org/10.1007/s11004-021-09988-0" ext-link-type="DOI">10.1007/s11004-021-09988-0</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx22"><label>Kleijnen(2017)</label><mixed-citation>Kleijnen, J.: Kriging: Methods and Applications, CentER Discussion Paper Series No. 2017-047, Center for Economic Research, <ext-link xlink:href="https://doi.org/10.2139/ssrn.3075151" ext-link-type="DOI">10.2139/ssrn.3075151</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx23"><label>Lakshminarayanan et al.(2014)Lakshminarayanan, Roy, and Teh</label><mixed-citation> Lakshminarayanan, B., Roy, D. M., and Teh, Y. W.: Mondrian forests: Efficient online random forests, Adv. Neural Inf. Process. Syst., 4, 3140–3148, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx24"><label>Leirvik and Yuan(2021)</label><mixed-citation>Leirvik, T. and Yuan, M.: A Machine Learning Technique for Spatial Interpolation of Solar Radiation Observations, Earth Space Science, 8, e2020EA001527, <ext-link xlink:href="https://doi.org/10.1029/2020EA001527" ext-link-type="DOI">10.1029/2020EA001527</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx25"><label>Li and Heap(2014)</label><mixed-citation>Li, J. and Heap, A. D.: Spatial interpolation methods applied in the environmental sciences: A review, 53, 173–189, <ext-link xlink:href="https://doi.org/10.1016/j.envsoft.2013.12.008" ext-link-type="DOI">10.1016/j.envsoft.2013.12.008</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx26"><label>Li et al.(2011)Li, Heap, Potter, and Daniell</label><mixed-citation>Li, J., Heap, A., Potter, A., and Daniell, J.: Application of machine learning methods to spatial interpolation of environmental variables, Environ. Modell. Softw., 26, <ext-link xlink:href="https://doi.org/10.1016/j.envsoft.2011.07.004" ext-link-type="DOI">10.1016/j.envsoft.2011.07.004</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx27"><label>Li et al.(2017)</label><mixed-citation>Li, J., Fan, Z., and Deng, M.: A Method of Spatial Interpolation of Air Pollution Concentration Considering Wind Direction and Speed, Journal of Geo-information Science, 19, 382, <ext-link xlink:href="https://doi.org/10.3724/SP.J.1047.2017.00382" ext-link-type="DOI">10.3724/SP.J.1047.2017.00382</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx28"><label>Li(2021)</label><mixed-citation>Li, Z.: An enhanced dual IDW method for high-quality geospatial interpolation, Sci. Rep., 11, 9903, <ext-link xlink:href="https://doi.org/10.1038/s41598-021-89172-w" ext-link-type="DOI">10.1038/s41598-021-89172-w</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx29"><label>Maroufpoor et al.(2020)Maroufpoor, Bozorg-Haddad, and Chu</label><mixed-citation>Maroufpoor, S., Bozorg-Haddad, O., and Chu, X.: Chapter 9 – Geostatistics: principles and methods, in: Handbook of Probabilistic Models, edited by: Samui, P., Tien Bui, D., Chakraborty, S., and Deo, R. C., Butterworth-Heinemann, pp. 229–242, <ext-link xlink:href="https://doi.org/10.1016/B978-0-12-816514-0.00009-6" ext-link-type="DOI">10.1016/B978-0-12-816514-0.00009-6</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx30"><label>McKinley and Atkinson(2020)</label><mixed-citation>McKinley, J. and Atkinson, P.: A Special Issue on the Importance of Geostatistics in the Era of Data Science, Math. Geosci., 52, 311–315, <ext-link xlink:href="https://doi.org/10.1007/s11004-020-09858-1" ext-link-type="DOI">10.1007/s11004-020-09858-1</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx31"><label>Menafoglio et al.(2018)Menafoglio, Gaetani, and Secchi</label><mixed-citation>Menafoglio, A., Gaetani, G., and Secchi, P.: Random domain decompositions for object-oriented Kriging over complex domains, Stoch. Env. Res. Risk A., 32, 3421–3437, <ext-link xlink:href="https://doi.org/10.1007/s00477-018-1596-z" ext-link-type="DOI">10.1007/s00477-018-1596-z</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx32"><label>Meng et al.(2013)</label><mixed-citation>Meng, Q., Liu, Z., and Borders, B. E.: Assessment of regression kriging for spatial interpolation – comparisons of seven GIS interpolation methods, Cartogr. Geogr. Inf. Sci., 40, 28–39, <ext-link xlink:href="https://doi.org/10.1080/15230406.2013.762138" ext-link-type="DOI">10.1080/15230406.2013.762138</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx33"><label>Mitáš and Mitášová(1988)</label><mixed-citation>Mitáš, L. and Mitášová, H.: General variational approach to the interpolation problem, Comput. Math. Appl., 16, 983–992, <ext-link xlink:href="https://doi.org/10.1016/0898-1221(88)90255-6" ext-link-type="DOI">10.1016/0898-1221(88)90255-6</ext-link>, 1988.</mixed-citation></ref>
      <ref id="bib1.bibx34"><label>Navarro et al.(2025a)Navarro, Egaña, Ehrenfeld, Garrido, Valenzuela, and Sanchez Perez</label><mixed-citation>Navarro, F., Egaña, A., Ehrenfeld, A., Garrido, F., Valenzuela, M. J., and Sanchez Perez, J. F.: Spatialize v1.0: A Python/C<inline-formula><mml:math id="M204" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula> Library for Ensemble Spatial Interpolation, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.16782612" ext-link-type="DOI">10.5281/zenodo.16782612</ext-link>, 2025a.</mixed-citation></ref>
      <ref id="bib1.bibx35"><label>Navarro et al.(2025b)Navarro, Egaña, and Garrido</label><mixed-citation>Navarro, F., Egaña, A. F., and Garrido, F.: Spatialize, Github [code], <uri>https://github.com/alges/spatialize</uri> (last access: 29 January 2026), 2025b.</mixed-citation></ref>
      <ref id="bib1.bibx36"><label>Oliver and Webster(2014)</label><mixed-citation>Oliver, M. and Webster, R.: A tutorial guide to geostatistics: Computing and modelling variograms and kriging, CATENA, 113, 56–69, <ext-link xlink:href="https://doi.org/10.1016/j.catena.2013.09.006" ext-link-type="DOI">10.1016/j.catena.2013.09.006</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx37"><label>Pannecoucke et al.(2020)Pannecoucke, Le Coz, Freulon, and de Fouquet</label><mixed-citation>Pannecoucke, L., Le Coz, M., Freulon, X., and de Fouquet, C.: Combining geostatistics and simulations of flow and transport to characterize contamination within the unsaturated zone, Sci. Total Environ., 699, 134216, <ext-link xlink:href="https://doi.org/10.1016/j.scitotenv.2019.134216" ext-link-type="DOI">10.1016/j.scitotenv.2019.134216</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx38"><label>Paudel et al.(2023)Paudel, de Wit, Boogaard, Marcos, Osinga, and Athanasiadis</label><mixed-citation>Paudel, D., de Wit, A., Boogaard, H., Marcos, D., Osinga, S., and Athanasiadis, I. N.: Interpretability of deep learning models for crop yield forecasting, Comput. Electron. Agr., 206, 107663, <ext-link xlink:href="https://doi.org/10.1016/j.compag.2023.107663" ext-link-type="DOI">10.1016/j.compag.2023.107663</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx39"><label>Reid and Grudic(2009)</label><mixed-citation>Reid, S. and Grudic, G.: Regularized linear models in stacked generalization, in: Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), Springer, <ext-link xlink:href="https://doi.org/10.1007/978-3-642-02326-2_12" ext-link-type="DOI">10.1007/978-3-642-02326-2_12</ext-link>, 2009. </mixed-citation></ref>
      <ref id="bib1.bibx40"><label>Samet(1984)</label><mixed-citation> Samet, H.: The quadtree and related hierarchical data structures, ACM Comput. Surv. (CSUR), 16, 187–260, 1984.</mixed-citation></ref>
      <ref id="bib1.bibx41"><label>Samson and Deutsch(2022)</label><mixed-citation>Samson, M. and Deutsch, C.: A Hybrid Estimation Technique Using Elliptical Radial Basis Neural Networks and Cokriging, Math. Geosci., 54, 573–591, <ext-link xlink:href="https://doi.org/10.1007/s11004-021-09969-3" ext-link-type="DOI">10.1007/s11004-021-09969-3</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx42"><label>Susanto et al.(2016)Susanto, De Souza, and He</label><mixed-citation>Susanto, F., De Souza, P., and He, J.: Spatiotemporal Interpolation for Environmental Modelling, Sensors, 16, <ext-link xlink:href="https://doi.org/10.3390/s16081245" ext-link-type="DOI">10.3390/s16081245</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx43"><label>Varouchakis et al.(2012)Varouchakis, Hristopulos, and Karatzas</label><mixed-citation>Varouchakis, E., Hristopulos, D., and Karatzas, G.: Improving kriging of groundwater level data using nonlinear normalizing transformations—a field application, Hydrolog. Sci. J., 57, 1404–1419, <ext-link xlink:href="https://doi.org/10.1080/02626667.2012.717174" ext-link-type="DOI">10.1080/02626667.2012.717174</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx44"><label>Virdee and Kottegoda(1984)</label><mixed-citation>Virdee, T. and Kottegoda, N.: A brief review of kriging and its application to optimal interpolation and observation well selection, Hydrolog. Sci. J., 29, 367–387, <ext-link xlink:href="https://doi.org/10.1080/02626668409490957" ext-link-type="DOI">10.1080/02626668409490957</ext-link>, 1984.</mixed-citation></ref>
      <ref id="bib1.bibx45"><label>Wang et al.(2019)Wang, Zhang, Lu, and Wang</label><mixed-citation>Wang, B., Zhang, N., Lu, W., and Wang, J.: Deep-learning-based seismic data interpolation: A preliminary result, GEOPHYSICS, 84, V11–V20, <ext-link xlink:href="https://doi.org/10.1190/geo2017-0495.1" ext-link-type="DOI">10.1190/geo2017-0495.1</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx46"><label>Wang et al.(2017)Wang, Akeju, and Zhao</label><mixed-citation>Wang, Y., Akeju, O. V., and Zhao, T.: Interpolation of spatially varying but sparsely measured geo-data: A comparative study, Eng. Geol., 231, 200–217, <ext-link xlink:href="https://doi.org/10.1016/j.enggeo.2017.10.019" ext-link-type="DOI">10.1016/j.enggeo.2017.10.019</ext-link>, 2017.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>Spatialize v1.0: a Python/C+ +  library  for ensemble spatial interpolation</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Abdulwadood et al.(2021)Abdulwadood, Al-Hassany, and Mustafa</label><mixed-citation>
      
Abdulwadood, H. W., Al-Hassany, G. S., and Mustafa, R. I.:
IDW Interpolation of Soil Moisture Retention Curve Utilizing GIS, IOP Conference Series: Earth and Environmental Science, 856, 012040, <a href="https://doi.org/10.1088/1755-1315/856/1/012040" target="_blank">https://doi.org/10.1088/1755-1315/856/1/012040</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Abzalov(2016)</label><mixed-citation>
      
Abzalov, M.:
Applied Mining Geology, vol. 12 of Modern Approaches in Solid Earth Sciences, Springer, <a href="https://doi.org/10.1007/978-3-319-39264-6" target="_blank">https://doi.org/10.1007/978-3-319-39264-6</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Assibey-Bonsu(2017)</label><mixed-citation>
      
Assibey-Bonsu, W.: Professor Danie Krige's First Memorial Lecture: The Basic Tenets of Evaluating the Mineral Resource Assets of Mining Companies, as Observed in Professor Danie Krige's Pioneering Work Over Half a Century, in: Geostatistics Valencia 2016, edited by: Gómez-Hernández, J., Rodrigo-Ilarri, J., Rodrigo-Clavero, M. E., Cassiraga, E., and Vargas-Guzmán, J. A., Quantitative Geology and Geostatistics, Springer, 3–25, <a href="https://doi.org/10.1007/978-3-319-46819-8_1" target="_blank">https://doi.org/10.1007/978-3-319-46819-8_1</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Boroh et al.(2022)Boroh, Kouayep Lawou, Mfenjou, and Ngounouno</label><mixed-citation>
      
Boroh, A. W., Kouayep Lawou, S., Mfenjou, M. L., and Ngounouno, I.:
Comparison of geostatistical and machine learning models for predicting geochemical concentration of iron: case of the Nkout iron deposit (south Cameroon), J. Afr. Earth Sci., 195, 104662, <a href="https://doi.org/10.1016/j.jafrearsci.2022.104662" target="_blank">https://doi.org/10.1016/j.jafrearsci.2022.104662</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Breiman(2001)</label><mixed-citation>
      
Breiman, L.: Random forests, Mach. Learn., 45, 5–32, <a href="https://doi.org/10.1023/A:1010933404324" target="_blank">https://doi.org/10.1023/A:1010933404324</a>, 2001.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Chilès and Desassis(2018)</label><mixed-citation>
      
Chilès, J.-P. and Desassis, N.:
Fifty Years of Kriging, Springer International Publishing, pp. 589–612, <a href="https://doi.org/10.1007/978-3-319-78999-6_29" target="_blank">https://doi.org/10.1007/978-3-319-78999-6_29</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Cohen and Intrator(2000)</label><mixed-citation>
      
Cohen, S. and Intrator, N.: A hybrid projection based and Radial Basis Function architecture, in: Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), Springer, <a href="https://doi.org/10.1007/3-540-45014-9_14" target="_blank">https://doi.org/10.1007/3-540-45014-9_14</a>, 2000.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Collins et al.(2002)Collins, Schapire, and Singer</label><mixed-citation>
      
Collins, M., Schapire, R. E., and Singer, Y.:
Logistic regression, AdaBoost and Bregman distances, Mach. Learn., 48, 253–285, 2002.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>de Sousa Mendes et al.(2020)de Sousa Mendes, Demattê, Souza, Urbina Salazar, and Amorim</label><mixed-citation>
      
de Sousa Mendes, W., Demattê, J. A., Souza, A., Urbina Salazar, D., and Amorim, M.:
Geostatistics or machine learning for mapping soil attributes and agricultural practices, Revista Ceres, 67, 330–336, <a href="https://doi.org/10.1590/0034-737X202067040010" target="_blank">https://doi.org/10.1590/0034-737X202067040010</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Džeroski and Ženko(2004)</label><mixed-citation>
      
Džeroski, S. and Ženko, B.: Is combining classifiers with stacking better than selecting the best one?, Mach. Learn., 54, 255–273, <a href="https://doi.org/10.1023/B:MACH.0000015881.36452.6e" target="_blank">https://doi.org/10.1023/B:MACH.0000015881.36452.6e</a>, 2004.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Egaña et al.(2021)Egaña, Navarro, Maleki, Grandón, Carter, and Soto</label><mixed-citation>
      
Egaña, A., Navarro, F., Maleki, M., Grandón, F., Carter, F., and Soto, F.: Ensemble Spatial Interpolation: A New Approach to Natural or Anthropogenic Variable Assessment, Natural Resources Research, 30, 3777–3793, <a href="https://doi.org/10.1007/s11053-021-09860-2" target="_blank">https://doi.org/10.1007/s11053-021-09860-2</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Fischer and Getis(2009)</label><mixed-citation>
      
Fischer, M. and Getis, A., eds.:
Handbook of Applied Spatial Analysis: Software Tools, Methods and Applications, Springer, <a href="https://doi.org/10.1007/978-3-642-03647-7" target="_blank">https://doi.org/10.1007/978-3-642-03647-7</a>, 2009.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>Friedman et al.(2000)Friedman, Hastie, Tibshirani, and others</label><mixed-citation>
      
Friedman, J., Hastie, T., and Tibshirani, R.: Additive logistic regression: a statistical view of boosting (with discussion and a rejoinder by the authors), Anna. Stat., 28, 337–407, <a href="https://doi.org/10.1214/aos/1016218223" target="_blank">https://doi.org/10.1214/aos/1016218223</a>, 2000.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Hamdi et al.(2022)Hamdi, Shaban, Erradi, Mohamed, Rumi, and Salim</label><mixed-citation>
      
Hamdi, A., Shaban, K., Erradi, A., Mohamed, A., Rumi, S. K., and Salim, F. D.:
Spatiotemporal data mining: a survey on challenges and open problems, Artif. Intell. Rev., 55, 1441–1488, <a href="https://doi.org/10.1007/s10462-021-09994-y" target="_blank">https://doi.org/10.1007/s10462-021-09994-y</a>, 2022.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>Hastie et al.(2009)Hastie, Tibshirani, and Friedman</label><mixed-citation>
      
Hastie, T., Tibshirani, R., and Friedman, J.:
Elements of Statistical Learning, 2nd edn., Springer, <a href="https://doi.org/10.1007/978-0-387-84858-7" target="_blank">https://doi.org/10.1007/978-0-387-84858-7</a>, 2009.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Hothorn and Lausen(2005)</label><mixed-citation>
      
Hothorn, T. and Lausen, B.: Bundling classifiers by bagging trees, Comput. Stat. Data An., 49, 1068–1078, <a href="https://doi.org/10.1016/j.csda.2004.06.019" target="_blank">https://doi.org/10.1016/j.csda.2004.06.019</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Jacobs(1995)</label><mixed-citation>
      
Jacobs, R. A.:
Methods For Combining Experts' Probability Assessments, Neural Comput., 7, 867–888, <a href="https://doi.org/10.1162/neco.1995.7.5.867" target="_blank">https://doi.org/10.1162/neco.1995.7.5.867</a>, 1995.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Jacobs et al.(1991)Jacobs, Jordan, Nowlan, and Hinton</label><mixed-citation>
      
Jacobs, R. A., Jordan, M. I., Nowlan, S. J., and Hinton, G. E.: Adaptive Mixtures of Local Experts, Neural Comput., 3, 79–87, <a href="https://doi.org/10.1162/neco.1991.3.1.79" target="_blank">https://doi.org/10.1162/neco.1991.3.1.79</a>, 1991.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Jordan and Xu(1995)</label><mixed-citation>
      
Jordan, M. I. and Xu, L.: Convergence results for the EM approach to mixtures of experts architectures, Neural Networks, 8, 1409–1431, <a href="https://doi.org/10.1016/0893-6080(95)00014-3" target="_blank">https://doi.org/10.1016/0893-6080(95)00014-3</a>, 1995.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Khouni et al.(2021)Khouni, Louhichi, and Ghrabi</label><mixed-citation>
      
Khouni, I., Louhichi, G., and Ghrabi, A.:
Use of GIS based Inverse Distance Weighted interpolation to assess surface water quality: Case of Wadi El Bey, Tunisia, Environmental Technology &amp; Innovation, 24, 101892, <a href="https://doi.org/10.1016/j.eti.2021.101892" target="_blank">https://doi.org/10.1016/j.eti.2021.101892</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>Kirkwood et al.(2022)Kirkwood, Economou, Pugeault, and Odbert</label><mixed-citation>
      
Kirkwood, C., Economou, T., Pugeault, N., and Odbert, H.:
Bayesian Deep Learning for Spatial Interpolation in the Presence of Auxiliary Information, Math. Geosci., 54, 507–531, <a href="https://doi.org/10.1007/s11004-021-09988-0" target="_blank">https://doi.org/10.1007/s11004-021-09988-0</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>Kleijnen(2017)</label><mixed-citation>
      
Kleijnen, J.:
Kriging: Methods and Applications, CentER Discussion Paper Series No. 2017-047, Center for Economic Research, <a href="https://doi.org/10.2139/ssrn.3075151" target="_blank">https://doi.org/10.2139/ssrn.3075151</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>Lakshminarayanan et al.(2014)Lakshminarayanan, Roy, and Teh</label><mixed-citation>
      
Lakshminarayanan, B., Roy, D. M., and Teh, Y. W.: Mondrian forests: Efficient online random forests, Adv. Neural Inf. Process. Syst., 4, 3140–3148, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Leirvik and Yuan(2021)</label><mixed-citation>
      
Leirvik, T. and Yuan, M.:
A Machine Learning Technique for Spatial Interpolation of Solar Radiation Observations, Earth Space Science, 8, e2020EA001527, <a href="https://doi.org/10.1029/2020EA001527" target="_blank">https://doi.org/10.1029/2020EA001527</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>Li and Heap(2014)</label><mixed-citation>
      
Li, J. and Heap, A. D.: Spatial interpolation methods applied in the environmental sciences: A review, 53, 173–189, <a href="https://doi.org/10.1016/j.envsoft.2013.12.008" target="_blank">https://doi.org/10.1016/j.envsoft.2013.12.008</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>Li et al.(2011)Li, Heap, Potter, and Daniell</label><mixed-citation>
      
Li, J., Heap, A., Potter, A., and Daniell, J.:
Application of machine learning methods to spatial interpolation of environmental variables, Environ. Modell. Softw., 26, <a href="https://doi.org/10.1016/j.envsoft.2011.07.004" target="_blank">https://doi.org/10.1016/j.envsoft.2011.07.004</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>Li et al.(2017)</label><mixed-citation>
      
Li, J., Fan, Z., and Deng, M.:
A Method of Spatial Interpolation of Air Pollution Concentration Considering Wind Direction and Speed, Journal of Geo-information Science, 19, 382, <a href="https://doi.org/10.3724/SP.J.1047.2017.00382" target="_blank">https://doi.org/10.3724/SP.J.1047.2017.00382</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>Li(2021)</label><mixed-citation>
      
Li, Z.:
An enhanced dual IDW method for high-quality geospatial interpolation, Sci. Rep., 11, 9903, <a href="https://doi.org/10.1038/s41598-021-89172-w" target="_blank">https://doi.org/10.1038/s41598-021-89172-w</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>Maroufpoor et al.(2020)Maroufpoor, Bozorg-Haddad, and Chu</label><mixed-citation>
      
Maroufpoor, S., Bozorg-Haddad, O., and Chu, X.:
Chapter 9 – Geostatistics: principles and methods, in: Handbook of Probabilistic Models, edited by: Samui, P., Tien Bui, D., Chakraborty, S., and Deo, R. C., Butterworth-Heinemann, pp. 229–242, <a href="https://doi.org/10.1016/B978-0-12-816514-0.00009-6" target="_blank">https://doi.org/10.1016/B978-0-12-816514-0.00009-6</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>McKinley and Atkinson(2020)</label><mixed-citation>
      
McKinley, J. and Atkinson, P.:
A Special Issue on the Importance of Geostatistics in the Era of Data Science, Math. Geosci., 52, 311–315, <a href="https://doi.org/10.1007/s11004-020-09858-1" target="_blank">https://doi.org/10.1007/s11004-020-09858-1</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>Menafoglio et al.(2018)Menafoglio, Gaetani, and Secchi</label><mixed-citation>
      
Menafoglio, A., Gaetani, G., and Secchi, P.:
Random domain decompositions for object-oriented Kriging over complex domains, Stoch. Env. Res. Risk A., 32, 3421–3437, <a href="https://doi.org/10.1007/s00477-018-1596-z" target="_blank">https://doi.org/10.1007/s00477-018-1596-z</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>Meng et al.(2013)</label><mixed-citation>
      
Meng, Q., Liu, Z., and Borders, B. E.: Assessment of regression kriging for spatial interpolation – comparisons of seven GIS interpolation methods, Cartogr. Geogr. Inf. Sci., 40, 28–39, <a href="https://doi.org/10.1080/15230406.2013.762138" target="_blank">https://doi.org/10.1080/15230406.2013.762138</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>Mitáš and Mitášová(1988)</label><mixed-citation>
      
Mitáš, L. and Mitášová, H.: General variational approach to the interpolation problem, Comput. Math. Appl., 16, 983–992, <a href="https://doi.org/10.1016/0898-1221(88)90255-6" target="_blank">https://doi.org/10.1016/0898-1221(88)90255-6</a>, 1988.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>Navarro et al.(2025a)Navarro, Egaña, Ehrenfeld, Garrido, Valenzuela, and Sanchez Perez</label><mixed-citation>
      
Navarro, F., Egaña, A., Ehrenfeld, A., Garrido, F., Valenzuela, M. J., and Sanchez Perez, J. F.: Spatialize v1.0: A Python/C+ +  Library for Ensemble Spatial Interpolation, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.16782612" target="_blank">https://doi.org/10.5281/zenodo.16782612</a>, 2025a.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>Navarro et al.(2025b)Navarro, Egaña, and Garrido</label><mixed-citation>
      
Navarro, F., Egaña, A. F., and Garrido, F.: Spatialize, Github [code], <a href="https://github.com/alges/spatialize" target="_blank"/> (last access: 29 January 2026), 2025b.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>Oliver and Webster(2014)</label><mixed-citation>
      
Oliver, M. and Webster, R.:
A tutorial guide to geostatistics: Computing and modelling variograms and kriging, CATENA, 113, 56–69, <a href="https://doi.org/10.1016/j.catena.2013.09.006" target="_blank">https://doi.org/10.1016/j.catena.2013.09.006</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>Pannecoucke et al.(2020)Pannecoucke, Le Coz, Freulon, and de Fouquet</label><mixed-citation>
      
Pannecoucke, L., Le Coz, M., Freulon, X., and de Fouquet, C.:
Combining geostatistics and simulations of flow and transport to characterize contamination within the unsaturated zone, Sci. Total Environ., 699, 134216, <a href="https://doi.org/10.1016/j.scitotenv.2019.134216" target="_blank">https://doi.org/10.1016/j.scitotenv.2019.134216</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>Paudel et al.(2023)Paudel, de Wit, Boogaard, Marcos, Osinga, and Athanasiadis</label><mixed-citation>
      
Paudel, D., de Wit, A., Boogaard, H., Marcos, D., Osinga, S., and Athanasiadis, I. N.:
Interpretability of deep learning models for crop yield forecasting, Comput. Electron. Agr., 206, 107663, <a href="https://doi.org/10.1016/j.compag.2023.107663" target="_blank">https://doi.org/10.1016/j.compag.2023.107663</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>Reid and Grudic(2009)</label><mixed-citation>
      
Reid, S. and Grudic, G.: Regularized linear models in stacked generalization, in: Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), Springer, <a href="https://doi.org/10.1007/978-3-642-02326-2_12" target="_blank">https://doi.org/10.1007/978-3-642-02326-2_12</a>, 2009.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>Samet(1984)</label><mixed-citation>
      
Samet, H.:
The quadtree and related hierarchical data structures, ACM Comput. Surv. (CSUR), 16, 187–260, 1984.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>Samson and Deutsch(2022)</label><mixed-citation>
      
Samson, M. and Deutsch, C.:
A Hybrid Estimation Technique Using Elliptical Radial Basis Neural Networks and Cokriging, Math. Geosci., 54, 573–591, <a href="https://doi.org/10.1007/s11004-021-09969-3" target="_blank">https://doi.org/10.1007/s11004-021-09969-3</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>Susanto et al.(2016)Susanto, De Souza, and He</label><mixed-citation>
      
Susanto, F., De Souza, P., and He, J.:
Spatiotemporal Interpolation for Environmental Modelling, Sensors, 16, <a href="https://doi.org/10.3390/s16081245" target="_blank">https://doi.org/10.3390/s16081245</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>Varouchakis et al.(2012)Varouchakis, Hristopulos, and Karatzas</label><mixed-citation>
      
Varouchakis, E., Hristopulos, D., and Karatzas, G.:
Improving kriging of groundwater level data using nonlinear normalizing transformations—a field application, Hydrolog. Sci. J., 57, 1404–1419, <a href="https://doi.org/10.1080/02626667.2012.717174" target="_blank">https://doi.org/10.1080/02626667.2012.717174</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>Virdee and Kottegoda(1984)</label><mixed-citation>
      
Virdee, T. and Kottegoda, N.:
A brief review of kriging and its application to optimal interpolation and observation well selection, Hydrolog. Sci. J., 29, 367–387, <a href="https://doi.org/10.1080/02626668409490957" target="_blank">https://doi.org/10.1080/02626668409490957</a>, 1984.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib45"><label>Wang et al.(2019)Wang, Zhang, Lu, and Wang</label><mixed-citation>
      
Wang, B., Zhang, N., Lu, W., and Wang, J.:
Deep-learning-based seismic data interpolation: A preliminary result, GEOPHYSICS, 84, V11–V20, <a href="https://doi.org/10.1190/geo2017-0495.1" target="_blank">https://doi.org/10.1190/geo2017-0495.1</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib46"><label>Wang et al.(2017)Wang, Akeju, and Zhao</label><mixed-citation>
      
Wang, Y., Akeju, O. V., and Zhao, T.:
Interpolation of spatially varying but sparsely measured geo-data: A comparative study, Eng. Geol., 231, 200–217, <a href="https://doi.org/10.1016/j.enggeo.2017.10.019" target="_blank">https://doi.org/10.1016/j.enggeo.2017.10.019</a>, 2017.

    </mixed-citation></ref-html>--></article>
