these-recap-hebdo/suivi/2025-51/2025-51.qmd
Louis 4a26113838
All checks were successful
ci/woodpecker/manual/woodpecker Pipeline was successful
Ajout increasing
2026-01-05 13:30:45 +01:00

334 lines
No EOL
12 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Bilan semaine 51 2025 : 15 décembre - 19 décembre"
categories: [colBiSBM, inférence, GNN]
date: 2025 12 19
date-modified: last-modified
bibliography: references.bib
# from: markdown+latex_macros
---
{{< include /_macros.tex >}}
## TODO List
- ✅ **C'est fait** Passer version article flat dans Gitlab du papier et nettoyer au minimum sur une branche clean.
- ✅ Corrigée !⚠️ IL Y A UNE TYPO SUR LE SIGNE DE L'ENTROPIE POUR LE PAPIER: $- \mathcal{H}$ au lieu de $+\mathcal{H}$
- Faire tourner clustering sur Trojelsgaard
- Petites opérations sur les OTUs (regarder la matrice dans les yeux):
- Ranger les OTUs par variances (i.e. `sd(OTU_j)`)
- ✅ **Dans un RMD sur Human Microbiome Compendium** Dessiner les graphiques : $\Var[OTU] = f(\Esp[OTU]), \frac{\Var[OTU]}{\Esp[OTU]^2} = f(\Esp[OTU])$ et $\frac{\Var[OTU]}{\Esp[OTU]} = f(\Esp[OTU]) (\approx 1)$ si les données suivent une loi de Poisson.
- HMC sur-dispersés (au-dessus bissectrice)
- Enterotype phyloseq sous-disp
- Regarder la proportion de 1. taxon rares, 2. zeros.
- Faire des coupures selon niveaux taxonomiques et regarder si $\Var_{\text{intra}} \approx \Var_{\text{inter}}$
- *Bonus*: faire ça dans qmd et voir si forge permet gitlab pages
- ✅ Faire tourner un LBM sur Human Gut et voir si ça plante sinon, **ça plante, la ram est surchargée.**
- ⌛ Je tente avec SparseBM de JBL sur Python
- Faire LBM sur niveau taxonomique grossier, initialiser avec le résultat pour un niveau plus fin et ainsi de suite.
- Increasing size :
![](figs/tendance_temps.png)
- ⌛ Prendre jeu de données exemple de phyloseq :
- ✅ 😞 enterotype tourne mais pas bon résultats (semble deux blocs échantillons mais pas vu par le modèle).
- 🕑 des jeux de données de Mahendra ne tourne pas (phase forward interminable).
- Relire @peixotoHierarchicalBlockStructures2014
- Regarder les gens qui citent les travaux de Peixoto
- Implémentation `blockmodels` LBM avec covariables sur proportions (voir @eq-modele-covar-prop)
:::{.callout-note title="Idées"}
- Travailler sur Fungus Tree network
- Comparaison covar prop avec GREMLINS multipartite sur (log(dist_phylo), fungus-tree)
- Trouver manière de faire un compromis : $\ell(Y,Z,W;\theta) - \lambda d(C(W),C_0)$ avec $C(W)$ le clustering seulement sur la base de la structure LBM et $C_0$ le clustering de l'arbre. Problème $d$ est une distance entre partition, comment optimiser dessus ?
- ⌛ Mise à jour partielle des $\tau$ : ce qui pose soucis c'est les gros calculs matriciels (c'est vraiment vrai?). Donc sorte de "stochastic" VEM où on update seulement une partie des $\tau$ à chaque itération. Et échantillonnage stratifié selon l'arbre ?
- ⌛ Simulations avec $n_2$ croissant lancée sur Migale
- Réimplementé VE Bernoulli dans colSBM pour Bipartite et début implémentation Stochastic VE. En fait le problème des calculs matriciels $Y\times(\tau^{(1)})^{\top}$ ($n_2^2$) donc besoin de sous-échantillonner les noeuds de l'autre dimension à mettre à jour.
- ✅ **Inutile car besoin du primal** Chercher à formuler le problème dual (s'il existe?) de l'optimisation du LBM. Peut-être possible d'aller plus vite alors ? @eq-dual
:::
- Clustering unipartite j'ai cassé une fonction de distance à vérifier et réparer
- Codes pour le papier :
- Nettoyer les scripts
- Faire un joli README
- ❓Faire des notebooks
- Réussir à reproduire résultat de @abramovStructureKnowsBest
- Maitriser graphtools de Peixoto pour essayer d'utiliser l'arbre taxonomique sur graphe de cooccurence inférer par SparCC
- Maitriser SparCC
- 👶 (délégué à Mona) Clustering sur Doré :
- Regarder pour les couples date+nom les études et le nombre de réseaux analysables (Possible demander à Élisa)
- ⌛ Chamberlain et al semble intéressant à regarder ! Voir le Rmarkdown
- Clusteriser sur la base des noms et voir parmi les réseaux Européens (désagrégés ?)
- Si M > 10, alors voir si je retrouve les mêmes résultats que dans les études.
- Regarder *Largest gap* sur réseaux Doré
- ⌛ Essayer *clustering* sur `supinfo`
- CAH et Kmeans tendent vers faire $K = 13$ clusters sur les supinfos
- Enrichir avec des métriques sur les réseaux (nestedness, connectance autres ?)
- Demander à Elisa pour la signification des métadonnées
- Demander à Elisa une fois vu cohérences de groupe voir pour interprétation écologiques ?
- Algo de clustering sur les groupes trouvés
### Inférence et microbes
#### Modèle avec covariables sur probas d'appartenances aux groupes
Toujours modèle LBM mais avec probas d'appartenance pour les colonnes variables:
\begin{align*}
Z_i &\sim \mathcal{M}(1; \pi_1, \dots, \pi_Q), \sum_{q=1}^{Q} \pi_q = 1\\
W_j &\sim \mathcal{M}(1; \rho_1^j, \dots, \rho_R^j), \sum_{r=1}^{R} \rho_r^j = 1\\
Y_{i,j}&\mid Z_i = q, W_j = r \sim \mathcal{F}(\alpha_{qr})
\end{align*}
Inférence variationnelle donc $\ell(Y;\pmb{\theta}) \geq \mathcal{J}(\mathcal{R},\pmb{\theta})$ avec
$$
\ELBORTheta = \sum_{i = 1}^{n_1}\sum_{j=1}^{n_2}\sum_{q \in \mathcal{Q}_1} \sum_{r \in \mathcal{Q}_2} \tau_{iq}^{1} \tau_{jr}^{2} \log f(Y_{ij}; \alpha_{qr})
+ \sum_{i=1}^{n_1} \sum_{q \in \mathcal{Q}_1} \tau_{iq}^{1} \log \pi_{\color{black}q} + \sum_{j=1}^{n_2} \sum_{r \in \mathcal{Q}_2} \tau_{jr}^{2} \log \rho_{\color{black}r} \\
- \sum_{i=1}^{n_1} \tau_{iq}^{1} \log \tau_{iq}^{1} - \sum_{j=1}^{n_2} \tau_{jr}^{2} \log \tau_{jr}^{2}
$$
Plusieurs possibilités pour la définition de $\rho_r^j$
##### Modèle Sophie
Avec $\rho_r^j = \frac{\exp{\beta_r X_j}}{\sum_{s=1}^{R} \exp{\beta_s X_j}} = \sigma(\pmb{\beta} \pmb{X})_{r,j}$, où $\sigma$ désigne le softmax. Mais il y a besoin de poser une contrainte sur l'un des $(\beta_r)_{r=1,\dots,R}$, ici $\beta_R = 0$.
La partie pertinente de l'ELBO devient:
$$
P((\beta_r)_{r=1,\dots,R}, (X_j)_{j=1,\dots,n_2}, (\tau_{jr})_{\substack{j=1,\dots,n_2\\r=1,\dots,R}} ) = \sum_{j=1}^{n_2} \sum_{r=1}^{R} [\tau_{jr} (\beta_r X_j - \log (\sum_{s=1}^{R} \exp{\beta_s X_j}))]
$${#eq-modele-covar-prop}
Et on obtient la dérivée partielle par rapport à $\beta_t$ comme:
\begin{align*}
\dfrac{\partial P}{\partial \beta_t}&((\beta_r)_{r=1,\dots,R}, (X_j)_{j=1,\dots,n_2}, (\tau_{jr})_{\substack{j=1,\dots,n_2\\r=1,\dots,R}} ) = \sum_{j=1}^{n_2} \biggl[ \tau_{jt} X_j - \frac{X_j \exp{\beta_t X_j}}{\sum_{s=1}^{R} \exp{\beta_s X_j}} \biggr]\\
& = \sum_{j=1}^{n_2} \biggl[\bigl(\tau_{jt} - \sigma(\pmb{\beta} \pmb{X})_{t,j}\bigr) X_j\biggr] = \sum_{j=1}^{n_2} \biggl[\bigl(\tau_{jt} - \rho_t^j \bigr) X_j\biggr]
\end{align*}
#### Idée du problème dual
Les distributions variationnelles sont définies par :
$$
q(Z,W)
=
\prod_{i=1}^{n_1} q_i(Z_i)
\prod_{j=1}^{n_2} q_j(W_j),
$$
avec
$$
q_i(Z_i=q)=\tau_{iq}^{(1)},
\qquad
q_j(W_j=r)=\tau_{jr}^{(2)}.
$$
Les contraintes de normalisation sont :
$$
\sum_{q=1}^Q \tau_{iq}^{(1)} = 1,
\qquad
\sum_{r=1}^R \tau_{jr}^{(2)} = 1.
$$
---
##### Lagrangien
Le lagrangien du problème variationnel sécrit :
$$
\mathcal{L}\!\left(
\tau^{(1)},\tau^{(2)},(\lambda_i)_{i=1}^{n_1},(\mu_j)_{j=1}^{n_2}
\right)
=
\ELBORTheta
+
\sum_{i=1}^{n_1} \lambda_i
\left(1-\sum_{q=1}^Q \tau_{iq}^{(1)}\right)
+
\sum_{j=1}^{n_2} \mu_j
\left(1-\sum_{r=1}^R \tau_{jr}^{(2)}\right),
$$
où $\ELBORTheta$ désigne la borne inférieure variationnelle
associée au modèle et aux paramètres $\Theta$.
---
##### Problème primal (conditions doptimalité)
En dérivant le lagrangien par rapport aux variables variationnelles
$\tau^{(1)}$ et $\tau^{(2)}$, puis en égalisant à zéro, on obtient
les équations de point fixe suivantes :
$$
\tau_{iq}^{(1)}
\propto
\pi_q^{(t)}
\prod_{j=1}^{n_2}
\prod_{r=1}^{R}
f\!\left(Y_{ij};\alpha_{qr}^{(t)}\right)^{\tau_{jr}^{(2),(t+1)}},
\quad
\forall i=1,\dots,n_1,\;
q=1,\dots,Q,
$$
$$
\tau_{jr}^{(2)}
\propto
\rho_r^{(t)}
\prod_{i=1}^{n_1}
\prod_{q=1}^{Q}
f\!\left(Y_{ij};\alpha_{qr}^{(t)}\right)^{\tau_{iq}^{(1),(t+1)}},
\quad
\forall j=1,\dots,n_2,\;
r=1,\dots,R,
$$
où :
- $\pi_q^{(t)}$ et $\rho_r^{(t)}$ sont les proportions de classes,
- $f(\cdot;\alpha_{qr})$ est la loi d'émission du modèle,
- $\alpha_{qr}^{(t)}$ désigne les paramètres de bloc à litération $t$.
---
##### Constantes de normalisation
Les constantes de normalisation associées sont données par :
$$
T^{(1),(t)}_i
=
\sum_{q=1}^{Q}
\pi_q^{(t)}
\exp\!\left(
\sum_{j=1}^{n_2}
\sum_{r=1}^{R}
\tau_{jr}^{(2)}
\log f\!\left(Y_{ij};\alpha_{qr}^{(t)}\right)
\right),
$$
$$
T^{(2),(t)}_j
=
\sum_{r=1}^{R}
\rho_r^{(t)}
\exp\!\left(
\sum_{i=1}^{n_1}
\sum_{q=1}^{Q}
\tau_{iq}^{(1)}
\log f\!\left(Y_{ij};\alpha_{qr}^{(t)}\right)
\right).
$$
Ainsi, les mises à jour normalisées sécrivent :
$$
\tau_{iq}^{(1)} = \frac{1}{T^{(1),(t)}_i}(\cdots),
\qquad
\tau_{jr}^{(2)} = \frac{1}{T^{(2),(t)}_j}(\cdots).
$$
---
##### Interprétation duale
Les multiplicateurs de Lagrange sidentifient alors à :
$$
\lambda_i = -\log T^{(1),(t)}_i - 1,
\qquad
\mu_j = -\log T^{(2),(t)}_j - 1,
$$ {#eq-dual}
et le problème dual consiste à minimiser une somme de fonctions de
log-partition, ce qui montre que lalgorithme VEM réalise implicitement
une descente sur le dual.
#### Bibliographie: à lire, à faire
- Lire article multi-niveaux Saint-Clair
- 🆕 🔎 Trouver des papiers:
- LBM Negative Binomial
- Network inference through sample comparison
- Idée des groupes sur la base de distance phylogénétique:
- En train de comprendre les distances que phyloseq permet de calculer sur notre exemple
- En train de lire sur Principle coordinate analysis : https://openplantpathology.github.io/OPP_Workshop_Multivariate/2-MV_PCO.html
- Parametric t-SNE pour avoir une unique représentation latente (inconvénient utilise du Deep Learning)
- Lire Papier UniFrac
#### Réflexion
- easy16s : se renseigner sur
- $\alpha$, $\beta$ diversité
- Heatmap
- Regarder **SPARTA** Rennes
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
- 🆕 Regarder NetComi
- 🆕 Regarder OneNet car aggrégation plus robuste
- 🆕 Réfléchir sens d'aggréger les données ou de les diviser
#### Écrire et faire tourner
- Lancer *colBiSBM* sur $OTU\times Sample$ &rarr; problème du chargement en mémoire des données à voir
- Lancer *colSBM* sur $OTU\times OTU$
- TabNet pratiquer les [exercices](https://github.com/cregouby/Tutoriel_torch)
- 🆕 SparCC à différent niveaux
- 🆕 SBM à différent niveaux
- 🆕⌛ Tree-PLN à différents niveaux
#### Causalité
Plus sur le temps long, à regarder
- GT causalité
- Daria Bystrova lire présentation @bystrovaCausalDiscovery (Meek rules, V-structure)
## A discuter
- 🆕 Voir pour des Réseaux / GDR ou aller
- 🆕 Chercher des cours à suivre
## Biblio à faire
- Regarder Transport optimal graphes bipartite.
## Lectures en cours 📚
### HDR Vincent Brault
- ⌛ Chap 2 : Creuser l'idée de maximiser l'énergie libre, très intéressant regarder le critère CARI et lire Robert et al 2021. Actuellement p32 du manuscrit
- Chap 3
### OT
- ⌛ @mazeletUnsupervisedLearningOptimal Intéressant pour le transport optimal entre graphes de tailles différentes | Regarder si regularization entropique ne marche pas bien pour le graphe.
- ⌛ @nennaLecture2Entropic Pour comprendre le problème d'OT régularisé pour l'entropie.
- ⌛ @nennaLecture1Monge
### Inférence de graphes
- ⌛ @aitchisonStatisticalAnalysisCompositional1982a, en cours
- ❗📖 @payneFiniteMixturesMultivariate2023 sur MixMPLN
### Causalité
- ❗📖 @bystrovaCausalDiscovery
### Largest Gaps
- ❗📖 @braultFastConsistentAlgorithm2023
- ❗📖 @channarondClassificationEstimationStochastic2012 le papier qui introduit le *Largest Gaps*