Monte Carlo Post-analysis package for global sensitivity analysis and integration
Project description
MCPost: Monte Carlo Post-analysis Package
MCPost is a comprehensive Python package for post-analysis of Monte Carlo samples, providing tools for global sensitivity analysis (GSA) and Monte Carlo integration with modern packaging standards and extensive documentation.
Features
Global Sensitivity Analysis
- Multiple sensitivity metrics: Mutual Information, Distance Correlation, Permutation Importance
- Gaussian Process surrogates with Automatic Relevance Determination (ARD)
- Sobol' indices for variance-based sensitivity analysis
- Partial Dependence Plots for interpretable results
- Robust preprocessing with automatic constant column detection
Monte Carlo Integration
- Standard Monte Carlo integration with importance sampling
- Quasi-Monte Carlo methods (Sobol, Halton sequences)
- Automatic integration with adaptive sampling strategies
- Flexible PDF specification for target and sampling distributions
Modern Package Features
- Type hints and comprehensive documentation
- Modular design with clean public APIs
- Optional dependencies for visualization and development
- Extensive testing with property-based tests
- Performance optimizations for large datasets
Installation
MCPost supports multiple installation methods to suit different use cases:
Basic Installation
For core functionality (GSA and integration without plotting):
pip install mcpost
Installation with Visualization Support
For full functionality including plotting and visualization:
pip install mcpost[viz]
Development Installation
For contributors and developers:
# Clone the repository
git clone https://github.com/mcpost/mcpost.git
cd mcpost
# Install in development mode with all dependencies
pip install -e .[dev]
# Run tests to verify installation
pytest
Installation from Source
For the latest development version:
pip install git+https://github.com/zzhang0123/mcpost.git
Conda Installation
MCPost will be available on conda-forge (coming soon):
conda install -c conda-forge mcpost
Quick Start
Global Sensitivity Analysis
MCPost provides comprehensive GSA capabilities with multiple sensitivity metrics:
import numpy as np
from mcpost import gsa_pipeline
# Generate sample data (Ishigami function example)
np.random.seed(42)
n_samples = 1000
X = np.random.uniform(-np.pi, np.pi, (n_samples, 3))
# Ishigami function: f(x1,x2,x3) = sin(x1) + 7*sin(x2)^2 + 0.1*x3^4*sin(x1)
y = (np.sin(X[:, 0]) +
7 * np.sin(X[:, 1])**2 +
0.1 * X[:, 2]**4 * np.sin(X[:, 0]))
Y = y.reshape(-1, 1)
# Run comprehensive GSA analysis
results = gsa_pipeline(
X, Y,
param_names=["x1", "x2", "x3"],
feature_names=["ishigami"],
scaler="minmax",
enable_sobol=True,
enable_gp=True,
enable_perm=True,
make_pdp=True
)
# View sensitivity results
print("Sensitivity Analysis Results:")
print(results["results"]["ishigami"]["table"])
# Plot sensitivity metrics (requires matplotlib)
from mcpost import plot_sensitivity_metrics
plot_sensitivity_metrics(results, save_path="sensitivity_plot.png")
Advanced GSA Usage
# Custom GSA configuration
from mcpost import GSAConfig, gsa_for_target
# Configure GSA parameters
config = GSAConfig()
config.DEFAULT_SCALER = "standard"
config.DEFAULT_N_SOBOL = 8192
# Run GSA for specific target
target_results = gsa_for_target(
X, Y[:, 0], # Single target
param_names=["x1", "x2", "x3"],
target_name="ishigami",
scaler=config.DEFAULT_SCALER,
n_sobol=config.DEFAULT_N_SOBOL
)
Monte Carlo Integration
MCPost supports various integration methods for different use cases:
import numpy as np
from mcpost import monte_carlo_integral, qmc_integral_auto
# Define integration problem: E[x*sin(y)] where (x,y) ~ N(0,I)
def target_pdf(theta):
"""Target probability density function (standard normal)"""
return np.exp(-0.5 * np.sum(theta**2, axis=1)) / (2 * np.pi)
def integrand(theta):
"""Function to integrate: f(x,y) = x * sin(y)"""
return theta[:, 0] * np.sin(theta[:, 1])
# Method 1: Standard Monte Carlo
np.random.seed(42)
theta_samples = np.random.normal(0, 1, (5000, 2))
f_values = integrand(theta_samples)
mc_result = monte_carlo_integral(theta_samples, f_values, target_pdf)
print(f"Monte Carlo result: {mc_result['integral']:.6f} ± {mc_result['uncertainty']:.6f}")
# Method 2: Quasi-Monte Carlo (automatic)
qmc_result = qmc_integral_auto(
N_samples=4096,
N_params=2,
data_func=integrand,
p_target=target_pdf,
bounds=[(-4, 4), (-4, 4)] # Integration bounds
)
print(f"QMC result: {qmc_result['integral']:.6f}")
# Method 3: QMC with importance sampling
from mcpost import qmc_integral_importance
def importance_pdf(theta):
"""Importance sampling distribution"""
return np.exp(-0.25 * np.sum(theta**2, axis=1)) / (4 * np.pi)
qmc_is_result = qmc_integral_importance(
N_samples=2048,
N_params=2,
data_func=integrand,
p_target=target_pdf,
q_sample=importance_pdf,
bounds=[(-3, 3), (-3, 3)]
)
print(f"QMC + Importance Sampling: {qmc_is_result['integral']:.6f}")
Integration with Custom Distributions
# Example: Integration over custom parameter space
def custom_target(theta):
"""Custom target distribution (mixture of Gaussians)"""
comp1 = 0.6 * np.exp(-0.5 * np.sum((theta - 1)**2, axis=1))
comp2 = 0.4 * np.exp(-0.5 * np.sum((theta + 1)**2, axis=1))
return (comp1 + comp2) / (2 * np.pi)
def complex_integrand(theta):
"""More complex integrand"""
return np.exp(theta[:, 0]) * np.cos(theta[:, 1]) * theta[:, 0]**2
# Use adaptive QMC integration
result = qmc_integral_auto(
N_samples=8192,
N_params=2,
data_func=complex_integrand,
p_target=custom_target,
bounds=[(-3, 3), (-3, 3)],
qmc_method="sobol" # or "halton"
)
Documentation and Resources
Complete Documentation
- Getting Started Tutorial: Your first MCPost analysis
- GSA Deep Dive: Advanced sensitivity analysis
- Extension Guide: Creating custom methods
Quick References
Learning Resources
- Getting Started Tutorial: Your first MCPost analysis
- GSA Deep Dive: Advanced sensitivity analysis
Example Applications
- Climate Modeling: GSA for climate model parameters
- Integration Comparison: Monte Carlo integration examples
Requirements
Core Dependencies
- Python 3.8+
- NumPy >= 1.20.0
- Pandas >= 1.3.0
- Scikit-learn >= 1.0.0
- SciPy >= 1.7.0
- dcor >= 0.5.0
- SALib >= 1.4.0
Optional Dependencies
- Visualization: matplotlib >= 3.5.0
- Development: pytest, hypothesis, black, mypy
- Documentation: sphinx, jupyter, nbsphinx
Contributing
We welcome contributions! Please see our Contributing Guide for details.
Development Setup
git clone https://github.com/zzhang0123/mcpost.git
cd mcpost
pip install -e .[dev]
pytest
Testing
MCPost includes a comprehensive test suite:
# Run all tests
pytest tests/
# Run specific test categories
pytest tests/test_gsa/ # GSA functionality tests
pytest tests/test_integration/ # Integration tests
pytest tests/test_utils/ # Utility tests
# Run property-based tests
pytest tests/ -k "property"
# Run with coverage
pytest tests/ --cov=mcpost --cov-report=html
License
This project is licensed under the MIT License - see the LICENSE file for details.
Citation
If you use MCPost in your research, please cite:
@software{mcpost,
title={MCPost: Monte Carlo Post-analysis Package},
author={MCPost Contributors},
url={https://zh-zhang.com/mcpost/},
version={0.1.2},
year={2026}
}
Acknowledgments
MCPost builds upon several excellent open-source libraries:
- Scikit-learn for machine learning algorithms
- SALib for Sobol' sensitivity analysis
- dcor for distance correlation
- SciPy for scientific computing
- NumPy for numerical computing
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mc_post-0.1.3.tar.gz.
File metadata
- Download URL: mc_post-0.1.3.tar.gz
- Upload date:
- Size: 99.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71b2d6827e66c7953d7fdcd76277e7ddc4272e9e2810e05b25d1454f01c47806
|
|
| MD5 |
11229c2083d95aea1dabc47652dd14a9
|
|
| BLAKE2b-256 |
a00f6bb8ddb0b0b77e6a825e112599acd5f4374e6fa03321b958ba4f55928e8e
|
Provenance
The following attestation bundles were made for mc_post-0.1.3.tar.gz:
Publisher:
release.yml on zzhang0123/mcpost
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mc_post-0.1.3.tar.gz -
Subject digest:
71b2d6827e66c7953d7fdcd76277e7ddc4272e9e2810e05b25d1454f01c47806 - Sigstore transparency entry: 798611198
- Sigstore integration time:
-
Permalink:
zzhang0123/mcpost@88e6f24d289bd463a29ff16bb2ddd15fc2c117aa -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/zzhang0123
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@88e6f24d289bd463a29ff16bb2ddd15fc2c117aa -
Trigger Event:
push
-
Statement type:
File details
Details for the file mc_post-0.1.3-py3-none-any.whl.
File metadata
- Download URL: mc_post-0.1.3-py3-none-any.whl
- Upload date:
- Size: 55.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2d133e506409283f58d8cade6eab2b7b3a9f56460ac4c4b1269b72fbc040328
|
|
| MD5 |
c18a0753e1fbdf04c79b7b5db6c0f333
|
|
| BLAKE2b-256 |
5c6c19f8bf88451cfc65a294985540ca7fcadb0c72995045ab746c118e5ee764
|
Provenance
The following attestation bundles were made for mc_post-0.1.3-py3-none-any.whl:
Publisher:
release.yml on zzhang0123/mcpost
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mc_post-0.1.3-py3-none-any.whl -
Subject digest:
d2d133e506409283f58d8cade6eab2b7b3a9f56460ac4c4b1269b72fbc040328 - Sigstore transparency entry: 798611201
- Sigstore integration time:
-
Permalink:
zzhang0123/mcpost@88e6f24d289bd463a29ff16bb2ddd15fc2c117aa -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/zzhang0123
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@88e6f24d289bd463a29ff16bb2ddd15fc2c117aa -
Trigger Event:
push
-
Statement type: