Quick Start
HDMRLib supports two related decomposition formulations:
HDMR is useful when you want to work explicitly with HDMR-based formulations
EMPR provides the same high-level workflow through an alternative decomposition formulation
In both cases, the workflow is the same:
input data → decomposition → components → reconstruction
End-to-end example with HDMR
import numpy as np
from hdmrlib import HDMR
X = np.random.rand(10, 10)
hdmr = HDMR(X, order=2)
X_reconstructed = hdmr.reconstruct()
components = hdmr.components()
This computes an HDMR decomposition of X up to order 2.
hdmr.reconstruct()returns a reconstruction based on the computed decompositionhdmr.components()returns the extracted component terms
Understanding the outputs
The components() method returns the component functions produced by the decomposition. These are typically organized by term name, such as lower-order individual terms and interaction terms.
For example, a call such as:
selected = hdmr.components(elements=["g_0", "g_1", "g_2", "g_1,2"])
returns only the requested components.
This is useful when you want to inspect specific lower-order terms or selected interactions rather than the full decomposition output.
Reconstructing lower-order approximations
X_order1 = hdmr.reconstruct(order=1)
This reconstructs X using only terms up to order 1.
Use reconstruct(order=...) when you want to study how much of the data can be approximated using only lower-order structure. This is especially useful when comparing simplified approximations against the full reconstruction.
Running the same workflow with EMPR
import numpy as np
from hdmrlib import EMPR
X = np.random.rand(10, 10)
empr = EMPR(X, order=2)
X_reconstructed = empr.reconstruct()
components = empr.components()
The same workflow applies to EMPR: compute a decomposition, inspect the extracted components, and reconstruct the data from the resulting representation.
Choosing between HDMR and EMPR
As a starting point:
use HDMR when you want to work specifically with HDMR-based formulations
use EMPR when you want to compare an alternative formulation within the same workflow
Since both follow a consistent interface, it is easy to compare them within the same workflow.