Uncertainty Quantification (Monte Carlo & LHS)
fastspa supports uncertainty propagation by repeatedly sampling uncertain inputs and re-running SPA.
Monte Carlo uncertainty
from fastspa import SPA
spa = SPA(A, emissions, sectors=sectors)
mc = spa.monte_carlo(
sector=42,
depth=8,
n_samples=500,
intensity_cv=0.2, # 20% coefficient of variation on direct intensities
distribution="lognormal",
seed=42,
)
print(mc.total_intensity.mean, mc.total_intensity.ci_low, mc.total_intensity.ci_high)
Sector contribution uncertainty
Monte Carlo results report uncertainty on leaf-sector contributions.
sector_stats = mc.sector_contributions
print(sector_stats[10].mean, sector_stats[10].ci_low, sector_stats[10].ci_high)
If pandas is installed:
mc.sector_contributions_dataframe()
Latin Hypercube Sampling (LHS)
For the same distributional assumptions, LHS can reduce variance in estimates with fewer samples.
mc_lhs = spa.monte_carlo(
sector=42,
depth=8,
n_samples=200,
intensity_cv=0.2,
sampling="lhs",
seed=42,
)
Sensitivity (elasticities)
Compute elasticities of total intensity to each direct intensity:
sens = spa.sensitivity(sector=42)
These elasticities sum to 1.0 for a given target sector.