Skip to content

yanisidir/Bayesian-Inference---MCMC

Repository files navigation

# Bayesian Inference - MCMC

[![Python](https://img.shields.io/badge/python-≥3.9-blue.svg)](https://www.python.org/)
[![Dependencies](https://img.shields.io/badge/dependencies-requirements.txt-green.svg)](./requirements.txt)

Ce dépôt regroupe quatre scripts qui mettent en œuvre l’**inférence bayésienne** pour ajuster des modèles à des données :
- estimation par **maximum de vraisemblance** (χ²) avec **bruit gaussien coloré**,
- **MCMC “fait maison”** (Metropolis–Hastings) avec matrice de covariance complète,
- **MCMC avec `emcee`** et tests de convergence (Gelman–Rubin, autocorrélation),
- application à un **spectre réel de galaxie** pour estimer le **redshift** via le doublet [O III] (4959–5007 Å).

Les scripts enregistrent automatiquement les figures en **PNG** dans le dossier courant.

---

## 📂 Structure proposée

Bayesian Inference - MCMC/ │ ├── 1_chi2_minimisation_colored_noise.py ├── 2_mcmc_metropolis_hastings.py ├── 3_mcmc_emcee_and_convergence.py ├── 4_galaxy_spectrum_oiii_redshift.py ├── data/ │ ├── mydata.npz # PSD, y, f, r (TP données simulées) │ └── f1245_888.dat # Spectre galaxie KISSR 127 (KPNO/KISS) ├── figures/ └── README.md


> Si tes fichiers ont d’autres noms, mets simplement ce README à jour pour refléter la réalité.

---

## 🧰 Contenu des scripts

### 1) `1_chi2_minimisation_colored_noise.py`
- Charge `data/mydata.npz` contenant `psd`, `y`, `f`, `r`.
- Génère du **bruit coloré** à partir d’une **PSD** ; estime la **matrice de covariance** par Monte Carlo.
- Ajuste un **profil NFW généralisé + gaussienne** (fusion d’une sous-structure) via **`curve_fit`**.
- Calcule **χ²**, ddl, et enregistre :
  - `data_profile.png`, `inverse_covariance.png`, `fit_vs_data.png`, `triangle_plot.png`.

### 2) `2_mcmc_metropolis_hastings.py`
- Implémente un **Metropolis–Hastings** pur **NumPy** :
  - `log_prior` borné, `log_likelihood` avec **covariance complète** (bruit coloré), `log_acceptance`.
- Lance **une** ou **plusieurs chaînes** (multi-chaînes), trace les **traces** et **nuages de points** (ex. `(rp, rho0)`).
- Sauvegarde (exemples) :  
  - `mcmc_data_profile.png`, `mcmc_inverse_covariance.png`,  
  - `mcmc_trace_rho0_main.png`, `mcmc_scatter_rp_rho0_main.png`,  
  - `mcmc_traces_rho0_chains.png`, `mcmc_scatter_rp_rho0_chains.png`.

### 3) `3_mcmc_emcee_and_convergence.py`
- Utilise **`emcee`** (Ensemble Sampler) sur le même modèle.
- Tests de **convergence** : **Gelman–Rubin** (R̂), **autocorrélation** et **temps d’autocorrélation** → *thinning*.
- Compare **EMCEE** vs **MLE** (triangles `getdist`).
- Sauvegarde (exemples) :  
  - `emcee_data_profile.png`, `emcee_inverse_covariance.png`,  
  - `emcee_autocorr_param*.png`, `emcee_vs_mle_triangle.png`.

### 4) `4_galaxy_spectrum_oiii_redshift.py`
- Charge `data/f1245_888.dat` (CSV avec colonnes `L` et `f`).
- Estime le **continuum** (> 6600 Å) par **fit linéaire**, en déduit l’**écart-type du bruit**.
- Ajuste la portion **> 6350 Å** avec un **doublet [O III]** (amplitude unique A, largeur `sigma` commune, **z** commun) + **continuum linéaire**.
- **Deux passes MCMC** (5000 + 5000 pas) : la 2ᵉ est initialisée au **minimum de χ²** trouvé à la 1ʳᵉ.
- Convergence R̂, autocorrélation, **redshift final** (moyenne ± 1σ).
- Sauvegarde :  
  - `spectre_continuum.png`, `portion_modele_initial.png`,  
  - `fit_doublet_final.png`, `chains_traces_pass2.png`,  
  - `autocorr_param_*.png`, `triangle_emcee_pass2.png`.

---

## ⚙️ Installation

### Dépendances (Python ≥ 3.9 recommandé)
- `numpy`, `pandas`, `matplotlib`, `scipy`
- `emcee`
- `getdist`
- **Optionnel** : `codecarbon` (si tu veux mesurer les émissions CO₂ dans certaines versions)

Installe tout via :
```bash
pip install numpy pandas matplotlib scipy emcee getdist codecarbon

▶️ Exécution

Depuis le répertoire du projet :

python 1_chi2_minimisation_colored_noise.py
python 2_mcmc_metropolis_hastings.py
python 3_mcmc_emcee_and_convergence.py
python 4_galaxy_spectrum_oiii_redshift.py

Les figures .png seront créées dans le dossier courant.

Données : place mydata.npz et f1245_888.dat dans ./data/ (ou adapte les chemins en en-tête des scripts).


⏱️ Conseils de performance

  • L’estimation de la covariance avec M = 10 000 réalisations peut être lente. Pour un test rapide, descends temporairement à M = 2000 puis remonte pour les résultats finaux.
  • Le MCMC (surtout multi-chaînes) peut nécessiter plus de pas pour une vraie convergence (R̂ < 1.03). Augmente n_steps et/ou n_walkers si besoin.
  • get_autocorr_time peut échouer si la chaîne est trop courte → prolonge le run puis réévalue.

📚 Références


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages