Compare commits

..

114 commits

Author SHA1 Message Date
Woodpecker CI
120d21f130 Deploy site [CI SKIP] 2026-05-11 12:05:31 +00:00
Woodpecker CI
2f556f6fe1 Deploy site [CI SKIP] 2026-05-11 11:52:38 +00:00
Woodpecker CI
f12588f4d2 Deploy site [CI SKIP] 2026-05-11 11:47:05 +00:00
Woodpecker CI
5b5d39da2d Deploy site [CI SKIP] 2026-05-07 16:10:12 +00:00
Woodpecker CI
32ccb7055d Deploy site [CI SKIP] 2026-05-07 14:03:28 +00:00
Woodpecker CI
ea4f9bcd03 Deploy site [CI SKIP] 2026-05-06 15:19:53 +00:00
Woodpecker CI
41c7079b92 Deploy site [CI SKIP] 2026-05-06 15:12:21 +00:00
Woodpecker CI
b7c8b6db31 Deploy site [CI SKIP] 2026-05-06 12:19:12 +00:00
Woodpecker CI
e1bef8ea0f Deploy site [CI SKIP] 2026-05-06 08:32:40 +00:00
Woodpecker CI
ba50688bbd Deploy site [CI SKIP] 2026-03-16 09:19:27 +00:00
Woodpecker CI
f1715913e8 Deploy site [CI SKIP] 2026-02-24 16:38:15 +00:00
Woodpecker CI
3b51459895 Deploy site [CI SKIP] 2026-02-24 13:31:19 +00:00
Woodpecker CI
5ba620c54f Deploy site [CI SKIP] 2026-02-17 13:40:58 +00:00
Woodpecker CI
77a3bce877 Deploy site [CI SKIP] 2026-02-17 10:14:55 +00:00
Woodpecker CI
13f64dc4df Deploy site [CI SKIP] 2026-02-10 15:18:02 +00:00
Woodpecker CI
0a63bac6cd Deploy site [CI SKIP] 2026-02-09 09:20:02 +00:00
Woodpecker CI
05aabe5915 Deploy site [CI SKIP] 2026-02-09 08:37:45 +00:00
Woodpecker CI
cdcc0053f0 Deploy site [CI SKIP] 2026-02-06 09:53:20 +00:00
Woodpecker CI
30a7994937 Deploy site [CI SKIP] 2026-01-05 13:06:52 +00:00
Woodpecker CI
2b1e513c24 Deploy site [CI SKIP] 2025-12-23 12:51:44 +00:00
Woodpecker CI
a0d27d274f Deploy site [CI SKIP] 2025-12-15 17:28:12 +00:00
Woodpecker CI
be8b7e6a76 Deploy site [CI SKIP] 2025-12-15 16:49:41 +00:00
Woodpecker CI
90876ae635 Deploy site [CI SKIP] 2025-12-15 13:04:42 +00:00
Woodpecker CI
7240db7a8d Deploy site [CI SKIP] 2025-12-15 12:32:20 +00:00
Woodpecker CI
e700209ae9 Deploy site [CI SKIP] 2025-11-07 14:55:31 +00:00
Woodpecker CI
2c898f3815 Deploy site [CI SKIP] 2025-11-07 13:41:24 +00:00
Woodpecker CI
96cee4873d Deploy site [CI SKIP] 2025-11-07 13:15:14 +00:00
Woodpecker CI
b329863b8e Deploy site [CI SKIP] 2025-11-06 09:52:55 +00:00
Woodpecker CI
e2e602331e Deploy site [CI SKIP] 2025-10-31 15:21:33 +00:00
Woodpecker CI
f2c45b93e8 Deploy site [CI SKIP] 2025-10-31 08:17:46 +00:00
Woodpecker CI
0290fe9868 Deploy site [CI SKIP] 2025-10-22 11:58:48 +00:00
Woodpecker CI
b2d7f84a37 Deploy site [CI SKIP] 2025-10-06 14:10:45 +00:00
Woodpecker CI
d3124fa6b0 Deploy site [CI SKIP] 2025-10-06 12:51:30 +00:00
Woodpecker CI
e588dbc6a6 Deploy site [CI SKIP] 2025-10-06 12:28:59 +00:00
Woodpecker CI
f91f514a95 Deploy site [CI SKIP] 2025-10-06 12:03:26 +00:00
Woodpecker CI
bbffe1866a Deploy site [CI SKIP] 2025-10-06 09:20:44 +00:00
Woodpecker CI
b26d746b21 Deploy site [CI SKIP] 2025-08-26 08:58:42 +00:00
Woodpecker CI
9931a7f299 Deploy site [CI SKIP] 2025-08-17 15:37:49 +00:00
Woodpecker CI
74109f6e63 Deploy site [CI SKIP] 2025-08-14 14:28:17 +00:00
Woodpecker CI
dbf5f0907e Deploy site [CI SKIP] 2025-08-14 11:25:51 +00:00
Woodpecker CI
aebc4827cf Deploy site [CI SKIP] 2025-08-14 09:44:45 +00:00
Woodpecker CI
52aa0ca800 Deploy site [CI SKIP] 2025-08-13 18:11:04 +00:00
Woodpecker CI
9988159cf9 Deploy site [CI SKIP] 2025-08-11 10:32:43 +00:00
Woodpecker CI
1de58727e6 Deploy site [CI SKIP] 2025-07-15 15:37:34 +00:00
Woodpecker CI
99515c3795 Deploy site [CI SKIP] 2025-07-15 12:57:37 +00:00
Woodpecker CI
e2fc054d7c Deploy site [CI SKIP] 2025-07-15 12:34:05 +00:00
Woodpecker CI
f394182f1d Deploy site [CI SKIP] 2025-07-11 12:29:28 +00:00
Woodpecker CI
406386cf8d Deploy site [CI SKIP] 2025-07-11 12:28:13 +00:00
Woodpecker CI
6d0f268c44 Deploy site [CI SKIP] 2025-07-09 10:04:28 +00:00
Woodpecker CI
14efc0c365 Deploy site [CI SKIP] 2025-07-08 09:05:12 +00:00
Woodpecker CI
05165e22eb Deploy site [CI SKIP] 2025-07-08 08:56:40 +00:00
Woodpecker CI
fb8d94f8aa Deploy site [CI SKIP] 2025-07-07 14:37:52 +00:00
Woodpecker CI
829d088cac Deploy site [CI SKIP] 2025-07-07 11:31:20 +00:00
Woodpecker CI
34e0f75ae2 Deploy site [CI SKIP] 2025-07-07 11:30:22 +00:00
Woodpecker CI
ff54224343 Deploy site [CI SKIP] 2025-07-02 15:29:40 +00:00
Woodpecker CI
f57528273e Deploy site [CI SKIP] 2025-07-02 10:04:01 +00:00
Woodpecker CI
92f2894cb2 Deploy site [CI SKIP] 2025-07-02 10:02:39 +00:00
Woodpecker CI
49f9028f8f Deploy site [CI SKIP] 2025-07-02 09:41:41 +00:00
Woodpecker CI
b05fe8ed21 Deploy site [CI SKIP] 2025-07-02 09:39:27 +00:00
Woodpecker CI
3017bae46f Deploy site [CI SKIP] 2025-07-01 12:55:22 +00:00
Woodpecker CI
1ef89d24bc Deploy site [CI SKIP] 2025-07-01 08:09:16 +00:00
Woodpecker CI
14268939eb Deploy site [CI SKIP] 2025-07-01 07:59:53 +00:00
Woodpecker CI
aa5eb9f5c4 Deploy site [CI SKIP] 2025-06-30 14:20:22 +00:00
Woodpecker CI
1352ed702b Deploy site [CI SKIP] 2025-06-30 09:40:15 +00:00
Woodpecker CI
89b69d6fbc Deploy site [CI SKIP] 2025-06-30 09:31:21 +00:00
Woodpecker CI
55c4f140cd Deploy site [CI SKIP] 2025-06-20 10:53:31 +00:00
Woodpecker CI
b3ee78c516 Deploy site [CI SKIP] 2025-06-17 10:01:13 +00:00
Woodpecker CI
acbeac250e Deploy site [CI SKIP] 2025-06-17 08:12:06 +00:00
Woodpecker CI
fe0a5952c0 Deploy site [CI SKIP] 2025-06-17 08:09:54 +00:00
Woodpecker CI
47ba05e76a Deploy site [CI SKIP] 2025-06-16 16:37:05 +00:00
Woodpecker CI
6942120797 Deploy site [CI SKIP] 2025-06-16 16:23:31 +00:00
Woodpecker CI
92a8e43495 Deploy site [CI SKIP] 2025-06-16 16:22:10 +00:00
Woodpecker CI
31e1bad768 Deploy site [CI SKIP] 2025-06-16 12:05:51 +00:00
Woodpecker CI
83aa3832d8 Deploy site [CI SKIP] 2025-06-16 07:15:42 +00:00
Woodpecker CI
b02a099e77 Deploy site [CI SKIP] 2025-06-15 19:09:04 +00:00
Woodpecker CI
a9e70c7998 Deploy site [CI SKIP] 2025-06-15 18:44:44 +00:00
Woodpecker CI
3a73847d28 Deploy site [CI SKIP] 2025-06-11 16:35:11 +00:00
Woodpecker CI
54c236b087 Deploy site [CI SKIP] 2025-06-10 14:05:59 +00:00
Woodpecker CI
402b27422a Deploy site [CI SKIP] 2025-06-10 12:43:40 +00:00
Woodpecker CI
86f52bbafa Deploy site [CI SKIP] 2025-06-10 10:01:55 +00:00
Woodpecker CI
f30a6294ca Deploy site [CI SKIP] 2025-05-28 13:38:40 +00:00
Woodpecker CI
b12db41c26 Deploy site [CI SKIP] 2025-05-28 09:40:02 +00:00
Woodpecker CI
458f968887 Deploy site [CI SKIP] 2025-05-19 16:00:37 +00:00
Woodpecker CI
e309f629fa Deploy site [CI SKIP] 2025-05-19 12:21:03 +00:00
Woodpecker CI
ada794c469 Deploy site [CI SKIP] 2025-05-15 20:13:11 +00:00
Woodpecker CI
f500dd8f72 Deploy site [CI SKIP] 2025-05-13 20:32:38 +00:00
Woodpecker CI
aac8a1c0fa Deploy site [CI SKIP] 2025-05-13 09:14:17 +00:00
Woodpecker CI
ef3698b1a1 Deploy site [CI SKIP] 2025-05-12 08:35:47 +00:00
Woodpecker CI
478e4af316 Deploy site [CI SKIP] 2025-05-09 12:01:25 +00:00
Woodpecker CI
6ddceb36d8 Deploy site [CI SKIP] 2025-05-07 12:10:40 +00:00
Woodpecker CI
e84727e11f Deploy site [CI SKIP] 2025-05-07 11:55:29 +00:00
Woodpecker CI
f53b721b15 Deploy site [CI SKIP] 2025-05-06 15:14:40 +00:00
Woodpecker CI
df60a5345a Deploy site [CI SKIP] 2025-05-06 12:46:40 +00:00
Woodpecker CI
404f5d256f Deploy site [CI SKIP] 2025-05-06 12:17:58 +00:00
Woodpecker CI
d90430b26f Deploy site [CI SKIP] 2025-05-06 11:51:17 +00:00
Woodpecker CI
716d4236e4 Deploy site [CI SKIP] 2025-05-05 15:36:26 +00:00
Woodpecker CI
6f0d8fa8bc Deploy site [CI SKIP] 2025-05-05 15:25:51 +00:00
Woodpecker CI
d47e828a40 Deploy site [CI SKIP] 2025-05-05 15:17:15 +00:00
Woodpecker CI
ffe561fc72 Deploy site [CI SKIP] 2025-05-05 15:13:35 +00:00
Woodpecker CI
940a4871af Deploy site [CI SKIP] 2025-04-28 09:49:16 +00:00
Woodpecker CI
da4f0cc8f2 Deploy site [CI SKIP] 2025-04-28 09:45:57 +00:00
Woodpecker CI
2f46340a47 Deploy site [CI SKIP] 2025-04-25 14:45:25 +00:00
Woodpecker CI
5cd886f907 Deploy site [CI SKIP] 2025-04-25 14:42:12 +00:00
Woodpecker CI
1e1cfc4d72 Deploy site [CI SKIP] 2025-04-25 14:40:22 +00:00
Woodpecker CI
175e3cf9b8 Deploy site [CI SKIP] 2025-04-25 14:31:57 +00:00
Louis
c43c305595 Removing unwanted files from main 2025-04-25 16:29:36 +02:00
Louis
e3bf3dfdb9 Specify clone step
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-04-25 16:28:40 +02:00
Louis
331e5fc1dd Rem embedding 2025-04-25 16:28:27 +02:00
Louis
ded6265fe2 Rem embedding 2025-04-25 16:28:17 +02:00
Louis
fb89522ffd Moved branch pages to main 2025-04-25 16:17:27 +02:00
Woodpecker CI
80e9df2168 Deploy site [CI SKIP] 2025-04-25 14:10:18 +00:00
Woodpecker CI
a8043b97a3 Deploy site [CI SKIP] 2025-04-25 13:59:06 +00:00
Woodpecker CI
76d8bc6991 Deploy site [CI SKIP] 2025-04-25 13:52:58 +00:00
Louis
d1f9411c01 Emptying pages branch 2025-04-25 15:51:23 +02:00
128 changed files with 34554 additions and 7710 deletions

314
.gitignore vendored
View file

@ -1,314 +0,0 @@
# ---> TeX
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
*.rubbercache
rubber.cache
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
*.lzo
*.lzs
*.slg
*.slo
*.sls
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
# *.ist
# gnuplot
*.gnuplot
*.table
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.glog
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hypdoc
*.hd
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files
# *.tikz
*-tikzDictionary
# listings
*.lol
# luatexja-ruby
*.ltjruby
# makeidx
*.idx
*.ilg
*.ind
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# newpax
*.newpax
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# svg
svg-inkscape/
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# titletoc
*.ptc
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices and outlines
*.xyc
*.xyd
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# gummi
.*.swp
# KBibTeX
*~[0-9]*
# TeXnicCenter
*.tps
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
# Makeindex log files
*.lpz
# xwatermark package
*.xwm
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
# Uncomment the next line to have this generated file ignored.
#*Notes.bib
*.html
/.quarto/
public/
/.luarc.json

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
.quarto/xref/7687d49a Normal file
View file

@ -0,0 +1 @@
{"entries":[],"headings":["a-faire","jai-fait","a-continuer"]}

8
.quarto/xref/INDEX Normal file
View file

@ -0,0 +1,8 @@
{
"template.qmd": {
"template.html": "7687d49a"
},
"suivi/2025-17/2025-17.qmd": {
"2025-17.html": "c61c1965"
}
}

1
.quarto/xref/c61c1965 Normal file
View file

@ -0,0 +1 @@
{"headings":["a-faire","rédaction-article","simulations-article","applications","autour-de-larticle-et-du-package","jai-fait","a-continuer","correction-méthodo","applications-1","lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée.","baldock","gibson","souza","traveset","trojelsgaard"],"entries":[]}

View file

@ -1,41 +0,0 @@
clone:
git:
image: woodpeckerci/plugin-git
branch: develop
steps:
render-site:
image: ghcr.io/quarto-dev/quarto:1.7.22
commands:
- cd $CI_WORKSPACE
- quarto render
when:
event: [push, pull_request, cron, manual]
branch:
- develop
# Push le contenu du dossier public sur le dépôt `pages` de git.polarolouis.fr
# On utilise l'image alpine/git pour avoir git et ssh
deploy-site:
image: alpine/git
commands:
- git config --global user.name "Woodpecker CI"
- git config --global user.email "git@polarolouis.fr"
- git clone -b main "https://$${ACCESS_TOKEN}@git.polarolouis.fr/polarolouis/these-recap-hebdo.git" $DESTINATION
- rm -rf $DESTINATION/* && echo "Cleaned $DESTINATION" || echo "Failed to clean $DESTINATION"
- cp -ar $CI_WORKSPACE/public/* $DESTINATION/
- cd $DESTINATION
- ls -la
- git add --all
- git commit -m "Deploy site $CI_BUILD_CREATED [CI SKIP]" || echo "Nothing to commit"
- git push && echo "Pushed to $DESTINATION" || echo "Failed to push to $DESTINATION"
environment:
ACCESS_TOKEN:
from_secret: access_token
DESTINATION: pages
when:
event: [push, pull_request, cron, manual]
branch:
- develop
depends_on:
- render-site

View file

@ -1,3 +0,0 @@
# these-recap-hebdo
![Build status](https://woodpecker.polarolouis.fr/api/badges/4/status.svg)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,11 +0,0 @@
\newcommand{\ELBO}[2]{\mathcal{J}(#1,#2)}
\newcommand{\R}{\mathcal{R}}
\newcommand{\ELBORTheta}{\ELBO{\R}{\pmb{\theta}}}
\newcommand{\Var}{\mathbb{V}}
\newcommand{\Esp}{\mathbb{E}}
\newcommand{\Prob}{\mathbb{P}}
\newcommand{\calL}{\mathcal{L}}
\newcommand{\Normal}{\mathcal{N}}
\DeclareMathOperator{\ilr}{ilr}
\DeclareMathOperator{\clr}{clr}
\DeclareMathOperator{\Cat}{Cat}

View file

@ -1,37 +0,0 @@
project:
type: website
output-dir: public
toc: true
number-sections: true
website:
title: "Suivi de la thèse"
navbar:
left:
- icon: journals
href: index.qmd
text: "Liste des semaines"
right:
- icon: git
href: https://git.polarolouis.fr/polarolouis/these-recap-hebdo
aria-label: Dépôt Git du journal
lang: fr
date: last-modified
date-modified: last-modified
author:
name: Louis Lacoste
email: louis.lacoste@agroparistech.fr
affiliation: MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
orcid: 0009-0004-0178-9821
github: Polarolouis
format:
html:
theme: yeti
toc: true
html-math-method: katex
embed-resources: false

1770
index.html Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,28 +0,0 @@
---
title: "Journal suivi de la thèse"
listing:
- id: journal-these
contents: suivi
type: default
sort: "date desc"
categories: true
page-size: 5
- id: knowledge-base
contents: knowledge_base
type: default
sort: "date desc"
categories: true
---
::: {.callout-note icon="false" collapse="true"}
## Agenda
<iframe src="https://calendar.google.com/calendar/embed?height=400&wkst=2&ctz=Europe%2FParis&showPrint=0&mode=AGENDA&src=NTc4ZDI5ZGIwZmFiMGZjZjk1ZWM2NjQ4OWFjYTFmYzkxNzAyMGU2ODk1YjRmMTQ1NjA1YTRlMWU0MzU3N2FkOUBncm91cC5jYWxlbmRhci5nb29nbGUuY29t&color=%234285f4" style="border:solid 1px #777" width="100%" height="400" frameborder="0" scrolling="no"></iframe>
:::
## Base de connaissances et trucs en vrac
:::{#knowledge-base}
:::
## Journaux
:::{#journal-these}
:::

View file

@ -1,3 +0,0 @@
categories: []
date: last-modified
date-modified: last-modified

View file

@ -0,0 +1,619 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Pour application du modèle colBiSBM sur données interaction PP et pratiques agricoles Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../site_libs/clipboard/clipboard.min.js"></script>
<script src="../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../site_libs/quarto-search/fuse.min.js"></script>
<script src="../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../">
<script src="../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../site_libs/quarto-html/popper.min.js"></script>
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#idée-de-lapplication" id="toc-idée-de-lapplication" class="nav-link active" data-scroll-target="#idée-de-lapplication"><span class="header-section-number">1</span> Idée de lapplication</a></li>
<li><a href="#point-à-éclaircir" id="toc-point-à-éclaircir" class="nav-link" data-scroll-target="#point-à-éclaircir"><span class="header-section-number">2</span> Point à éclaircir</a></li>
<li><a href="#liens" id="toc-liens" class="nav-link" data-scroll-target="#liens"><span class="header-section-number">3</span> Liens</a></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content" id="quarto-document-content">
<header id="title-block-header" class="quarto-title-block default">
<div class="quarto-title">
<h1 class="title">Pour application du modèle colBiSBM sur données interaction PP et pratiques agricoles</h1>
<div class="quarto-categories">
<div class="quarto-category">application</div>
<div class="quarto-category">agricole</div>
<div class="quarto-category">graphe</div>
<div class="quarto-category">collection</div>
<div class="quarto-category">lbm</div>
<div class="quarto-category">sbm</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">11 mai 2026</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header>
<section id="idée-de-lapplication" class="level1" data-number="1">
<h1 data-number="1"><span class="header-section-number">1</span> Idée de lapplication</h1>
<p>En discutant avec Alizée et grâce aux ressources de la <a href="#liens">section “Liens” données par Jean</a> possible dessayer de voir limpact sur la structure des réseaux plantes-pollinisateurs des pratiques agricoles autour des espaces de pollinisation.</p>
</section>
<section id="point-à-éclaircir" class="level1" data-number="2">
<h1 data-number="2"><span class="header-section-number">2</span> Point à éclaircir</h1>
<ol type="1">
<li>Quels réseaux plantes-pollinisateurs choisir, où les trouver ? Besoin de réseaux en France pour la facilité.</li>
<li>Faut-il utiliser les covariables seulement de manière <em>post-hoc</em> pour corréler avec le <em>clustering</em> de réseaux obtenus ?</li>
<li>Comment encoder les covariables ?
<ul>
<li>Est-ce que je les mets sous forme de pourcentage dans un <em>buffer</em> (quel rayon ?) comme Jean ? Alors problèmes inhérents aux données compositionnelles mais facilité dexécution ?</li>
<li>Quelle distance considérer pour limpact des pratiques agricoles, distance variables par pollinisateurs en soit ? Besoin de connaissances expertes.</li>
<li>Besoin dhomogénéiser les échelles ? Ou a minima den choisir une ou plusieurs à considérer pour les covariables ?</li>
<li>Gestion de gros tableaux de données pas simple.</li>
</ul></li>
<li><strong>Le temps ???</strong></li>
</ol>
</section>
<section id="liens" class="level1" data-number="3">
<h1 data-number="3"><span class="header-section-number">3</span> Liens</h1>
<p>CORINE Land Cover et extraction en R Très gros grain : <a href="https://fr.wikipedia.org/wiki/Corine_Land_Cover" class="uri">https://fr.wikipedia.org/wiki/Corine_Land_Cover</a> et le package de Jean pour lextraction des <em>buffers</em> de types dutilisation des sols : <a href="https://github.com/jean-cohen/corine.land.cover.landuse.extraction" class="uri">https://github.com/jean-cohen/corine.land.cover.landuse.extraction</a></p>
<p>Les cartes de données :</p>
<ul>
<li>Carte du Bio et des types de cultures échelle parcelle : <a href="https://www.agencebio.org/cartobio/" class="uri">https://www.agencebio.org/cartobio/</a></li>
<li>Échelle code postal, achat de phytosanitaires : <a href="https://ventes-produits-phytopharmaceutiques.eaufrance.fr/" class="uri">https://ventes-produits-phytopharmaceutiques.eaufrance.fr/</a></li>
<li>Thèse de Milena Cairo, classification des parcelles selon les pratiques en pesticides : <a href="https://theses.hal.science/tel-05038286" class="uri">https://theses.hal.science/tel-05038286</a></li>
<li>Recensement des parcelles et du type de culture : <a href="https://cartes.gouv.fr/rechercher-une-donnee/dataset/IGNF_RPG?redirected_from=geoservices.ign.fr" class="uri">https://cartes.gouv.fr/rechercher-une-donnee/dataset/IGNF_RPG?redirected_from=geoservices.ign.fr</a></li>
</ul>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,34 +0,0 @@
---
title: "Pour application du modèle colBiSBM sur données interaction PP et pratiques agricoles"
categories: [application, agricole, graphe, collection, lbm, sbm]
---
{{< include /_macros.tex >}}
# Idée de l'application
En discutant avec Alizée et grâce aux ressources de la [section "Liens" données par Jean](#liens) possible d'essayer de voir l'impact sur la structure des réseaux plantes-pollinisateurs des pratiques agricoles autour des espaces de pollinisation.
# Point à éclaircir
1. Quels réseaux plantes-pollinisateurs choisir, où les trouver ? Besoin de réseaux en France pour la facilité.
2. Faut-il utiliser les covariables seulement de manière *post-hoc* pour corréler avec le *clustering* de réseaux obtenus ?
3. Comment encoder les covariables ?
- Est-ce que je les mets sous forme de pourcentage dans un *buffer* (quel rayon ?) comme Jean ? Alors problèmes inhérents aux données compositionnelles mais facilité d'exécution ?
- Quelle distance considérer pour l'impact des pratiques agricoles, distance variables par pollinisateurs en soit ? Besoin de connaissances expertes.
- Besoin d'homogénéiser les échelles ? Ou a minima d'en choisir une ou plusieurs à considérer pour les covariables ?
- Gestion de gros tableaux de données pas simple.
4. **Le temps ???**
# Liens
CORINE Land Cover et extraction en R
Très gros grain :
<https://fr.wikipedia.org/wiki/Corine_Land_Cover> et le package de Jean pour l'extraction des *buffers* de types d'utilisation des sols :
<https://github.com/jean-cohen/corine.land.cover.landuse.extraction>
Les cartes de données :
- Carte du Bio et des types de cultures échelle parcelle : <https://www.agencebio.org/cartobio/>
- Échelle code postal, achat de phytosanitaires : <https://ventes-produits-phytopharmaceutiques.eaufrance.fr/>
- Thèse de Milena Cairo, classification des parcelles selon les pratiques en pesticides : <https://theses.hal.science/tel-05038286>
- Recensement des parcelles et du type de culture : <https://cartes.gouv.fr/rechercher-une-donnee/dataset/IGNF_RPG?redirected_from=geoservices.ign.fr>

View file

@ -1,54 +0,0 @@
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.arrows, arrows.meta,shapes.geometric}
\begin{document}
\begin{tikzpicture}
\tikzset{
every path/.append style = {
arrows = ->,
> = stealth,
},
every node/.append style = {
shape = circle,
draw = black,
minimum size=3em
},
latent/.style = {
fill = lightgray
},
prior/.style = {
fill = red
},
moral/.style = {
dashed,
> = {}, % remove arrow tip
arrows = -, % ensure no arrows
}
}
\node (y) {$Y$};
\node[latent] (z) [above left = of y] {$Z$};
\node[latent] (w) [above right = of y] {$W$};
\node[latent] (P) [above = of z] {$P$};
\node[prior] (sigma2) [above = of P] {$\sigma^2$};
\node[prior] (rho) [above = of w] {$\rho_{1:R}$};
\node[prior] (alpha) [below = of y] {$\pmb{\alpha}$};
\path (z) edge (y);
\path (w) edge (y);
\path (rho) edge (w);
\path (alpha) edge (y);
\path (P) edge (z);
\path (sigma2) edge (P);
% moral
\path[moral] (z) edge (alpha);
\path[moral] (w) edge (alpha);
\path[moral] (z) edge (w);
\end{tikzpicture}
\end{document}

View file

@ -0,0 +1,816 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Idées autour de linclusion de la phylogénie Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../site_libs/clipboard/clipboard.min.js"></script>
<script src="../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../site_libs/quarto-search/fuse.min.js"></script>
<script src="../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../">
<script src="../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../site_libs/quarto-html/popper.min.js"></script>
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#contexte-de-linclusion-de-la-phylogénie-dans-lestimation-de-la-structure-des-interactions" id="toc-contexte-de-linclusion-de-la-phylogénie-dans-lestimation-de-la-structure-des-interactions" class="nav-link active" data-scroll-target="#contexte-de-linclusion-de-la-phylogénie-dans-lestimation-de-la-structure-des-interactions"><span class="header-section-number">1</span> Contexte de linclusion de la phylogénie dans lestimation de la structure des interactions</a>
<ul class="collapse">
<li><a href="#formalisme-commun" id="toc-formalisme-commun" class="nav-link" data-scroll-target="#formalisme-commun"><span class="header-section-number">1.1</span> Formalisme commun</a></li>
</ul></li>
<li><a href="#sbm-ou-lbm-séquentiel" id="toc-sbm-ou-lbm-séquentiel" class="nav-link" data-scroll-target="#sbm-ou-lbm-séquentiel"><span class="header-section-number">2</span> SBM (ou LBM) Séquentiel</a>
<ul class="collapse">
<li><a href="#formalisation-de-lidée" id="toc-formalisation-de-lidée" class="nav-link" data-scroll-target="#formalisation-de-lidée"><span class="header-section-number">2.1</span> Formalisation de lidée</a></li>
<li><a href="#limites-de-lapproche" id="toc-limites-de-lapproche" class="nav-link" data-scroll-target="#limites-de-lapproche"><span class="header-section-number">2.2</span> Limites de lapproche</a></li>
</ul></li>
<li><a href="#sbm-et-lbm-avec-covariables-sur-les-noeuds" id="toc-sbm-et-lbm-avec-covariables-sur-les-noeuds" class="nav-link" data-scroll-target="#sbm-et-lbm-avec-covariables-sur-les-noeuds"><span class="header-section-number">3</span> SBM et LBM avec covariables sur les noeuds</a>
<ul class="collapse">
<li><a href="#formalisation-du-modèle" id="toc-formalisation-du-modèle" class="nav-link" data-scroll-target="#formalisation-du-modèle"><span class="header-section-number">3.1</span> Formalisation du modèle</a></li>
<li><a href="#preuve-de-lidentifiabilité" id="toc-preuve-de-lidentifiabilité" class="nav-link" data-scroll-target="#preuve-de-lidentifiabilité"><span class="header-section-number">3.2</span> Preuve de lidentifiabilité</a></li>
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">3.3</span> Inférence</a></li>
<li><a href="#implémentation" id="toc-implémentation" class="nav-link" data-scroll-target="#implémentation"><span class="header-section-number">3.4</span> Implémentation</a></li>
<li><a href="#la-suite" id="toc-la-suite" class="nav-link" data-scroll-target="#la-suite"><span class="header-section-number">3.5</span> La suite</a></li>
</ul></li>
<li><a href="#lbm-avec-dépendance-latente-entre-les-probabilités-a-priori" id="toc-lbm-avec-dépendance-latente-entre-les-probabilités-a-priori" class="nav-link" data-scroll-target="#lbm-avec-dépendance-latente-entre-les-probabilités-a-priori"><span class="header-section-number">4</span> LBM avec dépendance latente entre les probabilités <em>a priori</em></a>
<ul class="collapse">
<li><a href="#formalisation-du-modèle-1" id="toc-formalisation-du-modèle-1" class="nav-link" data-scroll-target="#formalisation-du-modèle-1"><span class="header-section-number">4.1</span> Formalisation du modèle</a></li>
</ul></li>
<li><a href="#échantillonnage-selon-larbre" id="toc-échantillonnage-selon-larbre" class="nav-link" data-scroll-target="#échantillonnage-selon-larbre"><span class="header-section-number">5</span> Échantillonnage selon larbre</a></li>
<li><a href="#latent-position-model-lpm-avec-phylogénie-des-représentations-latentes-selon-la-phylogénie" id="toc-latent-position-model-lpm-avec-phylogénie-des-représentations-latentes-selon-la-phylogénie" class="nav-link" data-scroll-target="#latent-position-model-lpm-avec-phylogénie-des-représentations-latentes-selon-la-phylogénie"><span class="header-section-number">6</span> <em>Latent Position Model</em> (LPM) avec phylogénie des représentations latentes selon la phylogénie</a>
<ul class="collapse">
<li><a href="#classique" id="toc-classique" class="nav-link" data-scroll-target="#classique"><span class="header-section-number">6.1</span> Classique</a></li>
<li><a href="#deep-lpm" id="toc-deep-lpm" class="nav-link" data-scroll-target="#deep-lpm"><span class="header-section-number">6.2</span> <em>Deep</em> LPM</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content" id="quarto-document-content">
<header id="title-block-header" class="quarto-title-block default">
<div class="quarto-title">
<h1 class="title">Idées autour de linclusion de la phylogénie</h1>
<div class="quarto-categories">
<div class="quarto-category">phylogénie</div>
<div class="quarto-category">graphes</div>
<div class="quarto-category">lbm</div>
<div class="quarto-category">sbm</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">11 mai 2026</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header>
<section id="contexte-de-linclusion-de-la-phylogénie-dans-lestimation-de-la-structure-des-interactions" class="level1" data-number="1">
<h1 data-number="1"><span class="header-section-number">1</span> Contexte de linclusion de la phylogénie dans lestimation de la structure des interactions</h1>
<p>Dans le 3e axe de ma thèse nous souhaitons inclure de linformation phylogénétique dans lestimation de la structure des réseaux dinteraction microbiens.</p>
<ol type="1">
<li><p>Ces réseaux se présentent sous la forme de matrice des comptages hautement rectangulaire, cest-à-dire avec un grand nombre de microorganismes et, en comparaison, peu déchantillons (de sols, daliments, de patients…). Cette haute dimensionnalité met en échec les méthodes classiques non concues pour gérer autant de noeuds (SBM). Il sagit donc dun <strong>premier enjeu</strong></p></li>
<li><p>Les données de comptages de ces matrices sont compositionnelles : la profondeur de séquençage (le nombre de séquences lues) étant finie, cela implique une dépendance entre les comptages observés. Si une séquence est surexprimée par rapport aux autres, alors que labondance réelle des autres na pas changée, les comptages observés des autres séquences vont diminuer. Voir <a href="#note-donnees-compo">la note sur les données compositionnelles</a>.</p></li>
</ol>
<div id="note-donnees-compo" class="callout callout-style-default callout-note callout-titled" title="Données compositionelles">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Données compositionelles
</div>
</div>
<div class="callout-body-container callout-body">
<p>Soit <span class="math inline">N</span> la profondeur de séquençage, <span class="math inline">\forall s \in \{1,\dots,s\}, n_s</span> le nombre réel de fois où la séquence <span class="math inline">s</span> est présente, <span class="math inline">t = \sum_s n_s</span> la somme des séquences totale. Les comptages observés <span class="math inline">o_s</span> pour la séquence <span class="math inline">s</span> sont <span class="math inline">o_s = \dfrac{n_s}{N}</span>, et on a <span class="math inline">\sum_{s} o_s = \dfrac{1}{N} \sum_{s} n_s</span> par construction.</p>
<p>Et donc à pour un <span class="math inline">S</span> quelconque on a <span class="math inline">o_S = \dfrac{t}{N} - \sum_{s, s\neq S} o_s</span> et donc une contrainte sur les <span class="math inline">o_s</span>.</p>
</div>
</div>
<p>Diverses autres enjeux se posent quand on considère ce type de données. Par exemple, larbre phylogénétique peut ne pas être directement accessible, ou bien être dominé par un certain clade. Il peut aussi exploser en nombre dindividu à chaque niveau (à relier au point 1).</p>
<section id="formalisme-commun" class="level2" data-number="1.1">
<h2 data-number="1.1" class="anchored" data-anchor-id="formalisme-commun"><span class="header-section-number">1.1</span> Formalisme commun</h2>
<p>Dans la suite, nous considèrerons <span class="math inline">\mathcal{T}</span> larbre ayant <span class="math inline">L</span> niveaux, indexés de <span class="math inline">l = 0,\dots,L</span> avec <span class="math inline">0</span> la racine commune et <span class="math inline">L</span> les feuilles de larbre.</p>
<p><span class="math inline">Y</span> la matrice de bi-adjacence encodant le graphe et modélisant les interactions, de taille <span class="math inline">n_1\times n_2</span>.</p>
<p><span class="math inline">V, X</span> les matrices de covariable sur les noeuds en ligne et en colonnes de <span class="math inline">Y</span>. <span class="math inline">V</span> est de taille <span class="math inline">n_1 \times d</span> et <span class="math inline">X</span> est de taille <span class="math inline">n_2 \times p</span></p>
</section>
</section>
<section id="sbm-ou-lbm-séquentiel" class="level1" data-number="2">
<h1 data-number="2"><span class="header-section-number">2</span> SBM (ou LBM) Séquentiel</h1>
<section id="formalisation-de-lidée" class="level2" data-number="2.1">
<h2 data-number="2.1" class="anchored" data-anchor-id="formalisation-de-lidée"><span class="header-section-number">2.1</span> Formalisation de lidée</h2>
<p>Ici on utilise larbre phylogénétique afin dinitialiser lEM variationnel du niveau suivant.</p>
<p>Concrètement, on ajuste un LBM au niveau <span class="math inline">l</span>, sur la matrice de comptage aggrégées à ce niveau <span class="math inline">Y^l</span>, ce qui donne des probabilités variationnelles <span class="math inline">\pmb{\tau}^{1,l},\pmb{\tau}^{2,l}</span> qui sont de tailles respectives <span class="math inline">n_{1,l} \times Q_{l}</span> et <span class="math inline">n_{2,l} \times R_{l}</span>.</p>
<p>Puis pour tout individu <span class="math inline">u\in \text{Child}(i)</span>, on initialise ses probas <span class="math inline">\widetilde{\tau}^{1,l+1}_u = \tau^{1,l}_u + \varepsilon_{u}</span>, avec <span class="math inline">\varepsilon_u \sim \mathcal{N}_{Q_l}(0,\sigma^2)</span> et on renormalise <span class="math inline">\tau^{1,l+1}_{u} = \dfrac{\widetilde{\tau}^{1,l+1}_u}{\sum_q \widetilde{\tau}^{1,l+1}_{u,q}}</span>. On ajoute une perturbation afin de ne pas rester bloqué sur le point fixe précédent et de pouvoir donc obtenir les <span class="math inline">\tau^{1,l+1}</span> à lissue de loptimisation.</p>
</section>
<section id="limites-de-lapproche" class="level2" data-number="2.2">
<h2 data-number="2.2" class="anchored" data-anchor-id="limites-de-lapproche"><span class="header-section-number">2.2</span> Limites de lapproche</h2>
<p>Le passage dinformation selon larbre nous semble intuitivement être une bonne approche et les résultats que nous avons obtenues indique quun peu dinformation semble passer mais il faut aller profondément dans larbre et alors on rencontre le problème du coût computationnel. En effet cette méthode ne diminue pas le coût en calcul puisquelle calcule un LBM à chacun des <span class="math inline">L</span> niveaux, au mieux elle donne un point dinitialisation intelligent mais cela semble difficilement applicable à des données réelles.</p>
</section>
</section>
<section id="sbm-et-lbm-avec-covariables-sur-les-noeuds" class="level1" data-number="3">
<h1 data-number="3"><span class="header-section-number">3</span> SBM et LBM avec covariables sur les noeuds</h1>
<p>Ce modèle visent à intégrer des covariables de noeuds comme modificateurs des probabilités <em>a priori</em> dappartenance aux groupes. Pour la phylogénie, en passant par une MDS ou une autre méthode permettant à partir des distances phylogénétique dobtenir des “positions” ou des covariables, cela permettrait dinjecter la priori phylogénétique dans lestimation de la structure du réseau.</p>
<section id="formalisation-du-modèle" class="level2" data-number="3.1">
<h2 data-number="3.1" class="anchored" data-anchor-id="formalisation-du-modèle"><span class="header-section-number">3.1</span> Formalisation du modèle</h2>
<p>Toujours modèle LBM mais avec probas dappartenance pour les colonnes variables:</p>
<p><span class="math display">\begin{align*}
Z_i &amp;\sim \mathcal{M}(1; \pi_1, \dots, \pi_Q), \sum_{q=1}^{Q} \pi_q = 1\\
W_j &amp;\sim \mathcal{M}(1; \rho_1^j, \dots, \rho_R^j), \sum_{r=1}^{R} \rho_r^j = 1\\
Y_{i,j}&amp;\mid Z_i = q, W_j = r \sim \mathcal{F}(\alpha_{qr})
\end{align*}</span></p>
<p>Voici pour les probas pour les individus en colonne de la matrice dadjacence : <span class="math display">\begin{align*}
\pmb{\beta}_{r}&amp; = \begin{pmatrix}
\beta_{r,0}\\
\vdots\\
\beta_{r,p}
\end{pmatrix}, &amp; X_{j,\bullet} = \begin{pmatrix}
1 = x_{0,j} &amp; x_{1,j} &amp; \dots &amp; x_{p,j}
\end{pmatrix}\\
X_{j,\bullet} \pmb{\beta}_r&amp; = \beta_{r,0} x_{0,j} + \beta_{r,1} x_{1,j} + \dots + \beta_{r,p} x_{p,j} &amp; \approx \log(\rho_r^j) \\
B &amp; = \begin{pmatrix}
\pmb{\beta}_1 \dots \pmb{\beta}_r \dots \pmb{\beta}_R
\end{pmatrix} &amp; X_{j,\bullet}B \approx \log(\pmb{\rho}^j) \\
X B &amp; \approx \log((\pmb{\rho}^j)_{j=1,\dots,n_2}) = \log(\pmb{\Rho})\\
\end{align*}</span> avec les <span class="math inline">\beta, B</span> qui désigne donc les coefficient de la combinaison linéaire et <span class="math inline">X</span> les covariables des individus (taille <span class="math inline">n_2\times p</span>, <span class="math inline">p</span> covariables).</p>
<p>Et pour les probas en lignes du LBM : <span class="math display">\begin{align*}
\pmb{\gamma}_{q}&amp; = \begin{pmatrix}
\gamma_{q,0}\\
\vdots\\
\gamma_{q,d}
\end{pmatrix}, &amp; V_{i,\bullet} = \begin{pmatrix}
1 = v_{0,i} &amp; v_{1,i} &amp; \dots &amp; v_{d,i}
\end{pmatrix}\\
V_{i,\bullet} \pmb{\gamma}_q &amp; = \gamma_{q,0} v_{0,i} + \gamma_{q,1} v_{1,i} + \dots + \gamma_{q,d} v_{d,i} &amp; \approx \log(\pi_q^i) \\
\Gamma &amp; = \begin{pmatrix}
\gamma_1 \dots \pmb{\gamma}_q \dots \pmb{\gamma}_Q
\end{pmatrix} &amp; V_{i,\bullet} \Gamma \approx \log(\pmb{\pi}^i) \\
V \Gamma &amp; \approx \log((\pmb{\pi}^i)_{i=1,\dots,n_1}) = \log(\pmb{\Pi})
\end{align*}</span> avec les <span class="math inline">\gamma, G</span> qui désigne donc les coefficient de la combinaison linéaire et <span class="math inline">V</span> les covariables des individus (taille <span class="math inline">n_1\times d</span>, <span class="math inline">d</span> covariables).</p>
</section>
<section id="preuve-de-lidentifiabilité" class="level2" data-number="3.2">
<h2 data-number="3.2" class="anchored" data-anchor-id="preuve-de-lidentifiabilité"><span class="header-section-number">3.2</span> Preuve de lidentifiabilité</h2>
<p>Soient <span class="math inline">B,B^{\prime}</span> avec <span class="math inline">B_{\bullet,R} = B^{\prime}_{\bullet,R} = \vec{0}_{p+1}</span> et <span class="math inline">X</span> de rang plein tel que <span class="math inline">X^{\top}X</span> soit inversible.</p>
<p><span class="math display">\begin{align*}
&amp;\sigma(XB) = \sigma(XB^{\prime})\\
&amp;\implies \exists C = \begin{pmatrix}c_1 \\ \vdots \\ c_j \\ \vdots \\ c_{n_2}\end{pmatrix} \in \mathbb{R}^{n_2}, X B = X B^{\prime} + C \pmb{1}_{R}^{\top} \\
&amp;\implies \exists C \in \mathbb{R}^{n_2}, (X B)_{j,r} = (X B^{\prime})_{j,r} + (C \pmb{1}_{R}^{\top})_{j,r} \\
&amp;\implies \exists C \in \mathbb{R}^{n_2}, \forall r\in\{1\dots,R\}, \forall j\in\{1,\dots,n_2\}, \sum_{k=1}^{p+1} x_{j,k} \beta_{k,r} = \sum_{k=1}^{p+1} x_{j,k} \beta^{\prime}_{k,r} + c_j\\
&amp;\implies \exists C \in \mathbb{R}^{n_2}, \forall j\in\{1,\dots,n_2\}, \sum_{k=1}^{p+1} x_{j,k} \beta_{k,R} = \sum_{k=1}^{p+1} x_{j,k} \beta^{\prime}_{k,R} + c_j \\
&amp;\implies \exists C \in \mathbb{R}^{n_2}, \forall j\in\{1,\dots,n_2\}, \sum_{k=1}^{p+1} x_{j,k} \times 0 = \sum_{k=1}^{p+1} x_{j,k} \times 0 + c_j \\
&amp;\implies \exists C \in \mathbb{R}^{n_2}, \forall j\in\{1,\dots,n_2\}, 0 = 0 + c_j \implies c_j = 0 \\
&amp;\implies C = \begin{pmatrix} 0 \\ \vdots \\ 0 \end{pmatrix} \text{and thus}, XB = XB^{\prime} \\
&amp; \implies (X^{\top} X)^{-1}X^{\top} X B = (X^{\top} X)^{-1}X^{\top} X B^{\prime} \implies B=B^{\prime}
\end{align*}</span></p>
</section>
<section id="inférence" class="level2" data-number="3.3">
<h2 data-number="3.3" class="anchored" data-anchor-id="inférence"><span class="header-section-number">3.3</span> Inférence</h2>
<p>Inférence variationnelle donc <span class="math inline">\ell(Y;\pmb{\theta}) \geq \mathcal{J}(\mathcal{R},\pmb{\theta})</span> avec</p>
<p><span class="math display">
\mathcal{J}(\mathcal{R},\pmb{\theta})= \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}
</span></p>
<p>Avec <span class="math inline">\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}</span>, où <span class="math inline">\sigma</span> désigne le softmax. Et sous la contrainte d<a href="#preuve-de-lidentifiabilité">identifiabilité</a> que lun des <span class="math inline">(\beta_r)_{r=1,\dots,R}</span> soit nul, ici <span class="math inline">\beta_R = 0</span>.</p>
<p>La partie pertinente de lELBO devient: <span id="eq-modele-covar-prop"><span class="math display">
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}))]
\tag{1}</span></span></p>
<p>Et on obtient la dérivée partielle par rapport à <span class="math inline">\beta_t</span> comme: <span class="math display">\begin{align*}
\dfrac{\partial P}{\partial \beta_t}&amp;((\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]\\
&amp; = \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*}</span></p>
</section>
<section id="implémentation" class="level2" data-number="3.4">
<h2 data-number="3.4" class="anchored" data-anchor-id="implémentation"><span class="header-section-number">3.4</span> Implémentation</h2>
<p>Jai implémenté tout ça dans un <em>fork</em> de <a href="https://github.com/GrossSBM/blockmodels">blockmodels</a>. Ce fork est disponible <a href="https://github.com/Polarolouis/blockmodels">ici</a> et <strong>en cours de relecture par JBL</strong>.</p>
<p>Pour les détails techniques, jai ré-écrit la gestion des <em>memberships</em> en R pour passer les covariables et coefficients nécessaires aux calculs. Jai implémenté une descente de gradient en utilisant un algorithme de type BFGS pour loptimisation des coefficients de la combinaison linéaire. Et enfin jai intégré plusieurs choses dans le package R <a href="https://github.com/GrossSBM/sbm">sbm</a>:</p>
<ol type="1">
<li><a href="https://github.com/GrossSBM/sbm/tree/nodescovariates">La gestion des covariables de noeuds</a></li>
<li>Le support des <a href="https://github.com/GrossSBM/sbm/tree/feat/NAsupport">valeurs manquantes</a></li>
</ol>
</section>
<section id="la-suite" class="level2" data-number="3.5">
<h2 data-number="3.5" class="anchored" data-anchor-id="la-suite"><span class="header-section-number">3.5</span> La suite</h2>
<p>Maintenant, Sophie et Pierre gèrent la rédaction de vignettes et de simulations autour de ces fonctionnalités.</p>
<p>Nous attendons de voir si lon trouve un jeu de données adaptées pour cette méthode.</p>
<p><strong>Limites</strong> : Ce modèle ne permet pas le passage à léchelle pour les gros réseaux que représentent les matrices de comptage.</p>
</section>
</section>
<section id="lbm-avec-dépendance-latente-entre-les-probabilités-a-priori" class="level1" data-number="4">
<h1 data-number="4"><span class="header-section-number">4</span> LBM avec dépendance latente entre les probabilités <em>a priori</em></h1>
<section id="formalisation-du-modèle-1" class="level2" data-number="4.1">
<h2 data-number="4.1" class="anchored" data-anchor-id="formalisation-du-modèle-1"><span class="header-section-number">4.1</span> Formalisation du modèle</h2>
<p>Pierre a proposé que lon pose une structure latente sur les <span class="math inline">\pmb{Z}</span>. Cest à dire <span class="math display">\begin{align*}
&amp; P \sim \mathcal{N}_{n_1, K-1} (O_{n_1, K-1}, \Sigma, \sigma^2 Id_{K-1}), \\
\forall i \in \{1,\dots,n_1\}, &amp; Z_i \mid P_i \overset{ind}{\sim} \mathop{\mathrm{Cat}}_{K} ({\mathop{\mathrm{ilr}}}^{-1}(P_i) = \pi_{1:K}^{(i)}), \\
\forall j \in \{1,\dots,n_2\}, &amp; W_j \overset{iid}{\sim} \mathop{\mathrm{Cat}}_R (\rho_{1:R}),\\
\forall i,j \in \{1,\dots,n_1\}\times\{1,\dots,n_2\}, &amp; Y_{ij} \mid Z_i = k, W_j = r \overset{ind}{\sim} \mathcal{F}(\alpha_{qr}),
\end{align*}</span> avec <span class="math inline">\Sigma</span>, la matrice de variance-covariance déterminée en fonction de lapparentement (phylogénétique) des noeuds.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><embed src="figs/projets-phylo/dag-simple.pdf" class="img-fluid"></p>
<figcaption>Le DAG simplifié du modèle</figcaption>
</figure>
</div>
</section>
</section>
<section id="échantillonnage-selon-larbre" class="level1" data-number="5">
<h1 data-number="5"><span class="header-section-number">5</span> Échantillonnage selon larbre</h1>
<p>Afin daffronter le coût computationnel que représente lajustement</p>
</section>
<section id="latent-position-model-lpm-avec-phylogénie-des-représentations-latentes-selon-la-phylogénie" class="level1" data-number="6">
<h1 data-number="6"><span class="header-section-number">6</span> <em>Latent Position Model</em> (LPM) avec phylogénie des représentations latentes selon la phylogénie</h1>
<section id="classique" class="level2" data-number="6.1">
<h2 data-number="6.1" class="anchored" data-anchor-id="classique"><span class="header-section-number">6.1</span> Classique</h2>
</section>
<section id="deep-lpm" class="level2" data-number="6.2">
<h2 data-number="6.2" class="anchored" data-anchor-id="deep-lpm"><span class="header-section-number">6.2</span> <em>Deep</em> LPM</h2>
<p>Possibilité dutilisé un encodeur qui soit un réseau de neurones et de bénéficier de tous les décodeurs de la littérature LPM. <strong>Quel est le lien avec le VGAE ?</strong> <strong>Avantage de passage à léchelle??</strong></p>
</section>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,178 +0,0 @@
---
title: "Idées autour de l'inclusion de la phylogénie"
categories: [phylogénie, graphes, lbm, sbm]
---
{{< include /_macros.tex >}}
# Contexte de l'inclusion de la phylogénie dans l'estimation de la structure des interactions
Dans le 3e axe de ma thèse nous souhaitons inclure de l'information phylogénétique dans l'estimation de la structure des réseaux d'interaction microbiens.
1. Ces réseaux se présentent sous la forme de matrice des comptages hautement rectangulaire, c'est-à-dire avec un grand nombre de microorganismes et, en comparaison, peu d'échantillons (de sols, d'aliments, de patients...). Cette haute dimensionnalité met en échec les méthodes classiques non concues pour gérer autant de noeuds (SBM). Il s'agit donc d'un **premier enjeu**
2. Les données de comptages de ces matrices sont compositionnelles : la profondeur de séquençage (le nombre de séquences lues) étant finie, cela implique une dépendance entre les comptages observés. Si une séquence est surexprimée par rapport aux autres, alors que l'abondance réelle des autres n'a pas changée, les comptages observés des autres séquences vont diminuer. Voir [la note sur les données compositionnelles](#note-donnees-compo).
::: {#note-donnees-compo .callout-note title="Données compositionelles"}
Soit $N$ la profondeur de séquençage, $\forall s \in \{1,\dots,s\}, n_s$ le nombre réel de fois où la séquence $s$ est présente, $t = \sum_s n_s$ la somme des séquences totale. Les comptages observés $o_s$ pour la séquence $s$ sont $o_s = \dfrac{n_s}{N}$, et on a $\sum_{s} o_s = \dfrac{1}{N} \sum_{s} n_s$ par construction.
Et donc à pour un $S$ quelconque on a $o_S = \dfrac{t}{N} - \sum_{s, s\neq S} o_s$ et donc une contrainte sur les $o_s$.
:::
Diverses autres enjeux se posent quand on considère ce type de données. Par exemple, l'arbre phylogénétique peut ne pas être directement accessible, ou bien être dominé par un certain clade. Il peut aussi exploser en nombre d'individu à chaque niveau (à relier au point 1).
## Formalisme commun
Dans la suite, nous considèrerons $\mathcal{T}$ l'arbre ayant $L$ niveaux, indexés de $l = 0,\dots,L$ avec $0$ la racine commune et $L$ les feuilles de l'arbre.
$Y$ la matrice de bi-adjacence encodant le graphe et modélisant les interactions, de taille $n_1\times n_2$.
$V, X$ les matrices de covariable sur les noeuds en ligne et en colonnes de $Y$. $V$ est de taille $n_1 \times d$ et $X$ est de taille $n_2 \times p$
# SBM (ou LBM) Séquentiel
## Formalisation de l'idée
Ici on utilise l'arbre phylogénétique afin d'initialiser l'EM variationnel du niveau suivant.
Concrètement, on ajuste un LBM au niveau $l$, sur la matrice de comptage aggrégées à ce niveau $Y^l$, ce qui donne des probabilités variationnelles $\pmb{\tau}^{1,l},\pmb{\tau}^{2,l}$ qui sont de tailles respectives $n_{1,l} \times Q_{l}$ et $n_{2,l} \times R_{l}$.
Puis pour tout individu $u\in \text{Child}(i)$, on initialise ses probas $\widetilde{\tau}^{1,l+1}_u = \tau^{1,l}_u + \varepsilon_{u}$, avec $\varepsilon_u \sim \mathcal{N}_{Q_l}(0,\sigma^2)$ et on renormalise $\tau^{1,l+1}_{u} = \dfrac{\widetilde{\tau}^{1,l+1}_u}{\sum_q \widetilde{\tau}^{1,l+1}_{u,q}}$. On ajoute une perturbation afin de ne pas rester bloqué sur le point fixe précédent et de pouvoir donc obtenir les $\tau^{1,l+1}$ à l'issue de l'optimisation.
## Limites de l'approche
Le passage d'information selon l'arbre nous semble intuitivement être une bonne approche et les résultats que nous avons obtenues indique qu'un peu d'information semble passer mais il faut aller profondément dans l'arbre et alors on rencontre le problème du coût computationnel.
En effet cette méthode ne diminue pas le coût en calcul puisqu'elle calcule un LBM à chacun des $L$ niveaux, au mieux elle donne un point d'initialisation intelligent mais cela semble difficilement applicable à des données réelles.
# SBM et LBM avec covariables sur les noeuds
Ce modèle visent à intégrer des covariables de noeuds comme modificateurs des probabilités *a priori* d'appartenance aux groupes.
Pour la phylogénie, en passant par une MDS ou une autre méthode permettant à partir des distances phylogénétique d'obtenir des "positions" ou des covariables, cela permettrait d'injecter l'a priori phylogénétique dans l'estimation de la structure du réseau.
## Formalisation du modèle
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*}
Voici pour les probas pour les individus en colonne de la matrice d'adjacence :
\begin{align*}
\pmb{\beta}_{r}& = \begin{pmatrix}
\beta_{r,0}\\
\vdots\\
\beta_{r,p}
\end{pmatrix}, & X_{j,\bullet} = \begin{pmatrix}
1 = x_{0,j} & x_{1,j} & \dots & x_{p,j}
\end{pmatrix}\\
X_{j,\bullet} \pmb{\beta}_r& = \beta_{r,0} x_{0,j} + \beta_{r,1} x_{1,j} + \dots + \beta_{r,p} x_{p,j} & \approx \log(\rho_r^j) \\
B & = \begin{pmatrix}
\pmb{\beta}_1 \dots \pmb{\beta}_r \dots \pmb{\beta}_R
\end{pmatrix} & X_{j,\bullet}B \approx \log(\pmb{\rho}^j) \\
X B & \approx \log((\pmb{\rho}^j)_{j=1,\dots,n_2}) = \log(\pmb{\Rho})\\
\end{align*}
avec les $\beta, B$ qui désigne donc les coefficient de la combinaison linéaire et $X$ les covariables des individus (taille $n_2\times p$, $p$ covariables).
Et pour les probas en lignes du LBM :
\begin{align*}
\pmb{\gamma}_{q}& = \begin{pmatrix}
\gamma_{q,0}\\
\vdots\\
\gamma_{q,d}
\end{pmatrix}, & V_{i,\bullet} = \begin{pmatrix}
1 = v_{0,i} & v_{1,i} & \dots & v_{d,i}
\end{pmatrix}\\
V_{i,\bullet} \pmb{\gamma}_q & = \gamma_{q,0} v_{0,i} + \gamma_{q,1} v_{1,i} + \dots + \gamma_{q,d} v_{d,i} & \approx \log(\pi_q^i) \\
\Gamma & = \begin{pmatrix}
\gamma_1 \dots \pmb{\gamma}_q \dots \pmb{\gamma}_Q
\end{pmatrix} & V_{i,\bullet} \Gamma \approx \log(\pmb{\pi}^i) \\
V \Gamma & \approx \log((\pmb{\pi}^i)_{i=1,\dots,n_1}) = \log(\pmb{\Pi})
\end{align*}
avec les $\gamma, G$ qui désigne donc les coefficient de la combinaison linéaire et $V$ les covariables des individus (taille $n_1\times d$, $d$ covariables).
## Preuve de l'identifiabilité
Soient $B,B^{\prime}$ avec $B_{\bullet,R} = B^{\prime}_{\bullet,R} = \vec{0}_{p+1}$ et $X$ de rang plein tel que $X^{\top}X$ soit inversible.
\begin{align*}
&\sigma(XB) = \sigma(XB^{\prime})\\
&\implies \exists C = \begin{pmatrix}c_1 \\ \vdots \\ c_j \\ \vdots \\ c_{n_2}\end{pmatrix} \in \mathbb{R}^{n_2}, X B = X B^{\prime} + C \pmb{1}_{R}^{\top} \\
&\implies \exists C \in \mathbb{R}^{n_2}, (X B)_{j,r} = (X B^{\prime})_{j,r} + (C \pmb{1}_{R}^{\top})_{j,r} \\
&\implies \exists C \in \mathbb{R}^{n_2}, \forall r\in\{1\dots,R\}, \forall j\in\{1,\dots,n_2\}, \sum_{k=1}^{p+1} x_{j,k} \beta_{k,r} = \sum_{k=1}^{p+1} x_{j,k} \beta^{\prime}_{k,r} + c_j\\
&\implies \exists C \in \mathbb{R}^{n_2}, \forall j\in\{1,\dots,n_2\}, \sum_{k=1}^{p+1} x_{j,k} \beta_{k,R} = \sum_{k=1}^{p+1} x_{j,k} \beta^{\prime}_{k,R} + c_j \\
&\implies \exists C \in \mathbb{R}^{n_2}, \forall j\in\{1,\dots,n_2\}, \sum_{k=1}^{p+1} x_{j,k} \times 0 = \sum_{k=1}^{p+1} x_{j,k} \times 0 + c_j \\
&\implies \exists C \in \mathbb{R}^{n_2}, \forall j\in\{1,\dots,n_2\}, 0 = 0 + c_j \implies c_j = 0 \\
&\implies C = \begin{pmatrix} 0 \\ \vdots \\ 0 \end{pmatrix} \text{and thus}, XB = XB^{\prime} \\
& \implies (X^{\top} X)^{-1}X^{\top} X B = (X^{\top} X)^{-1}X^{\top} X B^{\prime} \implies B=B^{\prime}
\end{align*}
## Inférence
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}
$$
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. Et sous la contrainte d'[identifiabilité](#preuve-de-lidentifiabilité) que l'un des $(\beta_r)_{r=1,\dots,R}$ soit nul, 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*}
## Implémentation
J'ai implémenté tout ça dans un *fork* de [blockmodels](https://github.com/GrossSBM/blockmodels). Ce fork est disponible [ici](https://github.com/Polarolouis/blockmodels) et **en cours de relecture par JBL**.
Pour les détails techniques, j'ai ré-écrit la gestion des *memberships* en R pour passer les covariables et coefficients nécessaires aux calculs. J'ai implémenté une descente de gradient en utilisant un algorithme de type BFGS pour l'optimisation des coefficients de la combinaison linéaire. Et enfin j'ai intégré plusieurs choses dans le package R [sbm](https://github.com/GrossSBM/sbm):
1. [La gestion des covariables de noeuds](https://github.com/GrossSBM/sbm/tree/nodescovariates)
2. Le support des [valeurs manquantes](https://github.com/GrossSBM/sbm/tree/feat/NAsupport)
## La suite
Maintenant, Sophie et Pierre gèrent la rédaction de vignettes et de simulations autour de ces fonctionnalités.
Nous attendons de voir si l'on trouve un jeu de données adaptées pour cette méthode.
**Limites** : Ce modèle ne permet pas le passage à l'échelle pour les gros réseaux que représentent les matrices de comptage.
# LBM avec dépendance latente entre les probabilités *a priori*
## Formalisation du modèle
Pierre a proposé que l'on pose une structure latente sur les $\pmb{Z}$. C'est à dire
\begin{align*}
& P \sim \Normal_{n_1, K-1} (O_{n_1, K-1}, \Sigma, \sigma^2 Id_{K-1}), \\
\forall i \in \{1,\dots,n_1\}, & Z_i \mid P_i \overset{ind}{\sim} \Cat_{K} ({\ilr}^{-1}(P_i) = \pi_{1:K}^{(i)}), \\
\forall j \in \{1,\dots,n_2\}, & W_j \overset{iid}{\sim} \Cat_R (\rho_{1:R}),\\
\forall i,j \in \{1,\dots,n_1\}\times\{1,\dots,n_2\}, & Y_{ij} \mid Z_i = k, W_j = r \overset{ind}{\sim} \mathcal{F}(\alpha_{qr}),
\end{align*}
avec $\Sigma$, la matrice de variance-covariance déterminée en fonction de l'apparentement (phylogénétique) des noeuds.
![Le DAG simplifié du modèle](figs/projets-phylo/dag-simple.pdf)
# Échantillonnage selon l'arbre
Afin d'affronter le coût computationnel que représente l'ajustement
# *Latent Position Model* (LPM) avec phylogénie des représentations latentes selon la phylogénie
## Classique
## *Deep* LPM
Possibilité d'utilisé un encodeur qui soit un réseau de neurones et de bénéficier de tous les décodeurs de la littérature LPM.
**Quel est le lien avec le VGAE ?**
**Avantage de passage à l'échelle??**

View file

@ -0,0 +1,657 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Variational Graph AutoEncoder with Wasserstein Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../site_libs/clipboard/clipboard.min.js"></script>
<script src="../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../site_libs/quarto-search/fuse.min.js"></script>
<script src="../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../">
<script src="../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../site_libs/quarto-html/popper.min.js"></script>
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#idée-principale" id="toc-idée-principale" class="nav-link active" data-scroll-target="#idée-principale"><span class="header-section-number">1</span> Idée principale</a></li>
<li><a href="#apprentissage-contrastif" id="toc-apprentissage-contrastif" class="nav-link" data-scroll-target="#apprentissage-contrastif"><span class="header-section-number">2</span> Apprentissage contrastif</a>
<ul class="collapse">
<li><a href="#hypersphère-méga-cool" id="toc-hypersphère-méga-cool" class="nav-link" data-scroll-target="#hypersphère-méga-cool"><span class="header-section-number">2.1</span> Hypersphère méga cool</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content" id="quarto-document-content">
<header id="title-block-header" class="quarto-title-block default">
<div class="quarto-title">
<h1 class="title">Variational Graph AutoEncoder with Wasserstein</h1>
<div class="quarto-categories">
<div class="quarto-category">convolution</div>
<div class="quarto-category">machine learning</div>
<div class="quarto-category">vae</div>
<div class="quarto-category">graphes</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">11 mai 2026</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header>
<p>Suite à la discussion avec Julian jinscris ce que lon sest dit.</p>
<section id="idée-principale" class="level1" data-number="1">
<h1 data-number="1"><span class="header-section-number">1</span> Idée principale</h1>
<p>Les VAE avec convolution de graphes (GCN) permettent dapprendre une représentation latente des noeuds dun graphe basée sur les interactions entre noeuds.</p>
<p><strong>Objectif</strong> : apprendre un même encodeur et donc un espace latent structuré pour clusteriser une collection de réseaux sur la base de la structure. <em>Sous-objectif</em> : pouvoir prendre en compte des covariables (Fused Wasserstein ?).</p>
<p>Principe du VAE:</p>
<p>Soit <span class="math inline">Y</span> une matrice dadjacence (ou de bi-adjacence pour les graphes bipartites), <span class="math inline">X</span> une matrice de covariables.</p>
<p>Soit <span class="math inline">D_1</span> la matrice des degrés en ligne, <span class="math inline">D_2</span> la matrice des degrés en colonne.</p>
<p><span class="math inline">\widetilde{Y} = D_1^{-1/2} Y D_2^{-1/2}</span></p>
<p><strong>à compléter</strong></p>
</section>
<section id="apprentissage-contrastif" class="level1" data-number="2">
<h1 data-number="2"><span class="header-section-number">2</span> Apprentissage contrastif</h1>
<p>Puisque lon voudrait marquer la séparation entre différentes structures de réseaux, on pourrait vouloir faire de l<a href="https://u9534056.medium.com/an-overview-of-contrastive-learning-fa520f5f2c23">apprentissage contrastif pour V(G)AE</a>.</p>
<section id="hypersphère-méga-cool" class="level2" data-number="2.1">
<h2 data-number="2.1" class="anchored" data-anchor-id="hypersphère-méga-cool"><span class="header-section-number">2.1</span> Hypersphère méga cool</h2>
<p>Il faut creuser : forcer les contraintes des <em>embeddings</em> à vivre sur la surface dune hypersphère car, daprès Julian et la littérature, par rapport à un espace euclidien cela permet davoir :</p>
<ul>
<li>position latente bornée : stabilisation de lapprentissage et évite lexplosion dans une ou plusieurs directions.</li>
<li>couverture “uniforme” de la sphère : tendance à faciliter lapprentissage contrastif, avec lidée de bien séparer les graphes aux structures différentes.</li>
</ul>
<p><a href="https://www.envisioning.com/vocab/hyperspherical-representation-learning">Première source</a></p>
<p>Le softmax est remplacée par la loi de von Mises-Fisher. Daprès <a href="https://fr.wikipedia.org/wiki/Loi_de_von_Mises-Fisher#Relation_avec_la_loi_normale">Wikipédia</a> équivalent de la loi normale multivariée à covariance isotrope restreinte à lhypersphère unité.</p>
</section>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,39 +0,0 @@
---
title: "Variational Graph AutoEncoder with Wasserstein"
categories: [convolution, machine learning, vae, graphes]
---
{{< include /_macros.tex >}}
Suite à la discussion avec Julian j'inscris ce que l'on s'est dit.
# Idée principale
Les VAE avec convolution de graphes (GCN) permettent d'apprendre une représentation latente des noeuds d'un graphe basée sur les interactions entre noeuds.
**Objectif** : apprendre un même encodeur et donc un espace latent structuré pour clusteriser une collection de réseaux sur la base de la structure.
*Sous-objectif* : pouvoir prendre en compte des covariables (Fused Wasserstein ?).
Principe du VAE:
Soit $Y$ une matrice d'adjacence (ou de bi-adjacence pour les graphes bipartites), $X$ une matrice de covariables.
Soit $D_1$ la matrice des degrés en ligne, $D_2$ la matrice des degrés en colonne.
$\widetilde{Y} = D_1^{-1/2} Y D_2^{-1/2}$
**à compléter**
# Apprentissage contrastif
Puisque l'on voudrait marquer la séparation entre différentes structures de réseaux, on pourrait vouloir faire de l'[apprentissage contrastif pour V(G)AE](https://u9534056.medium.com/an-overview-of-contrastive-learning-fa520f5f2c23).
## Hypersphère méga cool
Il faut creuser : forcer les contraintes des *embeddings* à vivre sur la surface d'une hypersphère car, d'après Julian et la littérature, par rapport à un espace euclidien cela permet d'avoir :
- position latente bornée : stabilisation de l'apprentissage et évite l'explosion dans une ou plusieurs directions.
- couverture "uniforme" de la sphère : tendance à faciliter l'apprentissage contrastif, avec l'idée de bien séparer les graphes aux structures différentes.
[Première source](https://www.envisioning.com/vocab/hyperspherical-representation-learning)
Le softmax est remplacée par la loi de von Mises-Fisher. D'après [Wikipédia](https://fr.wikipedia.org/wiki/Loi_de_von_Mises-Fisher#Relation_avec_la_loi_normale) équivalent de la loi normale multivariée à covariance isotrope restreinte à l'hypersphère unité.

38
listings.json Normal file
View file

@ -0,0 +1,38 @@
[
{
"listing": "/index.html",
"items": [
"/suivi/2026-12/2026-12.html",
"/suivi/2026-9/2026-9.html",
"/suivi/2026-7/2026-7.html",
"/suivi/2026-8/2026-8.html",
"/suivi/2026-6/2026-6.html",
"/suivi/2025-51/2025-51.html",
"/suivi/2025-50/2025-50.html",
"/suivi/2025-45/2025-45.html",
"/suivi/2025-44/2025-44.html",
"/suivi/2025-43/2025-43.html",
"/suivi/2025-38/2025-38.html",
"/suivi/2025-35/2025-35.html",
"/suivi/2025-33/2025-33.html",
"/suivi/2025-29/2025-29.html",
"/suivi/2025-28/2025-28.html",
"/suivi/2025-27/2025-27.html",
"/suivi/2025-25/2025-25.html",
"/suivi/2025-24/2025-24.html",
"/suivi/2025-22/2025-22.html",
"/suivi/2025-21/2025-21.html",
"/suivi/2025-20/2025-20.html",
"/suivi/2025-19/2025-19.html",
"/suivi/2025-18/2025-18.html",
"/suivi/2025-17/2025-17.html",
"/suivi/2025-16/2025-16.html",
"/suivi/2025-15/2025-15.html",
"/suivi/2025-14/2025-14.html",
"/suivi/2025-13/2025-13.html",
"/knowledge_base/colsbm_application_reseaux_et_agri.html",
"/knowledge_base/vae_wasserstein_gromov.html",
"/knowledge_base/projets-phylo.html"
]
}
]

1073
search.json Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2078
site_libs/bootstrap/bootstrap-icons.css vendored Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

7
site_libs/bootstrap/bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,26 @@
body:not(.glightbox-mobile) div.gslide div.gslide-description,
body:not(.glightbox-mobile) div.gslide-description .gslide-title,
body:not(.glightbox-mobile) div.gslide-description .gslide-desc {
color: var(--quarto-body-color);
background-color: var(--quarto-body-bg);
}
body:not(.glightbox-mobile) div.gslide-media {
background-color: var(--quarto-body-bg);
}
.goverlay {
background: rgba(0, 0, 0, 0.7);
}
div.gslide-description .gslide-title {
margin-top: 0.25em;
margin-bottom: 0.25em;
font-weight: 500;
font-family: inherit;
}
div.gslide-description .gslide-desc {
padding-bottom: 0.5em;
font-family: inherit;
}

9
site_libs/quarto-html/anchor.min.js vendored Normal file

File diff suppressed because one or more lines are too long

6
site_libs/quarto-html/popper.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,205 @@
/* quarto syntax highlight colors */
:root {
--quarto-hl-ot-color: #003B4F;
--quarto-hl-at-color: #657422;
--quarto-hl-ss-color: #20794D;
--quarto-hl-an-color: #5E5E5E;
--quarto-hl-fu-color: #4758AB;
--quarto-hl-st-color: #20794D;
--quarto-hl-cf-color: #003B4F;
--quarto-hl-op-color: #5E5E5E;
--quarto-hl-er-color: #AD0000;
--quarto-hl-bn-color: #AD0000;
--quarto-hl-al-color: #AD0000;
--quarto-hl-va-color: #111111;
--quarto-hl-bu-color: inherit;
--quarto-hl-ex-color: inherit;
--quarto-hl-pp-color: #AD0000;
--quarto-hl-in-color: #5E5E5E;
--quarto-hl-vs-color: #20794D;
--quarto-hl-wa-color: #5E5E5E;
--quarto-hl-do-color: #5E5E5E;
--quarto-hl-im-color: #00769E;
--quarto-hl-ch-color: #20794D;
--quarto-hl-dt-color: #AD0000;
--quarto-hl-fl-color: #AD0000;
--quarto-hl-co-color: #5E5E5E;
--quarto-hl-cv-color: #5E5E5E;
--quarto-hl-cn-color: #8f5902;
--quarto-hl-sc-color: #5E5E5E;
--quarto-hl-dv-color: #AD0000;
--quarto-hl-kw-color: #003B4F;
}
/* other quarto variables */
:root {
--quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
pre > code.sourceCode > span {
color: #003B4F;
}
code span {
color: #003B4F;
}
code.sourceCode > span {
color: #003B4F;
}
div.sourceCode,
div.sourceCode pre.sourceCode {
color: #003B4F;
}
code span.ot {
color: #003B4F;
font-style: inherit;
}
code span.at {
color: #657422;
font-style: inherit;
}
code span.ss {
color: #20794D;
font-style: inherit;
}
code span.an {
color: #5E5E5E;
font-style: inherit;
}
code span.fu {
color: #4758AB;
font-style: inherit;
}
code span.st {
color: #20794D;
font-style: inherit;
}
code span.cf {
color: #003B4F;
font-weight: bold;
font-style: inherit;
}
code span.op {
color: #5E5E5E;
font-style: inherit;
}
code span.er {
color: #AD0000;
font-style: inherit;
}
code span.bn {
color: #AD0000;
font-style: inherit;
}
code span.al {
color: #AD0000;
font-style: inherit;
}
code span.va {
color: #111111;
font-style: inherit;
}
code span.bu {
font-style: inherit;
}
code span.ex {
font-style: inherit;
}
code span.pp {
color: #AD0000;
font-style: inherit;
}
code span.in {
color: #5E5E5E;
font-style: inherit;
}
code span.vs {
color: #20794D;
font-style: inherit;
}
code span.wa {
color: #5E5E5E;
font-style: italic;
}
code span.do {
color: #5E5E5E;
font-style: italic;
}
code span.im {
color: #00769E;
font-style: inherit;
}
code span.ch {
color: #20794D;
font-style: inherit;
}
code span.dt {
color: #AD0000;
font-style: inherit;
}
code span.fl {
color: #AD0000;
font-style: inherit;
}
code span.co {
color: #5E5E5E;
font-style: inherit;
}
code span.cv {
color: #5E5E5E;
font-style: italic;
}
code span.cn {
color: #8f5902;
font-style: inherit;
}
code span.sc {
color: #5E5E5E;
font-style: inherit;
}
code span.dv {
color: #AD0000;
font-style: inherit;
}
code span.kw {
color: #003B4F;
font-weight: bold;
font-style: inherit;
}
.prevent-inlining {
content: "</";
}
/*# sourceMappingURL=f3b3742851fc2edd117c78e6756ce3a0.css.map */

View file

@ -0,0 +1,845 @@
import * as tabsets from "./tabsets/tabsets.js";
const sectionChanged = new CustomEvent("quarto-sectionChanged", {
detail: {},
bubbles: true,
cancelable: false,
composed: false,
});
const layoutMarginEls = () => {
// Find any conflicting margin elements and add margins to the
// top to prevent overlap
const marginChildren = window.document.querySelectorAll(
".column-margin.column-container > *, .margin-caption, .aside"
);
let lastBottom = 0;
for (const marginChild of marginChildren) {
if (marginChild.offsetParent !== null) {
// clear the top margin so we recompute it
marginChild.style.marginTop = null;
const top = marginChild.getBoundingClientRect().top + window.scrollY;
if (top < lastBottom) {
const marginChildStyle = window.getComputedStyle(marginChild);
const marginBottom = parseFloat(marginChildStyle["marginBottom"]);
const margin = lastBottom - top + marginBottom;
marginChild.style.marginTop = `${margin}px`;
}
const styles = window.getComputedStyle(marginChild);
const marginTop = parseFloat(styles["marginTop"]);
lastBottom = top + marginChild.getBoundingClientRect().height + marginTop;
}
}
};
window.document.addEventListener("DOMContentLoaded", function (_event) {
// Recompute the position of margin elements anytime the body size changes
if (window.ResizeObserver) {
const resizeObserver = new window.ResizeObserver(
throttle(() => {
layoutMarginEls();
if (
window.document.body.getBoundingClientRect().width < 990 &&
isReaderMode()
) {
quartoToggleReader();
}
}, 50)
);
resizeObserver.observe(window.document.body);
}
const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]');
const sidebarEl = window.document.getElementById("quarto-sidebar");
const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left");
const marginSidebarEl = window.document.getElementById(
"quarto-margin-sidebar"
);
// function to determine whether the element has a previous sibling that is active
const prevSiblingIsActiveLink = (el) => {
const sibling = el.previousElementSibling;
if (sibling && sibling.tagName === "A") {
return sibling.classList.contains("active");
} else {
return false;
}
};
// dispatch for htmlwidgets
// they use slideenter event to trigger resize
function fireSlideEnter() {
const event = window.document.createEvent("Event");
event.initEvent("slideenter", true, true);
window.document.dispatchEvent(event);
}
const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]');
tabs.forEach((tab) => {
tab.addEventListener("shown.bs.tab", fireSlideEnter);
});
// dispatch for shiny
// they use BS shown and hidden events to trigger rendering
function distpatchShinyEvents(previous, current) {
if (window.jQuery) {
if (previous) {
window.jQuery(previous).trigger("hidden");
}
if (current) {
window.jQuery(current).trigger("shown");
}
}
}
// tabby.js listener: Trigger event for htmlwidget and shiny
document.addEventListener(
"tabby",
function (event) {
fireSlideEnter();
distpatchShinyEvents(event.detail.previousTab, event.detail.tab);
},
false
);
// Track scrolling and mark TOC links as active
// get table of contents and sidebar (bail if we don't have at least one)
const tocLinks = tocEl
? [...tocEl.querySelectorAll("a[data-scroll-target]")]
: [];
const makeActive = (link) => tocLinks[link].classList.add("active");
const removeActive = (link) => tocLinks[link].classList.remove("active");
const removeAllActive = () =>
[...Array(tocLinks.length).keys()].forEach((link) => removeActive(link));
// activate the anchor for a section associated with this TOC entry
tocLinks.forEach((link) => {
link.addEventListener("click", () => {
if (link.href.indexOf("#") !== -1) {
const anchor = link.href.split("#")[1];
const heading = window.document.querySelector(
`[data-anchor-id="${anchor}"]`
);
if (heading) {
// Add the class
heading.classList.add("reveal-anchorjs-link");
// function to show the anchor
const handleMouseout = () => {
heading.classList.remove("reveal-anchorjs-link");
heading.removeEventListener("mouseout", handleMouseout);
};
// add a function to clear the anchor when the user mouses out of it
heading.addEventListener("mouseout", handleMouseout);
}
}
});
});
const sections = tocLinks.map((link) => {
const target = link.getAttribute("data-scroll-target");
if (target.startsWith("#")) {
return window.document.getElementById(decodeURI(`${target.slice(1)}`));
} else {
return window.document.querySelector(decodeURI(`${target}`));
}
});
const sectionMargin = 200;
let currentActive = 0;
// track whether we've initialized state the first time
let init = false;
const updateActiveLink = () => {
// The index from bottom to top (e.g. reversed list)
let sectionIndex = -1;
if (
window.innerHeight + window.pageYOffset >=
window.document.body.offsetHeight
) {
// This is the no-scroll case where last section should be the active one
sectionIndex = 0;
} else {
// This finds the last section visible on screen that should be made active
sectionIndex = [...sections].reverse().findIndex((section) => {
if (section) {
return window.pageYOffset >= section.offsetTop - sectionMargin;
} else {
return false;
}
});
}
if (sectionIndex > -1) {
const current = sections.length - sectionIndex - 1;
if (current !== currentActive) {
removeAllActive();
currentActive = current;
makeActive(current);
if (init) {
window.dispatchEvent(sectionChanged);
}
init = true;
}
}
};
const inHiddenRegion = (top, bottom, hiddenRegions) => {
for (const region of hiddenRegions) {
if (top <= region.bottom && bottom >= region.top) {
return true;
}
}
return false;
};
const categorySelector = "header.quarto-title-block .quarto-category";
const activateCategories = (href) => {
// Find any categories
// Surround them with a link pointing back to:
// #category=Authoring
try {
const categoryEls = window.document.querySelectorAll(categorySelector);
for (const categoryEl of categoryEls) {
const categoryText = categoryEl.textContent;
if (categoryText) {
const link = `${href}#category=${encodeURIComponent(categoryText)}`;
const linkEl = window.document.createElement("a");
linkEl.setAttribute("href", link);
for (const child of categoryEl.childNodes) {
linkEl.append(child);
}
categoryEl.appendChild(linkEl);
}
}
} catch {
// Ignore errors
}
};
function hasTitleCategories() {
return window.document.querySelector(categorySelector) !== null;
}
function offsetRelativeUrl(url) {
const offset = getMeta("quarto:offset");
return offset ? offset + url : url;
}
function offsetAbsoluteUrl(url) {
const offset = getMeta("quarto:offset");
const baseUrl = new URL(offset, window.location);
const projRelativeUrl = url.replace(baseUrl, "");
if (projRelativeUrl.startsWith("/")) {
return projRelativeUrl;
} else {
return "/" + projRelativeUrl;
}
}
// read a meta tag value
function getMeta(metaName) {
const metas = window.document.getElementsByTagName("meta");
for (let i = 0; i < metas.length; i++) {
if (metas[i].getAttribute("name") === metaName) {
return metas[i].getAttribute("content");
}
}
return "";
}
async function findAndActivateCategories() {
// Categories search with listing only use path without query
const currentPagePath = offsetAbsoluteUrl(
window.location.origin + window.location.pathname
);
const response = await fetch(offsetRelativeUrl("listings.json"));
if (response.status == 200) {
return response.json().then(function (listingPaths) {
const listingHrefs = [];
for (const listingPath of listingPaths) {
const pathWithoutLeadingSlash = listingPath.listing.substring(1);
for (const item of listingPath.items) {
const encodedItem = encodeURI(item);
if (
encodedItem === currentPagePath ||
encodedItem === currentPagePath + "index.html"
) {
// Resolve this path against the offset to be sure
// we already are using the correct path to the listing
// (this adjusts the listing urls to be rooted against
// whatever root the page is actually running against)
const relative = offsetRelativeUrl(pathWithoutLeadingSlash);
const baseUrl = window.location;
const resolvedPath = new URL(relative, baseUrl);
listingHrefs.push(resolvedPath.pathname);
break;
}
}
}
// Look up the tree for a nearby linting and use that if we find one
const nearestListing = findNearestParentListing(
offsetAbsoluteUrl(window.location.pathname),
listingHrefs
);
if (nearestListing) {
activateCategories(nearestListing);
} else {
// See if the referrer is a listing page for this item
const referredRelativePath = offsetAbsoluteUrl(document.referrer);
const referrerListing = listingHrefs.find((listingHref) => {
const isListingReferrer =
listingHref === referredRelativePath ||
listingHref === referredRelativePath + "index.html";
return isListingReferrer;
});
if (referrerListing) {
// Try to use the referrer if possible
activateCategories(referrerListing);
} else if (listingHrefs.length > 0) {
// Otherwise, just fall back to the first listing
activateCategories(listingHrefs[0]);
}
}
});
}
}
if (hasTitleCategories()) {
findAndActivateCategories();
}
const findNearestParentListing = (href, listingHrefs) => {
if (!href || !listingHrefs) {
return undefined;
}
// Look up the tree for a nearby linting and use that if we find one
const relativeParts = href.substring(1).split("/");
while (relativeParts.length > 0) {
const path = relativeParts.join("/");
for (const listingHref of listingHrefs) {
if (listingHref.startsWith(path)) {
return listingHref;
}
}
relativeParts.pop();
}
return undefined;
};
const manageSidebarVisiblity = (el, placeholderDescriptor) => {
let isVisible = true;
let elRect;
return (hiddenRegions) => {
if (el === null) {
return;
}
// Find the last element of the TOC
const lastChildEl = el.lastElementChild;
if (lastChildEl) {
// Converts the sidebar to a menu
const convertToMenu = () => {
for (const child of el.children) {
child.style.opacity = 0;
child.style.overflow = "hidden";
child.style.pointerEvents = "none";
}
nexttick(() => {
const toggleContainer = window.document.createElement("div");
toggleContainer.style.width = "100%";
toggleContainer.classList.add("zindex-over-content");
toggleContainer.classList.add("quarto-sidebar-toggle");
toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom
toggleContainer.id = placeholderDescriptor.id;
toggleContainer.style.position = "fixed";
const toggleIcon = window.document.createElement("i");
toggleIcon.classList.add("quarto-sidebar-toggle-icon");
toggleIcon.classList.add("bi");
toggleIcon.classList.add("bi-caret-down-fill");
const toggleTitle = window.document.createElement("div");
const titleEl = window.document.body.querySelector(
placeholderDescriptor.titleSelector
);
if (titleEl) {
toggleTitle.append(
titleEl.textContent || titleEl.innerText,
toggleIcon
);
}
toggleTitle.classList.add("zindex-over-content");
toggleTitle.classList.add("quarto-sidebar-toggle-title");
toggleContainer.append(toggleTitle);
const toggleContents = window.document.createElement("div");
toggleContents.classList = el.classList;
toggleContents.classList.add("zindex-over-content");
toggleContents.classList.add("quarto-sidebar-toggle-contents");
for (const child of el.children) {
if (child.id === "toc-title") {
continue;
}
const clone = child.cloneNode(true);
clone.style.opacity = 1;
clone.style.pointerEvents = null;
clone.style.display = null;
toggleContents.append(clone);
}
toggleContents.style.height = "0px";
const positionToggle = () => {
// position the element (top left of parent, same width as parent)
if (!elRect) {
elRect = el.getBoundingClientRect();
}
toggleContainer.style.left = `${elRect.left}px`;
toggleContainer.style.top = `${elRect.top}px`;
toggleContainer.style.width = `${elRect.width}px`;
};
positionToggle();
toggleContainer.append(toggleContents);
el.parentElement.prepend(toggleContainer);
// Process clicks
let tocShowing = false;
// Allow the caller to control whether this is dismissed
// when it is clicked (e.g. sidebar navigation supports
// opening and closing the nav tree, so don't dismiss on click)
const clickEl = placeholderDescriptor.dismissOnClick
? toggleContainer
: toggleTitle;
const closeToggle = () => {
if (tocShowing) {
toggleContainer.classList.remove("expanded");
toggleContents.style.height = "0px";
tocShowing = false;
}
};
// Get rid of any expanded toggle if the user scrolls
window.document.addEventListener(
"scroll",
throttle(() => {
closeToggle();
}, 50)
);
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
positionToggle();
}, 50)
);
window.addEventListener("quarto-hrChanged", () => {
elRect = undefined;
});
// Process the click
clickEl.onclick = () => {
if (!tocShowing) {
toggleContainer.classList.add("expanded");
toggleContents.style.height = null;
tocShowing = true;
} else {
closeToggle();
}
};
});
};
// Converts a sidebar from a menu back to a sidebar
const convertToSidebar = () => {
for (const child of el.children) {
child.style.opacity = 1;
child.style.overflow = null;
child.style.pointerEvents = null;
}
const placeholderEl = window.document.getElementById(
placeholderDescriptor.id
);
if (placeholderEl) {
placeholderEl.remove();
}
el.classList.remove("rollup");
};
if (isReaderMode()) {
convertToMenu();
isVisible = false;
} else {
// Find the top and bottom o the element that is being managed
const elTop = el.offsetTop;
const elBottom =
elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight;
if (!isVisible) {
// If the element is current not visible reveal if there are
// no conflicts with overlay regions
if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) {
convertToSidebar();
isVisible = true;
}
} else {
// If the element is visible, hide it if it conflicts with overlay regions
// and insert a placeholder toggle (or if we're in reader mode)
if (inHiddenRegion(elTop, elBottom, hiddenRegions)) {
convertToMenu();
isVisible = false;
}
}
}
}
};
};
const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]');
for (const tabEl of tabEls) {
const id = tabEl.getAttribute("data-bs-target");
if (id) {
const columnEl = document.querySelector(
`${id} .column-margin, .tabset-margin-content`
);
if (columnEl)
tabEl.addEventListener("shown.bs.tab", function (event) {
const el = event.srcElement;
if (el) {
const visibleCls = `${el.id}-margin-content`;
// walk up until we find a parent tabset
let panelTabsetEl = el.parentElement;
while (panelTabsetEl) {
if (panelTabsetEl.classList.contains("panel-tabset")) {
break;
}
panelTabsetEl = panelTabsetEl.parentElement;
}
if (panelTabsetEl) {
const prevSib = panelTabsetEl.previousElementSibling;
if (
prevSib &&
prevSib.classList.contains("tabset-margin-container")
) {
const childNodes = prevSib.querySelectorAll(
".tabset-margin-content"
);
for (const childEl of childNodes) {
if (childEl.classList.contains(visibleCls)) {
childEl.classList.remove("collapse");
} else {
childEl.classList.add("collapse");
}
}
}
}
}
layoutMarginEls();
});
}
}
// Manage the visibility of the toc and the sidebar
const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, {
id: "quarto-toc-toggle",
titleSelector: "#toc-title",
dismissOnClick: true,
});
const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, {
id: "quarto-sidebarnav-toggle",
titleSelector: ".title",
dismissOnClick: false,
});
let tocLeftScrollVisibility;
if (leftTocEl) {
tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, {
id: "quarto-lefttoc-toggle",
titleSelector: "#toc-title",
dismissOnClick: true,
});
}
// Find the first element that uses formatting in special columns
const conflictingEls = window.document.body.querySelectorAll(
'[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]'
);
// Filter all the possibly conflicting elements into ones
// the do conflict on the left or ride side
const arrConflictingEls = Array.from(conflictingEls);
const leftSideConflictEls = arrConflictingEls.filter((el) => {
if (el.tagName === "ASIDE") {
return false;
}
return Array.from(el.classList).find((className) => {
return (
className !== "column-body" &&
className.startsWith("column-") &&
!className.endsWith("right") &&
!className.endsWith("container") &&
className !== "column-margin"
);
});
});
const rightSideConflictEls = arrConflictingEls.filter((el) => {
if (el.tagName === "ASIDE") {
return true;
}
const hasMarginCaption = Array.from(el.classList).find((className) => {
return className == "margin-caption";
});
if (hasMarginCaption) {
return true;
}
return Array.from(el.classList).find((className) => {
return (
className !== "column-body" &&
!className.endsWith("container") &&
className.startsWith("column-") &&
!className.endsWith("left")
);
});
});
const kOverlapPaddingSize = 10;
function toRegions(els) {
return els.map((el) => {
const boundRect = el.getBoundingClientRect();
const top =
boundRect.top +
document.documentElement.scrollTop -
kOverlapPaddingSize;
return {
top,
bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize,
};
});
}
let hasObserved = false;
const visibleItemObserver = (els) => {
let visibleElements = [...els];
const intersectionObserver = new IntersectionObserver(
(entries, _observer) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
if (visibleElements.indexOf(entry.target) === -1) {
visibleElements.push(entry.target);
}
} else {
visibleElements = visibleElements.filter((visibleEntry) => {
return visibleEntry !== entry;
});
}
});
if (!hasObserved) {
hideOverlappedSidebars();
}
hasObserved = true;
},
{}
);
els.forEach((el) => {
intersectionObserver.observe(el);
});
return {
getVisibleEntries: () => {
return visibleElements;
},
};
};
const rightElementObserver = visibleItemObserver(rightSideConflictEls);
const leftElementObserver = visibleItemObserver(leftSideConflictEls);
const hideOverlappedSidebars = () => {
marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries()));
sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries()));
if (tocLeftScrollVisibility) {
tocLeftScrollVisibility(
toRegions(leftElementObserver.getVisibleEntries())
);
}
};
window.quartoToggleReader = () => {
// Applies a slow class (or removes it)
// to update the transition speed
const slowTransition = (slow) => {
const manageTransition = (id, slow) => {
const el = document.getElementById(id);
if (el) {
if (slow) {
el.classList.add("slow");
} else {
el.classList.remove("slow");
}
}
};
manageTransition("TOC", slow);
manageTransition("quarto-sidebar", slow);
};
const readerMode = !isReaderMode();
setReaderModeValue(readerMode);
// If we're entering reader mode, slow the transition
if (readerMode) {
slowTransition(readerMode);
}
highlightReaderToggle(readerMode);
hideOverlappedSidebars();
// If we're exiting reader mode, restore the non-slow transition
if (!readerMode) {
slowTransition(!readerMode);
}
};
const highlightReaderToggle = (readerMode) => {
const els = document.querySelectorAll(".quarto-reader-toggle");
if (els) {
els.forEach((el) => {
if (readerMode) {
el.classList.add("reader");
} else {
el.classList.remove("reader");
}
});
}
};
const setReaderModeValue = (val) => {
if (window.location.protocol !== "file:") {
window.localStorage.setItem("quarto-reader-mode", val);
} else {
localReaderMode = val;
}
};
const isReaderMode = () => {
if (window.location.protocol !== "file:") {
return window.localStorage.getItem("quarto-reader-mode") === "true";
} else {
return localReaderMode;
}
};
let localReaderMode = null;
const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded");
const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1;
// Walk the TOC and collapse/expand nodes
// Nodes are expanded if:
// - they are top level
// - they have children that are 'active' links
// - they are directly below an link that is 'active'
const walk = (el, depth) => {
// Tick depth when we enter a UL
if (el.tagName === "UL") {
depth = depth + 1;
}
// It this is active link
let isActiveNode = false;
if (el.tagName === "A" && el.classList.contains("active")) {
isActiveNode = true;
}
// See if there is an active child to this element
let hasActiveChild = false;
for (const child of el.children) {
hasActiveChild = walk(child, depth) || hasActiveChild;
}
// Process the collapse state if this is an UL
if (el.tagName === "UL") {
if (tocOpenDepth === -1 && depth > 1) {
// toc-expand: false
el.classList.add("collapse");
} else if (
depth <= tocOpenDepth ||
hasActiveChild ||
prevSiblingIsActiveLink(el)
) {
el.classList.remove("collapse");
} else {
el.classList.add("collapse");
}
// untick depth when we leave a UL
depth = depth - 1;
}
return hasActiveChild || isActiveNode;
};
// walk the TOC and expand / collapse any items that should be shown
if (tocEl) {
updateActiveLink();
walk(tocEl, 0);
}
// Throttle the scroll event and walk peridiocally
window.document.addEventListener(
"scroll",
throttle(() => {
if (tocEl) {
updateActiveLink();
walk(tocEl, 0);
}
if (!isReaderMode()) {
hideOverlappedSidebars();
}
}, 5)
);
window.addEventListener(
"resize",
throttle(() => {
if (tocEl) {
updateActiveLink();
walk(tocEl, 0);
}
if (!isReaderMode()) {
hideOverlappedSidebars();
}
}, 10)
);
hideOverlappedSidebars();
highlightReaderToggle(isReaderMode());
});
tabsets.init();
function throttle(func, wait) {
let waiting = false;
return function () {
if (!waiting) {
func.apply(this, arguments);
waiting = true;
setTimeout(function () {
waiting = false;
}, wait);
}
};
}
function nexttick(func) {
return setTimeout(func, 0);
}

View file

@ -0,0 +1,95 @@
// grouped tabsets
export function init() {
window.addEventListener("pageshow", (_event) => {
function getTabSettings() {
const data = localStorage.getItem("quarto-persistent-tabsets-data");
if (!data) {
localStorage.setItem("quarto-persistent-tabsets-data", "{}");
return {};
}
if (data) {
return JSON.parse(data);
}
}
function setTabSettings(data) {
localStorage.setItem(
"quarto-persistent-tabsets-data",
JSON.stringify(data)
);
}
function setTabState(groupName, groupValue) {
const data = getTabSettings();
data[groupName] = groupValue;
setTabSettings(data);
}
function toggleTab(tab, active) {
const tabPanelId = tab.getAttribute("aria-controls");
const tabPanel = document.getElementById(tabPanelId);
if (active) {
tab.classList.add("active");
tabPanel.classList.add("active");
} else {
tab.classList.remove("active");
tabPanel.classList.remove("active");
}
}
function toggleAll(selectedGroup, selectorsToSync) {
for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) {
const active = selectedGroup === thisGroup;
for (const tab of tabs) {
toggleTab(tab, active);
}
}
}
function findSelectorsToSyncByLanguage() {
const result = {};
const tabs = Array.from(
document.querySelectorAll(`div[data-group] a[id^='tabset-']`)
);
for (const item of tabs) {
const div = item.parentElement.parentElement.parentElement;
const group = div.getAttribute("data-group");
if (!result[group]) {
result[group] = {};
}
const selectorsToSync = result[group];
const value = item.innerHTML;
if (!selectorsToSync[value]) {
selectorsToSync[value] = [];
}
selectorsToSync[value].push(item);
}
return result;
}
function setupSelectorSync() {
const selectorsToSync = findSelectorsToSyncByLanguage();
Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => {
Object.entries(tabSetsByValue).forEach(([value, items]) => {
items.forEach((item) => {
item.addEventListener("click", (_event) => {
setTabState(group, value);
toggleAll(value, selectorsToSync[group]);
});
});
});
});
return selectorsToSync;
}
const selectorsToSync = setupSelectorSync();
for (const [group, selectedName] of Object.entries(getTabSettings())) {
const selectors = selectorsToSync[group];
// it's possible that stale state gives us empty selections, so we explicitly check here.
if (selectors) {
toggleAll(selectedName, selectors);
}
}
});
}

View file

@ -0,0 +1 @@
.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}

File diff suppressed because one or more lines are too long

2
site_libs/quarto-listing/list.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -2,6 +2,8 @@ const kProgressiveAttr = "data-src";
let categoriesLoaded = false; let categoriesLoaded = false;
window.quartoListingCategory = (category) => { window.quartoListingCategory = (category) => {
// category is URI encoded in EJS template for UTF-8 support
category = decodeURIComponent(atob(category));
if (categoriesLoaded) { if (categoriesLoaded) {
activateCategory(category); activateCategory(category);
setCategoryHash(category); setCategoryHash(category);
@ -15,7 +17,9 @@ window["quarto-listing-loaded"] = () => {
if (hash) { if (hash) {
// If there is a category, switch to that // If there is a category, switch to that
if (hash.category) { if (hash.category) {
activateCategory(hash.category); // category hash are URI encoded so we need to decode it before processing
// so that we can match it with the category element processed in JS
activateCategory(decodeURIComponent(hash.category));
} }
// Paginate a specific listing // Paginate a specific listing
const listingIds = Object.keys(window["quarto-listings"]); const listingIds = Object.keys(window["quarto-listings"]);
@ -58,7 +62,10 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
); );
for (const categoryEl of categoryEls) { for (const categoryEl of categoryEls) {
const category = categoryEl.getAttribute("data-category"); // category needs to support non ASCII characters
const category = decodeURIComponent(
atob(categoryEl.getAttribute("data-category"))
);
categoryEl.onclick = () => { categoryEl.onclick = () => {
activateCategory(category); activateCategory(category);
setCategoryHash(category); setCategoryHash(category);
@ -208,7 +215,9 @@ function activateCategory(category) {
// Activate this category // Activate this category
const categoryEl = window.document.querySelector( const categoryEl = window.document.querySelector(
`.quarto-listing-category .category[data-category='${category}'` `.quarto-listing-category .category[data-category='${btoa(
encodeURIComponent(category)
)}']`
); );
if (categoryEl) { if (categoryEl) {
categoryEl.classList.add("active"); categoryEl.classList.add("active");
@ -231,7 +240,9 @@ function filterListingCategory(category) {
list.filter(function (item) { list.filter(function (item) {
const itemValues = item.values(); const itemValues = item.values();
if (itemValues.categories !== null) { if (itemValues.categories !== null) {
const categories = itemValues.categories.split(","); const categories = decodeURIComponent(
atob(itemValues.categories)
).split(",");
return categories.includes(category); return categories.includes(category);
} else { } else {
return false; return false;

7
site_libs/quarto-nav/headroom.min.js vendored Normal file
View file

@ -0,0 +1,7 @@
/*!
* headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it
* Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js
* License: MIT
*/
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=l<t?"down":"up",a.distance=Math.abs(t-l),a.isOutOfBounds=t<0||o<t+n,a.top=t<=s.offset[a.direction],a.bottom=o<=t+n,a.toleranceExceeded=a.distance>s.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s});

View file

@ -0,0 +1,325 @@
const headroomChanged = new CustomEvent("quarto-hrChanged", {
detail: {},
bubbles: true,
cancelable: false,
composed: false,
});
const announceDismiss = () => {
const annEl = window.document.getElementById("quarto-announcement");
if (annEl) {
annEl.remove();
const annId = annEl.getAttribute("data-announcement-id");
window.localStorage.setItem(`quarto-announce-${annId}`, "true");
}
};
const announceRegister = () => {
const annEl = window.document.getElementById("quarto-announcement");
if (annEl) {
const annId = annEl.getAttribute("data-announcement-id");
const isDismissed =
window.localStorage.getItem(`quarto-announce-${annId}`) || false;
if (isDismissed) {
announceDismiss();
return;
} else {
annEl.classList.remove("hidden");
}
const actionEl = annEl.querySelector(".quarto-announcement-action");
if (actionEl) {
actionEl.addEventListener("click", function (e) {
e.preventDefault();
// Hide the bar immediately
announceDismiss();
});
}
}
};
window.document.addEventListener("DOMContentLoaded", function () {
let init = false;
announceRegister();
// Manage the back to top button, if one is present.
let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
const scrollDownBuffer = 5;
const scrollUpBuffer = 35;
const btn = document.getElementById("quarto-back-to-top");
const hideBackToTop = () => {
btn.style.display = "none";
};
const showBackToTop = () => {
btn.style.display = "inline-block";
};
if (btn) {
window.document.addEventListener(
"scroll",
function () {
const currentScrollTop =
window.pageYOffset || document.documentElement.scrollTop;
// Shows and hides the button 'intelligently' as the user scrolls
if (currentScrollTop - scrollDownBuffer > lastScrollTop) {
hideBackToTop();
lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop;
} else if (currentScrollTop < lastScrollTop - scrollUpBuffer) {
showBackToTop();
lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop;
}
// Show the button at the bottom, hides it at the top
if (currentScrollTop <= 0) {
hideBackToTop();
} else if (
window.innerHeight + currentScrollTop >=
document.body.offsetHeight
) {
showBackToTop();
}
},
false
);
}
function throttle(func, wait) {
var timeout;
return function () {
const context = this;
const args = arguments;
const later = function () {
clearTimeout(timeout);
timeout = null;
func.apply(context, args);
};
if (!timeout) {
timeout = setTimeout(later, wait);
}
};
}
function headerOffset() {
// Set an offset if there is are fixed top navbar
const headerEl = window.document.querySelector("header.fixed-top");
if (headerEl) {
return headerEl.clientHeight;
} else {
return 0;
}
}
function footerOffset() {
const footerEl = window.document.querySelector("footer.footer");
if (footerEl) {
return footerEl.clientHeight;
} else {
return 0;
}
}
function dashboardOffset() {
const dashboardNavEl = window.document.getElementById(
"quarto-dashboard-header"
);
if (dashboardNavEl !== null) {
return dashboardNavEl.clientHeight;
} else {
return 0;
}
}
function updateDocumentOffsetWithoutAnimation() {
updateDocumentOffset(false);
}
function updateDocumentOffset(animated) {
// set body offset
const topOffset = headerOffset();
const bodyOffset = topOffset + footerOffset() + dashboardOffset();
const bodyEl = window.document.body;
bodyEl.setAttribute("data-bs-offset", topOffset);
bodyEl.style.paddingTop = topOffset + "px";
// deal with sidebar offsets
const sidebars = window.document.querySelectorAll(
".sidebar, .headroom-target"
);
sidebars.forEach((sidebar) => {
if (!animated) {
sidebar.classList.add("notransition");
// Remove the no transition class after the animation has time to complete
setTimeout(function () {
sidebar.classList.remove("notransition");
}, 201);
}
if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) {
sidebar.style.top = "0";
sidebar.style.maxHeight = "100vh";
} else {
sidebar.style.top = topOffset + "px";
sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)";
}
});
// allow space for footer
const mainContainer = window.document.querySelector(".quarto-container");
if (mainContainer) {
mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)";
}
// link offset
let linkStyle = window.document.querySelector("#quarto-target-style");
if (!linkStyle) {
linkStyle = window.document.createElement("style");
linkStyle.setAttribute("id", "quarto-target-style");
window.document.head.appendChild(linkStyle);
}
while (linkStyle.firstChild) {
linkStyle.removeChild(linkStyle.firstChild);
}
if (topOffset > 0) {
linkStyle.appendChild(
window.document.createTextNode(`
section:target::before {
content: "";
display: block;
height: ${topOffset}px;
margin: -${topOffset}px 0 0;
}`)
);
}
if (init) {
window.dispatchEvent(headroomChanged);
}
init = true;
}
// initialize headroom
var header = window.document.querySelector("#quarto-header");
if (header && window.Headroom) {
const headroom = new window.Headroom(header, {
tolerance: 5,
onPin: function () {
const sidebars = window.document.querySelectorAll(
".sidebar, .headroom-target"
);
sidebars.forEach((sidebar) => {
sidebar.classList.remove("sidebar-unpinned");
});
updateDocumentOffset();
},
onUnpin: function () {
const sidebars = window.document.querySelectorAll(
".sidebar, .headroom-target"
);
sidebars.forEach((sidebar) => {
sidebar.classList.add("sidebar-unpinned");
});
updateDocumentOffset();
},
});
headroom.init();
let frozen = false;
window.quartoToggleHeadroom = function () {
if (frozen) {
headroom.unfreeze();
frozen = false;
} else {
headroom.freeze();
frozen = true;
}
};
}
window.addEventListener(
"hashchange",
function (e) {
if (
getComputedStyle(document.documentElement).scrollBehavior !== "smooth"
) {
window.scrollTo(0, window.pageYOffset - headerOffset());
}
},
false
);
// Observe size changed for the header
const headerEl = window.document.querySelector("header.fixed-top");
if (headerEl && window.ResizeObserver) {
const observer = new window.ResizeObserver(() => {
setTimeout(updateDocumentOffsetWithoutAnimation, 0);
});
observer.observe(headerEl, {
attributes: true,
childList: true,
characterData: true,
});
} else {
window.addEventListener(
"resize",
throttle(updateDocumentOffsetWithoutAnimation, 50)
);
}
setTimeout(updateDocumentOffsetWithoutAnimation, 250);
// fixup index.html links if we aren't on the filesystem
if (window.location.protocol !== "file:") {
const links = window.document.querySelectorAll("a");
for (let i = 0; i < links.length; i++) {
if (links[i].href) {
links[i].dataset.originalHref = links[i].href;
links[i].href = links[i].href.replace(/\/index\.html/, "/");
}
}
// Fixup any sharing links that require urls
// Append url to any sharing urls
const sharingLinks = window.document.querySelectorAll(
"a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item"
);
for (let i = 0; i < sharingLinks.length; i++) {
const sharingLink = sharingLinks[i];
const href = sharingLink.getAttribute("href");
if (href) {
sharingLink.setAttribute(
"href",
href.replace("|url|", window.location.href)
);
}
}
// Scroll the active navigation item into view, if necessary
const navSidebar = window.document.querySelector("nav#quarto-sidebar");
if (navSidebar) {
// Find the active item
const activeItem = navSidebar.querySelector("li.sidebar-item a.active");
if (activeItem) {
// Wait for the scroll height and height to resolve by observing size changes on the
// nav element that is scrollable
const resizeObserver = new ResizeObserver((_entries) => {
// The bottom of the element
const elBottom = activeItem.offsetTop;
const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight;
// The element height and scroll height are the same, then we are still loading
if (viewBottom !== navSidebar.scrollHeight) {
// Determine if the item isn't visible and scroll to it
if (elBottom >= viewBottom) {
navSidebar.scrollTop = elBottom;
}
// stop observing now since we've completed the scroll
resizeObserver.unobserve(navSidebar);
}
});
resizeObserver.observe(navSidebar);
}
}
}
});

File diff suppressed because one or more lines are too long

9
site_libs/quarto-search/fuse.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

755
suivi/2025-13/2025-13.html Normal file
View file

@ -0,0 +1,755 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 13 2025 : 17-21 mars Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script src="../../site_libs/quarto-contrib/glightbox/glightbox.min.js"></script>
<link href="../../site_libs/quarto-contrib/glightbox/glightbox.min.css" rel="stylesheet">
<link href="../../site_libs/quarto-contrib/glightbox/lightbox.css" rel="stylesheet">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 13 2025 : 17-21 mars</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">17 mars 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar zindex-bottom">
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<p>Cette semaine jai :</p>
<ul>
<li>Fini dintégrer à colSBM tous les changements (clustering dérecursifier pour uni et bipartites&amp; cli …) et contacter Saint-Clair pour passer colSBM sous GrossSBM.</li>
<li>Relancer et obtenus les résultats pour le clustering sur les réseaux Baldock</li>
</ul>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/baldock_meso_iid.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1" title="Baldock iid"><img src="figs/baldock_meso_iid.png" class="img-fluid figure-img" alt="Baldock iid"></a></p>
<figcaption>Baldock iid</figcaption>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/baldock_meso_pi.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2" title="Baldock pi"><img src="figs/baldock_meso_pi.png" class="img-fluid figure-img" alt="Baldock pi"></a></p>
<figcaption>Baldock pi</figcaption>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/baldock_meso_rho.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3" title="Baldock rho"><img src="figs/baldock_meso_rho.png" class="img-fluid figure-img" alt="Baldock rho"></a></p>
<figcaption>Baldock rho</figcaption>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/baldock_meso_pirho.png" class="lightbox" data-gallery="quarto-lightbox-gallery-4" title="Baldock pirho"><img src="figs/baldock_meso_pirho.png" class="img-fluid figure-img" alt="Baldock pirho"></a></p>
<figcaption>Baldock pirho</figcaption>
</figure>
</div>
<ul>
<li><p>Relancer et obtenus les résultats pour les simus ajoutant du bruits sur les structures et liens</p>
<ul>
<li>Pour <em>noisy <span class="math inline">\alpha</span></em>:</li>
</ul>
<p>Plan de simulation 2 collections (<span class="math inline">d\in (1,2)</span>) avec <span class="math inline">M = 30</span> soit 15 réseaux par type. <span class="math inline">n_r = n_c = 120</span> et <span class="math display">\pi_1 = \begin{pmatrix} 0.5, 0.3, 0.2\end{pmatrix},~
\rho_1 = \begin{pmatrix}0.4, 0.3, 0.2, 0.1\end{pmatrix},~
\alpha_1 = \begin{pmatrix}
0.85&amp; 0.4&amp; 0.2&amp; 0.15\\
0.6&amp; 0.2&amp; 0.15&amp; 0.15\\
0.2&amp; 0.15&amp; 0.15&amp; 0.7
\end{pmatrix}</span></p>
<p><span class="math display"> \pi_2 = (0.5, 0.3, 0.2),~
\rho_2 = (0.45, 0.3, 0.25),~
\alpha_2 = \begin{pmatrix}
0.65&amp; 0.15&amp; 0.15\\
0.15&amp; 0.8&amp; 0.15\\
0.15&amp; 0.15&amp; 0.4
\end{pmatrix}</span></p>
<p><span class="math inline">\epsilon \in (0, 0.01, \dots 0.05)</span> qui est lécart-type dune <span class="math inline">\mathcal{N}_{Q_1^d \times Q_2^d}(0,\epsilon^2) = vec(N^m), \forall m \in (1,\dots, M)</span>. Et <span class="math inline">\forall m, X^m \sim LBM_{n_r,n_c}(Q_1^d, Q_2^d, \alpha_d + N^m, \pi_d, \rho_d)</span></p>
<p>Résultats : <img src="figs/noisy_alpha.png" class="img-fluid" alt="alt"></p>
<ul>
<li>Pour <em>noisy links</em>:</li>
</ul>
<p>Plan de simu <span class="math inline">M = 30</span>, <span class="math inline">n_r = n_c = 120</span>. <span class="math display">\pi_1 = \begin{pmatrix} 0.5, 0.3, 0.2\end{pmatrix},~
\rho_1 = \begin{pmatrix}0.4, 0.3, 0.2, 0.1\end{pmatrix},~
\alpha_1 = \begin{pmatrix}
0.85&amp; 0.4&amp; 0.2&amp; 0.05\\
0.6&amp; 0.2&amp; 0.05&amp; 0.05\\
0.2&amp; 0.05&amp; 0.05&amp; 0.7
\end{pmatrix}</span></p>
<p><span class="math display"> \pi_2 = (0.5, 0.3, 0.2),~
\rho_2 = (0.45, 0.3, 0.25),~
\alpha_2 = \begin{pmatrix}
0.65&amp; 0.05&amp; 0.05\\
0.05&amp; 0.8&amp; 0.05\\
0.05&amp; 0.05&amp; 0.4
\end{pmatrix}</span></p>
<p><span class="math inline">\epsilon \in (0, 0.05, \dots 0.5)</span>, indices de la matrice = sample.int(<span class="math inline">n_r \times n_c</span>, size = <span class="math inline">n_r \times n_c \times \epsilon</span>). Les indices tirés inverse la valeur du lien (1 -&gt; 0, 0 -&gt; 1)</p></li>
</ul>
<div id="fig-results-linsk" class="quarto-layout-panel">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-results-linsk-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/clear_links.png" class="lightbox" data-gallery="quarto-lightbox-gallery-5" title="Clear links"><img src="figs/clear_links.png" class="img-fluid figure-img"></a></p>
<figcaption>Clear links</figcaption>
</figure>
</div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/noisy_links.png" class="lightbox" data-gallery="quarto-lightbox-gallery-6" title="Noisy links"><img src="figs/noisy_links.png" class="img-fluid figure-img"></a></p>
<figcaption>Noisy links</figcaption>
</figure>
</div>
</div>
</div>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig quarto-uncaptioned" id="fig-results-linsk-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;1
</figcaption>
</figure>
</div>
<ul>
<li><p>Relancer simulations robustesse aux NAs</p></li>
<li><p>Changer les plots résultats NAs pour faire sous-plots comparant sep vs model.</p></li>
</ul>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
<script>var lightboxQuarto = GLightbox({"closeEffect":"zoom","descPosition":"bottom","loop":false,"openEffect":"zoom","selector":".lightbox"});
(function() {
let previousOnload = window.onload;
window.onload = () => {
if (previousOnload) {
previousOnload();
}
lightboxQuarto.on('slide_before_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
const href = trigger.getAttribute('href');
if (href !== null) {
const imgEl = window.document.querySelector(`a[href="${href}"] img`);
if (imgEl !== null) {
const srcAttr = imgEl.getAttribute("src");
if (srcAttr && srcAttr.startsWith("data:")) {
slideConfig.href = srcAttr;
}
}
}
});
lightboxQuarto.on('slide_after_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(slideNode);
}
});
};
})();
</script>
</body></html>

View file

@ -1,80 +0,0 @@
---
title: "Bilan semaine 13 2025 : 17-21 mars"
date: 17 03 2025
categories:
- colBiSBM
---
Cette semaine j'ai :
- Fini d'intégrer à colSBM tous les changements (clustering dérecursifier pour
uni et bipartites& cli ...) et contacter Saint-Clair pour passer colSBM sous GrossSBM.
- Relancer et obtenus les résultats pour le clustering sur les réseaux Baldock
![Baldock iid](figs/baldock_meso_iid.png)
![Baldock pi](figs/baldock_meso_pi.png)
![Baldock rho](figs/baldock_meso_rho.png)
![Baldock pirho](figs/baldock_meso_pirho.png)
- Relancer et obtenus les résultats pour les simus ajoutant du bruits sur les structures et liens
- Pour *noisy $\alpha$*:
Plan de simulation 2 collections ($d\in (1,2)$) avec $M = 30$ soit 15 réseaux par type. $n_r = n_c = 120$ et
$$\pi_1 = \begin{pmatrix} 0.5, 0.3, 0.2\end{pmatrix},~
\rho_1 = \begin{pmatrix}0.4, 0.3, 0.2, 0.1\end{pmatrix},~
\alpha_1 = \begin{pmatrix}
0.85& 0.4& 0.2& 0.15\\
0.6& 0.2& 0.15& 0.15\\
0.2& 0.15& 0.15& 0.7
\end{pmatrix}$$
$$ \pi_2 = (0.5, 0.3, 0.2),~
\rho_2 = (0.45, 0.3, 0.25),~
\alpha_2 = \begin{pmatrix}
0.65& 0.15& 0.15\\
0.15& 0.8& 0.15\\
0.15& 0.15& 0.4
\end{pmatrix}$$
$\epsilon \in (0, 0.01, \dots 0.05)$ qui est l'écart-type d'une $\mathcal{N}_{Q_1^d \times Q_2^d}(0,\epsilon^2) = vec(N^m), \forall m \in (1,\dots, M)$.
Et $\forall m, X^m \sim LBM_{n_r,n_c}(Q_1^d, Q_2^d, \alpha_d + N^m, \pi_d, \rho_d)$
Résultats :
![alt](figs/noisy_alpha.png)
- Pour *noisy links*:
Plan de simu $M = 30$, $n_r = n_c = 120$.
$$\pi_1 = \begin{pmatrix} 0.5, 0.3, 0.2\end{pmatrix},~
\rho_1 = \begin{pmatrix}0.4, 0.3, 0.2, 0.1\end{pmatrix},~
\alpha_1 = \begin{pmatrix}
0.85& 0.4& 0.2& 0.05\\
0.6& 0.2& 0.05& 0.05\\
0.2& 0.05& 0.05& 0.7
\end{pmatrix}$$
$$ \pi_2 = (0.5, 0.3, 0.2),~
\rho_2 = (0.45, 0.3, 0.25),~
\alpha_2 = \begin{pmatrix}
0.65& 0.05& 0.05\\
0.05& 0.8& 0.05\\
0.05& 0.05& 0.4
\end{pmatrix}$$
$\epsilon \in (0, 0.05, \dots 0.5)$, indices de la matrice = sample.int($n_r \times n_c$, size = $n_r \times n_c \times \epsilon$). Les indices tirés inverse la valeur du lien (1 -> 0, 0 -> 1)
::: {#fig-results-linsk layout-ncol=2}
![Clear links](figs/clear_links.png)
![Noisy links](figs/noisy_links.png)
:::
- Relancer simulations robustesse aux NAs
- Changer les plots résultats NAs pour faire sous-plots comparant sep vs model.

677
suivi/2025-14/2025-14.html Normal file
View file

@ -0,0 +1,677 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 14 2025 : 24-28 mars Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 14 2025 : 24-28 mars</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">28 mars 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire"><span class="header-section-number">1</span> A faire</a></li>
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait"><span class="header-section-number">2</span> Jai fait</a></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">3</span> A continuer</a></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="a-faire" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">1</span> A faire</h2>
<ul>
<li><p>Relire intro St Clair</p></li>
<li><p>Sinspirer structure pour mon intro</p></li>
<li><p>Trouver biblio intro</p></li>
<li><p>Rédiger lintro</p></li>
<li><p>Agrandir la collection dapplication, pas seulement Baldock mais aussi Trojelsgaard par ex</p></li>
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</p></li>
<li><p>Présenter le réseau Afrique du Sud dès lintro des réseaux anglais de Baldock</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
<li><p>Rédiger et modifier les cadres de simulations dans le papier pour quils soient raccord avec les données obtenues.</p></li>
<li><p>Lancer clustering iid ascendant sur données sub-Doré.</p></li>
<li><p>Vérifier si les Baldock anglais ont des espèces en communs “Do they involve common species?”.</p></li>
</ul>
</section>
<section id="jai-fait" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="jai-fait"><span class="header-section-number">2</span> Jai fait</h2>
<ul>
<li>Corriger structure de simus :
<ul>
<li>Pour NA robustness</li>
</ul></li>
<li>Définir dans la section 3 :</li>
</ul>
<blockquote class="blockquote">
<p>Remark that for iid-colBiSBM, <span class="math inline">\pi_q, \rho_r &gt; 0</span>, and thus the blocks exist and are represented in all networks. For the other models, some blocks may not exist in some networks and this is why <span class="math inline">\pi_q^m, \rho_r^m \geq 0</span>. Using <span class="math inline">S^{(1)}</span> and <span class="math inline">S^{(2)}</span> we can define the restricted parameters for each network and we denote them as <span class="math inline">\widetilde{\bm{\pi}}^m</span>, <span class="math inline">\widetilde{\bm{\rho}}^m</span> and <span class="math inline">\widetilde{\bm{\alpha}}^m</span>. The restrictions thus indicate the blocks that are represented in the network <span class="math inline">m</span>.</p>
</blockquote>
<ul>
<li><p>Écrire la partie preuve pour identif <span class="math inline">\pi</span>-colBiSBM et <span class="math inline">\rho</span>-colBiSBM. Identif : <span class="math inline">\pi</span> et <span class="math inline">\rho</span> en attente retours Pierre et Sophie</p></li>
<li><p>Saint-Clair va passer colSBM sous GrossSBM</p></li>
<li><p>Agrandir la collection dapplication, pas seulement Baldock mais aussi Trojelsgaard par ex : <em>Collection agrandie avec Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson, en attente MIGALE</em>. Clustering instable</p></li>
</ul>
</section>
<section id="a-continuer" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">3</span> A continuer</h2>
<ul>
<li><p>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps <em>en attente des résultats MIGALE</em>.</p></li>
<li><p>Pour sub doré <em>en attente MIGALE</em> augmenter le nbre de répèt de la procédure.</p></li>
</ul>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,67 +0,0 @@
---
title: "Bilan semaine 14 2025 : 24-28 mars"
categories:
- colBiSBM
date: 28 03 2025
---
## A faire
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Agrandir la collection d'application, pas seulement Baldock mais aussi Trojelsgaard par ex
- Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson
- Présenter le réseau Afrique du Sud dès l'intro des réseaux anglais de Baldock
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
- Rédiger et modifier les cadres de simulations dans le papier pour qu'ils soient
raccord avec les données obtenues.
- Lancer clustering iid ascendant sur données sub-Doré.
- Vérifier si les Baldock anglais ont des espèces en communs "Do they involve common species?".
## J'ai fait
- Corriger structure de simus :
- Pour NA robustness
- Définir dans la section 3 :
> Remark that for iid-colBiSBM, $\pi_q, \rho_r > 0$, and thus the blocks exist
and are represented in all networks. For the other models, some blocks may not
exist in some networks and this is why $\pi_q^m, \rho_r^m \geq 0$. Using
$S^{(1)}$ and $S^{(2)}$ we can define the restricted parameters for each
network and we denote them as $\widetilde{\bm{\pi}}^m$,
$\widetilde{\bm{\rho}}^m$ and $\widetilde{\bm{\alpha}}^m$. The restrictions
thus indicate the blocks that are represented in the network $m$.
- Écrire la partie preuve pour identif $\pi$-colBiSBM et $\rho$-colBiSBM.
Identif : $\pi$ et $\rho$ en attente retours Pierre et Sophie
- Saint-Clair va passer colSBM sous GrossSBM
- Agrandir la collection d'application, pas seulement Baldock mais aussi Trojelsgaard par ex : *Collection agrandie avec Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson, en attente MIGALE*. Clustering instable
## A continuer
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps *en attente des résultats MIGALE*.
- Pour sub doré *en attente MIGALE* augmenter le nbre de répèt de la procédure.

674
suivi/2025-15/2025-15.html Normal file
View file

@ -0,0 +1,674 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 15 2025 : 31 mars-4 avril Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 15 2025 : 31 mars-4 avril</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">4 avril 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire"><span class="header-section-number">1</span> A faire</a></li>
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait"><span class="header-section-number">2</span> Jai fait</a></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">3</span> A continuer</a></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="a-faire" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">1</span> A faire</h2>
<ul>
<li><p>Relire intro St Clair</p></li>
<li><p>Sinspirer structure pour mon intro</p></li>
<li><p>Trouver biblio intro</p></li>
<li><p>Rédiger lintro</p></li>
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
<li><p>Extraire les nombres de liens communs et déplacer le tableau en annexes en faisant juste un paragraphe dans le corps de texte.</p></li>
</ul>
<p><strong>Pour VENDREDI</strong></p>
<ul>
<li><p>Rédiger et modifier les cadres de simulations dans le papier pour quils soient raccord avec les données obtenues.</p></li>
<li><p>Étoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.</p></li>
</ul>
<blockquote class="blockquote">
<p>je pense quil faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots</p>
</blockquote>
<ul>
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</li>
</ul>
</section>
<section id="jai-fait" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="jai-fait"><span class="header-section-number">2</span> Jai fait</h2>
<ul>
<li><p>Clustering sub-doré pas de stabilité à la répétition malheureusement <img src="figs/alluvial-clusterings.png" class="img-fluid"></p></li>
<li><p>Vérifier si les Baldock anglais ont des espèces en communs “Do they involve common species?”. Oui environ 70/250 soit plus de 20%.</p></li>
<li><p>Présenter le réseau Afrique du Sud dès lintro des réseaux anglais de Baldock</p></li>
</ul>
</section>
<section id="a-continuer" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">3</span> A continuer</h2>
<ul>
<li><p>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps <em>en attente des résultats MIGALE</em>.</p></li>
<li><p>Jai lancé le clustering iid ascendant sur données sub-Doré. <em>en attente des résultats MIGALE</em></p></li>
</ul>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,55 +0,0 @@
---
title: "Bilan semaine 15 2025 : 31 mars-4 avril"
categories:
- colBiSBM
date: 04 04 2025
---
## A faire
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
- Extraire les nombres de liens communs et déplacer le tableau en annexes en faisant juste un paragraphe dans le corps de texte.
**Pour VENDREDI**
- Rédiger et modifier les cadres de simulations dans le papier pour qu'ils soient
raccord avec les données obtenues.
- Étoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.
> je pense qu'il faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
## J'ai fait
- Clustering sub-doré pas de stabilité à la répétition malheureusement
![](figs/alluvial-clusterings.png)
- Vérifier si les Baldock anglais ont des espèces en communs "Do they involve common species?". Oui environ 70/250 soit plus de 20%.
- Présenter le réseau Afrique du Sud dès l'intro des réseaux anglais de Baldock
## A continuer
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps *en attente des résultats MIGALE*.
- J'ai lancé le clustering iid ascendant sur données sub-Doré. *en attente des résultats MIGALE*

672
suivi/2025-16/2025-16.html Normal file
View file

@ -0,0 +1,672 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 16 2025 Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 16 2025</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">18 avril 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire"><span class="header-section-number">1</span> A faire</a></li>
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait"><span class="header-section-number">2</span> Jai fait</a></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">3</span> A continuer</a></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="a-faire" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">1</span> A faire</h2>
<ul>
<li><p>Relire intro St Clair</p></li>
<li><p>Sinspirer structure pour mon intro</p></li>
<li><p>Trouver biblio intro</p></li>
<li><p>Rédiger lintro</p></li>
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
<li><p>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</p></li>
<li><p>Idée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers.</p></li>
</ul>
</section>
<section id="jai-fait" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="jai-fait"><span class="header-section-number">2</span> Jai fait</h2>
<ul>
<li><p>Jai lancé le clustering iid ascendant sur données sub-Doré. Résultats stables mais 27 collections formées donc pas de mise en commun des structures…</p></li>
<li><p>Rédiger et modifier les cadres de simulations dans le papier pour quils soient raccord avec les données obtenues.</p></li>
<li><p>Étoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.</p></li>
</ul>
<blockquote class="blockquote">
<p>je pense quil faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots</p>
</blockquote>
<ul>
<li>Comment faire pour linscription JdS (paiement, coldem …) : voir avec Christelle</li>
<li>CSI : St Clair, Sonia ou Elisa et Pierre Gérard</li>
</ul>
</section>
<section id="a-continuer" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">3</span> A continuer</h2>
<ul>
<li><p>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps <em>en attente des résultats MIGALE</em>.</p></li>
<li><p>Lire Biological Networks - François Képès</p></li>
<li><p>Jai esquissé des bouts dintro</p></li>
</ul>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,54 +0,0 @@
---
title: "Bilan semaine 16 2025"
categories:
- colBiSBM
date: 18 04 2025
---
## A faire
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
- Idée Pierre : Regarder la contribution au BICL de la collection des réseaux
et comparer au sep BICL pour essayer de repérer les outliers.
## J'ai fait
- J'ai lancé le clustering iid ascendant sur données sub-Doré.
Résultats stables mais 27 collections formées donc pas de mise en commun des structures...
- Rédiger et modifier les cadres de simulations dans le papier pour qu'ils soient
raccord avec les données obtenues.
- Étoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.
> je pense qu'il faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots
- Comment faire pour l'inscription JdS (paiement, coldem ...) : voir avec Christelle
- CSI : St Clair, Sonia ou Elisa et Pierre Gérard
## A continuer
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps *en attente des résultats MIGALE*.
- Lire Biological Networks - François Képès
- J'ai esquissé des bouts d'intro

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

808
suivi/2025-17/2025-17.html Normal file
View file

@ -0,0 +1,808 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 17 2025 : 24 avril - 25 avril Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script src="../../site_libs/quarto-contrib/glightbox/glightbox.min.js"></script>
<link href="../../site_libs/quarto-contrib/glightbox/glightbox.min.css" rel="stylesheet">
<link href="../../site_libs/quarto-contrib/glightbox/lightbox.css" rel="stylesheet">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 17 2025 : 24 avril - 25 avril</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">25 avril 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire"><span class="header-section-number">1</span> A faire</a>
<ul class="collapse">
<li><a href="#rédaction-article" id="toc-rédaction-article" class="nav-link" data-scroll-target="#rédaction-article"><span class="header-section-number">1.1</span> Rédaction article</a></li>
<li><a href="#simulations-article" id="toc-simulations-article" class="nav-link" data-scroll-target="#simulations-article"><span class="header-section-number">1.2</span> Simulations article</a></li>
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications"><span class="header-section-number">1.3</span> Applications</a></li>
<li><a href="#autour-de-larticle-et-du-package" id="toc-autour-de-larticle-et-du-package" class="nav-link" data-scroll-target="#autour-de-larticle-et-du-package"><span class="header-section-number">1.4</span> Autour de larticle et du package</a></li>
</ul></li>
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait"><span class="header-section-number">2</span> Jai fait</a></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">3</span> A continuer</a>
<ul class="collapse">
<li><a href="#correction-méthodo" id="toc-correction-méthodo" class="nav-link" data-scroll-target="#correction-méthodo"><span class="header-section-number">3.1</span> Correction méthodo</a></li>
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1"><span class="header-section-number">3.2</span> Applications</a></li>
<li><a href="#lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée." id="toc-lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée." class="nav-link" data-scroll-target="#lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée."><span class="header-section-number">3.3</span> Lancer clustering auteur par auteur du sub-Doré : 5 collections différentes dans lidée.</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="a-faire" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">1</span> A faire</h2>
<section id="rédaction-article" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="rédaction-article"><span class="header-section-number">1.1</span> Rédaction article</h3>
<ul>
<li><p>Relire intro St Clair</p></li>
<li><p>Sinspirer structure pour mon intro</p></li>
<li><p>Trouver biblio intro</p></li>
<li><p>Rédiger lintro</p></li>
<li><p>Regarder les applications pour les collections de réseaux recommender system</p></li>
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</p></li>
<li><p>Dire résultats nettement meilleurs et variabilités inférieures.</p></li>
</ul>
</section>
<section id="simulations-article" class="level3" data-number="1.2">
<h3 data-number="1.2" class="anchored" data-anchor-id="simulations-article"><span class="header-section-number">1.2</span> Simulations article</h3>
<ul>
<li><p>Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral</p></li>
<li><p>Ajouter simu clustering métriques nb sous-collections obtenues. Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille <span class="math inline">M = 30</span> avec <span class="math inline">M_1 = M_2 = M_3 = 10</span>.</p></li>
<li><p>Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices dadjacences.</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
</ul>
</section>
<section id="applications" class="level3" data-number="1.3">
<h3 data-number="1.3" class="anchored" data-anchor-id="applications"><span class="header-section-number">1.3</span> Applications</h3>
<ul>
<li>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>.</li>
</ul>
</section>
<section id="autour-de-larticle-et-du-package" class="level3" data-number="1.4">
<h3 data-number="1.4" class="anchored" data-anchor-id="autour-de-larticle-et-du-package"><span class="header-section-number">1.4</span> Autour de larticle et du package</h3>
<ul>
<li>Créer des vignettes illustrant par exemple des cas de simulations. <strong>Possible de mettre lexemple dapplication de Sophie sur les réseaux avec gradient durbanisation</strong>.</li>
</ul>
</section>
</section>
<section id="jai-fait" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="jai-fait"><span class="header-section-number">2</span> Jai fait</h2>
<ul>
<li><p>Créer un README descriptif du dépôt des codes pour larticle.</p></li>
<li><p>Remonter figure sélection de modèle dans le corps de larticle</p></li>
<li><p>Enrichir légende de la figure 7 et 8</p></li>
<li><p>Supprimer p_NA des autres cadrans des proportions de NA</p></li>
<li><p>Basculer le code du clustering pour utiliser hclust et mis largument method de hclust avec single par défaut</p></li>
<li><p>Ajouter pipeline qui knit README.Rmd à chaque merge dans main colSBM</p></li>
</ul>
</section>
<section id="a-continuer" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">3</span> A continuer</h2>
<ul>
<li><p>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps <em>en attente des résultats MIGALE</em>.</p></li>
<li><p>Lire Biological Networks - François Képès</p></li>
<li><p>Jai esquissé des bouts dintro</p></li>
<li><p>Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE</p></li>
</ul>
<section id="correction-méthodo" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="correction-méthodo"><span class="header-section-number">3.1</span> Correction méthodo</h3>
<ul>
<li><p>Idée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers. En regardant la vbound (pas la pénalité) de chaque réseau dans le joint vs sa vbound dans le sep -&gt; Résultats : pas de différences majeures entre les réseaux avec le rapport vbound_joint/vbound_sep, les outliers ne sont pas marqués.</p></li>
<li><p>Regarder si plutôt que k médioid possible meilleurs résultats avec dautres distances hclust avec min, max etc… -&gt; Lalgo PAM donne des clusters équilibrés sans séparer les outliers Je regarde avec plutôt des hclust avec métrique single pour séparer les outliers.</p></li>
<li><p>Voir si in fine possible de repérer des outliers à partir de ces nouvelles métriques</p></li>
<li><p>Regarder la répartition de densité dans les réseaux sub-doré -&gt; déséquilibrée</p></li>
</ul>
<p><a href="figs/density-subdore.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="figs/density-subdore.png" class="img-fluid"></a></p>
<pre><code>En faisant des clusterings par densité on constate qu'avec un modèle iid pour des réseaux dont la densité est entre :
- 0 et 0.05 : Baldock et Souza tout le monde se retrouvait ensemble avec *Partitioning around medoids*</code></pre>
</section>
<section id="applications-1" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="applications-1"><span class="header-section-number">3.2</span> Applications</h3>
<ul>
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</li>
</ul>
<blockquote class="blockquote">
<p>Sophie a fait une appli qui marche bien et va dans le sens de lanalyse faite (à savoir pas deffet du gradien durbanisation). À continuer pour lintégrer dans larticle !</p>
</blockquote>
</section>
<section id="lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée." class="level3" data-number="3.3">
<h3 data-number="3.3" class="anchored" data-anchor-id="lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée."><span class="header-section-number">3.3</span> Lancer clustering auteur par auteur du sub-Doré : 5 collections différentes dans lidée.</h3>
<p>Une fois fait, Sophie ne trouve pas que ce soit le plus pertinent pour illustrer le clustering. Plus intéressant de garder le clustering de données simulées (<span class="math inline">M = 30</span>) et se servir des exemples dessous et des parcours exhaustif des possibilités de partitionnement comme comparatif.</p>
<section id="baldock" class="level4" data-number="3.3.1">
<h4 data-number="3.3.1" class="anchored" data-anchor-id="baldock"><span class="header-section-number">3.3.1</span> Baldock</h4>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/subdore-per-author/subdore_baldock_alluvial_clusterings.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2" title="Alluvial Baldock"><img src="figs/subdore-per-author/subdore_baldock_alluvial_clusterings.png" class="img-fluid figure-img" alt="Alluvial Baldock"></a></p>
<figcaption>Alluvial Baldock</figcaption>
</figure>
</div>
</section>
<section id="gibson" class="level4" data-number="3.3.2">
<h4 data-number="3.3.2" class="anchored" data-anchor-id="gibson"><span class="header-section-number">3.3.2</span> Gibson</h4>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/subdore-per-author/subdore_gibson_alluvial_clusterings.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3" title="Alluvial Gibson"><img src="figs/subdore-per-author/subdore_gibson_alluvial_clusterings.png" class="img-fluid figure-img" alt="Alluvial Gibson"></a></p>
<figcaption>Alluvial Gibson</figcaption>
</figure>
</div>
</section>
<section id="souza" class="level4" data-number="3.3.3">
<h4 data-number="3.3.3" class="anchored" data-anchor-id="souza"><span class="header-section-number">3.3.3</span> Souza</h4>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/subdore-per-author/subdore_souza_alluvial_clusterings.png" class="lightbox" data-gallery="quarto-lightbox-gallery-4" title="Alluvial Souza"><img src="figs/subdore-per-author/subdore_souza_alluvial_clusterings.png" class="img-fluid figure-img" alt="Alluvial Souza"></a></p>
<figcaption>Alluvial Souza</figcaption>
</figure>
</div>
</section>
<section id="traveset" class="level4" data-number="3.3.4">
<h4 data-number="3.3.4" class="anchored" data-anchor-id="traveset"><span class="header-section-number">3.3.4</span> Traveset</h4>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/subdore-per-author/subdore_traveset_alluvial_clusterings.png" class="lightbox" data-gallery="quarto-lightbox-gallery-5" title="Alluvial Traveset"><img src="figs/subdore-per-author/subdore_traveset_alluvial_clusterings.png" class="img-fluid figure-img" alt="Alluvial Traveset"></a></p>
<figcaption>Alluvial Traveset</figcaption>
</figure>
</div>
</section>
<section id="trojelsgaard" class="level4" data-number="3.3.5">
<h4 data-number="3.3.5" class="anchored" data-anchor-id="trojelsgaard"><span class="header-section-number">3.3.5</span> Trojelsgaard</h4>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/subdore-per-author/subdore_trojelsgaard_alluvial_clusterings.png" class="lightbox" data-gallery="quarto-lightbox-gallery-6" title="Alluvial Trojelgaard"><img src="figs/subdore-per-author/subdore_trojelsgaard_alluvial_clusterings.png" class="img-fluid figure-img" alt="Alluvial Trojelgaard"></a></p>
<figcaption>Alluvial Trojelgaard</figcaption>
</figure>
</div>
</section>
</section>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
<script>var lightboxQuarto = GLightbox({"closeEffect":"zoom","descPosition":"bottom","loop":false,"openEffect":"zoom","selector":".lightbox"});
(function() {
let previousOnload = window.onload;
window.onload = () => {
if (previousOnload) {
previousOnload();
}
lightboxQuarto.on('slide_before_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
const href = trigger.getAttribute('href');
if (href !== null) {
const imgEl = window.document.querySelector(`a[href="${href}"] img`);
if (imgEl !== null) {
const srcAttr = imgEl.getAttribute("src");
if (srcAttr && srcAttr.startsWith("data:")) {
slideConfig.href = srcAttr;
}
}
}
});
lightboxQuarto.on('slide_after_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(slideNode);
}
});
};
})();
</script>
</body></html>

View file

@ -1,125 +0,0 @@
---
title: "Bilan semaine 17 2025 : 24 avril - 25 avril"
categories:
- colBiSBM
date: 25 04 2025
---
## A faire
### Rédaction article
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Regarder les applications pour les collections de réseaux recommender system
- Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson
- Dire résultats nettement meilleurs et variabilités inférieures.
### Simulations article
- Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral
- Ajouter simu clustering métriques nb sous-collections obtenues.
Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille $M = 30$ avec $M_1 = M_2 = M_3 = 10$.
- Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices d'adjacences.
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
### Applications
- Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
### Autour de l'article et du package
- Créer des vignettes illustrant par exemple des cas de simulations. **Possible de mettre l'exemple d'application de Sophie sur les réseaux avec gradient d'urbanisation**.
## J'ai fait
- Créer un README descriptif du dépôt des codes pour l'article.
- Remonter figure sélection de modèle dans le corps de l'article
- Enrichir légende de la figure 7 et 8
- Supprimer p_NA des autres cadrans des proportions de NA
- Basculer le code du clustering pour utiliser hclust et mis l'argument method de hclust avec single par défaut
- Ajouter pipeline qui knit README.Rmd à chaque merge dans main colSBM
## A continuer
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps *en attente des résultats MIGALE*.
- Lire Biological Networks - François Képès
- J'ai esquissé des bouts d'intro
- Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE
### Correction méthodo
- Idée Pierre : Regarder la contribution au BICL de la collection des réseaux
et comparer au sep BICL pour essayer de repérer les outliers. En regardant la vbound (pas la pénalité) de chaque réseau dans le joint vs sa vbound dans le sep
-> Résultats : pas de différences majeures entre les réseaux avec le rapport vbound_joint/vbound_sep, les outliers ne sont pas marqués.
- Regarder si plutôt que k médioid possible meilleurs résultats avec d'autres distances hclust avec min, max etc...
-> L'algo PAM donne des clusters équilibrés sans séparer les outliers
Je regarde avec plutôt des hclust avec métrique single pour séparer les outliers.
- Voir si in fine possible de repérer des outliers à partir de ces nouvelles métriques
- Regarder la répartition de densité dans les réseaux sub-doré -> déséquilibrée
![](figs/density-subdore.png)
En faisant des clusterings par densité on constate qu'avec un modèle iid pour des réseaux dont la densité est entre :
- 0 et 0.05 : Baldock et Souza tout le monde se retrouvait ensemble avec *Partitioning around medoids*
### Applications
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
> Sophie a fait une appli qui marche bien et va dans le sens de l'analyse faite
(à savoir pas d'effet du gradien d'urbanisation). À continuer pour l'intégrer dans l'article !
### Lancer clustering auteur par auteur du sub-Doré : 5 collections différentes dans l'idée.
Une fois fait, Sophie ne trouve pas que ce soit le plus pertinent pour illustrer le clustering.
Plus intéressant de garder le clustering de données simulées ($M = 30$) et se
servir des exemples dessous et des parcours exhaustif des possibilités de partitionnement comme comparatif.
#### Baldock
![Alluvial Baldock](figs/subdore-per-author/subdore_baldock_alluvial_clusterings.png)
#### Gibson
![Alluvial Gibson](figs/subdore-per-author/subdore_gibson_alluvial_clusterings.png)
#### Souza
![Alluvial Souza](figs/subdore-per-author/subdore_souza_alluvial_clusterings.png)
#### Traveset
![Alluvial Traveset](figs/subdore-per-author/subdore_traveset_alluvial_clusterings.png)
#### Trojelsgaard
![Alluvial Trojelgaard](figs/subdore-per-author/subdore_trojelsgaard_alluvial_clusterings.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

777
suivi/2025-18/2025-18.html Normal file
View file

@ -0,0 +1,777 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 18 2025 : 28 avril - 2 mai Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script src="../../site_libs/quarto-contrib/glightbox/glightbox.min.js"></script>
<link href="../../site_libs/quarto-contrib/glightbox/glightbox.min.css" rel="stylesheet">
<link href="../../site_libs/quarto-contrib/glightbox/lightbox.css" rel="stylesheet">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 18 2025 : 28 avril - 2 mai</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">2 mai 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire"><span class="header-section-number">1</span> A faire</a>
<ul class="collapse">
<li><a href="#stratégie-suite-inférence" id="toc-stratégie-suite-inférence" class="nav-link" data-scroll-target="#stratégie-suite-inférence"><span class="header-section-number">1.1</span> Stratégie suite : Inférence</a></li>
<li><a href="#rédaction-article" id="toc-rédaction-article" class="nav-link" data-scroll-target="#rédaction-article"><span class="header-section-number">1.2</span> Rédaction article</a></li>
<li><a href="#simulations-article" id="toc-simulations-article" class="nav-link" data-scroll-target="#simulations-article"><span class="header-section-number">1.3</span> Simulations article</a></li>
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications"><span class="header-section-number">1.4</span> Applications</a></li>
<li><a href="#autour-de-larticle-et-du-package" id="toc-autour-de-larticle-et-du-package" class="nav-link" data-scroll-target="#autour-de-larticle-et-du-package"><span class="header-section-number">1.5</span> Autour de larticle et du package</a></li>
</ul></li>
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait"><span class="header-section-number">2</span> Jai fait</a>
<ul class="collapse">
<li><a href="#jds" id="toc-jds" class="nav-link" data-scroll-target="#jds"><span class="header-section-number">2.1</span> JdS</a></li>
<li><a href="#clustering-exhaustif-baldock" id="toc-clustering-exhaustif-baldock" class="nav-link" data-scroll-target="#clustering-exhaustif-baldock"><span class="header-section-number">2.2</span> Clustering exhaustif Baldock</a></li>
</ul></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">3</span> A continuer</a>
<ul class="collapse">
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1"><span class="header-section-number">3.1</span> Applications</a></li>
<li><a href="#simulations-article-1" id="toc-simulations-article-1" class="nav-link" data-scroll-target="#simulations-article-1"><span class="header-section-number">3.2</span> Simulations article</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="a-faire" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">1</span> A faire</h2>
<section id="stratégie-suite-inférence" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="stratégie-suite-inférence"><span class="header-section-number">1.1</span> Stratégie suite : Inférence</h3>
<ul>
<li><p>Lire biblio fournie Julie, Inférence de réseaux : co-occurence</p></li>
<li><p>Papier pour comprendre données</p></li>
<li><p>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</p></li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
<section id="rédaction-article" class="level3" data-number="1.2">
<h3 data-number="1.2" class="anchored" data-anchor-id="rédaction-article"><span class="header-section-number">1.2</span> Rédaction article</h3>
<ul>
<li><p>Relire intro St Clair</p></li>
<li><p>Sinspirer structure pour mon intro</p></li>
<li><p>Trouver biblio intro</p></li>
<li><p>Rédiger lintro</p></li>
<li><p>Regarder les applications pour les collections de réseaux recommender system</p></li>
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</p></li>
<li><p>Dire résultats nettement meilleurs et variabilités inférieures.</p></li>
<li><p>Intégrer les retours de Sophie</p></li>
</ul>
</section>
<section id="simulations-article" class="level3" data-number="1.3">
<h3 data-number="1.3" class="anchored" data-anchor-id="simulations-article"><span class="header-section-number">1.3</span> Simulations article</h3>
<ul>
<li><p>Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices dadjacences.</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
</ul>
</section>
<section id="applications" class="level3" data-number="1.4">
<h3 data-number="1.4" class="anchored" data-anchor-id="applications"><span class="header-section-number">1.4</span> Applications</h3>
<ul>
<li>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</li>
</ul>
<p><a href="figs/density-subdore.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="figs/density-subdore.png" class="img-fluid"></a></p>
</section>
<section id="autour-de-larticle-et-du-package" class="level3" data-number="1.5">
<h3 data-number="1.5" class="anchored" data-anchor-id="autour-de-larticle-et-du-package"><span class="header-section-number">1.5</span> Autour de larticle et du package</h3>
<ul>
<li>Créer des vignettes illustrant par exemple des cas de simulations. <strong>Possible de mettre lexemple dapplication de Sophie sur les réseaux avec gradient durbanisation</strong>.</li>
</ul>
</section>
</section>
<section id="jai-fait" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="jai-fait"><span class="header-section-number">2</span> Jai fait</h2>
<section id="jds" class="level3" data-number="2.1">
<h3 data-number="2.1" class="anchored" data-anchor-id="jds"><span class="header-section-number">2.1</span> JdS</h3>
<ul>
<li>colDEM CSE</li>
</ul>
</section>
<section id="clustering-exhaustif-baldock" class="level3" data-number="2.2">
<h3 data-number="2.2" class="anchored" data-anchor-id="clustering-exhaustif-baldock"><span class="header-section-number">2.2</span> Clustering exhaustif Baldock</h3>
<ul>
<li><p>Le clustering de toutes les 52 partitions sest fait en 5h30 ! (Mémoïsation)</p></li>
<li><p>Pour iid la meilleure partition avec <span class="math inline">BICL=-9466.911</span> contre <span class="math inline">BICL_{algo} = -9466.873 \pm 0.02205</span> trouvé avec lalgo <img src="figs/partition-iid.svg" class="img-fluid" alt="best_iid"></p></li>
<li><p>Pour <span class="math inline">\pi\rho</span> la meilleure partition avec <span class="math inline">BICL = -9497.92</span> contre <span class="math inline">BICL_{algo} =-9497.92 \pm 0.00009</span> <img src="figs/partition-pirho.svg" class="img-fluid" alt="best_pirho"></p></li>
</ul>
</section>
</section>
<section id="a-continuer" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">3</span> A continuer</h2>
<ul>
<li><p>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps <em>en attente des résultats MIGALE</em>.</p></li>
<li><p>Lire Biological Networks - François Képès</p></li>
<li><p>Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE</p></li>
</ul>
<section id="applications-1" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="applications-1"><span class="header-section-number">3.1</span> Applications</h3>
<ul>
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</li>
</ul>
<blockquote class="blockquote">
<p>Sophie a fait une appli qui marche bien et va dans le sens de lanalyse faite (à savoir pas deffet du gradien durbanisation). À continuer pour lintégrer dans larticle !</p>
</blockquote>
</section>
<section id="simulations-article-1" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="simulations-article-1"><span class="header-section-number">3.2</span> Simulations article</h3>
<ul>
<li>Relancer simulations de clustering avec <span class="math inline">M = 30</span><span class="math inline">M_i = 10, \forall i</span>. En attente retour MIGALE Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral. Ajouter simu clustering métriques nb sous-collections obtenues. Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille <span class="math inline">M = 30</span> avec <span class="math inline">M_1 = M_2 = M_3 = 10</span>.</li>
</ul>
</section>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
<script>var lightboxQuarto = GLightbox({"closeEffect":"zoom","descPosition":"bottom","loop":false,"openEffect":"zoom","selector":".lightbox"});
(function() {
let previousOnload = window.onload;
window.onload = () => {
if (previousOnload) {
previousOnload();
}
lightboxQuarto.on('slide_before_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
const href = trigger.getAttribute('href');
if (href !== null) {
const imgEl = window.document.querySelector(`a[href="${href}"] img`);
if (imgEl !== null) {
const srcAttr = imgEl.getAttribute("src");
if (srcAttr && srcAttr.startsWith("data:")) {
slideConfig.href = srcAttr;
}
}
}
});
lightboxQuarto.on('slide_after_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(slideNode);
}
});
};
})();
</script>
</body></html>

View file

@ -1,95 +0,0 @@
---
title: "Bilan semaine 18 2025 : 28 avril - 2 mai"
categories: [colBiSBM, inférence]
date: 2025 05 02
---
## A faire
### Stratégie suite : Inférence
- Lire biblio fournie Julie, Inférence de réseaux : co-occurence
- Papier pour comprendre données
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS
### Rédaction article
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Regarder les applications pour les collections de réseaux recommender system
- Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson
- Dire résultats nettement meilleurs et variabilités inférieures.
- Intégrer les retours de Sophie
### Simulations article
- Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices d'adjacences.
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
### Applications
- Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
Car densités déséquilibrées.
![](figs/density-subdore.png)
### Autour de l'article et du package
- Créer des vignettes illustrant par exemple des cas de simulations. **Possible de mettre l'exemple d'application de Sophie sur les réseaux avec gradient d'urbanisation**.
## J'ai fait
### JdS
- colDEM CSE
### Clustering exhaustif Baldock
- Le clustering de toutes les 52 partitions s'est fait en 5h30 ! (Mémoïsation)
- Pour iid la meilleure partition avec $BICL=-9466.911$ contre $BICL_{algo} = -9466.873 \pm 0.02205$ trouvé avec l'algo
![best_iid](figs/partition-iid.svg)
- Pour $\pi\rho$ la meilleure partition avec $BICL = -9497.92$ contre $BICL_{algo} =-9497.92 \pm 0.00009$
![best_pirho](figs/partition-pirho.svg)
## A continuer
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps *en attente des résultats MIGALE*.
- Lire Biological Networks - François Képès
- Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE
### Applications
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
> Sophie a fait une appli qui marche bien et va dans le sens de l'analyse faite
(à savoir pas d'effet du gradien d'urbanisation). À continuer pour l'intégrer dans l'article !
### Simulations article
- Relancer simulations de clustering avec $M = 30$ où $M_i = 10, \forall i$. En attente retour MIGALE
Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral. Ajouter simu clustering métriques nb sous-collections obtenues.
Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille $M = 30$ avec $M_1 = M_2 = M_3 = 10$.

856
suivi/2025-19/2025-19.html Normal file
View file

@ -0,0 +1,856 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 19 2025 : 5 mai - 9 mai Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 19 2025 : 5 mai - 9 mai</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">9 mai 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#top-priorité" id="toc-top-priorité" class="nav-link active" data-scroll-target="#top-priorité"><span class="header-section-number">1</span> TOP PRIORITÉ</a>
<ul class="collapse">
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications"><span class="header-section-number">1.1</span> Applications</a></li>
<li><a href="#présentations-lsd-jds-et-mlaussois" id="toc-présentations-lsd-jds-et-mlaussois" class="nav-link" data-scroll-target="#présentations-lsd-jds-et-mlaussois"><span class="header-section-number">1.2</span> Présentations LSD, JdS et ML@Aussois</a></li>
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.3</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">2</span> A discuter</a></li>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link" data-scroll-target="#a-faire"><span class="header-section-number">3</span> A faire</a>
<ul class="collapse">
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">3.1</span> Inférence</a></li>
<li><a href="#rédaction-article" id="toc-rédaction-article" class="nav-link" data-scroll-target="#rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</a></li>
</ul></li>
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait"><span class="header-section-number">4</span> Jai fait</a>
<ul class="collapse">
<li><a href="#csi-en-attente-contacts-pb-et-sd" id="toc-csi-en-attente-contacts-pb-et-sd" class="nav-link" data-scroll-target="#csi-en-attente-contacts-pb-et-sd"><span class="header-section-number">4.1</span> CSI (en attente contacts PB et SD)</a></li>
<li><a href="#finistr" id="toc-finistr" class="nav-link" data-scroll-target="#finistr"><span class="header-section-number">4.2</span> FinistR</a></li>
<li><a href="#ml-at-aussois" id="toc-ml-at-aussois" class="nav-link" data-scroll-target="#ml-at-aussois"><span class="header-section-number">4.3</span> ML at Aussois</a></li>
<li><a href="#présentation" id="toc-présentation" class="nav-link" data-scroll-target="#présentation"><span class="header-section-number">4.4</span> Présentation</a></li>
</ul></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">5</span> A continuer</a>
<ul class="collapse">
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1"><span class="header-section-number">5.1</span> Applications</a></li>
<li><a href="#axe-inférence" id="toc-axe-inférence" class="nav-link" data-scroll-target="#axe-inférence"><span class="header-section-number">5.2</span> Axe inférence</a></li>
</ul></li>
<li><a href="#repoussés-ou-abandonnés" id="toc-repoussés-ou-abandonnés" class="nav-link" data-scroll-target="#repoussés-ou-abandonnés"><span class="header-section-number">6</span> Repoussés ou abandonnés</a>
<ul class="collapse">
<li><a href="#papier-plus-multi-applications" id="toc-papier-plus-multi-applications" class="nav-link" data-scroll-target="#papier-plus-multi-applications"><span class="header-section-number">6.1</span> Papier plus multi-applications</a></li>
<li><a href="#autour-de-larticle-et-du-package" id="toc-autour-de-larticle-et-du-package" class="nav-link" data-scroll-target="#autour-de-larticle-et-du-package"><span class="header-section-number">6.2</span> Autour de larticle et du package</a></li>
<li><a href="#simulations-article" id="toc-simulations-article" class="nav-link" data-scroll-target="#simulations-article"><span class="header-section-number">6.3</span> Simulations article</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="top-priorité" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="top-priorité"><span class="header-section-number">1</span> TOP PRIORITÉ</h2>
<ul>
<li><p>Débugguer les simulations :</p>
<ul>
<li><p>Clustering : Relancer simulations de clustering avec <span class="math inline">M = 30</span><span class="math inline">M_i = 10, \forall i</span>. En attente retour MIGALE Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral. Ajouter simu clustering métriques nb sous-collections obtenues. Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille <span class="math inline">M = 30</span> avec <span class="math inline">M_1 = M_2 = M_3 = 10</span>. <del>-&gt; BUG, dois creuser mais juste des problèmes techniques.</del> Le bug venait probablement dune inadéquation entre la version de <em>future</em> et <em>future.callr</em>, les résultats temporaires sont encourageant.</p></li>
<li><p>Inférence : Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -&gt; BUG, dois creuser mais juste des problèmes techniques -&gt; Visiblement il y a dautres problèmes que juste le plan de parallélisation.</p></li>
</ul></li>
</ul>
<section id="applications" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="applications"><span class="header-section-number">1.1</span> Applications</h3>
<ul>
<li>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
</section>
<section id="présentations-lsd-jds-et-mlaussois" class="level3" data-number="1.2">
<h3 data-number="1.2" class="anchored" data-anchor-id="présentations-lsd-jds-et-mlaussois"><span class="header-section-number">1.2</span> Présentations LSD, JdS et ML@Aussois</h3>
<ul>
<li><del>PRÉSENTATION JDS (LSD), durée introuvable, adapter en anglais les slides</del> et voir avec PB et SD.</li>
<li>Quel plan ?</li>
<li>Quels résultats ? Baldock, Traveset … (sub-Doré)</li>
</ul>
</section>
<section id="inférence-et-microbes" class="level3" data-number="1.3">
<h3 data-number="1.3" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.3</span> Inférence et microbes</h3>
<ul>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Se renseigner techniques dinférence de réseaux :
<ul>
<li>covariance (base corrélation et seuil)</li>
<li>GraphicalLASSO</li>
<li>Co-occurence</li>
</ul></li>
<li>Lire article multi-niveaux Saint-Clair</li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">2</span> A discuter</h2>
<ul>
<li>Voir pour TT période du 11 au 14 août</li>
<li>Voir pour date CSI car congés avec parents prévu du 29/08 au 12/09.</li>
</ul>
</section>
<section id="a-faire" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">3</span> A faire</h2>
<section id="inférence" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="inférence"><span class="header-section-number">3.1</span> Inférence</h3>
<ul>
<li>Papier pour comprendre données
<ul>
<li><del>Faust et al.</del></li>
<li>Abdill et al.</li>
<li>Bashan et al.</li>
</ul></li>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
<section id="rédaction-article" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</h3>
<ul>
<li>Relire intro St Clair</li>
<li>Sinspirer structure pour mon intro</li>
<li>Trouver biblio intro</li>
<li>Rédiger lintro</li>
<li>Dire résultats nettement meilleurs et variabilités inférieures.</li>
</ul>
</section>
</section>
<section id="jai-fait" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="jai-fait"><span class="header-section-number">4</span> Jai fait</h2>
<section id="csi-en-attente-contacts-pb-et-sd" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="csi-en-attente-contacts-pb-et-sd"><span class="header-section-number">4.1</span> CSI (en attente contacts PB et SD)</h3>
<ul>
<li>Est-ce à moi de contacter Saint-Clair et Sonia/Elisa ? <em>Pierre et Sophie gèrent</em></li>
<li>Pierre Gérard a dit oui, il attend les détails</li>
<li>Quand : <em>fin juin début juillet</em></li>
<li>Liste potentielle :
<ul>
<li>(Saint-Clair)</li>
<li>Mahendra</li>
<li>Elisa/Sonia</li>
<li>Pierre Gérard</li>
</ul></li>
</ul>
</section>
<section id="finistr" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="finistr"><span class="header-section-number">4.2</span> FinistR</h3>
<ul>
<li>Sinscrire</li>
</ul>
</section>
<section id="ml-at-aussois" class="level3" data-number="4.3">
<h3 data-number="4.3" class="anchored" data-anchor-id="ml-at-aussois"><span class="header-section-number">4.3</span> ML at Aussois</h3>
<ul>
<li>Sinscrire avec abstract court</li>
<li>Demander la bourse</li>
<li>Détails dinscriptions : <em>Je demande une bourse et je minscris avec la demande de bourse, Pierre et Sophie font la lettre de recommendation</em></li>
</ul>
</section>
<section id="présentation" class="level3" data-number="4.4">
<h3 data-number="4.4" class="anchored" data-anchor-id="présentation"><span class="header-section-number">4.4</span> Présentation</h3>
<ul>
<li>Jai traduis en anglais ma présentation : <a href="https://forgemia.inra.fr/louis.lacoste/presentation-colbisbm/-/raw/main/presentation.pdf?ref_type=heads">Lien</a></li>
</ul>
</section>
</section>
<section id="a-continuer" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">5</span> A continuer</h2>
<section id="applications-1" class="level3" data-number="5.1">
<h3 data-number="5.1" class="anchored" data-anchor-id="applications-1"><span class="header-section-number">5.1</span> Applications</h3>
<ul>
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</li>
</ul>
<blockquote class="blockquote">
<p>Sophie a fait une appli qui marche bien et va dans le sens de lanalyse faite (à savoir pas deffet du gradien durbanisation). À continuer pour lintégrer dans larticle !</p>
</blockquote>
</section>
<section id="axe-inférence" class="level3" data-number="5.2">
<h3 data-number="5.2" class="anchored" data-anchor-id="axe-inférence"><span class="header-section-number">5.2</span> Axe inférence</h3>
<ul>
<li>Lire biblio fournie Julie, Inférence de réseaux : co-occurence</li>
</ul>
<blockquote class="blockquote">
<p>Jai lu Faust et al.&nbsp; Je lis Abdill et al.</p>
</blockquote>
</section>
</section>
<section id="repoussés-ou-abandonnés" class="level2" data-number="6">
<h2 data-number="6" class="anchored" data-anchor-id="repoussés-ou-abandonnés"><span class="header-section-number">6</span> Repoussés ou abandonnés</h2>
<ul>
<li>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps.</li>
</ul>
<blockquote class="blockquote">
<p>Je narrive pas à comprendre les erreurs qui arrivent</p>
</blockquote>
<ul>
<li><p>Lire Biological Networks - François Képès</p></li>
<li><p>Regarder les applications pour les collections de réseaux recommender system <em>Pas pertinents et trop gros</em></p></li>
</ul>
<div id="lst-reco-systems" class="listing quarto-float quarto-figure quarto-figure-left anchored">
<figure class="quarto-float quarto-float-lst figure">
<figcaption class="quarto-float-caption-top quarto-float-caption quarto-float-lst" id="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Listing&nbsp;1: Recommender systems data
</figcaption>
<div aria-describedby="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<p>Par exemple :</p>
<ul>
<li><a href="https://cseweb.ucsd.edu/~jmcauley/datasets.html">Liste de recommendation data</a></li>
</ul>
</div>
</figure>
</div>
<section id="papier-plus-multi-applications" class="level3" data-number="6.1">
<h3 data-number="6.1" class="anchored" data-anchor-id="papier-plus-multi-applications"><span class="header-section-number">6.1</span> Papier plus multi-applications</h3>
<ul>
<li>Données dElisa herbivore ?</li>
<li>Données urbanisations ?</li>
</ul>
</section>
<section id="autour-de-larticle-et-du-package" class="level3" data-number="6.2">
<h3 data-number="6.2" class="anchored" data-anchor-id="autour-de-larticle-et-du-package"><span class="header-section-number">6.2</span> Autour de larticle et du package</h3>
<ul>
<li>Créer des vignettes illustrant par exemple des cas de simulations. <strong>Possible de mettre lexemple dapplication de Sophie sur les réseaux avec gradient durbanisation</strong>.</li>
</ul>
</section>
<section id="simulations-article" class="level3" data-number="6.3">
<h3 data-number="6.3" class="anchored" data-anchor-id="simulations-article"><span class="header-section-number">6.3</span> Simulations article</h3>
<ul>
<li><p>Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices dadjacences.</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
</ul>
</section>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,156 +0,0 @@
---
title: "Bilan semaine 19 2025 : 5 mai - 9 mai"
categories: [colBiSBM, inférence]
date: 2025 05 09
---
## TOP PRIORITÉ
- Débugguer les simulations :
- Clustering : Relancer simulations de clustering avec $M = 30$ où $M_i = 10, \forall i$. En attente retour MIGALE
Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral. Ajouter simu clustering métriques nb sous-collections obtenues.
Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille $M = 30$ avec $M_1 = M_2 = M_3 = 10$. ~~-> BUG, dois creuser mais juste des problèmes techniques.~~
Le bug venait probablement d'une inadéquation entre la version de *future* et *future.callr*, les résultats temporaires sont encourageant.
- Inférence : Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d'autres problèmes que juste le plan de parallélisation.
### Applications
- Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
Car densités déséquilibrées.
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Présentations LSD, JdS et ML@Aussois
- ~~PRÉSENTATION JDS (LSD), durée introuvable, adapter en anglais les slides~~ et voir avec PB et SD.
- Quel plan ?
- Quels résultats ? Baldock, Traveset ... (sub-Doré)
### Inférence et microbes
- Lire Papiers compositional data (Aitchison et al. intro)
- Se renseigner techniques d'inférence de réseaux :
- covariance (base corrélation et seuil)
- GraphicalLASSO
- Co-occurence
- Lire article multi-niveaux Saint-Clair
## A discuter
- Voir pour TT période du 11 au 14 août
- Voir pour date CSI car congés avec parents prévu du 29/08 au 12/09.
## A faire
### Inférence
- Papier pour comprendre données
- ~~Faust et al.~~
- Abdill et al.
- Bashan et al.
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS
### Rédaction article
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Dire résultats nettement meilleurs et variabilités inférieures.
## J'ai fait
### CSI (en attente contacts PB et SD)
- Est-ce à moi de contacter Saint-Clair et Sonia/Elisa ? *Pierre et Sophie gèrent*
- Pierre Gérard a dit oui, il attend les détails
- Quand : *fin juin début juillet*
- Liste potentielle :
- (Saint-Clair)
- Mahendra
- Elisa/Sonia
- Pierre Gérard
### Finist'R
- S'inscrire
### ML at Aussois
- S'inscrire avec abstract court
- Demander la bourse
- Détails d'inscriptions : *Je demande une bourse et je m'inscris avec la demande de bourse, Pierre et Sophie font la lettre de recommendation*
### Présentation
- J'ai traduis en anglais ma présentation : [Lien](https://forgemia.inra.fr/louis.lacoste/presentation-colbisbm/-/raw/main/presentation.pdf?ref_type=heads)
## A continuer
### Applications
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
> Sophie a fait une appli qui marche bien et va dans le sens de l'analyse faite
(à savoir pas d'effet du gradien d'urbanisation). À continuer pour l'intégrer dans l'article !
### Axe inférence
- Lire biblio fournie Julie, Inférence de réseaux : co-occurence
> J'ai lu Faust et al.
> Je lis Abdill et al.
## Repoussés ou abandonnés
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps.
> Je n'arrive pas à comprendre les erreurs qui arrivent
- Lire Biological Networks - François Képès
- Regarder les applications pour les collections de réseaux recommender system *Pas pertinents et trop gros*
:::{#lst-reco-systems lst-cap="Recommender systems data"}
Par exemple :
- [Liste de recommendation data](https://cseweb.ucsd.edu/~jmcauley/datasets.html)
:::
### Papier plus multi-applications
- Données d'Elisa herbivore ?
- Données urbanisations ?
### Autour de l'article et du package
- Créer des vignettes illustrant par exemple des cas de simulations. **Possible de mettre l'exemple d'application de Sophie sur les réseaux avec gradient d'urbanisation**.
### Simulations article
- Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices d'adjacences.
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.

868
suivi/2025-20/2025-20.html Normal file
View file

@ -0,0 +1,868 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 20 2025 : 12 mai - 16 mai Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 20 2025 : 12 mai - 16 mai</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">16 mai 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#top-priorité" id="toc-top-priorité" class="nav-link active" data-scroll-target="#top-priorité"><span class="header-section-number">1</span> TOP PRIORITÉ</a>
<ul class="collapse">
<li><a href="#présentations-lsd-jds-et-mlaussois" id="toc-présentations-lsd-jds-et-mlaussois" class="nav-link" data-scroll-target="#présentations-lsd-jds-et-mlaussois"><span class="header-section-number">1.1</span> Présentations LSD, JdS et ML@Aussois</a></li>
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications"><span class="header-section-number">1.2</span> Applications</a></li>
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.3</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">2</span> A discuter</a></li>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link" data-scroll-target="#a-faire"><span class="header-section-number">3</span> A faire</a>
<ul class="collapse">
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">3.1</span> Inférence</a></li>
<li><a href="#rédaction-article" id="toc-rédaction-article" class="nav-link" data-scroll-target="#rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</a></li>
</ul></li>
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait"><span class="header-section-number">4</span> Jai fait</a>
<ul class="collapse">
<li><a href="#présentations-lsd-jds-et-mlaussois-1" id="toc-présentations-lsd-jds-et-mlaussois-1" class="nav-link" data-scroll-target="#présentations-lsd-jds-et-mlaussois-1"><span class="header-section-number">4.1</span> Présentations LSD, JdS et ML@Aussois</a></li>
<li><a href="#vgae" id="toc-vgae" class="nav-link" data-scroll-target="#vgae"><span class="header-section-number">4.2</span> VGAE</a></li>
<li><a href="#inférence-et-microbes-1" id="toc-inférence-et-microbes-1" class="nav-link" data-scroll-target="#inférence-et-microbes-1"><span class="header-section-number">4.3</span> Inférence et microbes</a></li>
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1"><span class="header-section-number">4.4</span> Applications</a></li>
<li><a href="#axe-inférence" id="toc-axe-inférence" class="nav-link" data-scroll-target="#axe-inférence"><span class="header-section-number">4.5</span> Axe inférence</a></li>
</ul></li>
<li><a href="#repoussés-ou-abandonnés" id="toc-repoussés-ou-abandonnés" class="nav-link" data-scroll-target="#repoussés-ou-abandonnés"><span class="header-section-number">5</span> Repoussés ou abandonnés</a></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="top-priorité" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="top-priorité"><span class="header-section-number">1</span> TOP PRIORITÉ</h2>
<ul>
<li><p>Pour clustering de collections sur données réelles :</p>
<ul>
<li><del>Relâcher la pénalité pour les coupes pour proposer modèles.</del></li>
</ul>
<p>→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.</p>
<ul>
<li>Faire le <code>hclust</code> avec diverses distances et voir si les coupes proposées diffèrent sensiblement</li>
<li>Si plusieurs clustering possibles les tester et sélectionner le meilleur</li>
<li>Ré-ajuster les bonnes partitions.</li>
</ul></li>
<li><p>Données simulées tester diverses distances.</p></li>
<li><p>Dé-bugger les simulations :</p>
<ul>
<li>Inférence : Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -&gt; BUG, dois creuser mais juste des problèmes techniques -&gt; Visiblement il y a dautres problèmes que juste le plan de parallélisation.</li>
</ul></li>
<li><p>Vérifier si problème de version tidyverse pour vapply sur l<strong>inférence</strong>.</p></li>
<li><p>Si problème de parallélisation vient de pb de version <em>future.callr</em> le signaler à MIGALE.</p></li>
</ul>
<section id="présentations-lsd-jds-et-mlaussois" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="présentations-lsd-jds-et-mlaussois"><span class="header-section-number">1.1</span> Présentations LSD, JdS et ML@Aussois</h3>
<ul>
<li><del>PRÉSENTATION JDS (LSD), durée introuvable, adapter en anglais les slides</del> et voir avec PB et SD.</li>
<li>Quel plan ?</li>
<li>Quels résultats ? Baldock, Traveset … (sub-Doré)</li>
<li>Pas la peine de préciser lalgo de clustering</li>
<li>Indiquer sur une slide le problème de support pour <span class="math inline">\pi\rho</span> à faire sil y a le temps.</li>
<li>Résultats sur les réseaux Baldock, regarder le positionnement par bloc des espèces communes, regarder les probas dappartenance aux blocs par espèces communes et par réseau.</li>
</ul>
</section>
<section id="applications" class="level3" data-number="1.2">
<h3 data-number="1.2" class="anchored" data-anchor-id="applications"><span class="header-section-number">1.2</span> Applications</h3>
<ul>
<li>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
</section>
<section id="inférence-et-microbes" class="level3" data-number="1.3">
<h3 data-number="1.3" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.3</span> Inférence et microbes</h3>
<ul>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span></li>
<li>Se renseigner techniques dinférence de réseaux :
<ul>
<li>covariance (base corrélation et seuil)</li>
<li>GraphicalLASSO</li>
<li>Co-occurence</li>
</ul></li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>Creuser <a href="https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf">TabNet</a> de Christophe Regouby et les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">2</span> A discuter</h2>
</section>
<section id="a-faire" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">3</span> A faire</h2>
<section id="inférence" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="inférence"><span class="header-section-number">3.1</span> Inférence</h3>
<ul>
<li>Papier pour comprendre données
<ul>
<li><del>Faust et al.</del></li>
<li>Abdill et al.</li>
<li>Bashan et al.</li>
</ul></li>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
<section id="rédaction-article" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</h3>
<ul>
<li>Relire intro St Clair</li>
<li>Sinspirer structure pour mon intro</li>
<li>Trouver biblio intro</li>
<li>Rédiger lintro</li>
<li>Dire résultats nettement meilleurs et variabilités inférieures.</li>
</ul>
</section>
</section>
<section id="jai-fait" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="jai-fait"><span class="header-section-number">4</span> Jai fait</h2>
<ul>
<li><p>Dé-bugger les simulations :</p>
<ul>
<li>Clustering : Relancer simulations de clustering avec <span class="math inline">M = 30</span><span class="math inline">M_i = 10, \forall i</span>. En attente retour MIGALE Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral. Ajouter simu clustering métriques nb sous-collections obtenues. Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille <span class="math inline">M = 30</span> avec <span class="math inline">M_1 = M_2 = M_3 = 10</span>. <del>-&gt; BUG, dois creuser mais juste des problèmes techniques.</del> Le bug venait probablement dune inadéquation entre la version de <em>future</em> et <em>future.callr</em>, les résultats temporaires sont encourageants. <strong>Jai mis les résultats dans larticle</strong>.</li>
</ul></li>
</ul>
<section id="présentations-lsd-jds-et-mlaussois-1" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="présentations-lsd-jds-et-mlaussois-1"><span class="header-section-number">4.1</span> Présentations LSD, JdS et ML@Aussois</h3>
<ul>
<li><p><del>PRÉSENTATION JDS (LSD), durée introuvable, adapter en anglais les slides</del> et voir avec PB et SD.</p></li>
<li><p>Quel plan ?</p></li>
<li><p>Quels résultats ? Baldock, Traveset … (sub-Doré)</p></li>
<li><p>Mettre le détails des formules et des algos pour VE et sélection de modèle en annexe.</p></li>
<li><p>Préciser simplement que lon utilise un algo VE et un critère type BIC.</p></li>
</ul>
</section>
<section id="vgae" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="vgae"><span class="header-section-number">4.2</span> VGAE</h3>
<ul>
<li><del>Dé-bugger pourquoi <code>BipartiteInnerProductDecoder.forward() -&gt; NaN</code></del> -&gt; <strong>Cétait parce que les features en entrée nétait pas normalisée par les couches de convolutions</strong>. Les meilleurs résultats dAUC et de précisions que jobtiens par VGAE sont autour de 0.80.</li>
</ul>
</section>
<section id="inférence-et-microbes-1" class="level3" data-number="4.3">
<h3 data-number="4.3" class="anchored" data-anchor-id="inférence-et-microbes-1"><span class="header-section-number">4.3</span> Inférence et microbes</h3>
<ul>
<li>Human Gut Compendium télécharger et préparé les données. Mises au format <code>edgelist</code> et liste de matrices et extrait les infos supplémentaires. → trop lourd en RAM pour tourner sur machine perso (optim colSBM…) ## A continuer</li>
</ul>
</section>
<section id="applications-1" class="level3" data-number="4.4">
<h3 data-number="4.4" class="anchored" data-anchor-id="applications-1"><span class="header-section-number">4.4</span> Applications</h3>
<ul>
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</li>
</ul>
<blockquote class="blockquote">
<p>Sophie a fait une appli qui marche bien et va dans le sens de lanalyse faite (à savoir pas deffet du gradien durbanisation). À continuer pour lintégrer dans larticle !</p>
</blockquote>
</section>
<section id="axe-inférence" class="level3" data-number="4.5">
<h3 data-number="4.5" class="anchored" data-anchor-id="axe-inférence"><span class="header-section-number">4.5</span> Axe inférence</h3>
<ul>
<li>Lire biblio fournie Julie, Inférence de réseaux : co-occurence</li>
</ul>
<blockquote class="blockquote">
<p>Jai lu Faust et al.&nbsp; Je lis Abdill et al.</p>
</blockquote>
</section>
</section>
<section id="repoussés-ou-abandonnés" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="repoussés-ou-abandonnés"><span class="header-section-number">5</span> Repoussés ou abandonnés</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center" data-bs-toggle="collapse" data-bs-target=".callout-1-contents" aria-controls="callout-1" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Déplier pour voir
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<ul>
<li>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps.</li>
</ul>
<blockquote class="blockquote">
<p>Je narrive pas à comprendre les erreurs qui arrivent</p>
</blockquote>
<ul>
<li><p>Lire Biological Networks - François Képès</p></li>
<li><p>Regarder les applications pour les collections de réseaux recommender system <em>Pas pertinents et trop gros</em></p></li>
</ul>
<div id="lst-reco-systems" class="listing quarto-float quarto-figure quarto-figure-left anchored">
<figure class="quarto-float quarto-float-lst figure">
<figcaption class="quarto-float-caption-top quarto-float-caption quarto-float-lst" id="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Listing&nbsp;1: Recommender systems data
</figcaption>
<div aria-describedby="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<p>Par exemple :</p>
<ul>
<li><a href="https://cseweb.ucsd.edu/~jmcauley/datasets.html">Liste de recommendation data</a></li>
</ul>
</div>
</figure>
</div>
<section id="papier-plus-multi-applications" class="level3" data-number="5.1">
<h3 data-number="5.1" class="anchored" data-anchor-id="papier-plus-multi-applications"><span class="header-section-number">5.1</span> Papier plus multi-applications</h3>
<ul>
<li>Données dElisa herbivore ?</li>
<li>Données urbanisations ?</li>
</ul>
</section>
<section id="autour-de-larticle-et-du-package" class="level3" data-number="5.2">
<h3 data-number="5.2" class="anchored" data-anchor-id="autour-de-larticle-et-du-package"><span class="header-section-number">5.2</span> Autour de larticle et du package</h3>
<ul>
<li>Créer des vignettes illustrant par exemple des cas de simulations. <strong>Possible de mettre lexemple dapplication de Sophie sur les réseaux avec gradient durbanisation</strong>.</li>
</ul>
</section>
<section id="simulations-article" class="level3" data-number="5.3">
<h3 data-number="5.3" class="anchored" data-anchor-id="simulations-article"><span class="header-section-number">5.3</span> Simulations article</h3>
<ul>
<li><p>Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices dadjacences.</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
</ul>
</section>
</div>
</div>
</div>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,178 +0,0 @@
---
title: "Bilan semaine 20 2025 : 12 mai - 16 mai"
categories: [colBiSBM, inférence, GNN]
date: 2025 05 16
---
## TOP PRIORITÉ
- Pour clustering de collections sur données réelles :
- ~~Relâcher la pénalité pour les coupes pour proposer modèles.~~
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- Faire le `hclust` avec diverses distances et voir si les coupes proposées diffèrent sensiblement
- Si plusieurs clustering possibles les tester et sélectionner le
meilleur
- Ré-ajuster les bonnes partitions.
- Données simulées tester diverses distances.
- Dé-bugger les simulations :
- Inférence : Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d'autres problèmes que juste le plan de parallélisation.
- Vérifier si problème de version tidyverse pour vapply sur l'**inférence**.
- Si problème de parallélisation vient de pb de version *future.callr* le signaler à MIGALE.
### Présentations LSD, JdS et ML@Aussois
- ~~PRÉSENTATION JDS (LSD), durée introuvable, adapter en anglais les slides~~ et voir avec PB et SD.
- Quel plan ?
- Quels résultats ? Baldock, Traveset ... (sub-Doré)
- Pas la peine de préciser l'algo de clustering
- Indiquer sur une slide le problème de support pour $\pi\rho$ à faire s'il y a
le temps.
- Résultats sur les réseaux Baldock, regarder le positionnement par bloc des
espèces communes, regarder les probas d'appartenance aux blocs par espèces
communes et par réseau.
### Applications
- Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
Car densités déséquilibrées.
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Inférence et microbes
- Lancer *colBiSBM* sur $OTU\times Sample$
- Se renseigner techniques d'inférence de réseaux :
- covariance (base corrélation et seuil)
- GraphicalLASSO
- Co-occurence
- Lancer *colSBM* sur $OTU\times OTU$
- Creuser [TabNet](https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf) de Christophe Regouby et les [exercices](https://github.com/cregouby/Tutoriel_torch)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
## A discuter
## A faire
### Inférence
- Papier pour comprendre données
- ~~Faust et al.~~
- Abdill et al.
- Bashan et al.
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS
### Rédaction article
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Dire résultats nettement meilleurs et variabilités inférieures.
## J'ai fait
- Dé-bugger les simulations :
- Clustering : Relancer simulations de clustering avec $M = 30$ où $M_i = 10, \forall i$. En attente retour MIGALE
Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral. Ajouter simu clustering métriques nb sous-collections obtenues.
Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille $M = 30$ avec $M_1 = M_2 = M_3 = 10$. ~~-> BUG, dois creuser mais juste des problèmes techniques.~~
Le bug venait probablement d'une inadéquation entre la version de *future* et *future.callr*, les résultats temporaires sont encourageants.
**J'ai mis les résultats dans l'article**.
### Présentations LSD, JdS et ML@Aussois
- ~~PRÉSENTATION JDS (LSD), durée introuvable, adapter en anglais les slides~~ et voir avec PB et SD.
- Quel plan ?
- Quels résultats ? Baldock, Traveset ... (sub-Doré)
- Mettre le détails des formules et des algos pour VE et sélection de modèle en
annexe.
- Préciser simplement que l'on utilise un algo VE et un critère type BIC.
### VGAE
- ~~Dé-bugger pourquoi `BipartiteInnerProductDecoder.forward() -> NaN`~~ ->
**C'était parce que les features en entrée n'était pas normalisée par les
couches de convolutions**. Les meilleurs résultats d'AUC et de précisions que
j'obtiens par VGAE sont autour de 0.80.
### Inférence et microbes
- Human Gut Compendium télécharger et préparé les données. Mises au format
`edgelist` et liste de matrices et extrait les infos supplémentaires.
&rarr; trop lourd en RAM pour tourner sur machine perso (optim colSBM...)
## A continuer
### Applications
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
> Sophie a fait une appli qui marche bien et va dans le sens de l'analyse faite
(à savoir pas d'effet du gradien d'urbanisation). À continuer pour l'intégrer dans l'article !
### Axe inférence
- Lire biblio fournie Julie, Inférence de réseaux : co-occurence
> J'ai lu Faust et al.
> Je lis Abdill et al.
## Repoussés ou abandonnés
:::{.callout-note collapse="true"}
## Déplier pour voir
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps.
> Je n'arrive pas à comprendre les erreurs qui arrivent
- Lire Biological Networks - François Képès
- Regarder les applications pour les collections de réseaux recommender system *Pas pertinents et trop gros*
:::{#lst-reco-systems lst-cap="Recommender systems data"}
Par exemple :
- [Liste de recommendation data](https://cseweb.ucsd.edu/~jmcauley/datasets.html)
:::
### Papier plus multi-applications
- Données d'Elisa herbivore ?
- Données urbanisations ?
### Autour de l'article et du package
- Créer des vignettes illustrant par exemple des cas de simulations. **Possible de mettre l'exemple d'application de Sophie sur les réseaux avec gradient d'urbanisation**.
### Simulations article
- Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices d'adjacences.
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
:::

845
suivi/2025-21/2025-21.html Normal file
View file

@ -0,0 +1,845 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 21 2025 : 26 mai - 30 mai Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 21 2025 : 26 mai - 30 mai</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">23 mai 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#top-priorité" id="toc-top-priorité" class="nav-link active" data-scroll-target="#top-priorité"><span class="header-section-number">1</span> TOP PRIORITÉ</a>
<ul class="collapse">
<li><a href="#présentations-lsd-jds-et-mlaussois" id="toc-présentations-lsd-jds-et-mlaussois" class="nav-link" data-scroll-target="#présentations-lsd-jds-et-mlaussois"><span class="header-section-number">1.1</span> Présentations LSD, JdS et ML@Aussois</a></li>
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications"><span class="header-section-number">1.2</span> Applications</a></li>
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.3</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">2</span> A discuter</a></li>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link" data-scroll-target="#a-faire"><span class="header-section-number">3</span> A faire</a>
<ul class="collapse">
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">3.1</span> Inférence</a></li>
<li><a href="#rédaction-article" id="toc-rédaction-article" class="nav-link" data-scroll-target="#rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</a></li>
</ul></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">4</span> A continuer</a>
<ul class="collapse">
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1"><span class="header-section-number">4.1</span> Applications</a></li>
<li><a href="#axe-inférence" id="toc-axe-inférence" class="nav-link" data-scroll-target="#axe-inférence"><span class="header-section-number">4.2</span> Axe inférence</a></li>
</ul></li>
<li><a href="#repoussés-ou-abandonnés" id="toc-repoussés-ou-abandonnés" class="nav-link" data-scroll-target="#repoussés-ou-abandonnés"><span class="header-section-number">5</span> Repoussés ou abandonnés</a></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="top-priorité" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="top-priorité"><span class="header-section-number">1</span> TOP PRIORITÉ</h2>
<ul>
<li><p>✅ Corriger pour les simus dans larticle : écrire <span class="math inline">N = \#\text{ de répétitions}</span></p></li>
<li><p>Pour clustering de collections sur données réelles :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.</p>
<ul>
<li>Faire le <code>hclust</code> avec diverses distances et voir si les coupes proposées diffèrent sensiblement</li>
<li>Si plusieurs clustering possibles les tester et sélectionner le meilleur</li>
<li>Ré-ajuster les bonnes partitions.</li>
</ul></li>
<li><p>Idée de Sophie : alterner descendant et ascendant → prometteur aussi</p></li>
<li><p>Pour les deux propositions données simulées tester diverses distances.</p></li>
<li><p>Dé-bugger les simulations :</p>
<ul>
<li>Inférence : Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -&gt; BUG, dois creuser mais juste des problèmes techniques -&gt; Visiblement il y a dautres problèmes que juste le plan de parallélisation.</li>
</ul></li>
<li><p>Vérifier si problème de version tidyverse pour vapply sur l<strong>inférence</strong>.</p></li>
<li><p>Si problème de parallélisation vient de pb de version <em>future.callr</em> le signaler à MIGALE.</p></li>
</ul>
<section id="présentations-lsd-jds-et-mlaussois" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="présentations-lsd-jds-et-mlaussois"><span class="header-section-number">1.1</span> Présentations LSD, JdS et ML@Aussois</h3>
<ul>
<li>✅ A loral pourquoi des réseaux : car de plus en plus disponibles et idée derrière, la structure fonctionnelle permet de comprendre les caractéristiques de lécosystème décrit</li>
<li>✅ Chercher des réfs pour les méthodes (Hoff Latent Position Model, Nowicki pour LBM, une review pour les métriques voir thèses St Clair et Emré)</li>
<li>✅ Sur slide méthodes différencier métriques micro et macro et dire oralement que nous méso</li>
<li>❎ Indiquer sur une slide le problème de support pour <span class="math inline">\pi\rho</span> à faire sil y a le temps.</li>
<li>✅ Résultats sur les réseaux Baldock, regarder le positionnement par bloc des espèces communes, regarder les probas dappartenance aux blocs par espèces communes et par réseau ➡️ Bourdons</li>
<li>✅ Intégrer les retours de Sophie</li>
<li>Attente retours Pierre</li>
</ul>
</section>
<section id="applications" class="level3" data-number="1.2">
<h3 data-number="1.2" class="anchored" data-anchor-id="applications"><span class="header-section-number">1.2</span> Applications</h3>
<ul>
<li>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<ul>
<li>Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple</li>
</ul>
</section>
<section id="inférence-et-microbes" class="level3" data-number="1.3">
<h3 data-number="1.3" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.3</span> Inférence et microbes</h3>
<ul>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Se renseigner techniques dinférence de réseaux :
<ul>
<li>covariance (base corrélation et seuil)</li>
<li>GraphicalLASSO</li>
<li>Co-occurence</li>
</ul></li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>Creuser <a href="https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf">TabNet</a> de Christophe Regouby et les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Demander à JA si elle connaît des réseaux dinteractions connus par les experts (idée dintégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">2</span> A discuter</h2>
</section>
<section id="a-faire" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">3</span> A faire</h2>
<section id="inférence" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="inférence"><span class="header-section-number">3.1</span> Inférence</h3>
<ul>
<li>Papier pour comprendre données
<ul>
<li><del>Faust et al.</del></li>
<li>Abdill et al.</li>
<li>Bashan et al.</li>
</ul></li>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
<section id="rédaction-article" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</h3>
<ul>
<li>Relire intro St Clair</li>
<li>Sinspirer structure pour mon intro</li>
<li>Trouver biblio intro</li>
<li>Rédiger lintro</li>
<li>Dire résultats nettement meilleurs et variabilités inférieures.</li>
</ul>
</section>
</section>
<section id="a-continuer" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">4</span> A continuer</h2>
<section id="applications-1" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="applications-1"><span class="header-section-number">4.1</span> Applications</h3>
<ul>
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</li>
</ul>
<blockquote class="blockquote">
<p>Sophie a fait une appli qui marche bien et va dans le sens de lanalyse faite (à savoir pas deffet du gradien durbanisation). À continuer pour lintégrer dans larticle !</p>
</blockquote>
</section>
<section id="axe-inférence" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="axe-inférence"><span class="header-section-number">4.2</span> Axe inférence</h3>
<ul>
<li>Lire biblio fournie Julie, Inférence de réseaux : co-occurence</li>
</ul>
<blockquote class="blockquote">
<p>Jai lu Faust et al.&nbsp; Je lis Abdill et al.</p>
</blockquote>
</section>
</section>
<section id="repoussés-ou-abandonnés" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="repoussés-ou-abandonnés"><span class="header-section-number">5</span> Repoussés ou abandonnés</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center" data-bs-toggle="collapse" data-bs-target=".callout-1-contents" aria-controls="callout-1" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Déplier pour voir
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<ul>
<li>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps.</li>
</ul>
<blockquote class="blockquote">
<p>Je narrive pas à comprendre les erreurs qui arrivent</p>
</blockquote>
<ul>
<li><p>Lire Biological Networks - François Képès</p></li>
<li><p>Regarder les applications pour les collections de réseaux recommender system <em>Pas pertinents et trop gros</em></p></li>
</ul>
<div id="lst-reco-systems" class="listing quarto-float quarto-figure quarto-figure-left anchored">
<figure class="quarto-float quarto-float-lst figure">
<figcaption class="quarto-float-caption-top quarto-float-caption quarto-float-lst" id="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Listing&nbsp;1: Recommender systems data
</figcaption>
<div aria-describedby="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<p>Par exemple :</p>
<ul>
<li><a href="https://cseweb.ucsd.edu/~jmcauley/datasets.html">Liste de recommendation data</a></li>
</ul>
</div>
</figure>
</div>
<section id="papier-plus-multi-applications" class="level3" data-number="5.1">
<h3 data-number="5.1" class="anchored" data-anchor-id="papier-plus-multi-applications"><span class="header-section-number">5.1</span> Papier plus multi-applications</h3>
<ul>
<li>Données dElisa herbivore ?</li>
<li>Données urbanisations ?</li>
</ul>
</section>
<section id="autour-de-larticle-et-du-package" class="level3" data-number="5.2">
<h3 data-number="5.2" class="anchored" data-anchor-id="autour-de-larticle-et-du-package"><span class="header-section-number">5.2</span> Autour de larticle et du package</h3>
<ul>
<li>Créer des vignettes illustrant par exemple des cas de simulations. <strong>Possible de mettre lexemple dapplication de Sophie sur les réseaux avec gradient durbanisation</strong>.</li>
</ul>
</section>
<section id="simulations-article" class="level3" data-number="5.3">
<h3 data-number="5.3" class="anchored" data-anchor-id="simulations-article"><span class="header-section-number">5.3</span> Simulations article</h3>
<ul>
<li><p>Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices dadjacences.</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
</ul>
</section>
</div>
</div>
</div>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,154 +0,0 @@
---
title: "Bilan semaine 21 2025 : 26 mai - 30 mai"
categories: [colBiSBM, inférence, GNN]
date: 2025 05 23
---
## TOP PRIORITÉ
- ✅ Corriger pour les simus dans l'article : écrire $N = \#\text{ de répétitions}$
- Pour clustering de collections sur données réelles :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- Faire le `hclust` avec diverses distances et voir si les coupes proposées diffèrent sensiblement
- Si plusieurs clustering possibles les tester et sélectionner le
meilleur
- Ré-ajuster les bonnes partitions.
- Idée de Sophie : alterner descendant et ascendant &rarr; prometteur aussi
- Pour les deux propositions données simulées tester diverses distances.
- Dé-bugger les simulations :
- Inférence : Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d'autres problèmes que juste le plan de parallélisation.
- Vérifier si problème de version tidyverse pour vapply sur l'**inférence**.
- Si problème de parallélisation vient de pb de version *future.callr* le signaler à MIGALE.
### Présentations LSD, JdS et ML@Aussois
- ✅ A l'oral pourquoi des réseaux : car de plus en plus disponibles et idée derrière, la structure fonctionnelle permet de comprendre les caractéristiques de l'écosystème décrit
- ✅ Chercher des réfs pour les méthodes (Hoff Latent Position Model, Nowicki pour LBM, une review pour les métriques voir thèses St Clair et Emré)
- ✅ Sur slide méthodes différencier métriques micro et macro et dire oralement que nous méso
- ❎ Indiquer sur une slide le problème de support pour $\pi\rho$ à faire s'il y a
le temps.
- ✅ Résultats sur les réseaux Baldock, regarder le positionnement par bloc des
espèces communes, regarder les probas d'appartenance aux blocs par espèces
communes et par réseau ➡️ Bourdons
- ✅ Intégrer les retours de Sophie
- Attente retours Pierre
### Applications
- Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
Car densités déséquilibrées.
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
- Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple
### Inférence et microbes
- Lancer *colBiSBM* sur $OTU\times Sample$ &rarr; problème du chargement en mémoire des données à voir
- Se renseigner techniques d'inférence de réseaux :
- covariance (base corrélation et seuil)
- GraphicalLASSO
- Co-occurence
- Lancer *colSBM* sur $OTU\times OTU$
- Creuser [TabNet](https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf) de Christophe Regouby et les [exercices](https://github.com/cregouby/Tutoriel_torch)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Demander à JA si elle connaît des réseaux d'interactions connus par les experts (idée d'intégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
## A discuter
## A faire
### Inférence
- Papier pour comprendre données
- ~~Faust et al.~~
- Abdill et al.
- Bashan et al.
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS
### Rédaction article
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Dire résultats nettement meilleurs et variabilités inférieures.
## A continuer
### Applications
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
> Sophie a fait une appli qui marche bien et va dans le sens de l'analyse faite
(à savoir pas d'effet du gradien d'urbanisation). À continuer pour l'intégrer dans l'article !
### Axe inférence
- Lire biblio fournie Julie, Inférence de réseaux : co-occurence
> J'ai lu Faust et al.
> Je lis Abdill et al.
## Repoussés ou abandonnés
:::{.callout-note collapse="true"}
## Déplier pour voir
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps.
> Je n'arrive pas à comprendre les erreurs qui arrivent
- Lire Biological Networks - François Képès
- Regarder les applications pour les collections de réseaux recommender system *Pas pertinents et trop gros*
:::{#lst-reco-systems lst-cap="Recommender systems data"}
Par exemple :
- [Liste de recommendation data](https://cseweb.ucsd.edu/~jmcauley/datasets.html)
:::
### Papier plus multi-applications
- Données d'Elisa herbivore ?
- Données urbanisations ?
### Autour de l'article et du package
- Créer des vignettes illustrant par exemple des cas de simulations. **Possible de mettre l'exemple d'application de Sophie sur les réseaux avec gradient d'urbanisation**.
### Simulations article
- Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices d'adjacences.
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
:::

838
suivi/2025-22/2025-22.html Normal file
View file

@ -0,0 +1,838 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 22 2025 : 26 mai - 30 mai Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 22 2025 : 26 mai - 30 mai</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">28 mai 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#top-priorité" id="toc-top-priorité" class="nav-link active" data-scroll-target="#top-priorité"><span class="header-section-number">1</span> TOP PRIORITÉ</a>
<ul class="collapse">
<li><a href="#présentations-lsd-jds-et-mlaussois" id="toc-présentations-lsd-jds-et-mlaussois" class="nav-link" data-scroll-target="#présentations-lsd-jds-et-mlaussois"><span class="header-section-number">1.1</span> Présentations LSD, JdS et ML@Aussois</a></li>
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications"><span class="header-section-number">1.2</span> Applications</a></li>
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.3</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">2</span> A discuter</a></li>
<li><a href="#a-faire" id="toc-a-faire" class="nav-link" data-scroll-target="#a-faire"><span class="header-section-number">3</span> A faire</a>
<ul class="collapse">
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">3.1</span> Inférence</a></li>
<li><a href="#rédaction-article" id="toc-rédaction-article" class="nav-link" data-scroll-target="#rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</a></li>
</ul></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">4</span> A continuer</a>
<ul class="collapse">
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1"><span class="header-section-number">4.1</span> Applications</a></li>
<li><a href="#axe-inférence" id="toc-axe-inférence" class="nav-link" data-scroll-target="#axe-inférence"><span class="header-section-number">4.2</span> Axe inférence</a></li>
</ul></li>
<li><a href="#repoussés-ou-abandonnés" id="toc-repoussés-ou-abandonnés" class="nav-link" data-scroll-target="#repoussés-ou-abandonnés"><span class="header-section-number">5</span> Repoussés ou abandonnés</a></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="top-priorité" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="top-priorité"><span class="header-section-number">1</span> TOP PRIORITÉ</h2>
<ul>
<li><p>Pour clustering de collections sur données réelles :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.</p>
<ul>
<li>Faire le <code>hclust</code> avec diverses distances et voir si les coupes proposées diffèrent sensiblement</li>
<li>Si plusieurs clustering possibles les tester et sélectionner le meilleur</li>
<li>Ré-ajuster les bonnes partitions.</li>
</ul></li>
<li><p>Idée de Sophie : alterner descendant et ascendant → prometteur aussi</p></li>
<li><p>Pour les deux propositions données simulées tester diverses distances.</p></li>
<li><p>Dé-bugger les simulations :</p>
<ul>
<li>Inférence : Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -&gt; BUG, dois creuser mais juste des problèmes techniques -&gt; Visiblement il y a dautres problèmes que juste le plan de parallélisation.</li>
</ul></li>
<li><p>Vérifier si problème de version tidyverse pour vapply sur l<strong>inférence</strong>.</p></li>
<li><p>Si problème de parallélisation vient de pb de version <em>future.callr</em> le signaler à MIGALE.</p></li>
</ul>
<section id="présentations-lsd-jds-et-mlaussois" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="présentations-lsd-jds-et-mlaussois"><span class="header-section-number">1.1</span> Présentations LSD, JdS et ML@Aussois</h3>
<ul>
<li>Attente retours Pierre</li>
</ul>
</section>
<section id="applications" class="level3" data-number="1.2">
<h3 data-number="1.2" class="anchored" data-anchor-id="applications"><span class="header-section-number">1.2</span> Applications</h3>
<ul>
<li>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<ul>
<li>Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple</li>
</ul>
</section>
<section id="inférence-et-microbes" class="level3" data-number="1.3">
<h3 data-number="1.3" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.3</span> Inférence et microbes</h3>
<ul>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Se renseigner techniques dinférence de réseaux :
<ul>
<li>covariance (base corrélation et seuil)</li>
<li>GraphicalLASSO</li>
<li>Co-occurence</li>
</ul></li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>Creuser <a href="https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf">TabNet</a> de Christophe Regouby et les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Demander à JA si elle connaît des réseaux dinteractions connus par les experts (idée dintégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">2</span> A discuter</h2>
</section>
<section id="a-faire" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-faire"><span class="header-section-number">3</span> A faire</h2>
<section id="inférence" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="inférence"><span class="header-section-number">3.1</span> Inférence</h3>
<ul>
<li>Papier pour comprendre données
<ul>
<li><del>Faust et al.</del></li>
<li>Abdill et al.</li>
<li>Bashan et al.</li>
</ul></li>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
<section id="rédaction-article" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</h3>
<ul>
<li>Relire intro St Clair</li>
<li>Sinspirer structure pour mon intro</li>
<li>Trouver biblio intro</li>
<li>Rédiger lintro</li>
<li>Dire résultats nettement meilleurs et variabilités inférieures.</li>
</ul>
</section>
</section>
<section id="a-continuer" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">4</span> A continuer</h2>
<section id="applications-1" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="applications-1"><span class="header-section-number">4.1</span> Applications</h3>
<ul>
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</li>
</ul>
<blockquote class="blockquote">
<p>Sophie a fait une appli qui marche bien et va dans le sens de lanalyse faite (à savoir pas deffet du gradien durbanisation). À continuer pour lintégrer dans larticle !</p>
</blockquote>
</section>
<section id="axe-inférence" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="axe-inférence"><span class="header-section-number">4.2</span> Axe inférence</h3>
<ul>
<li>Lire biblio fournie Julie, Inférence de réseaux : co-occurence</li>
</ul>
<blockquote class="blockquote">
<p>Jai lu Faust et al.&nbsp; Je lis Abdill et al.</p>
</blockquote>
</section>
</section>
<section id="repoussés-ou-abandonnés" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="repoussés-ou-abandonnés"><span class="header-section-number">5</span> Repoussés ou abandonnés</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center" data-bs-toggle="collapse" data-bs-target=".callout-1-contents" aria-controls="callout-1" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Déplier pour voir
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<ul>
<li>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps.</li>
</ul>
<blockquote class="blockquote">
<p>Je narrive pas à comprendre les erreurs qui arrivent</p>
</blockquote>
<ul>
<li><p>Lire Biological Networks - François Képès</p></li>
<li><p>Regarder les applications pour les collections de réseaux recommender system <em>Pas pertinents et trop gros</em></p></li>
</ul>
<div id="lst-reco-systems" class="listing quarto-float quarto-figure quarto-figure-left anchored">
<figure class="quarto-float quarto-float-lst figure">
<figcaption class="quarto-float-caption-top quarto-float-caption quarto-float-lst" id="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Listing&nbsp;1: Recommender systems data
</figcaption>
<div aria-describedby="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<p>Par exemple :</p>
<ul>
<li><a href="https://cseweb.ucsd.edu/~jmcauley/datasets.html">Liste de recommendation data</a></li>
</ul>
</div>
</figure>
</div>
<section id="papier-plus-multi-applications" class="level3" data-number="5.1">
<h3 data-number="5.1" class="anchored" data-anchor-id="papier-plus-multi-applications"><span class="header-section-number">5.1</span> Papier plus multi-applications</h3>
<ul>
<li>Données dElisa herbivore ?</li>
<li>Données urbanisations ?</li>
</ul>
</section>
<section id="autour-de-larticle-et-du-package" class="level3" data-number="5.2">
<h3 data-number="5.2" class="anchored" data-anchor-id="autour-de-larticle-et-du-package"><span class="header-section-number">5.2</span> Autour de larticle et du package</h3>
<ul>
<li>Créer des vignettes illustrant par exemple des cas de simulations. <strong>Possible de mettre lexemple dapplication de Sophie sur les réseaux avec gradient durbanisation</strong>.</li>
</ul>
</section>
<section id="simulations-article" class="level3" data-number="5.3">
<h3 data-number="5.3" class="anchored" data-anchor-id="simulations-article"><span class="header-section-number">5.3</span> Simulations article</h3>
<ul>
<li><p>Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices dadjacences.</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
</ul>
</section>
</div>
</div>
</div>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,146 +0,0 @@
---
title: "Bilan semaine 22 2025 : 26 mai - 30 mai"
categories: [colBiSBM, inférence, GNN]
date: 2025 05 28
---
## TOP PRIORITÉ
- Pour clustering de collections sur données réelles :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- Faire le `hclust` avec diverses distances et voir si les coupes proposées diffèrent sensiblement
- Si plusieurs clustering possibles les tester et sélectionner le
meilleur
- Ré-ajuster les bonnes partitions.
- Idée de Sophie : alterner descendant et ascendant &rarr; prometteur aussi
- Pour les deux propositions données simulées tester diverses distances.
- Dé-bugger les simulations :
- Inférence : Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d'autres problèmes que juste le plan de parallélisation.
- Vérifier si problème de version tidyverse pour vapply sur l'**inférence**.
- Si problème de parallélisation vient de pb de version *future.callr* le signaler à MIGALE.
### Présentations LSD, JdS et ML@Aussois
- Attente retours Pierre
### Applications
- Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
Car densités déséquilibrées.
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
- Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple
### Inférence et microbes
- Lancer *colBiSBM* sur $OTU\times Sample$ &rarr; problème du chargement en mémoire des données à voir
- Se renseigner techniques d'inférence de réseaux :
- covariance (base corrélation et seuil)
- GraphicalLASSO
- Co-occurence
- Lancer *colSBM* sur $OTU\times OTU$
- Creuser [TabNet](https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf) de Christophe Regouby et les [exercices](https://github.com/cregouby/Tutoriel_torch)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Demander à JA si elle connaît des réseaux d'interactions connus par les experts (idée d'intégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
## A discuter
## A faire
### Inférence
- Papier pour comprendre données
- ~~Faust et al.~~
- Abdill et al.
- Bashan et al.
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS
### Rédaction article
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Dire résultats nettement meilleurs et variabilités inférieures.
## A continuer
### Applications
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
> Sophie a fait une appli qui marche bien et va dans le sens de l'analyse faite
(à savoir pas d'effet du gradien d'urbanisation). À continuer pour l'intégrer dans l'article !
### Axe inférence
- Lire biblio fournie Julie, Inférence de réseaux : co-occurence
> J'ai lu Faust et al.
> Je lis Abdill et al.
## Repoussés ou abandonnés
:::{.callout-note collapse="true"}
## Déplier pour voir
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps.
> Je n'arrive pas à comprendre les erreurs qui arrivent
- Lire Biological Networks - François Képès
- Regarder les applications pour les collections de réseaux recommender system *Pas pertinents et trop gros*
:::{#lst-reco-systems lst-cap="Recommender systems data"}
Par exemple :
- [Liste de recommendation data](https://cseweb.ucsd.edu/~jmcauley/datasets.html)
:::
### Papier plus multi-applications
- Données d'Elisa herbivore ?
- Données urbanisations ?
### Autour de l'article et du package
- Créer des vignettes illustrant par exemple des cas de simulations. **Possible de mettre l'exemple d'application de Sophie sur les réseaux avec gradient d'urbanisation**.
### Simulations article
- Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices d'adjacences.
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
:::

940
suivi/2025-24/2025-24.html Normal file
View file

@ -0,0 +1,940 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 24 2025 : 10 juin - 13 juin Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script src="../../site_libs/quarto-contrib/glightbox/glightbox.min.js"></script>
<link href="../../site_libs/quarto-contrib/glightbox/glightbox.min.css" rel="stylesheet">
<link href="../../site_libs/quarto-contrib/glightbox/lightbox.css" rel="stylesheet">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 24 2025 : 10 juin - 13 juin</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">13 juin 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list"><span class="header-section-number">1</span> TODO List</a>
<ul class="collapse">
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications"><span class="header-section-number">1.1</span> Applications</a></li>
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.2</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#lecture-en-cours" id="toc-lecture-en-cours" class="nav-link" data-scroll-target="#lecture-en-cours"><span class="header-section-number">2</span> Lecture en cours</a>
<ul class="collapse">
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot"><span class="header-section-number">2.1</span> OT</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">3</span> A discuter</a>
<ul class="collapse">
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">3.1</span> Inférence</a></li>
<li><a href="#rédaction-article" id="toc-rédaction-article" class="nav-link" data-scroll-target="#rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</a></li>
</ul></li>
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer"><span class="header-section-number">4</span> A continuer</a>
<ul class="collapse">
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1"><span class="header-section-number">4.1</span> Applications</a></li>
<li><a href="#axe-inférence" id="toc-axe-inférence" class="nav-link" data-scroll-target="#axe-inférence"><span class="header-section-number">4.2</span> Axe inférence</a></li>
</ul></li>
<li><a href="#repoussés-ou-abandonnés" id="toc-repoussés-ou-abandonnés" class="nav-link" data-scroll-target="#repoussés-ou-abandonnés"><span class="header-section-number">5</span> Repoussés ou abandonnés</a></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="todo-list" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="todo-list"><span class="header-section-number">1</span> TODO List</h2>
<ul>
<li>✅ Préparer la séance intro à Git pour le 13 juin. <strong>La séance sest très bien passée</strong></li>
<li>Pour clustering de collections sur données réelles :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.
<ul>
<li>Faire le <code>hclust</code> avec diverses distances et voir si les coupes proposées diffèrent sensiblement</li>
<li>Si plusieurs clustering possibles les tester et sélectionner le meilleur</li>
<li>Ré-ajuster les bonnes partitions.</li>
<li>✅ Cest bon jai une fonction qui tourne, mais lentement ⌛</li>
<li>⏳Simulations en train de tourner</li>
<li>❗Lapproche que jai en mettant la pénalité à 0 peut favoriser de séparer trop les réseaux et donc il faudrait refusionner. ➡️ mais le d&amp;a ne fonctionne quen <em>iid</em></li>
</ul></li>
<li>✅ Idée de Sophie : alterner descendant et ascendant → prometteur aussi. Jai codé le fichier de simulations et débugguer le vecteur de clustering ▶️ à voir les performances. ➡️ la simu à 9 réseaux (bcp de variabilité a priori) est lancée attente résultats ➡️ Je tombe sur un bug déjà rencontré dans les simus dinférence. jai lancé sans parallélisation pour essayer de comprendre le bug.</li>
</ul>
<p>✅ Il y avait un bug dans la fenêtre glissant où la condition darrêt quand le BICL naugmentait plus était mal détectée. Corrigé</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/ari-clustering-desc&amp;asc9.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1" title="9 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&amp;ascendante"><img src="figs/ari-clustering-desc&amp;asc9.png" class="img-fluid figure-img" alt="9 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&amp;ascendante"></a></p>
<figcaption>9 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&amp;ascendante</figcaption>
</figure>
</div>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/ari-clustering-desc&amp;asc30.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2" title="30 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&amp;ascendante"><img src="figs/ari-clustering-desc&amp;asc30.png" class="img-fluid figure-img" alt="30 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&amp;ascendante"></a></p>
<figcaption>30 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&amp;ascendante</figcaption>
</figure>
</div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="figs/nbcollections-clustering-descending.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3" title="30 réseaux - # collections à la fin du clustering. La vraie valeur 3 est en rouge pointillés"><img src="figs/nbcollections-clustering-descending.png" class="img-fluid figure-img" alt="30 réseaux - # collections à la fin du clustering. La vraie valeur 3 est en rouge pointillés"></a></p>
<figcaption>30 réseaux - # collections à la fin du clustering. La vraie valeur 3 est en rouge pointillés</figcaption>
</figure>
</div>
</div>
</div>
</div>
<ul>
<li><p>Pour les deux propositions données simulées tester diverses distances.</p></li>
<li><p>Dé-bugger les simulations :</p>
<ul>
<li>Inférence : Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -&gt; BUG, dois creuser mais juste des problèmes techniques -&gt; Visiblement il y a dautres problèmes que juste le plan de parallélisation.</li>
</ul></li>
<li><p>Vérifier si problème de version tidyverse pour vapply sur l<strong>inférence</strong>.</p></li>
<li><p>Si problème de parallélisation vient de pb de version <em>future.callr</em> le signaler à MIGALE.</p></li>
<li><p>✅ Réparé mauvais placement des légendes, des valeurs etc.</p></li>
</ul>
<section id="applications" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="applications"><span class="header-section-number">1.1</span> Applications</h3>
<ul>
<li>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<ul>
<li>Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple</li>
</ul>
</section>
<section id="inférence-et-microbes" class="level3" data-number="1.2">
<h3 data-number="1.2" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.2</span> Inférence et microbes</h3>
<ul>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Se renseigner techniques dinférence de réseaux :
<ul>
<li>covariance (base corrélation et seuil)</li>
<li>GraphicalLASSO</li>
<li>Co-occurence</li>
</ul></li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>Creuser <a href="https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf">TabNet</a> de Christophe Regouby et les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Demander à JA si elle connaît des réseaux dinteractions connus par les experts (idée dintégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
</section>
</section>
<section id="lecture-en-cours" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="lecture-en-cours"><span class="header-section-number">2</span> Lecture en cours</h2>
<section id="ot" class="level3" data-number="2.1">
<h3 data-number="2.1" class="anchored" data-anchor-id="ot"><span class="header-section-number">2.1</span> OT</h3>
<ul>
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s.&nbsp;d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes
<ul>
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s.&nbsp;d.</a>)</span> Pour comprendre le problème dOT régularisé pour lentropie.</li>
</ul></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">3</span> A discuter</h2>
<section id="inférence" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="inférence"><span class="header-section-number">3.1</span> Inférence</h3>
<ul>
<li>Papier pour comprendre données
<ul>
<li><del>Faust et al.</del></li>
<li>Abdill et al.</li>
<li>Bashan et al.</li>
</ul></li>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
<section id="rédaction-article" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="rédaction-article"><span class="header-section-number">3.2</span> Rédaction article</h3>
<ul>
<li>Relire intro St Clair</li>
<li>Sinspirer structure pour mon intro</li>
<li>Trouver biblio intro</li>
<li>Rédiger lintro</li>
<li>Dire résultats nettement meilleurs et variabilités inférieures.</li>
</ul>
</section>
</section>
<section id="a-continuer" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="a-continuer"><span class="header-section-number">4</span> A continuer</h2>
<section id="applications-1" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="applications-1"><span class="header-section-number">4.1</span> Applications</h3>
<ul>
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient durbanisation</li>
</ul>
<blockquote class="blockquote">
<p>Sophie a fait une appli qui marche bien et va dans le sens de lanalyse faite (à savoir pas deffet du gradien durbanisation). À continuer pour lintégrer dans larticle !</p>
</blockquote>
</section>
<section id="axe-inférence" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="axe-inférence"><span class="header-section-number">4.2</span> Axe inférence</h3>
<ul>
<li>Lire biblio fournie Julie, Inférence de réseaux : co-occurence</li>
</ul>
<blockquote class="blockquote">
<p>Jai lu Faust et al.&nbsp; Je lis Abdill et al.</p>
</blockquote>
</section>
</section>
<section id="repoussés-ou-abandonnés" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="repoussés-ou-abandonnés"><span class="header-section-number">5</span> Repoussés ou abandonnés</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center" data-bs-toggle="collapse" data-bs-target=".callout-1-contents" aria-controls="callout-1" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Déplier pour voir
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<ul>
<li>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées. Il faut que jajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps.</li>
</ul>
<blockquote class="blockquote">
<p>Je narrive pas à comprendre les erreurs qui arrivent</p>
</blockquote>
<ul>
<li><p>Lire Biological Networks - François Képès</p></li>
<li><p>Regarder les applications pour les collections de réseaux recommender system <em>Pas pertinents et trop gros</em></p></li>
</ul>
<div id="lst-reco-systems" class="listing quarto-float quarto-figure quarto-figure-left anchored">
<figure class="quarto-float quarto-float-lst figure">
<figcaption class="quarto-float-caption-top quarto-float-caption quarto-float-lst" id="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Listing&nbsp;1: Recommender systems data
</figcaption>
<div aria-describedby="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<p>Par exemple :</p>
<ul>
<li><a href="https://cseweb.ucsd.edu/~jmcauley/datasets.html">Liste de recommendation data</a></li>
</ul>
</div>
</figure>
</div>
<section id="papier-plus-multi-applications" class="level3" data-number="5.1">
<h3 data-number="5.1" class="anchored" data-anchor-id="papier-plus-multi-applications"><span class="header-section-number">5.1</span> Papier plus multi-applications</h3>
<ul>
<li>Données dElisa herbivore ?</li>
<li>Données urbanisations ?</li>
</ul>
</section>
<section id="autour-de-larticle-et-du-package" class="level3" data-number="5.2">
<h3 data-number="5.2" class="anchored" data-anchor-id="autour-de-larticle-et-du-package"><span class="header-section-number">5.2</span> Autour de larticle et du package</h3>
<ul>
<li>Créer des vignettes illustrant par exemple des cas de simulations. <strong>Possible de mettre lexemple dapplication de Sophie sur les réseaux avec gradient durbanisation</strong>.</li>
</ul>
</section>
<section id="simulations-article" class="level3" data-number="5.3">
<h3 data-number="5.3" class="anchored" data-anchor-id="simulations-article"><span class="header-section-number">5.3</span> Simulations article</h3>
<ul>
<li><p>Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices dadjacences.</p></li>
<li><p>Corriger structure de simus :</p>
<ul>
<li>Pour noisy <span class="math inline">\alpha</span> :
<ul>
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
<li>Beta contrainte dans (0,1)</li>
</ul></li>
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon &lt; \epsilon_{max}</span> prélever dans la liste des indices afin davoir des perturbations emboitées.</li>
</ul></li>
</ul>
</section>
</div>
</div>
</div>
</section>
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s.&nbsp;d. <span>«&nbsp;Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs&nbsp;»</span>.
</div>
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
Nenna, Luca. s.&nbsp;d. <span>«&nbsp;Lecture 2: <span>Entropic Optimal Transport</span>&nbsp;»</span>.
</div>
</div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
<script>var lightboxQuarto = GLightbox({"closeEffect":"zoom","descPosition":"bottom","loop":false,"openEffect":"zoom","selector":".lightbox"});
(function() {
let previousOnload = window.onload;
window.onload = () => {
if (previousOnload) {
previousOnload();
}
lightboxQuarto.on('slide_before_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
const href = trigger.getAttribute('href');
if (href !== null) {
const imgEl = window.document.querySelector(`a[href="${href}"] img`);
if (imgEl !== null) {
const srcAttr = imgEl.getAttribute("src");
if (srcAttr && srcAttr.startsWith("data:")) {
slideConfig.href = srcAttr;
}
}
}
});
lightboxQuarto.on('slide_after_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(slideNode);
}
});
};
})();
</script>
</body></html>

View file

@ -1,164 +0,0 @@
---
title: "Bilan semaine 24 2025 : 10 juin - 13 juin"
categories: [colBiSBM, inférence, GNN]
date: 2025 06 13
bibliography: references.bib
---
## TODO List
- ✅ Préparer la séance intro à Git pour le 13 juin. **La séance s'est très bien passée**
- Pour clustering de collections sur données réelles :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- Faire le `hclust` avec diverses distances et voir si les coupes proposées diffèrent sensiblement
- Si plusieurs clustering possibles les tester et sélectionner le
meilleur
- Ré-ajuster les bonnes partitions.
- ✅ C'est bon j'ai une fonction qui tourne, mais lentement ⌛
- ⏳Simulations en train de tourner
- ❗L'approche que j'ai en mettant la pénalité à 0 peut favoriser de séparer trop les réseaux et donc il faudrait refusionner.
➡️ mais le d&a ne fonctionne qu'en *iid*
- ✅ Idée de Sophie : alterner descendant et ascendant &rarr; prometteur aussi. J'ai codé le fichier de simulations et débugguer le vecteur de clustering ▶️ à voir les performances. ➡️ la simu à 9 réseaux (bcp de variabilité a priori) est lancée attente résultats ➡️ Je tombe sur un bug déjà rencontré dans les simus d'inférence. j'ai lancé sans parallélisation pour essayer de comprendre le bug.
✅ Il y avait un bug dans la fenêtre glissant où la condition d'arrêt quand le BICL n'augmentait plus était mal détectée. Corrigé
![9 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&ascendante](figs/ari-clustering-desc&asc9.png)
:::{layout-ncol="2"}
![30 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&ascendante](figs/ari-clustering-desc&asc30.png)
![30 réseaux - # collections à la fin du clustering. La vraie valeur 3 est en rouge pointillés](figs/nbcollections-clustering-descending.png)
:::
- Pour les deux propositions données simulées tester diverses distances.
- Dé-bugger les simulations :
- Inférence : Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d'autres problèmes que juste le plan de parallélisation.
- Vérifier si problème de version tidyverse pour vapply sur l'**inférence**.
- Si problème de parallélisation vient de pb de version *future.callr* le signaler à MIGALE.
- ✅ Réparé mauvais placement des légendes, des valeurs etc.
### Applications
- Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
Car densités déséquilibrées.
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
- Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple
### Inférence et microbes
- Lancer *colBiSBM* sur $OTU\times Sample$ &rarr; problème du chargement en mémoire des données à voir
- Se renseigner techniques d'inférence de réseaux :
- covariance (base corrélation et seuil)
- GraphicalLASSO
- Co-occurence
- Lancer *colSBM* sur $OTU\times OTU$
- Creuser [TabNet](https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf) de Christophe Regouby et les [exercices](https://github.com/cregouby/Tutoriel_torch)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Demander à JA si elle connaît des réseaux d'interactions connus par les experts (idée d'intégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
## Lecture en cours
### OT
- @mazeletUnsupervisedLearningOptimal Intéressant pour le transport optimal entre graphes de tailles différentes
- @nennaLecture2Entropic Pour comprendre le problème d'OT régularisé pour l'entropie.
## A discuter
### Inférence
- Papier pour comprendre données
- ~~Faust et al.~~
- Abdill et al.
- Bashan et al.
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS
### Rédaction article
- Relire intro St Clair
- S'inspirer structure pour mon intro
- Trouver biblio intro
- Rédiger l'intro
- Dire résultats nettement meilleurs et variabilités inférieures.
## A continuer
### Applications
- Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d'urbanisation
> Sophie a fait une appli qui marche bien et va dans le sens de l'analyse faite
(à savoir pas d'effet du gradien d'urbanisation). À continuer pour l'intégrer dans l'article !
### Axe inférence
- Lire biblio fournie Julie, Inférence de réseaux : co-occurence
> J'ai lu Faust et al.
> Je lis Abdill et al.
## Repoussés ou abandonnés
:::{.callout-note collapse="true"}
## Déplier pour voir
- Résultats simus NA **Erreur pour certaines conditions** : Pour NA robustness générer `nb_rep` collections de taille $M=2$ et prélever
$\epsilon_{max}n_r n_c$ liens à retirer puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
Il faut que j'ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code).
Implémenté les missing steps.
> Je n'arrive pas à comprendre les erreurs qui arrivent
- Lire Biological Networks - François Képès
- Regarder les applications pour les collections de réseaux recommender system *Pas pertinents et trop gros*
:::{#lst-reco-systems lst-cap="Recommender systems data"}
Par exemple :
- [Liste de recommendation data](https://cseweb.ucsd.edu/~jmcauley/datasets.html)
:::
### Papier plus multi-applications
- Données d'Elisa herbivore ?
- Données urbanisations ?
### Autour de l'article et du package
- Créer des vignettes illustrant par exemple des cas de simulations. **Possible de mettre l'exemple d'application de Sophie sur les réseaux avec gradient d'urbanisation**.
### Simulations article
- Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices d'adjacences.
- Corriger structure de simus :
- Pour noisy $\alpha$ :
- Logit pour envoyer la gaussienne vers (0,1)
- Beta contrainte dans (0,1)
- Pour noisy links : Générer `nb_clustering` collections de taille M puis prélever $\epsilon_{max}n_r n_c$ liens à inverser puis pour les $\epsilon < \epsilon_{max}$ prélever dans la liste des indices afin d'avoir des perturbations emboitées.
:::

View file

@ -1,20 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}

846
suivi/2025-25/2025-25.html Normal file
View file

@ -0,0 +1,846 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 25 2025 : 16 juin - 20 juin Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 25 2025 : 16 juin - 20 juin</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">20 juin 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list"><span class="header-section-number">1</span> TODO List</a>
<ul class="collapse">
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#lecture-en-cours" id="toc-lecture-en-cours" class="nav-link" data-scroll-target="#lecture-en-cours"><span class="header-section-number">2</span> Lecture en cours</a>
<ul class="collapse">
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot"><span class="header-section-number">2.1</span> OT</a></li>
<li><a href="#inférence-de-graphes" id="toc-inférence-de-graphes" class="nav-link" data-scroll-target="#inférence-de-graphes"><span class="header-section-number">2.2</span> Inférence de graphes</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">3</span> A discuter</a>
<ul class="collapse">
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">3.1</span> Inférence</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="todo-list" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="todo-list"><span class="header-section-number">1</span> TODO List</h2>
<ul>
<li><p>Pour clustering de collections sur données réelles :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.</p>
<ul>
<li>✅ Si plusieurs clustering possibles les tester et sélectionner le meilleur</li>
<li>✅ Ré-ajuster les bonnes partitions.</li>
<li>❓Je narrive plus à reproduire le bug pour linférence…</li>
</ul></li>
<li><p><strong>Oui cest bien le cas</strong> Clustering descendant &amp; ascendant : vérifier quau cours du temps le <span class="math inline">BICL_{asc} \geq BICL_{desc}</span></p></li>
<li><p>Creuser et explorer avec easy16s !</p></li>
<li><p>✅ Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple</p></li>
</ul>
<table>
<caption>
AUC values for colBiSBM and VGAE models across cities
</caption>
<thead>
<tr>
<th style="empty-cells: hide;border-bottom:hidden;" colspan="1">
</th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="2">
<div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">
AUC
</div>
</th>
</tr>
<tr>
<th style="text-align:left;">
City
</th>
<th style="text-align:right;">
colBiSBM
</th>
<th style="text-align:right;">
Untuned VGAE
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;">
Bristol
</td>
<td style="text-align:right;">
0.798
</td>
<td style="text-align:right;">
0.755
</td>
</tr>
<tr>
<td style="text-align:left;">
Edinburgh
</td>
<td style="text-align:right;">
0.836
</td>
<td style="text-align:right;">
0.774
</td>
</tr>
<tr>
<td style="text-align:left;">
Leeds
</td>
<td style="text-align:right;">
0.854
</td>
<td style="text-align:right;">
0.760
</td>
</tr>
<tr>
<td style="text-align:left;">
Reading
</td>
<td style="text-align:right;">
0.867
</td>
<td style="text-align:right;">
0.740
</td>
</tr>
</tbody>
</table>
<ul>
<li><p>Dé-bugger les simulations :</p>
<ul>
<li>⌛ Inférence : Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -&gt; BUG, dois creuser mais juste des problèmes techniques -&gt; Visiblement il y a dautres problèmes que juste le plan de parallélisation.
<ul>
<li><strong>Non ça na pas lair dêtre ça</strong>. Vérifier si problème de version tidyverse pour vapply sur l<strong>inférence</strong>.</li>
<li>⌛Bon le bug ne se reproduit plus… les jobs sont juste trop longs (&gt; 120h) jai relancé, il ne reste que 182/972 conditions.</li>
</ul></li>
</ul></li>
<li><p><strong>Il suffisait de faire la màj soit même…</strong> Si problème de parallélisation vient de pb de version <em>future.callr</em> le signaler à MIGALE.</p></li>
<li><p>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</p></li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<section id="inférence-et-microbes" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</h3>
<ul>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>Creuser <a href="https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf">TabNet</a> de Christophe Regouby et les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Demander à JA si elle connaît des réseaux dinteractions connus par les experts (idée dintégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
</section>
</section>
<section id="lecture-en-cours" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="lecture-en-cours"><span class="header-section-number">2</span> Lecture en cours</h2>
<section id="ot" class="level3" data-number="2.1">
<h3 data-number="2.1" class="anchored" data-anchor-id="ot"><span class="header-section-number">2.1</span> OT</h3>
<ul>
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s.&nbsp;d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes</li>
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s.&nbsp;d.b</a>)</span> Pour comprendre le problème dOT régularisé pour lentropie.</li>
<li><span class="citation" data-cites="nennaLecture1Monge">Nenna (<a href="#ref-nennaLecture1Monge" role="doc-biblioref">s.&nbsp;d.a</a>)</span></li>
</ul>
</section>
<section id="inférence-de-graphes" class="level3" data-number="2.2">
<h3 data-number="2.2" class="anchored" data-anchor-id="inférence-de-graphes"><span class="header-section-number">2.2</span> Inférence de graphes</h3>
<ul>
<li><span class="citation" data-cites="matchadoNetworkAnalysisMethods2021b">Matchado et al. (<a href="#ref-matchadoNetworkAnalysisMethods2021b" role="doc-biblioref">2021</a>)</span> ➡️ Nos données étant compositionnelles il faut utiliser:
<ul>
<li>CCLasso et SparCC</li>
<li>HARMONIES pour zéro inflation (Binomiale négative), COZINE centered log ratio transformation compositionnalité, zéro inflation et forte précision</li>
<li>MixMPLN pour générer K réseaux issus de K Poisson log Normal</li>
<li>mLDM peut enlever les arêtes indirectes.</li>
</ul></li>
<li>NetComi agrège plusieurs méthodes tout en permettant lanalyse différentielle !</li>
</ul>
<p>Si pas compositionnelles :</p>
<ul>
<li>Meta-Network pour arêtes indirectes et non linéaires</li>
<li>Environmentally-Driven Edge detection pour corriger les effets de lenvironnement</li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">3</span> A discuter</h2>
<section id="inférence" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="inférence"><span class="header-section-number">3.1</span> Inférence</h3>
<ul>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
</section>
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-matchadoNetworkAnalysisMethods2021b" class="csl-entry" role="listitem">
Matchado, Monica Steffi, Michael Lauber, Sandra Reitmeier, Tim Kacprowski, Jan Baumbach, Dirk Haller, et Markus List. 2021. <span>«&nbsp;Network Analysis Methods for Studying Microbial Communities: <span>A</span> Mini Review&nbsp;»</span>. <em>Computational and Structural Biotechnology Journal</em> 19 (janvier): 268798. <a href="https://doi.org/10.1016/j.csbj.2021.05.001">https://doi.org/10.1016/j.csbj.2021.05.001</a>.
</div>
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s.&nbsp;d. <span>«&nbsp;Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs&nbsp;»</span>.
</div>
<div id="ref-nennaLecture1Monge" class="csl-entry" role="listitem">
Nenna, Luca. s.&nbsp;d.a. <span>«&nbsp;Lecture 1 <span>Monge</span> and <span>Kantorovich</span> Problems: From Primal to Dual&nbsp;»</span>.
</div>
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
———. s.&nbsp;d.b. <span>«&nbsp;Lecture 2: <span>Entropic Optimal Transport</span>&nbsp;»</span>.
</div>
</div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,124 +0,0 @@
---
title: "Bilan semaine 25 2025 : 16 juin - 20 juin"
categories: [colBiSBM, inférence, GNN]
date: 2025 06 20
bibliography: references.bib
---
## TODO List
- Pour clustering de collections sur données réelles :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- ✅ Si plusieurs clustering possibles les tester et sélectionner le
meilleur
- ✅ Ré-ajuster les bonnes partitions.
- ❓Je n'arrive plus à reproduire le bug pour l'inférence...
- ✅ **Oui c'est bien le cas** Clustering descendant & ascendant : vérifier qu'au cours du temps le $BICL_{asc} \geq BICL_{desc}$
- Creuser et explorer avec easy16s !
- ✅ Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple
<table>
<caption>AUC values for colBiSBM and VGAE models across cities</caption>
<thead>
<tr>
<th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">AUC</div></th>
</tr>
<tr>
<th style="text-align:left;"> City </th>
<th style="text-align:right;"> colBiSBM </th>
<th style="text-align:right;"> Untuned VGAE </th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"> Bristol </td>
<td style="text-align:right;"> 0.798 </td>
<td style="text-align:right;"> 0.755 </td>
</tr>
<tr>
<td style="text-align:left;"> Edinburgh </td>
<td style="text-align:right;"> 0.836 </td>
<td style="text-align:right;"> 0.774 </td>
</tr>
<tr>
<td style="text-align:left;"> Leeds </td>
<td style="text-align:right;"> 0.854 </td>
<td style="text-align:right;"> 0.760 </td>
</tr>
<tr>
<td style="text-align:left;"> Reading </td>
<td style="text-align:right;"> 0.867 </td>
<td style="text-align:right;"> 0.740 </td>
</tr>
</tbody>
</table>
- Dé-bugger les simulations :
- ⌛ Inférence : Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d'autres problèmes que juste le plan de parallélisation.
- ✅ **Non ça n'a pas l'air d'être ça**. Vérifier si problème de version tidyverse pour vapply sur l'**inférence**.
- ⌛Bon le bug ne se reproduit plus... les jobs sont juste trop longs (> 120h) j'ai relancé, il ne reste que 182/972 conditions.
- ✅ **Il suffisait de faire la màj soit même...** Si problème de parallélisation vient de pb de version *future.callr* le signaler à MIGALE.
- Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
Car densités déséquilibrées.
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Inférence et microbes
- Lancer *colBiSBM* sur $OTU\times Sample$ &rarr; problème du chargement en mémoire des données à voir
- Lancer *colSBM* sur $OTU\times OTU$
- Creuser [TabNet](https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf) de Christophe Regouby et les [exercices](https://github.com/cregouby/Tutoriel_torch)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Demander à JA si elle connaît des réseaux d'interactions connus par les experts (idée d'intégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
## Lecture en cours
### OT
- ⌛ @mazeletUnsupervisedLearningOptimal Intéressant pour le transport optimal entre graphes de tailles différentes
- ⌛ @nennaLecture2Entropic Pour comprendre le problème d'OT régularisé pour l'entropie.
- ⌛ @nennaLecture1Monge
### Inférence de graphes
- ✅ @matchadoNetworkAnalysisMethods2021b ➡️ Nos données étant compositionnelles
il faut utiliser:
- CCLasso et SparCC
- HARMONIES pour zéro inflation (Binomiale négative), COZINE centered log ratio transformation compositionnalité, zéro inflation et forte précision
- MixMPLN pour générer K réseaux issus de K Poisson log Normal
- mLDM peut enlever les arêtes indirectes.
- NetComi agrège plusieurs méthodes tout en permettant l'analyse différentielle !
Si pas compositionnelles :
- Meta-Network pour arêtes indirectes et non linéaires
- Environmentally-Driven Edge detection pour corriger les effets de l'environnement
## A discuter
### Inférence
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS

View file

@ -1,49 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}
@article{nennaLecture1Monge,
title = {Lecture 1 {{Monge}} and {{Kantorovich}} Problems: From Primal to Dual},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-13T09:24:13.832Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/7LVQPD6D/Nenna - Lecture 1 Monge and Kantorovich problems from primal to dual.pdf}
}
@article{matchadoNetworkAnalysisMethods2021b,
title = {Network Analysis Methods for Studying Microbial Communities: {{A}} Mini Review},
shorttitle = {Network Analysis Methods for Studying Microbial Communities},
author = {Matchado, Monica Steffi and Lauber, Michael and Reitmeier, Sandra and Kacprowski, Tim and Baumbach, Jan and Haller, Dirk and List, Markus},
year = {2021},
month = jan,
journal = {Computational and Structural Biotechnology Journal},
volume = {19},
pages = {2687--2698},
issn = {2001-0370},
doi = {10.1016/j.csbj.2021.05.001},
urldate = {2025-06-16},
abstract = {Microorganisms including bacteria, fungi, viruses, protists and archaea live as communities in complex and contiguous environments. They engage in numerous inter- and intra- kingdom interactions which can be inferred from microbiome profiling data. In particular, network-based approaches have proven helpful in deciphering complex microbial interaction patterns. Here we give an overview of state-of-the-art methods to infer intra-kingdom interactions ranging from simple correlation- to complex conditional dependence-based methods. We highlight common biases encountered in microbial profiles and discuss mitigation strategies employed by different tools and their trade-off with increased computational complexity. Finally, we discuss current limitations that motivate further method development to infer inter-kingdom interactions and to robustly and comprehensively characterize microbial environments in the future.},
keywords = {/unread,Microbial co-occurrence networks,Microbial interactions,Network analysis,Trans-kingdom interactions},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-16T16:18:09.496Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/ZCY74M2I/Matchado et al. - 2021 - Network analysis methods for studying microbial communities A mini review.pdf;/home/louis/snap/zotero-snap/common/Zotero/storage/BKZN3MI5/S2001037021001823.html}
}

811
suivi/2025-27/2025-27.html Normal file
View file

@ -0,0 +1,811 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 27 2025 : 30 juin - 4 juillet Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 27 2025 : 30 juin - 4 juillet</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">30 juin 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list"><span class="header-section-number">1</span> TODO List</a>
<ul class="collapse">
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#lectures-en-cours" id="toc-lectures-en-cours" class="nav-link" data-scroll-target="#lectures-en-cours"><span class="header-section-number">2</span> Lectures en cours 📚</a>
<ul class="collapse">
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot"><span class="header-section-number">2.1</span> OT</a></li>
<li><a href="#inférence-de-graphes" id="toc-inférence-de-graphes" class="nav-link" data-scroll-target="#inférence-de-graphes"><span class="header-section-number">2.2</span> Inférence de graphes</a></li>
<li><a href="#causalité-1" id="toc-causalité-1" class="nav-link" data-scroll-target="#causalité-1"><span class="header-section-number">2.3</span> Causalité</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">3</span> A discuter</a>
<ul class="collapse">
<li><a href="#congés-ps" id="toc-congés-ps" class="nav-link" data-scroll-target="#congés-ps"><span class="header-section-number">3.1</span> Congés P&amp;S</a></li>
<li><a href="#thèse" id="toc-thèse" class="nav-link" data-scroll-target="#thèse"><span class="header-section-number">3.2</span> Thèse</a></li>
<li><a href="#interprétation-écologiques-résultats-de-baldock" id="toc-interprétation-écologiques-résultats-de-baldock" class="nav-link" data-scroll-target="#interprétation-écologiques-résultats-de-baldock"><span class="header-section-number">3.3</span> Interprétation écologiques résultats de Baldock</a></li>
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">3.4</span> Inférence</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="todo-list" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="todo-list"><span class="header-section-number">1</span> TODO List</h2>
<ul>
<li><p>Pour clustering de collections sur données réelles :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.</p>
<ul>
<li>❓Je narrive plus à reproduire le bug pour linférence…</li>
<li>Sassurer que ça marche et relancer</li>
</ul></li>
<li><p>Creuser et explorer avec easy16s !</p></li>
<li><p>✅ Ajouter le tableau de comparaison du VGAE avec colBiSBM</p></li>
<li><p><strong>Calcul du score F1</strong>Revérifier que jentraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant</p></li>
<li><p>Regarder la liste des cours du MathSV et de lUniversité Paris-Saclay.</p></li>
<li><p>Dé-bugger les simulations :</p>
<ul>
<li>⌛ Inférence : Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -&gt; BUG, dois creuser mais juste des problèmes techniques -&gt; Visiblement il y a dautres problèmes que juste le plan de parallélisation.
<ul>
<li>⌛Bon le bug ne se reproduit plus… les jobs sont juste trop longs (&gt; 120h) jai relancé, il ne reste que 182/972 conditions.</li>
</ul></li>
</ul></li>
<li><p><strong>Plutôt regarder pour introduire un modèle <span class="math inline">\delta</span>-colBiSBM</strong>. Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</p></li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<section id="inférence-et-microbes" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</h3>
<ul>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>✅ Creuser <a href="https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf">TabNet</a> de Christophe Regouby</li>
<li>TabNet pratiquer les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
<section id="causalité" class="level4" data-number="1.1.1">
<h4 data-number="1.1.1" class="anchored" data-anchor-id="causalité"><span class="header-section-number">1.1.1</span> Causalité</h4>
<p>Plus sur le temps long, à regarder</p>
<ul>
<li>GT causalité</li>
<li>Daria Bystrova lire présentation <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span> (Meek rules, V-structure)</li>
</ul>
</section>
</section>
</section>
<section id="lectures-en-cours" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="lectures-en-cours"><span class="header-section-number">2</span> Lectures en cours 📚</h2>
<section id="ot" class="level3" data-number="2.1">
<h3 data-number="2.1" class="anchored" data-anchor-id="ot"><span class="header-section-number">2.1</span> OT</h3>
<ul>
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s.&nbsp;d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes</li>
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s.&nbsp;d.b</a>)</span> Pour comprendre le problème dOT régularisé pour lentropie.</li>
<li><span class="citation" data-cites="nennaLecture1Monge">Nenna (<a href="#ref-nennaLecture1Monge" role="doc-biblioref">s.&nbsp;d.a</a>)</span></li>
</ul>
</section>
<section id="inférence-de-graphes" class="level3" data-number="2.2">
<h3 data-number="2.2" class="anchored" data-anchor-id="inférence-de-graphes"><span class="header-section-number">2.2</span> Inférence de graphes</h3>
<ul>
<li><p><span class="citation" data-cites="Morton2021.11.09.467939">Morton et al. (<a href="#ref-Morton2021.11.09.467939" role="doc-biblioref">2021</a>)</span> VAE with Multinomial Logistic Normal distribution using Isometric Log Ratio tranform. Plus rapide que les autres méthodes et performances équivalentes</p></li>
<li><p><span class="citation" data-cites="aitchisonStatisticalAnalysisCompositional1982a">Aitchison (<a href="#ref-aitchisonStatisticalAnalysisCompositional1982a" role="doc-biblioref">1982</a>)</span></p></li>
<li><p>❗📖 <span class="citation" data-cites="payneFiniteMixturesMultivariate2023">Payne et al. (<a href="#ref-payneFiniteMixturesMultivariate2023" role="doc-biblioref">2023</a>)</span> sur MixMPLN</p></li>
</ul>
</section>
<section id="causalité-1" class="level3" data-number="2.3">
<h3 data-number="2.3" class="anchored" data-anchor-id="causalité-1"><span class="header-section-number">2.3</span> Causalité</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">3</span> A discuter</h2>
<section id="congés-ps" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="congés-ps"><span class="header-section-number">3.1</span> Congés P&amp;S</h3>
<ul>
<li>✅ Quand est-ce quon ne se voit pas ? Et donc quand est-ce quon se voit après ?</li>
<li>✅ Calendrier partagé</li>
</ul>
</section>
<section id="thèse" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="thèse"><span class="header-section-number">3.2</span> Thèse</h3>
<ul>
<li><p>✅ Que prévoir pour le CSI</p>
<ul>
<li>👍 Un petit rapport</li>
<li>👍 Une présentation</li>
</ul></li>
<li><p>👨‍🏫 <strong>Demander à Pierre</strong> Comment valider les enseignements comme formations Adum ?</p></li>
<li><p>✅ Des recommandations de formations, voir les cours du MathSV</p></li>
</ul>
</section>
<section id="interprétation-écologiques-résultats-de-baldock" class="level3" data-number="3.3">
<h3 data-number="3.3" class="anchored" data-anchor-id="interprétation-écologiques-résultats-de-baldock"><span class="header-section-number">3.3</span> Interprétation écologiques résultats de Baldock</h3>
<ul>
<li>⌛ Point avec Elisa, <strong>oui on relance</strong></li>
</ul>
</section>
<section id="inférence" class="level3" data-number="3.4">
<h3 data-number="3.4" class="anchored" data-anchor-id="inférence"><span class="header-section-number">3.4</span> Inférence</h3>
<ul>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
</section>
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-aitchisonStatisticalAnalysisCompositional1982a" class="csl-entry" role="listitem">
Aitchison, J. 1982. <span>«&nbsp;The <span>Statistical Analysis</span> of <span>Compositional Data</span>&nbsp;»</span>. <em>Journal of the Royal Statistical Society. Series B (Methodological)</em> 44 (2): 13977. <a href="https://www.jstor.org/stable/2345821">https://www.jstor.org/stable/2345821</a>.
</div>
<div id="ref-bystrovaCausalDiscovery" class="csl-entry" role="listitem">
Bystrova, Daria. s.&nbsp;d. <span>«&nbsp;Causal Discovery&nbsp;»</span>.
</div>
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s.&nbsp;d. <span>«&nbsp;Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs&nbsp;»</span>.
</div>
<div id="ref-Morton2021.11.09.467939" class="csl-entry" role="listitem">
Morton, James T., Justin Silverman, Gleb Tikhonov, Harri Lähdesmäki, et Rich Bonneau. 2021. <span>«&nbsp;Scalable Estimation of Microbial Co-Occurrence Networks with <span>Variational Autoencoders</span>&nbsp;»</span>. <em>bioRxiv : the preprint server for biology</em>. <a href="https://doi.org/10.1101/2021.11.09.467939">https://doi.org/10.1101/2021.11.09.467939</a>.
</div>
<div id="ref-nennaLecture1Monge" class="csl-entry" role="listitem">
Nenna, Luca. s.&nbsp;d.a. <span>«&nbsp;Lecture 1 <span>Monge</span> and <span>Kantorovich</span> Problems: From Primal to Dual&nbsp;»</span>.
</div>
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
———. s.&nbsp;d.b. <span>«&nbsp;Lecture 2: <span>Entropic Optimal Transport</span>&nbsp;»</span>.
</div>
<div id="ref-payneFiniteMixturesMultivariate2023" class="csl-entry" role="listitem">
Payne, Andrea, Anjali Silva, Steven J. Rothstein, Paul D. McNicholas, et Sanjeena Subedi. 2023. <span>«&nbsp;Finite <span>Mixtures</span> of <span>Multivariate Poisson-Log Normal Factor Analyzers</span> for <span>Clustering Count Data</span>&nbsp;»</span>. 13 novembre 2023. <a href="https://doi.org/10.48550/arXiv.2311.07762">https://doi.org/10.48550/arXiv.2311.07762</a>.
</div>
</div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,109 +0,0 @@
---
title: "Bilan semaine 27 2025 : 30 juin - 4 juillet"
categories: [colBiSBM, inférence, GNN]
date: 2025-06-30
date-modified: last-modified
bibliography: references.bib
---
## TODO List
- Pour clustering de collections sur données réelles :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- ❓Je n'arrive plus à reproduire le bug pour l'inférence...
- S'assurer que ça marche et relancer
- Creuser et explorer avec easy16s !
- ✅ Ajouter le tableau de comparaison du VGAE avec colBiSBM
- ⌛ **Calcul du score F1**Revérifier que j'entraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant
- Regarder la liste des cours du MathSV et de l'Université Paris-Saclay.
- Dé-bugger les simulations :
- ⌛ Inférence : Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d'autres problèmes que juste le plan de parallélisation.
- ⌛Bon le bug ne se reproduit plus... les jobs sont juste trop longs (> 120h) j'ai relancé, il ne reste que 182/972 conditions.
- ⌛ **Plutôt regarder pour introduire un modèle $\delta$-colBiSBM**. Kmeans sur la densité des réseaux subdoré pour pré-partitionner et *clusteriser*.
Car densités déséquilibrées.
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Inférence et microbes
- Lancer *colBiSBM* sur $OTU\times Sample$ &rarr; problème du chargement en mémoire des données à voir
- Lancer *colSBM* sur $OTU\times OTU$
- ✅ Creuser [TabNet](https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf) de Christophe Regouby
- TabNet pratiquer les [exercices](https://github.com/cregouby/Tutoriel_torch)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
#### Causalité
Plus sur le temps long, à regarder
- GT causalité
- Daria Bystrova lire présentation @bystrovaCausalDiscovery (Meek rules, V-structure)
## Lectures en cours 📚
### OT
- ⌛ @mazeletUnsupervisedLearningOptimal Intéressant pour le transport optimal entre graphes de tailles différentes
- ⌛ @nennaLecture2Entropic Pour comprendre le problème d'OT régularisé pour l'entropie.
- ⌛ @nennaLecture1Monge
### Inférence de graphes
- ✅ @Morton2021.11.09.467939 VAE with Multinomial Logistic Normal distribution using Isometric Log Ratio tranform.
Plus rapide que les autres méthodes et performances équivalentes
- ⌛ @aitchisonStatisticalAnalysisCompositional1982a
- ❗📖 @payneFiniteMixturesMultivariate2023 sur MixMPLN
### Causalité
- ❗📖 @bystrovaCausalDiscovery
## A discuter
### Congés P&S
- ✅ Quand est-ce qu'on ne se voit pas ? Et donc quand est-ce qu'on se voit après ?
- ✅ Calendrier partagé
### Thèse
- ✅ Que prévoir pour le CSI
- 👍 Un petit rapport
- 👍 Une présentation
- 👨‍🏫 **Demander à Pierre** Comment valider les enseignements comme formations Adum ?
- ✅ Des recommandations de formations, voir les cours du MathSV
### Interprétation écologiques résultats de Baldock
- ⌛ Point avec Elisa, **oui on relance**
### Inférence
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS

View file

@ -1,93 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}
@article{nennaLecture1Monge,
title = {Lecture 1 {{Monge}} and {{Kantorovich}} Problems: From Primal to Dual},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-13T09:24:13.832Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/7LVQPD6D/Nenna - Lecture 1 Monge and Kantorovich problems from primal to dual.pdf}
}
@article{Morton2021.11.09.467939,
title = {Scalable Estimation of Microbial Co-Occurrence Networks with {{Variational Autoencoders}}},
author = {Morton, James T. and Silverman, Justin and Tikhonov, Gleb and Lähdesmäki, Harri and Bonneau, Rich},
date = {2021},
journaltitle = {bioRxiv : the preprint server for biology},
shortjournal = {bioRxiv},
eprint = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939.full.pdf},
publisher = {Cold Spring Harbor Laboratory},
doi = {10.1101/2021.11.09.467939},
url = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939},
abstract = {Estimating microbe-microbe interactions is critical for understanding the ecological laws governing microbial communities. Rapidly decreasing sequencing costs have promised new opportunities to estimate microbe-microbe interactions across thousands of uncultured, unknown microbes. However, typical microbiome datasets are very high dimensional and accurate estimation of microbial correlations requires tens of thousands of samples, exceeding the computational capabilities of existing methodologies. Furthermore, the vast majority of microbiome studies collect compositional metagenomics data which enforces a negative bias when computing microbe-microbe correlations. The Multinomial Logistic Normal (MLN) distribution has been shown to be effective at inferring microbe-microbe correlations, however scalable Bayesian inference of these distributions has remained elusive. Here, we show that carefully constructed Variational Autoencoders (VAEs) augmented with the Isometric Log-ratio (ILR) transform can estimate low-rank MLN distributions thousands of times faster than existing methods. These VAEs can be trained on tens of thousands of samples, enabling co-occurrence inference across tens of thousands of microbes without regularization. The latent embedding distances computed from these VAEs are competitive with existing beta-diversity methods across a variety of mouse and human microbiome classification and regression tasks, with notable improvements on longitudinal studies.Competing Interest StatementThe authors have declared no competing interest.},
elocation-id = {2021.11.09.467939},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-30T14:17:29.518Z}
}
@article{aitchisonStatisticalAnalysisCompositional1982a,
title = {The {{Statistical Analysis}} of {{Compositional Data}}},
author = {Aitchison, J.},
date = {1982},
journaltitle = {Journal of the Royal Statistical Society. Series B (Methodological)},
volume = {44},
number = {2},
eprint = {2345821},
eprinttype = {jstor},
pages = {139--177},
publisher = {[Royal Statistical Society, Oxford University Press]},
issn = {0035-9246},
url = {https://www.jstor.org/stable/2345821},
urldate = {2025-05-07},
abstract = {The simplex plays an important role as sample space in many practical situations where compositional data, in the form of proportions of some whole, require interpretation. It is argued that the statistical analysis of such data has proved difficult because of a lack both of concepts of independence and of rich enough parametric classes of distributions in the simplex. A variety of independence hypotheses are introduced and interrelated, and new classes of transformed-normal distributions in the simplex are provided as models within which the independence hypotheses can be tested through standard theory of parametric hypothesis testing. The new concepts and statistical methodology are illustrated by a number of applications.},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-05-07T07:43:38.485Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/S97URH4Y/Aitchison - 1982 - The Statistical Analysis of Compositional Data.pdf}
}
@online{payneFiniteMixturesMultivariate2023,
title = {Finite {{Mixtures}} of {{Multivariate Poisson-Log Normal Factor Analyzers}} for {{Clustering Count Data}}},
author = {Payne, Andrea and Silva, Anjali and Rothstein, Steven J. and McNicholas, Paul D. and Subedi, Sanjeena},
date = {2023-11-13},
eprint = {2311.07762},
eprinttype = {arXiv},
eprintclass = {stat},
doi = {10.48550/arXiv.2311.07762},
url = {http://arxiv.org/abs/2311.07762},
urldate = {2025-07-02},
abstract = {A mixture of multivariate Poisson-log normal factor analyzers is introduced by imposing constraints on the covariance matrix, which resulted in flexible models for clustering purposes. In particular, a class of eight parsimonious mixture models based on the mixtures of factor analyzers model are introduced. Variational Gaussian approximation is used for parameter estimation, and information criteria are used for model selection. The proposed models are explored in the context of clustering discrete data arising from RNA sequencing studies. Using real and simulated data, the models are shown to give favourable clustering performance. The GitHub R package for this work is available at https://github.com/anjalisilva/mixMPLNFA and is released under the open-source MIT license.},
pubstate = {prepublished},
keywords = {/unread,Statistics - Computation,Statistics - Machine Learning,Statistics - Methodology},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:31:47.579Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/BXVPEIDD/Payne et al. - 2023 - Finite Mixtures of Multivariate Poisson-Log Normal Factor Analyzers for Clustering Count Data.pdf;/home/louis/snap/zotero-snap/common/Zotero/storage/L5DAS5C2/2311.html}
}
@unpublished{bystrovaCausalDiscovery,
title = {Causal Discovery},
author = {Bystrova, Daria},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:34:39.476Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/NQE5DY92/Bystrova - Causal discovery.pdf}
}

862
suivi/2025-28/2025-28.html Normal file
View file

@ -0,0 +1,862 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 28 2025 : 07 juillet - 11 juillet Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 28 2025 : 07 juillet - 11 juillet</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">7 juillet 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 juillet 2025</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list"><span class="header-section-number">1</span> TODO List</a>
<ul class="collapse">
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#biblio-à-faire" id="toc-biblio-à-faire" class="nav-link" data-scroll-target="#biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</a></li>
<li><a href="#lectures-en-cours" id="toc-lectures-en-cours" class="nav-link" data-scroll-target="#lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</a>
<ul class="collapse">
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot"><span class="header-section-number">3.1</span> OT</a></li>
<li><a href="#inférence-de-graphes" id="toc-inférence-de-graphes" class="nav-link" data-scroll-target="#inférence-de-graphes"><span class="header-section-number">3.2</span> Inférence de graphes</a></li>
<li><a href="#causalité-1" id="toc-causalité-1" class="nav-link" data-scroll-target="#causalité-1"><span class="header-section-number">3.3</span> Causalité</a></li>
<li><a href="#largest-gaps" id="toc-largest-gaps" class="nav-link" data-scroll-target="#largest-gaps"><span class="header-section-number">3.4</span> Largest Gaps</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">4</span> A discuter</a>
<ul class="collapse">
<li><a href="#congés-ps" id="toc-congés-ps" class="nav-link" data-scroll-target="#congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</a></li>
<li><a href="#thèse" id="toc-thèse" class="nav-link" data-scroll-target="#thèse"><span class="header-section-number">4.2</span> Thèse</a></li>
<li><a href="#interprétation-écologiques-résultats-de-baldock" id="toc-interprétation-écologiques-résultats-de-baldock" class="nav-link" data-scroll-target="#interprétation-écologiques-résultats-de-baldock"><span class="header-section-number">4.3</span> Interprétation écologiques résultats de Baldock</a></li>
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">4.4</span> Inférence</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="todo-list" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="todo-list"><span class="header-section-number">1</span> TODO List</h2>
<ul>
<li><p>Pour clustering de collections sur données <del>réelles</del> :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.</p>
<ul>
<li>❓Je narrive plus à reproduire le bug pour linférence…</li>
<li>Sassurer que ça marche et relancer</li>
</ul></li>
<li><p>Creuser et explorer avec easy16s !</p></li>
<li><p><strong>Calcul du score F1</strong>Revérifier que jentraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant</p></li>
<li><p>Ajouter au tableau comparatif sep BiSBM</p></li>
<li><p>Regarder les codes Mangal database pour <span class="math inline">\delta</span></p></li>
<li><p>✅ Formules ci-dessous. Voir <span class="math inline">\delta</span> mais additif</p></li>
</ul>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Bernoulli
</div>
</div>
<div class="callout-body-container callout-body">
<p>En Bernoulli pas de forme analytique non plus : Pour <span class="math inline">\alpha_{qr}</span>: <span class="math display"> \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span> <span class="math display">\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0</span></p>
<p>Et pour <span class="math inline">\delta_m</span>: <span class="math display"> \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span></p>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Poisson
</div>
</div>
<div class="callout-body-container callout-body">
<p>Forme analytique mais risque de confusion ? <span class="math display">\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} </span></p>
</div>
</div>
<ul>
<li><p>Attente retour Pierre pour faire dautres clustering</p></li>
<li><p>✅ Implémenter décodeur Generalized Random Dot Product.</p></li>
<li><p>✅ Réimplémentation propre et évolutive du DeepBVGAE (suivi des guidelines PyTorch Geometric)</p></li>
<li><p>Vérifier si il ny a pas de data leakage (ie je prends aussi les données de val et de test pour prédire ?)</p></li>
<li><p>Dé-bugger les simulations :</p>
<ul>
<li>✅ Inférence : Relancer simus dinférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, jai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -&gt; BUG, dois creuser mais juste des problèmes techniques -&gt; Visiblement il y a dautres problèmes que juste le plan de parallélisation.</li>
</ul></li>
<li><p><strong>Plutôt regarder pour introduire un modèle <span class="math inline">\delta</span>-colBiSBM</strong>.</p>
<ul>
<li>Ajouter le produit par <span class="math inline">\delta</span> là où nécessaire</li>
<li>Ajouter les modèles <span class="math inline">\delta</span>, <span class="math inline">\delta\pi, \dots</span> et les blocs conditionnels</li>
<li>Ajouter les tests unitaires adéquats et les vérifier</li>
</ul></li>
<li><p>🛑<strong>Dabord je lis la biblio dessus</strong> Regarder <em>Largest gap</em> sur réseaux Doré</p></li>
<li><p>Essayer <em>clustering</em> sur <code>supinfo</code></p></li>
<li><p>Homogénéiser notations dans les supplementaries</p></li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<section id="inférence-et-microbes" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</h3>
<ul>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>TabNet pratiquer les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
<section id="causalité" class="level4" data-number="1.1.1">
<h4 data-number="1.1.1" class="anchored" data-anchor-id="causalité"><span class="header-section-number">1.1.1</span> Causalité</h4>
<p>Plus sur le temps long, à regarder</p>
<ul>
<li>GT causalité</li>
<li>Daria Bystrova lire présentation <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span> (Meek rules, V-structure)</li>
</ul>
</section>
</section>
</section>
<section id="biblio-à-faire" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</h2>
<ul>
<li>Regarder Transport optimal graphes bipartite.</li>
<li>HDR VB, chapitre de modèle à blocs latents, bcp travaillé sur bipartite OT, comparaison clustering, adaption ARI, <em>Largest Gap</em></li>
</ul>
</section>
<section id="lectures-en-cours" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</h2>
<section id="ot" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="ot"><span class="header-section-number">3.1</span> OT</h3>
<ul>
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s.&nbsp;d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes | Regarder si regularization entropique ne marche pas bien pour le graphe.</li>
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s.&nbsp;d.b</a>)</span> Pour comprendre le problème dOT régularisé pour lentropie.</li>
<li><span class="citation" data-cites="nennaLecture1Monge">Nenna (<a href="#ref-nennaLecture1Monge" role="doc-biblioref">s.&nbsp;d.a</a>)</span></li>
</ul>
</section>
<section id="inférence-de-graphes" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="inférence-de-graphes"><span class="header-section-number">3.2</span> Inférence de graphes</h3>
<ul>
<li><p><span class="citation" data-cites="aitchisonStatisticalAnalysisCompositional1982a">Aitchison (<a href="#ref-aitchisonStatisticalAnalysisCompositional1982a" role="doc-biblioref">1982</a>)</span>, en cours</p></li>
<li><p>❗📖 <span class="citation" data-cites="payneFiniteMixturesMultivariate2023">Payne et al. (<a href="#ref-payneFiniteMixturesMultivariate2023" role="doc-biblioref">2023</a>)</span> sur MixMPLN</p></li>
</ul>
</section>
<section id="causalité-1" class="level3" data-number="3.3">
<h3 data-number="3.3" class="anchored" data-anchor-id="causalité-1"><span class="header-section-number">3.3</span> Causalité</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span></li>
</ul>
</section>
<section id="largest-gaps" class="level3" data-number="3.4">
<h3 data-number="3.4" class="anchored" data-anchor-id="largest-gaps"><span class="header-section-number">3.4</span> Largest Gaps</h3>
<ul>
<li><span class="citation" data-cites="braultGeneralisationLalgorithmeLargest">Brault, Channarond, et Robert (<a href="#ref-braultGeneralisationLalgorithmeLargest" role="doc-biblioref">s.&nbsp;d.</a>)</span> petit résumé de lalgo de <span class="citation" data-cites="braultFastConsistentAlgorithm2023">Brault et Channarond (<a href="#ref-braultFastConsistentAlgorithm2023" role="doc-biblioref">2023</a>)</span></li>
<li>❗📖 <span class="citation" data-cites="braultFastConsistentAlgorithm2023">Brault et Channarond (<a href="#ref-braultFastConsistentAlgorithm2023" role="doc-biblioref">2023</a>)</span></li>
<li>❗📖 <span class="citation" data-cites="channarondClassificationEstimationStochastic2012">Channarond, Daudin, et Robin (<a href="#ref-channarondClassificationEstimationStochastic2012" role="doc-biblioref">2012</a>)</span> le papier qui introduit le <em>Largest Gaps</em></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">4</span> A discuter</h2>
<section id="congés-ps" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</h3>
</section>
<section id="thèse" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="thèse"><span class="header-section-number">4.2</span> Thèse</h3>
<ul>
<li>Faire préz CSI</li>
<li>Faire rapport CSI</li>
</ul>
</section>
<section id="interprétation-écologiques-résultats-de-baldock" class="level3" data-number="4.3">
<h3 data-number="4.3" class="anchored" data-anchor-id="interprétation-écologiques-résultats-de-baldock"><span class="header-section-number">4.3</span> Interprétation écologiques résultats de Baldock</h3>
<ul>
<li>⌛ Point avec Elisa, <strong>oui on relance</strong></li>
</ul>
</section>
<section id="inférence" class="level3" data-number="4.4">
<h3 data-number="4.4" class="anchored" data-anchor-id="inférence"><span class="header-section-number">4.4</span> Inférence</h3>
<ul>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
</section>
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-aitchisonStatisticalAnalysisCompositional1982a" class="csl-entry" role="listitem">
Aitchison, J. 1982. <span>«&nbsp;The <span>Statistical Analysis</span> of <span>Compositional Data</span>&nbsp;»</span>. <em>Journal of the Royal Statistical Society. Series B (Methodological)</em> 44 (2): 13977. <a href="https://www.jstor.org/stable/2345821">https://www.jstor.org/stable/2345821</a>.
</div>
<div id="ref-braultFastConsistentAlgorithm2023" class="csl-entry" role="listitem">
Brault, Vincent, et Antoine Channarond. 2023. <span>«&nbsp;Fast and <span>Consistent Algorithm</span> for the <span>Latent Block Model</span>&nbsp;»</span>. 9 mars 2023. <a href="https://doi.org/10.48550/arXiv.1610.09005">https://doi.org/10.48550/arXiv.1610.09005</a>.
</div>
<div id="ref-braultGeneralisationLalgorithmeLargest" class="csl-entry" role="listitem">
Brault, Vincent, Antoine Channarond, et Valérie Robert. s.&nbsp;d. <span>«&nbsp;Généralisation de lalgorithme Largest Gaps pour le modèle des blocs latents non-paramétrique&nbsp;»</span>.
</div>
<div id="ref-bystrovaCausalDiscovery" class="csl-entry" role="listitem">
Bystrova, Daria. s.&nbsp;d. <span>«&nbsp;Causal Discovery&nbsp;»</span>.
</div>
<div id="ref-channarondClassificationEstimationStochastic2012" class="csl-entry" role="listitem">
Channarond, Antoine, Jean-Jacques Daudin, et Stéphane Robin. 2012. <span>«&nbsp;Classification and Estimation in the <span>Stochastic Blockmodel</span> Based on the Empirical Degrees&nbsp;»</span>. <em>Electronic Journal of Statistics</em> 6 (janvier). <a href="https://doi.org/10.1214/12-ejs753">https://doi.org/10.1214/12-ejs753</a>.
</div>
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s.&nbsp;d. <span>«&nbsp;Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs&nbsp;»</span>.
</div>
<div id="ref-nennaLecture1Monge" class="csl-entry" role="listitem">
Nenna, Luca. s.&nbsp;d.a. <span>«&nbsp;Lecture 1 <span>Monge</span> and <span>Kantorovich</span> Problems: From Primal to Dual&nbsp;»</span>.
</div>
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
———. s.&nbsp;d.b. <span>«&nbsp;Lecture 2: <span>Entropic Optimal Transport</span>&nbsp;»</span>.
</div>
<div id="ref-payneFiniteMixturesMultivariate2023" class="csl-entry" role="listitem">
Payne, Andrea, Anjali Silva, Steven J. Rothstein, Paul D. McNicholas, et Sanjeena Subedi. 2023. <span>«&nbsp;Finite <span>Mixtures</span> of <span>Multivariate Poisson-Log Normal Factor Analyzers</span> for <span>Clustering Count Data</span>&nbsp;»</span>. 13 novembre 2023. <a href="https://doi.org/10.48550/arXiv.2311.07762">https://doi.org/10.48550/arXiv.2311.07762</a>.
</div>
</div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,141 +0,0 @@
---
title: "Bilan semaine 28 2025 : 07 juillet - 11 juillet"
categories: [colBiSBM, inférence, GNN]
date: 2025-07-07
date-modified: 2025-07-11
bibliography: references.bib
---
## TODO List
- Pour clustering de collections sur données ~~réelles~~ :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- ❓Je n'arrive plus à reproduire le bug pour l'inférence...
- S'assurer que ça marche et relancer
- Creuser et explorer avec easy16s !
- ⌛ **Calcul du score F1**Revérifier que j'entraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant
- Ajouter au tableau comparatif sep BiSBM
- Regarder les codes Mangal database pour $\delta$
- ✅ Formules ci-dessous. Voir $\delta$ mais additif
:::{.callout-note}
### $\delta$ additif Bernoulli
En Bernoulli pas de forme analytique non plus :
Pour $\alpha_{qr}$:
$$ \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
$$\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0$$
Et pour $\delta_m$:
$$ \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
:::
:::{.callout-note}
### $\delta$ additif Poisson
Forme analytique mais risque de confusion ?
$$\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} $$
:::
- Attente retour Pierre pour faire d'autres clustering
- ✅ Implémenter décodeur Generalized Random Dot Product.
- ✅ Réimplémentation propre et évolutive du DeepBVGAE (suivi des guidelines PyTorch Geometric)
- Vérifier si il n'y a pas de data leakage (ie je prends aussi les données de val et de test pour prédire ?)
- Dé-bugger les simulations :
- ✅ Inférence : Relancer simus d'inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j'ai relancé avec M = 4 au lieu de M = 2.
En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d'autres problèmes que juste le plan de parallélisation.
- ⌛ **Plutôt regarder pour introduire un modèle $\delta$-colBiSBM**.
- Ajouter le produit par $\delta$ là où nécessaire
- Ajouter les modèles $\delta$, $\delta\pi, \dots$ et les blocs conditionnels
- Ajouter les tests unitaires adéquats et les vérifier
- 🛑**D'abord je lis la biblio dessus** Regarder *Largest gap* sur réseaux Doré
- Essayer *clustering* sur `supinfo`
- Homogénéiser notations dans les supplementaries
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Inférence et microbes
- 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)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
#### Causalité
Plus sur le temps long, à regarder
- GT causalité
- Daria Bystrova lire présentation @bystrovaCausalDiscovery (Meek rules, V-structure)
## Biblio à faire
- Regarder Transport optimal graphes bipartite.
- HDR VB, chapitre de modèle à blocs latents, bcp travaillé sur bipartite
OT, comparaison clustering, adaption ARI, *Largest Gap*
## Lectures en cours 📚
### 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
- ✅ @braultGeneralisationLalgorithmeLargest petit résumé de l'algo de @braultFastConsistentAlgorithm2023
- ❗📖 @braultFastConsistentAlgorithm2023
- ❗📖 @channarondClassificationEstimationStochastic2012 le papier qui introduit le *Largest Gaps*
## A discuter
### Congés P&S
### Thèse
- Faire préz CSI
- Faire rapport CSI
### Interprétation écologiques résultats de Baldock
- ⌛ Point avec Elisa, **oui on relance**
### Inférence
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS

View file

@ -1,144 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}
@article{nennaLecture1Monge,
title = {Lecture 1 {{Monge}} and {{Kantorovich}} Problems: From Primal to Dual},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-13T09:24:13.832Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/7LVQPD6D/Nenna - Lecture 1 Monge and Kantorovich problems from primal to dual.pdf}
}
@article{Morton2021.11.09.467939,
title = {Scalable Estimation of Microbial Co-Occurrence Networks with {{Variational Autoencoders}}},
author = {Morton, James T. and Silverman, Justin and Tikhonov, Gleb and Lähdesmäki, Harri and Bonneau, Rich},
date = {2021},
journaltitle = {bioRxiv : the preprint server for biology},
shortjournal = {bioRxiv},
eprint = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939.full.pdf},
publisher = {Cold Spring Harbor Laboratory},
doi = {10.1101/2021.11.09.467939},
url = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939},
abstract = {Estimating microbe-microbe interactions is critical for understanding the ecological laws governing microbial communities. Rapidly decreasing sequencing costs have promised new opportunities to estimate microbe-microbe interactions across thousands of uncultured, unknown microbes. However, typical microbiome datasets are very high dimensional and accurate estimation of microbial correlations requires tens of thousands of samples, exceeding the computational capabilities of existing methodologies. Furthermore, the vast majority of microbiome studies collect compositional metagenomics data which enforces a negative bias when computing microbe-microbe correlations. The Multinomial Logistic Normal (MLN) distribution has been shown to be effective at inferring microbe-microbe correlations, however scalable Bayesian inference of these distributions has remained elusive. Here, we show that carefully constructed Variational Autoencoders (VAEs) augmented with the Isometric Log-ratio (ILR) transform can estimate low-rank MLN distributions thousands of times faster than existing methods. These VAEs can be trained on tens of thousands of samples, enabling co-occurrence inference across tens of thousands of microbes without regularization. The latent embedding distances computed from these VAEs are competitive with existing beta-diversity methods across a variety of mouse and human microbiome classification and regression tasks, with notable improvements on longitudinal studies.Competing Interest StatementThe authors have declared no competing interest.},
elocation-id = {2021.11.09.467939},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-30T14:17:29.518Z}
}
@article{aitchisonStatisticalAnalysisCompositional1982a,
title = {The {{Statistical Analysis}} of {{Compositional Data}}},
author = {Aitchison, J.},
date = {1982},
journaltitle = {Journal of the Royal Statistical Society. Series B (Methodological)},
volume = {44},
number = {2},
eprint = {2345821},
eprinttype = {jstor},
pages = {139--177},
publisher = {[Royal Statistical Society, Oxford University Press]},
issn = {0035-9246},
url = {https://www.jstor.org/stable/2345821},
urldate = {2025-05-07},
abstract = {The simplex plays an important role as sample space in many practical situations where compositional data, in the form of proportions of some whole, require interpretation. It is argued that the statistical analysis of such data has proved difficult because of a lack both of concepts of independence and of rich enough parametric classes of distributions in the simplex. A variety of independence hypotheses are introduced and interrelated, and new classes of transformed-normal distributions in the simplex are provided as models within which the independence hypotheses can be tested through standard theory of parametric hypothesis testing. The new concepts and statistical methodology are illustrated by a number of applications.},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-05-07T07:43:38.485Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/S97URH4Y/Aitchison - 1982 - The Statistical Analysis of Compositional Data.pdf}
}
@online{payneFiniteMixturesMultivariate2023,
title = {Finite {{Mixtures}} of {{Multivariate Poisson-Log Normal Factor Analyzers}} for {{Clustering Count Data}}},
author = {Payne, Andrea and Silva, Anjali and Rothstein, Steven J. and McNicholas, Paul D. and Subedi, Sanjeena},
date = {2023-11-13},
eprint = {2311.07762},
eprinttype = {arXiv},
eprintclass = {stat},
doi = {10.48550/arXiv.2311.07762},
url = {http://arxiv.org/abs/2311.07762},
urldate = {2025-07-02},
abstract = {A mixture of multivariate Poisson-log normal factor analyzers is introduced by imposing constraints on the covariance matrix, which resulted in flexible models for clustering purposes. In particular, a class of eight parsimonious mixture models based on the mixtures of factor analyzers model are introduced. Variational Gaussian approximation is used for parameter estimation, and information criteria are used for model selection. The proposed models are explored in the context of clustering discrete data arising from RNA sequencing studies. Using real and simulated data, the models are shown to give favourable clustering performance. The GitHub R package for this work is available at https://github.com/anjalisilva/mixMPLNFA and is released under the open-source MIT license.},
pubstate = {prepublished},
keywords = {/unread,Statistics - Computation,Statistics - Machine Learning,Statistics - Methodology},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:31:47.579Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/BXVPEIDD/Payne et al. - 2023 - Finite Mixtures of Multivariate Poisson-Log Normal Factor Analyzers for Clustering Count Data.pdf;/home/louis/snap/zotero-snap/common/Zotero/storage/L5DAS5C2/2311.html}
}
@unpublished{bystrovaCausalDiscovery,
title = {Causal Discovery},
author = {Bystrova, Daria},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:34:39.476Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/NQE5DY92/Bystrova - Causal discovery.pdf}
}
@online{braultFastConsistentAlgorithm2023,
title = {Fast and {{Consistent Algorithm}} for the {{Latent Block Model}}},
author = {Brault, Vincent and Channarond, Antoine},
date = {2023-03-09},
eprint = {1610.09005},
eprinttype = {arXiv},
eprintclass = {math},
doi = {10.48550/arXiv.1610.09005},
url = {http://arxiv.org/abs/1610.09005},
urldate = {2025-07-09},
abstract = {The latent block model is used to simultaneously rank the rows and columns of a matrix to reveal a block structure. The algorithms used for estimation are often time consuming. However, recent work shows that the log-likelihood ratios are equivalent under the complete and observed (with unknown labels) models and the groups posterior distribution to converge as the size of the data increases to a Dirac mass located at the actual groups configuration. Based on these observations, the algorithm Largest Gaps is proposed in this paper to perform clustering using only the marginals of the matrix, when the number of blocks is very small with respect to the size of the whole matrix in the case of binary data. In addition, a model selection method is incorporated with a proof of its consistency. Thus, this paper shows that studying simplistic configurations (few blocks compared to the size of the matrix or very contrasting blocks) with complex algorithms is useless since the marginals already give very good parameter and classification estimates.},
langid = {english},
pubstate = {prepublished},
keywords = {/unread,Mathematics - Statistics Theory,Statistics - Computation,Statistics - Statistics Theory},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:58:53.533Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/5LXC6Y68/Brault et Channarond - 2023 - Fast and Consistent Algorithm for the Latent Block Model.pdf}
}
@article{braultGeneralisationLalgorithmeLargest,
title = {Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique},
author = {Brault, Vincent and Channarond, Antoine and Robert, Valérie},
abstract = {The latent block model assumes there exists a distribution for each crossing between an object cluster and a variable cluster of a data table ; the cells are supposed to be independent conditionally to the choice of these clusters. To estimate the model parameters, most of algorithms are time consuming. Brault and Channarond (2016) proposed to adapt the Largest Gaps algorithm which consists in using the margins. They thus obtained a procedure which estimates all the model parameters consistently but requires a large number of observations. In this talk, we will extend the procedure to the case of any distribution having a second order moment by using an EM algorithm estimation.},
langid = {french},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T12:29:43.098Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/GIUNC4L3/Brault et al. - Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique.pdf}
}
@article{channarondClassificationEstimationStochastic2012,
title = {Classification and Estimation in the {{Stochastic Blockmodel}} Based on the Empirical Degrees},
author = {Channarond, Antoine and Daudin, Jean-Jacques and Robin, Stéphane},
date = {2012-01-01},
journaltitle = {Electronic Journal of Statistics},
shortjournal = {Electron. J. Statist.},
volume = {6},
publisher = {Institute of Mathematical Statistics},
issn = {1935-7524},
doi = {10.1214/12-ejs753},
url = {https://projecteuclid.org/journals/electronic-journal-of-statistics/volume-6/issue-none/Classification-and-estimation-in-the-Stochastic-Blockmodel-based-on-the/10.1214/12-EJS753.full},
urldate = {2025-07-09},
abstract = {The Stochastic Blockmodel [16] is a mixture model for heterogeneous network data. Unlike the usual statistical framework, new nodes give additional information about the previous ones in this model. Thereby the distribution of the degrees concentrates in points conditionally on the node class. We show under a mild assumption that classification, estimation and model selection can actually be achieved with no more than the empirical degree data. We provide an algorithm able to process very large networks and consistent estimators based on it. In particular, we prove a bound of the probability of misclassification of at least one node, including when the number of classes grows.},
issue = {none},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:59:33.921Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/8TL8AJ2G/Channarond et al. - 2012 - Classification and estimation in the Stochastic Blockmodel based on the empirical degrees.pdf}
}

1771
suivi/2025-29/2025-29.html Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,478 +0,0 @@
---
title: "Bilan semaine 29 2025 : 15 juillet - 18 juillet"
categories: [colBiSBM, inférence, GNN]
date: 2025-07-15
date-modified: last-modified
bibliography: references.bib
---
## TODO List
- Pour clustering de collections sur données ~~réelles~~ :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- ❓Je n'arrive plus à reproduire le bug pour l'inférence...
- 😫 bug encore. S'assurer que ça marche et relancer
- ⌛ **En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues**.Revérifier que j'entraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant
Pour corriger cet effet :
- Donner la matrice identité comme features
- Corriger les degrés calculés.
- ✅ Ajouter au tableau comparatif sep BiSBM
- Pour s'assurer que colBiSBM marche, il faut comparer avec une proportion de :
- *Missing links*, ie des faux zéros
- *NA* en *Missing at random (MAR)*
- Faible performances de l'inférence :
- Vérifier que les conditions d'identifiabilité des modèles fautifs sont bien remplies.
- Récupérer des jeux de paramètres et essayer de reproduire les résultats.
- Clustering sur Doré :
- Désaggréger les réseaux et relancer le clustering sur certains auteurs.
- Regarder pour les couples date+nom les études et le nombre de réseaux analysables (Possible demander à Élisa)
- 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.
<table>
<caption>AUC values for colBiSBM, sep-BiSBM and VGAE models across cities</caption>
<thead>
<tr>
<th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="3"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">AUC</div></th>
</tr>
<tr>
<th style="text-align:left;"> City </th>
<th style="text-align:right;"> colBiSBM </th>
<th style="text-align:right;"> sep-BiSBM </th>
<th style="text-align:right;"> Untuned VGAE </th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"> Bristol </td>
<td style="text-align:right;"> 0.841 </td>
<td style="text-align:right;"> 0.824 </td>
<td style="text-align:right;"> 1 </td>
</tr>
<tr>
<td style="text-align:left;"> Edinburgh </td>
<td style="text-align:right;"> 0.882 </td>
<td style="text-align:right;"> 0.883 </td>
<td style="text-align:right;"> 1 </td>
</tr>
<tr>
<td style="text-align:left;"> Leeds </td>
<td style="text-align:right;"> 0.873 </td>
<td style="text-align:right;"> 0.852 </td>
<td style="text-align:right;"> 1 </td>
</tr>
<tr>
<td style="text-align:left;"> Reading </td>
<td style="text-align:right;"> 0.845 </td>
<td style="text-align:right;"> 0.837 </td>
<td style="text-align:right;"> 1 </td>
</tr>
</tbody>
</table>
- Regarder les codes Mangal database pour $\delta$
- Voir $\delta$ mais additif
:::{.callout-note}
### $\delta$ additif Bernoulli
En Bernoulli pas de forme analytique non plus :
Pour $\alpha_{qr}$:
$$ \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
$$\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0$$
Et pour $\delta_m$:
$$ \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
:::
:::{.callout-note}
### $\delta$ additif Poisson
Forme analytique mais risque de confusion ?
$$\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} $$
:::
- Attente retour Pierre pour faire d'autres clustering
- Regarder la liste des cours du MathSV et de l'Université Paris-Saclay.
- Inférence finie mais résultats pas fous:
<table class="table" style="font-size: 10px; margin-left: auto; margin-right: auto;">
<caption style="font-size: initial !important;">The proportion of dataset where the correct number of blocks is selected.</caption>
<thead>
<tr>
<th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:0px;padding-right:0px;text-align: center; " colspan="6"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">iid</div></th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:0px;padding-right:0px;text-align: center; " colspan="6"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">$\pi$</div></th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:0px;padding-right:0px;text-align: center; " colspan="6"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">$\rho$</div></th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:0px;padding-right:0px;text-align: center; " colspan="6"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">$\pi\rho$</div></th>
</tr>
<tr>
<th style="text-align:right;"> $\epsilon_{\alpha}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} \lt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} = 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} \gt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} \lt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} = 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} \gt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} \lt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} = 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} \gt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} \lt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} = 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} \gt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} \lt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} = 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} \gt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} \lt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} = 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} \gt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} \lt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} = 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_1} \gt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} \lt 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} = 4}$ </th>
<th style="text-align:left;"> $\bm{1}_{\widehat{Q_2} \gt 4}$ </th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:right;"> 0.00 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
</tr>
<tr>
<td style="text-align:right;"> 0.03 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
</tr>
<tr>
<td style="text-align:right;"> 0.06 </td>
<td style="text-align:left;"> 0.19 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.81 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.24 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.76 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.02 $\pm$ 0.01 </td>
<td style="text-align:left;"> 0.33 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.65 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.26 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.74 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.17 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.83 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.02 $\pm$ 0.01 </td>
<td style="text-align:left;"> 0.2 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.78 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.06 $\pm$ 0.02 </td>
<td style="text-align:left;"> 0.87 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.06 $\pm$ 0.02 </td>
<td style="text-align:left;"> 0.01 $\pm$ 0.01 </td>
<td style="text-align:left;"> 0.88 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.11 $\pm$ 0.03 </td>
</tr>
<tr>
<td style="text-align:right;"> 0.09 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.94 $\pm$ 0.02 </td>
<td style="text-align:left;"> 0.06 $\pm$ 0.02 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.91 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.09 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.1 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.9 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.13 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.87 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.87 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.13 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.87 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.13 $\pm$ 0.03 </td>
</tr>
<tr>
<td style="text-align:right;"> 0.12 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.94 $\pm$ 0.02 </td>
<td style="text-align:left;"> 0.06 $\pm$ 0.02 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.91 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.09 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.26 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.74 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.3 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.7 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.84 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.16 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.83 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.17 $\pm$ 0.04 </td>
</tr>
<tr>
<td style="text-align:right;"> 0.15 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.85 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.15 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.86 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.14 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.34 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.66 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.3 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.7 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.81 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.19 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.8 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.2 $\pm$ 0.04 </td>
</tr>
<tr>
<td style="text-align:right;"> 0.18 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.87 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.13 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.84 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.16 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.36 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.64 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.35 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.65 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.87 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.13 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.82 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.18 $\pm$ 0.04 </td>
</tr>
<tr>
<td style="text-align:right;"> 0.21 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.92 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.08 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.89 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.11 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.4 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.6 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.39 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.61 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.84 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.16 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.84 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.16 $\pm$ 0.04 </td>
</tr>
<tr>
<td style="text-align:right;"> 0.24 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.88 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.12 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.85 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.15 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.47 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.53 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 1 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.99 $\pm$ 0.01 </td>
<td style="text-align:left;"> 0.01 $\pm$ 0.01 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.4 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0.6 $\pm$ 0.05 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.85 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0.15 $\pm$ 0.03 </td>
<td style="text-align:left;"> 0 </td>
<td style="text-align:left;"> 0.82 $\pm$ 0.04 </td>
<td style="text-align:left;"> 0.18 $\pm$ 0.04 </td>
</tr>
</tbody>
</table>
- ⌛ **Plutôt regarder pour introduire un modèle $\delta$-colBiSBM**.
- Ajouter le produit par $\delta$ là où nécessaire
- Ajouter les modèles $\delta$, $\delta\pi, \dots$ et les blocs conditionnels
- Ajouter les tests unitaires adéquats et les vérifier
- Regarder *Largest gap* sur réseaux Doré
- Essayer *clustering* sur `supinfo`
- Homogénéiser notations dans les supplementaries
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
- Creuser et explorer avec easy16s !
### Inférence et microbes
- 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)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
#### Causalité
Plus sur le temps long, à regarder
- GT causalité
- Daria Bystrova lire présentation @bystrovaCausalDiscovery (Meek rules, V-structure)
## Biblio à faire
- Regarder Transport optimal graphes bipartite.
- HDR VB, chapitre de modèle à blocs latents, bcp travaillé sur bipartite
OT, comparaison clustering, adaption ARI, *Largest Gap*
## Lectures en cours 📚
### 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*
## A discuter
### Congés P&S
### Thèse
- Faire préz CSI
- Faire rapport CSI
### Interprétation écologiques résultats de Baldock
- ⌛ Point avec Elisa, **oui on relance**
### Inférence
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS

View file

@ -1,144 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}
@article{nennaLecture1Monge,
title = {Lecture 1 {{Monge}} and {{Kantorovich}} Problems: From Primal to Dual},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-13T09:24:13.832Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/7LVQPD6D/Nenna - Lecture 1 Monge and Kantorovich problems from primal to dual.pdf}
}
@article{Morton2021.11.09.467939,
title = {Scalable Estimation of Microbial Co-Occurrence Networks with {{Variational Autoencoders}}},
author = {Morton, James T. and Silverman, Justin and Tikhonov, Gleb and Lähdesmäki, Harri and Bonneau, Rich},
date = {2021},
journaltitle = {bioRxiv : the preprint server for biology},
shortjournal = {bioRxiv},
eprint = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939.full.pdf},
publisher = {Cold Spring Harbor Laboratory},
doi = {10.1101/2021.11.09.467939},
url = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939},
abstract = {Estimating microbe-microbe interactions is critical for understanding the ecological laws governing microbial communities. Rapidly decreasing sequencing costs have promised new opportunities to estimate microbe-microbe interactions across thousands of uncultured, unknown microbes. However, typical microbiome datasets are very high dimensional and accurate estimation of microbial correlations requires tens of thousands of samples, exceeding the computational capabilities of existing methodologies. Furthermore, the vast majority of microbiome studies collect compositional metagenomics data which enforces a negative bias when computing microbe-microbe correlations. The Multinomial Logistic Normal (MLN) distribution has been shown to be effective at inferring microbe-microbe correlations, however scalable Bayesian inference of these distributions has remained elusive. Here, we show that carefully constructed Variational Autoencoders (VAEs) augmented with the Isometric Log-ratio (ILR) transform can estimate low-rank MLN distributions thousands of times faster than existing methods. These VAEs can be trained on tens of thousands of samples, enabling co-occurrence inference across tens of thousands of microbes without regularization. The latent embedding distances computed from these VAEs are competitive with existing beta-diversity methods across a variety of mouse and human microbiome classification and regression tasks, with notable improvements on longitudinal studies.Competing Interest StatementThe authors have declared no competing interest.},
elocation-id = {2021.11.09.467939},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-30T14:17:29.518Z}
}
@article{aitchisonStatisticalAnalysisCompositional1982a,
title = {The {{Statistical Analysis}} of {{Compositional Data}}},
author = {Aitchison, J.},
date = {1982},
journaltitle = {Journal of the Royal Statistical Society. Series B (Methodological)},
volume = {44},
number = {2},
eprint = {2345821},
eprinttype = {jstor},
pages = {139--177},
publisher = {[Royal Statistical Society, Oxford University Press]},
issn = {0035-9246},
url = {https://www.jstor.org/stable/2345821},
urldate = {2025-05-07},
abstract = {The simplex plays an important role as sample space in many practical situations where compositional data, in the form of proportions of some whole, require interpretation. It is argued that the statistical analysis of such data has proved difficult because of a lack both of concepts of independence and of rich enough parametric classes of distributions in the simplex. A variety of independence hypotheses are introduced and interrelated, and new classes of transformed-normal distributions in the simplex are provided as models within which the independence hypotheses can be tested through standard theory of parametric hypothesis testing. The new concepts and statistical methodology are illustrated by a number of applications.},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-05-07T07:43:38.485Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/S97URH4Y/Aitchison - 1982 - The Statistical Analysis of Compositional Data.pdf}
}
@online{payneFiniteMixturesMultivariate2023,
title = {Finite {{Mixtures}} of {{Multivariate Poisson-Log Normal Factor Analyzers}} for {{Clustering Count Data}}},
author = {Payne, Andrea and Silva, Anjali and Rothstein, Steven J. and McNicholas, Paul D. and Subedi, Sanjeena},
date = {2023-11-13},
eprint = {2311.07762},
eprinttype = {arXiv},
eprintclass = {stat},
doi = {10.48550/arXiv.2311.07762},
url = {http://arxiv.org/abs/2311.07762},
urldate = {2025-07-02},
abstract = {A mixture of multivariate Poisson-log normal factor analyzers is introduced by imposing constraints on the covariance matrix, which resulted in flexible models for clustering purposes. In particular, a class of eight parsimonious mixture models based on the mixtures of factor analyzers model are introduced. Variational Gaussian approximation is used for parameter estimation, and information criteria are used for model selection. The proposed models are explored in the context of clustering discrete data arising from RNA sequencing studies. Using real and simulated data, the models are shown to give favourable clustering performance. The GitHub R package for this work is available at https://github.com/anjalisilva/mixMPLNFA and is released under the open-source MIT license.},
pubstate = {prepublished},
keywords = {/unread,Statistics - Computation,Statistics - Machine Learning,Statistics - Methodology},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:31:47.579Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/BXVPEIDD/Payne et al. - 2023 - Finite Mixtures of Multivariate Poisson-Log Normal Factor Analyzers for Clustering Count Data.pdf;/home/louis/snap/zotero-snap/common/Zotero/storage/L5DAS5C2/2311.html}
}
@unpublished{bystrovaCausalDiscovery,
title = {Causal Discovery},
author = {Bystrova, Daria},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:34:39.476Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/NQE5DY92/Bystrova - Causal discovery.pdf}
}
@online{braultFastConsistentAlgorithm2023,
title = {Fast and {{Consistent Algorithm}} for the {{Latent Block Model}}},
author = {Brault, Vincent and Channarond, Antoine},
date = {2023-03-09},
eprint = {1610.09005},
eprinttype = {arXiv},
eprintclass = {math},
doi = {10.48550/arXiv.1610.09005},
url = {http://arxiv.org/abs/1610.09005},
urldate = {2025-07-09},
abstract = {The latent block model is used to simultaneously rank the rows and columns of a matrix to reveal a block structure. The algorithms used for estimation are often time consuming. However, recent work shows that the log-likelihood ratios are equivalent under the complete and observed (with unknown labels) models and the groups posterior distribution to converge as the size of the data increases to a Dirac mass located at the actual groups configuration. Based on these observations, the algorithm Largest Gaps is proposed in this paper to perform clustering using only the marginals of the matrix, when the number of blocks is very small with respect to the size of the whole matrix in the case of binary data. In addition, a model selection method is incorporated with a proof of its consistency. Thus, this paper shows that studying simplistic configurations (few blocks compared to the size of the matrix or very contrasting blocks) with complex algorithms is useless since the marginals already give very good parameter and classification estimates.},
langid = {english},
pubstate = {prepublished},
keywords = {/unread,Mathematics - Statistics Theory,Statistics - Computation,Statistics - Statistics Theory},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:58:53.533Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/5LXC6Y68/Brault et Channarond - 2023 - Fast and Consistent Algorithm for the Latent Block Model.pdf}
}
@article{braultGeneralisationLalgorithmeLargest,
title = {Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique},
author = {Brault, Vincent and Channarond, Antoine and Robert, Valérie},
abstract = {The latent block model assumes there exists a distribution for each crossing between an object cluster and a variable cluster of a data table ; the cells are supposed to be independent conditionally to the choice of these clusters. To estimate the model parameters, most of algorithms are time consuming. Brault and Channarond (2016) proposed to adapt the Largest Gaps algorithm which consists in using the margins. They thus obtained a procedure which estimates all the model parameters consistently but requires a large number of observations. In this talk, we will extend the procedure to the case of any distribution having a second order moment by using an EM algorithm estimation.},
langid = {french},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T12:29:43.098Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/GIUNC4L3/Brault et al. - Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique.pdf}
}
@article{channarondClassificationEstimationStochastic2012,
title = {Classification and Estimation in the {{Stochastic Blockmodel}} Based on the Empirical Degrees},
author = {Channarond, Antoine and Daudin, Jean-Jacques and Robin, Stéphane},
date = {2012-01-01},
journaltitle = {Electronic Journal of Statistics},
shortjournal = {Electron. J. Statist.},
volume = {6},
publisher = {Institute of Mathematical Statistics},
issn = {1935-7524},
doi = {10.1214/12-ejs753},
url = {https://projecteuclid.org/journals/electronic-journal-of-statistics/volume-6/issue-none/Classification-and-estimation-in-the-Stochastic-Blockmodel-based-on-the/10.1214/12-EJS753.full},
urldate = {2025-07-09},
abstract = {The Stochastic Blockmodel [16] is a mixture model for heterogeneous network data. Unlike the usual statistical framework, new nodes give additional information about the previous ones in this model. Thereby the distribution of the degrees concentrates in points conditionally on the node class. We show under a mild assumption that classification, estimation and model selection can actually be achieved with no more than the empirical degree data. We provide an algorithm able to process very large networks and consistent estimators based on it. In particular, we prove a bound of the probability of misclassification of at least one node, including when the number of classes grows.},
issue = {none},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:59:33.921Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/8TL8AJ2G/Channarond et al. - 2012 - Classification and estimation in the Stochastic Blockmodel based on the empirical degrees.pdf}
}

924
suivi/2025-33/2025-33.html Normal file
View file

@ -0,0 +1,924 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 33 2025 : 11 août - 15 août Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script src="../../site_libs/quarto-contrib/glightbox/glightbox.min.js"></script>
<link href="../../site_libs/quarto-contrib/glightbox/glightbox.min.css" rel="stylesheet">
<link href="../../site_libs/quarto-contrib/glightbox/lightbox.css" rel="stylesheet">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 33 2025 : 11 août - 15 août</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">14 août 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list"><span class="header-section-number">1</span> TODO List</a>
<ul class="collapse">
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#biblio-à-faire" id="toc-biblio-à-faire" class="nav-link" data-scroll-target="#biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</a></li>
<li><a href="#lectures-en-cours" id="toc-lectures-en-cours" class="nav-link" data-scroll-target="#lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</a>
<ul class="collapse">
<li><a href="#hdr-vincent-brault" id="toc-hdr-vincent-brault" class="nav-link" data-scroll-target="#hdr-vincent-brault"><span class="header-section-number">3.1</span> HDR Vincent Brault</a></li>
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot"><span class="header-section-number">3.2</span> OT</a></li>
<li><a href="#inférence-de-graphes" id="toc-inférence-de-graphes" class="nav-link" data-scroll-target="#inférence-de-graphes"><span class="header-section-number">3.3</span> Inférence de graphes</a></li>
<li><a href="#causalité-1" id="toc-causalité-1" class="nav-link" data-scroll-target="#causalité-1"><span class="header-section-number">3.4</span> Causalité</a></li>
<li><a href="#largest-gaps" id="toc-largest-gaps" class="nav-link" data-scroll-target="#largest-gaps"><span class="header-section-number">3.5</span> Largest Gaps</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">4</span> A discuter</a>
<ul class="collapse">
<li><a href="#congés-ps" id="toc-congés-ps" class="nav-link" data-scroll-target="#congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</a></li>
<li><a href="#thèse" id="toc-thèse" class="nav-link" data-scroll-target="#thèse"><span class="header-section-number">4.2</span> Thèse</a></li>
<li><a href="#interprétation-écologiques-résultats-de-baldock" id="toc-interprétation-écologiques-résultats-de-baldock" class="nav-link" data-scroll-target="#interprétation-écologiques-résultats-de-baldock"><span class="header-section-number">4.3</span> Interprétation écologiques résultats de Baldock</a></li>
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">4.4</span> Inférence</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="todo-list" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="todo-list"><span class="header-section-number">1</span> TODO List</h2>
<ul>
<li><p>Pour clustering de collections sur données <del>réelles</del> :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.</p>
<ul>
<li>❓Je narrive plus à reproduire le bug pour linférence…</li>
<li>😫 bug encore. Sassurer que ça marche et relancer</li>
</ul></li>
<li><p><strong>En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues</strong>.Revérifier que jentraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant Pour corriger cet effet :</p>
<ul>
<li>Donner la matrice identité comme features</li>
<li>Corriger les degrés calculés.</li>
</ul></li>
<li><p>✅ Ajouter au tableau comparatif sep BiSBM</p></li>
<li><p>✅ Pour sassurer que colBiSBM marche, il faut comparer avec une proportion de :</p>
<ul>
<li><em>Missing links</em>, ie des faux zéros</li>
<li><em>NA</em> en <em>Missing at random (MAR)</em></li>
</ul>
<p><a href="figs/auc-model.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="figs/auc-model.png" class="img-fluid"></a></p></li>
<li><p>Faible performances de linférence :</p>
<ul>
<li>Vérifier que les conditions didentifiabilité des modèles fautifs sont bien remplies.</li>
<li>Récupérer des jeux de paramètres et essayer de reproduire les résultats.</li>
</ul></li>
<li><p>Clustering sur Doré :</p>
<ul>
<li>✅ Désaggréger les réseaux et relancer le clustering sur certains auteurs.</li>
<li>Regarder pour les couples date+nom les études et le nombre de réseaux analysables (Possible demander à Élisa)
<ul>
<li>⌛ Chamberlain et al semble intéressant à regarder !</li>
</ul></li>
<li>Clusteriser sur la base des noms et voir parmi les réseaux Européens (désagrégés ?)</li>
<li>Si M &gt; 10, alors voir si je retrouve les mêmes résultats que dans les études.</li>
</ul></li>
<li><p>Regarder les codes Mangal database pour <span class="math inline">\delta</span></p></li>
<li><p>Voir <span class="math inline">\delta</span> mais additif</p></li>
</ul>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Bernoulli
</div>
</div>
<div class="callout-body-container callout-body">
<p>En Bernoulli pas de forme analytique non plus : Pour <span class="math inline">\alpha_{qr}</span>: <span class="math display"> \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span> <span class="math display">\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0</span></p>
<p>Et pour <span class="math inline">\delta_m</span>: <span class="math display"> \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span></p>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Poisson
</div>
</div>
<div class="callout-body-container callout-body">
<p>Forme analytique mais risque de confusion ? <span class="math display">\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} </span></p>
</div>
</div>
<ul>
<li><p>Regarder la liste des cours du MathSV et de lUniversité Paris-Saclay.</p></li>
<li><p><strong>Plutôt regarder pour introduire un modèle <span class="math inline">\delta</span>-colBiSBM</strong>.</p>
<ul>
<li>Ajouter le produit par <span class="math inline">\delta</span> là où nécessaire</li>
<li>Ajouter les modèles <span class="math inline">\delta</span>, <span class="math inline">\delta\pi, \dots</span> et les blocs conditionnels</li>
<li>Ajouter les tests unitaires adéquats et les vérifier</li>
</ul></li>
<li><p>Regarder <em>Largest gap</em> sur réseaux Doré</p></li>
<li><p>Essayer <em>clustering</em> sur <code>supinfo</code></p></li>
<li><p>Homogénéiser notations dans les supplementaries</p></li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<section id="inférence-et-microbes" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</h3>
<ul>
<li>✅ Ouvert les donnés Compendium Europe avec easy16s, premières remarques : en dessous de famille peu dinformation</li>
<li>easy16s : se renseigner sur
<ul>
<li><span class="math inline">\alpha</span>, <span class="math inline">\beta</span> diversité</li>
<li>Heatmap</li>
</ul></li>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>TabNet pratiquer les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
<section id="causalité" class="level4" data-number="1.1.1">
<h4 data-number="1.1.1" class="anchored" data-anchor-id="causalité"><span class="header-section-number">1.1.1</span> Causalité</h4>
<p>Plus sur le temps long, à regarder</p>
<ul>
<li>GT causalité</li>
<li>Daria Bystrova lire présentation <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span> (Meek rules, V-structure)</li>
</ul>
</section>
</section>
</section>
<section id="biblio-à-faire" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</h2>
<ul>
<li>Regarder Transport optimal graphes bipartite.</li>
</ul>
</section>
<section id="lectures-en-cours" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</h2>
<section id="hdr-vincent-brault" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="hdr-vincent-brault"><span class="header-section-number">3.1</span> HDR Vincent Brault</h3>
<ul>
<li>✅ Intro : Présentation de toutes les recherches, très diversifiée et de lapplication aux propriétées théoriques en passant par des codes efficients. Creuser le lien entre <em>les modèles à var latentes et le transport optimal</em>. Le chap 4 a lair intéressant notamment le <strong>mélange de modèles de segmentation</strong>.</li>
<li>⌛ Chap 2 : Creuser lidé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</li>
<li>Chap 3</li>
</ul>
</section>
<section id="ot" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="ot"><span class="header-section-number">3.2</span> OT</h3>
<ul>
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s.&nbsp;d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes | Regarder si regularization entropique ne marche pas bien pour le graphe.</li>
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s.&nbsp;d.b</a>)</span> Pour comprendre le problème dOT régularisé pour lentropie.</li>
<li><span class="citation" data-cites="nennaLecture1Monge">Nenna (<a href="#ref-nennaLecture1Monge" role="doc-biblioref">s.&nbsp;d.a</a>)</span></li>
</ul>
</section>
<section id="inférence-de-graphes" class="level3" data-number="3.3">
<h3 data-number="3.3" class="anchored" data-anchor-id="inférence-de-graphes"><span class="header-section-number">3.3</span> Inférence de graphes</h3>
<ul>
<li><p><span class="citation" data-cites="aitchisonStatisticalAnalysisCompositional1982a">Aitchison (<a href="#ref-aitchisonStatisticalAnalysisCompositional1982a" role="doc-biblioref">1982</a>)</span>, en cours</p></li>
<li><p>❗📖 <span class="citation" data-cites="payneFiniteMixturesMultivariate2023">Payne et al. (<a href="#ref-payneFiniteMixturesMultivariate2023" role="doc-biblioref">2023</a>)</span> sur MixMPLN</p></li>
</ul>
</section>
<section id="causalité-1" class="level3" data-number="3.4">
<h3 data-number="3.4" class="anchored" data-anchor-id="causalité-1"><span class="header-section-number">3.4</span> Causalité</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span></li>
</ul>
</section>
<section id="largest-gaps" class="level3" data-number="3.5">
<h3 data-number="3.5" class="anchored" data-anchor-id="largest-gaps"><span class="header-section-number">3.5</span> Largest Gaps</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="braultFastConsistentAlgorithm2023">Brault et Channarond (<a href="#ref-braultFastConsistentAlgorithm2023" role="doc-biblioref">2023</a>)</span></li>
<li>❗📖 <span class="citation" data-cites="channarondClassificationEstimationStochastic2012">Channarond, Daudin, et Robin (<a href="#ref-channarondClassificationEstimationStochastic2012" role="doc-biblioref">2012</a>)</span> le papier qui introduit le <em>Largest Gaps</em></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">4</span> A discuter</h2>
<section id="congés-ps" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</h3>
</section>
<section id="thèse" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="thèse"><span class="header-section-number">4.2</span> Thèse</h3>
<ul>
<li>Faire préz CSI</li>
<li>Faire rapport CSI</li>
</ul>
</section>
<section id="interprétation-écologiques-résultats-de-baldock" class="level3" data-number="4.3">
<h3 data-number="4.3" class="anchored" data-anchor-id="interprétation-écologiques-résultats-de-baldock"><span class="header-section-number">4.3</span> Interprétation écologiques résultats de Baldock</h3>
<ul>
<li>⌛ Point avec Elisa, <strong>oui on relance</strong></li>
</ul>
</section>
<section id="inférence" class="level3" data-number="4.4">
<h3 data-number="4.4" class="anchored" data-anchor-id="inférence"><span class="header-section-number">4.4</span> Inférence</h3>
<ul>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
</section>
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-aitchisonStatisticalAnalysisCompositional1982a" class="csl-entry" role="listitem">
Aitchison, J. 1982. <span>«&nbsp;The <span>Statistical Analysis</span> of <span>Compositional Data</span>&nbsp;»</span>. <em>Journal of the Royal Statistical Society. Series B (Methodological)</em> 44 (2): 13977. <a href="https://www.jstor.org/stable/2345821">https://www.jstor.org/stable/2345821</a>.
</div>
<div id="ref-braultFastConsistentAlgorithm2023" class="csl-entry" role="listitem">
Brault, Vincent, et Antoine Channarond. 2023. <span>«&nbsp;Fast and <span>Consistent Algorithm</span> for the <span>Latent Block Model</span>&nbsp;»</span>. 9 mars 2023. <a href="https://doi.org/10.48550/arXiv.1610.09005">https://doi.org/10.48550/arXiv.1610.09005</a>.
</div>
<div id="ref-bystrovaCausalDiscovery" class="csl-entry" role="listitem">
Bystrova, Daria. s.&nbsp;d. <span>«&nbsp;Causal Discovery&nbsp;»</span>.
</div>
<div id="ref-channarondClassificationEstimationStochastic2012" class="csl-entry" role="listitem">
Channarond, Antoine, Jean-Jacques Daudin, et Stéphane Robin. 2012. <span>«&nbsp;Classification and Estimation in the <span>Stochastic Blockmodel</span> Based on the Empirical Degrees&nbsp;»</span>. <em>Electronic Journal of Statistics</em> 6 (janvier). <a href="https://doi.org/10.1214/12-ejs753">https://doi.org/10.1214/12-ejs753</a>.
</div>
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s.&nbsp;d. <span>«&nbsp;Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs&nbsp;»</span>.
</div>
<div id="ref-nennaLecture1Monge" class="csl-entry" role="listitem">
Nenna, Luca. s.&nbsp;d.a. <span>«&nbsp;Lecture 1 <span>Monge</span> and <span>Kantorovich</span> Problems: From Primal to Dual&nbsp;»</span>.
</div>
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
———. s.&nbsp;d.b. <span>«&nbsp;Lecture 2: <span>Entropic Optimal Transport</span>&nbsp;»</span>.
</div>
<div id="ref-payneFiniteMixturesMultivariate2023" class="csl-entry" role="listitem">
Payne, Andrea, Anjali Silva, Steven J. Rothstein, Paul D. McNicholas, et Sanjeena Subedi. 2023. <span>«&nbsp;Finite <span>Mixtures</span> of <span>Multivariate Poisson-Log Normal Factor Analyzers</span> for <span>Clustering Count Data</span>&nbsp;»</span>. 13 novembre 2023. <a href="https://doi.org/10.48550/arXiv.2311.07762">https://doi.org/10.48550/arXiv.2311.07762</a>.
</div>
</div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
<script>var lightboxQuarto = GLightbox({"closeEffect":"zoom","descPosition":"bottom","loop":false,"openEffect":"zoom","selector":".lightbox"});
(function() {
let previousOnload = window.onload;
window.onload = () => {
if (previousOnload) {
previousOnload();
}
lightboxQuarto.on('slide_before_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
const href = trigger.getAttribute('href');
if (href !== null) {
const imgEl = window.document.querySelector(`a[href="${href}"] img`);
if (imgEl !== null) {
const srcAttr = imgEl.getAttribute("src");
if (srcAttr && srcAttr.startsWith("data:")) {
slideConfig.href = srcAttr;
}
}
}
});
lightboxQuarto.on('slide_after_load', (data) => {
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(slideNode);
}
});
};
})();
</script>
</body></html>

View file

@ -1,158 +0,0 @@
---
title: "Bilan semaine 33 2025 : 11 août - 15 août"
categories: [colBiSBM, inférence, GNN]
date: 2025-08-14
date-modified: last-modified
bibliography: references.bib
---
## TODO List
- Pour clustering de collections sur données ~~réelles~~ :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- ❓Je n'arrive plus à reproduire le bug pour l'inférence...
- 😫 bug encore. S'assurer que ça marche et relancer
- ⌛ **En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues**.Revérifier que j'entraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant
Pour corriger cet effet :
- Donner la matrice identité comme features
- Corriger les degrés calculés.
- ✅ Ajouter au tableau comparatif sep BiSBM
- ✅ Pour s'assurer que colBiSBM marche, il faut comparer avec une proportion de :
- *Missing links*, ie des faux zéros
- *NA* en *Missing at random (MAR)*
![](figs/auc-model.png)
- Faible performances de l'inférence :
- Vérifier que les conditions d'identifiabilité des modèles fautifs sont bien remplies.
- Récupérer des jeux de paramètres et essayer de reproduire les résultats.
- Clustering sur Doré :
- ✅ Désaggréger les réseaux et relancer le clustering sur certains auteurs.
- 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 !
- 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 les codes Mangal database pour $\delta$
- Voir $\delta$ mais additif
:::{.callout-note}
### $\delta$ additif Bernoulli
En Bernoulli pas de forme analytique non plus :
Pour $\alpha_{qr}$:
$$ \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
$$\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0$$
Et pour $\delta_m$:
$$ \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
:::
:::{.callout-note}
### $\delta$ additif Poisson
Forme analytique mais risque de confusion ?
$$\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} $$
:::
- Regarder la liste des cours du MathSV et de l'Université Paris-Saclay.
- ⌛ **Plutôt regarder pour introduire un modèle $\delta$-colBiSBM**.
- Ajouter le produit par $\delta$ là où nécessaire
- Ajouter les modèles $\delta$, $\delta\pi, \dots$ et les blocs conditionnels
- Ajouter les tests unitaires adéquats et les vérifier
- Regarder *Largest gap* sur réseaux Doré
- Essayer *clustering* sur `supinfo`
- Homogénéiser notations dans les supplementaries
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Inférence et microbes
- ✅ Ouvert les donnés Compendium Europe avec easy16s, premières remarques : en dessous de famille peu d'information
- easy16s : se renseigner sur
- $\alpha$, $\beta$ diversité
- Heatmap
- 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)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
#### Causalité
Plus sur le temps long, à regarder
- GT causalité
- Daria Bystrova lire présentation @bystrovaCausalDiscovery (Meek rules, V-structure)
## Biblio à faire
- Regarder Transport optimal graphes bipartite.
## Lectures en cours 📚
### HDR Vincent Brault
- ✅ Intro : Présentation de toutes les recherches, très diversifiée et de l'application aux propriétées théoriques en passant par des codes efficients. Creuser le lien entre *les modèles à var latentes et le transport optimal*. Le chap 4 a l'air intéressant notamment le **mélange de modèles de segmentation**.
- ⌛ 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*
## A discuter
### Congés P&S
### Thèse
- Faire préz CSI
- Faire rapport CSI
### Interprétation écologiques résultats de Baldock
- ⌛ Point avec Elisa, **oui on relance**
### Inférence
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS

View file

@ -1,144 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}
@article{nennaLecture1Monge,
title = {Lecture 1 {{Monge}} and {{Kantorovich}} Problems: From Primal to Dual},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-13T09:24:13.832Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/7LVQPD6D/Nenna - Lecture 1 Monge and Kantorovich problems from primal to dual.pdf}
}
@article{Morton2021.11.09.467939,
title = {Scalable Estimation of Microbial Co-Occurrence Networks with {{Variational Autoencoders}}},
author = {Morton, James T. and Silverman, Justin and Tikhonov, Gleb and Lähdesmäki, Harri and Bonneau, Rich},
date = {2021},
journaltitle = {bioRxiv : the preprint server for biology},
shortjournal = {bioRxiv},
eprint = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939.full.pdf},
publisher = {Cold Spring Harbor Laboratory},
doi = {10.1101/2021.11.09.467939},
url = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939},
abstract = {Estimating microbe-microbe interactions is critical for understanding the ecological laws governing microbial communities. Rapidly decreasing sequencing costs have promised new opportunities to estimate microbe-microbe interactions across thousands of uncultured, unknown microbes. However, typical microbiome datasets are very high dimensional and accurate estimation of microbial correlations requires tens of thousands of samples, exceeding the computational capabilities of existing methodologies. Furthermore, the vast majority of microbiome studies collect compositional metagenomics data which enforces a negative bias when computing microbe-microbe correlations. The Multinomial Logistic Normal (MLN) distribution has been shown to be effective at inferring microbe-microbe correlations, however scalable Bayesian inference of these distributions has remained elusive. Here, we show that carefully constructed Variational Autoencoders (VAEs) augmented with the Isometric Log-ratio (ILR) transform can estimate low-rank MLN distributions thousands of times faster than existing methods. These VAEs can be trained on tens of thousands of samples, enabling co-occurrence inference across tens of thousands of microbes without regularization. The latent embedding distances computed from these VAEs are competitive with existing beta-diversity methods across a variety of mouse and human microbiome classification and regression tasks, with notable improvements on longitudinal studies.Competing Interest StatementThe authors have declared no competing interest.},
elocation-id = {2021.11.09.467939},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-30T14:17:29.518Z}
}
@article{aitchisonStatisticalAnalysisCompositional1982a,
title = {The {{Statistical Analysis}} of {{Compositional Data}}},
author = {Aitchison, J.},
date = {1982},
journaltitle = {Journal of the Royal Statistical Society. Series B (Methodological)},
volume = {44},
number = {2},
eprint = {2345821},
eprinttype = {jstor},
pages = {139--177},
publisher = {[Royal Statistical Society, Oxford University Press]},
issn = {0035-9246},
url = {https://www.jstor.org/stable/2345821},
urldate = {2025-05-07},
abstract = {The simplex plays an important role as sample space in many practical situations where compositional data, in the form of proportions of some whole, require interpretation. It is argued that the statistical analysis of such data has proved difficult because of a lack both of concepts of independence and of rich enough parametric classes of distributions in the simplex. A variety of independence hypotheses are introduced and interrelated, and new classes of transformed-normal distributions in the simplex are provided as models within which the independence hypotheses can be tested through standard theory of parametric hypothesis testing. The new concepts and statistical methodology are illustrated by a number of applications.},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-05-07T07:43:38.485Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/S97URH4Y/Aitchison - 1982 - The Statistical Analysis of Compositional Data.pdf}
}
@online{payneFiniteMixturesMultivariate2023,
title = {Finite {{Mixtures}} of {{Multivariate Poisson-Log Normal Factor Analyzers}} for {{Clustering Count Data}}},
author = {Payne, Andrea and Silva, Anjali and Rothstein, Steven J. and McNicholas, Paul D. and Subedi, Sanjeena},
date = {2023-11-13},
eprint = {2311.07762},
eprinttype = {arXiv},
eprintclass = {stat},
doi = {10.48550/arXiv.2311.07762},
url = {http://arxiv.org/abs/2311.07762},
urldate = {2025-07-02},
abstract = {A mixture of multivariate Poisson-log normal factor analyzers is introduced by imposing constraints on the covariance matrix, which resulted in flexible models for clustering purposes. In particular, a class of eight parsimonious mixture models based on the mixtures of factor analyzers model are introduced. Variational Gaussian approximation is used for parameter estimation, and information criteria are used for model selection. The proposed models are explored in the context of clustering discrete data arising from RNA sequencing studies. Using real and simulated data, the models are shown to give favourable clustering performance. The GitHub R package for this work is available at https://github.com/anjalisilva/mixMPLNFA and is released under the open-source MIT license.},
pubstate = {prepublished},
keywords = {/unread,Statistics - Computation,Statistics - Machine Learning,Statistics - Methodology},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:31:47.579Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/BXVPEIDD/Payne et al. - 2023 - Finite Mixtures of Multivariate Poisson-Log Normal Factor Analyzers for Clustering Count Data.pdf;/home/louis/snap/zotero-snap/common/Zotero/storage/L5DAS5C2/2311.html}
}
@unpublished{bystrovaCausalDiscovery,
title = {Causal Discovery},
author = {Bystrova, Daria},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:34:39.476Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/NQE5DY92/Bystrova - Causal discovery.pdf}
}
@online{braultFastConsistentAlgorithm2023,
title = {Fast and {{Consistent Algorithm}} for the {{Latent Block Model}}},
author = {Brault, Vincent and Channarond, Antoine},
date = {2023-03-09},
eprint = {1610.09005},
eprinttype = {arXiv},
eprintclass = {math},
doi = {10.48550/arXiv.1610.09005},
url = {http://arxiv.org/abs/1610.09005},
urldate = {2025-07-09},
abstract = {The latent block model is used to simultaneously rank the rows and columns of a matrix to reveal a block structure. The algorithms used for estimation are often time consuming. However, recent work shows that the log-likelihood ratios are equivalent under the complete and observed (with unknown labels) models and the groups posterior distribution to converge as the size of the data increases to a Dirac mass located at the actual groups configuration. Based on these observations, the algorithm Largest Gaps is proposed in this paper to perform clustering using only the marginals of the matrix, when the number of blocks is very small with respect to the size of the whole matrix in the case of binary data. In addition, a model selection method is incorporated with a proof of its consistency. Thus, this paper shows that studying simplistic configurations (few blocks compared to the size of the matrix or very contrasting blocks) with complex algorithms is useless since the marginals already give very good parameter and classification estimates.},
langid = {english},
pubstate = {prepublished},
keywords = {/unread,Mathematics - Statistics Theory,Statistics - Computation,Statistics - Statistics Theory},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:58:53.533Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/5LXC6Y68/Brault et Channarond - 2023 - Fast and Consistent Algorithm for the Latent Block Model.pdf}
}
@article{braultGeneralisationLalgorithmeLargest,
title = {Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique},
author = {Brault, Vincent and Channarond, Antoine and Robert, Valérie},
abstract = {The latent block model assumes there exists a distribution for each crossing between an object cluster and a variable cluster of a data table ; the cells are supposed to be independent conditionally to the choice of these clusters. To estimate the model parameters, most of algorithms are time consuming. Brault and Channarond (2016) proposed to adapt the Largest Gaps algorithm which consists in using the margins. They thus obtained a procedure which estimates all the model parameters consistently but requires a large number of observations. In this talk, we will extend the procedure to the case of any distribution having a second order moment by using an EM algorithm estimation.},
langid = {french},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T12:29:43.098Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/GIUNC4L3/Brault et al. - Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique.pdf}
}
@article{channarondClassificationEstimationStochastic2012,
title = {Classification and Estimation in the {{Stochastic Blockmodel}} Based on the Empirical Degrees},
author = {Channarond, Antoine and Daudin, Jean-Jacques and Robin, Stéphane},
date = {2012-01-01},
journaltitle = {Electronic Journal of Statistics},
shortjournal = {Electron. J. Statist.},
volume = {6},
publisher = {Institute of Mathematical Statistics},
issn = {1935-7524},
doi = {10.1214/12-ejs753},
url = {https://projecteuclid.org/journals/electronic-journal-of-statistics/volume-6/issue-none/Classification-and-estimation-in-the-Stochastic-Blockmodel-based-on-the/10.1214/12-EJS753.full},
urldate = {2025-07-09},
abstract = {The Stochastic Blockmodel [16] is a mixture model for heterogeneous network data. Unlike the usual statistical framework, new nodes give additional information about the previous ones in this model. Thereby the distribution of the degrees concentrates in points conditionally on the node class. We show under a mild assumption that classification, estimation and model selection can actually be achieved with no more than the empirical degree data. We provide an algorithm able to process very large networks and consistent estimators based on it. In particular, we prove a bound of the probability of misclassification of at least one node, including when the number of classes grows.},
issue = {none},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:59:33.921Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/8TL8AJ2G/Channarond et al. - 2012 - Classification and estimation in the Stochastic Blockmodel based on the empirical degrees.pdf}
}

873
suivi/2025-35/2025-35.html Normal file
View file

@ -0,0 +1,873 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 35 2025 : 25 août - 29 août Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 35 2025 : 25 août - 29 août</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">29 août 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list"><span class="header-section-number">1</span> TODO List</a>
<ul class="collapse">
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#biblio-à-faire" id="toc-biblio-à-faire" class="nav-link" data-scroll-target="#biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</a></li>
<li><a href="#lectures-en-cours" id="toc-lectures-en-cours" class="nav-link" data-scroll-target="#lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</a>
<ul class="collapse">
<li><a href="#hdr-vincent-brault" id="toc-hdr-vincent-brault" class="nav-link" data-scroll-target="#hdr-vincent-brault"><span class="header-section-number">3.1</span> HDR Vincent Brault</a></li>
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot"><span class="header-section-number">3.2</span> OT</a></li>
<li><a href="#inférence-de-graphes" id="toc-inférence-de-graphes" class="nav-link" data-scroll-target="#inférence-de-graphes"><span class="header-section-number">3.3</span> Inférence de graphes</a></li>
<li><a href="#causalité-1" id="toc-causalité-1" class="nav-link" data-scroll-target="#causalité-1"><span class="header-section-number">3.4</span> Causalité</a></li>
<li><a href="#largest-gaps" id="toc-largest-gaps" class="nav-link" data-scroll-target="#largest-gaps"><span class="header-section-number">3.5</span> Largest Gaps</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">4</span> A discuter</a>
<ul class="collapse">
<li><a href="#congés-ps" id="toc-congés-ps" class="nav-link" data-scroll-target="#congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</a></li>
<li><a href="#thèse" id="toc-thèse" class="nav-link" data-scroll-target="#thèse"><span class="header-section-number">4.2</span> Thèse</a></li>
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">4.3</span> Inférence</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="todo-list" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="todo-list"><span class="header-section-number">1</span> TODO List</h2>
<ul>
<li>Pour clustering de collections sur données <del>réelles</del> :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.
<ul>
<li>❓Je narrive plus à reproduire le bug pour linférence…</li>
<li>😫 bug encore. Sassurer que ça marche et relancer</li>
</ul></li>
<li>⌛ A Roscoff avec Julie et Pierre nous avons constaté que cétait lextraction des dyades pour le calcul des métriques qui était incorrecte. Maintenant cest corrigé et ça fonctionne ! En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues.Revérifier que jentraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant Pour corriger cet effet :
<ul>
<li>Donner la matrice identité comme features</li>
<li>Corriger les degrés calculés.</li>
</ul></li>
<li>Faible performances de linférence :
<ul>
<li>Vérifier que les conditions didentifiabilité des modèles fautifs sont bien remplies.</li>
<li>Récupérer des jeux de paramètres et essayer de reproduire les résultats.</li>
</ul></li>
<li>Clustering sur Doré :
<ul>
<li>Regarder pour les couples date+nom les études et le nombre de réseaux analysables (Possible demander à Élisa)
<ul>
<li>⌛ Chamberlain et al semble intéressant à regarder ! Voir le Rmarkdown</li>
</ul></li>
<li>Clusteriser sur la base des noms et voir parmi les réseaux Européens (désagrégés ?)</li>
<li>Si M &gt; 10, alors voir si je retrouve les mêmes résultats que dans les études.</li>
</ul></li>
<li>Regarder les codes Mangal database pour <span class="math inline">\delta</span></li>
<li>Voir <span class="math inline">\delta</span> mais additif</li>
</ul>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Bernoulli
</div>
</div>
<div class="callout-body-container callout-body">
<p>En Bernoulli pas de forme analytique non plus : Pour <span class="math inline">\alpha_{qr}</span>: <span class="math display"> \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span> <span class="math display">\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0</span></p>
<p>Et pour <span class="math inline">\delta_m</span>: <span class="math display"> \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span></p>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Poisson
</div>
</div>
<div class="callout-body-container callout-body">
<p>Forme analytique mais risque de confusion ? <span class="math display">\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} </span></p>
</div>
</div>
<ul>
<li><p>Regarder la liste des cours du MathSV et de lUniversité Paris-Saclay.</p></li>
<li><p><strong>Plutôt regarder pour introduire un modèle <span class="math inline">\delta</span>-colBiSBM</strong>.</p>
<ul>
<li>Ajouter le produit par <span class="math inline">\delta</span> là où nécessaire</li>
<li>Ajouter les modèles <span class="math inline">\delta</span>, <span class="math inline">\delta\pi, \dots</span> et les blocs conditionnels</li>
<li>Ajouter les tests unitaires adéquats et les vérifier</li>
</ul></li>
<li><p>Regarder <em>Largest gap</em> sur réseaux Doré</p></li>
<li><p>Essayer <em>clustering</em> sur <code>supinfo</code></p></li>
<li><p>Homogénéiser notations dans les supplementaries</p></li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<section id="inférence-et-microbes" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</h3>
<ul>
<li>easy16s : se renseigner sur
<ul>
<li><span class="math inline">\alpha</span>, <span class="math inline">\beta</span> diversité</li>
<li>Heatmap</li>
<li>Voir avec Mahendra à loccasion du CSI</li>
</ul></li>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>TabNet pratiquer les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
<section id="causalité" class="level4" data-number="1.1.1">
<h4 data-number="1.1.1" class="anchored" data-anchor-id="causalité"><span class="header-section-number">1.1.1</span> Causalité</h4>
<p>Plus sur le temps long, à regarder</p>
<ul>
<li>GT causalité</li>
<li>Daria Bystrova lire présentation <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span> (Meek rules, V-structure)</li>
</ul>
</section>
</section>
</section>
<section id="biblio-à-faire" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</h2>
<ul>
<li>Regarder Transport optimal graphes bipartite.</li>
</ul>
</section>
<section id="lectures-en-cours" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</h2>
<section id="hdr-vincent-brault" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="hdr-vincent-brault"><span class="header-section-number">3.1</span> HDR Vincent Brault</h3>
<ul>
<li>⌛ Chap 2 : Creuser lidé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</li>
<li>Chap 3</li>
</ul>
</section>
<section id="ot" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="ot"><span class="header-section-number">3.2</span> OT</h3>
<ul>
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s.&nbsp;d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes | Regarder si regularization entropique ne marche pas bien pour le graphe.</li>
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s.&nbsp;d.b</a>)</span> Pour comprendre le problème dOT régularisé pour lentropie.</li>
<li><span class="citation" data-cites="nennaLecture1Monge">Nenna (<a href="#ref-nennaLecture1Monge" role="doc-biblioref">s.&nbsp;d.a</a>)</span></li>
</ul>
</section>
<section id="inférence-de-graphes" class="level3" data-number="3.3">
<h3 data-number="3.3" class="anchored" data-anchor-id="inférence-de-graphes"><span class="header-section-number">3.3</span> Inférence de graphes</h3>
<ul>
<li><p><span class="citation" data-cites="aitchisonStatisticalAnalysisCompositional1982a">Aitchison (<a href="#ref-aitchisonStatisticalAnalysisCompositional1982a" role="doc-biblioref">1982</a>)</span>, en cours</p></li>
<li><p>❗📖 <span class="citation" data-cites="payneFiniteMixturesMultivariate2023">Payne et al. (<a href="#ref-payneFiniteMixturesMultivariate2023" role="doc-biblioref">2023</a>)</span> sur MixMPLN</p></li>
</ul>
</section>
<section id="causalité-1" class="level3" data-number="3.4">
<h3 data-number="3.4" class="anchored" data-anchor-id="causalité-1"><span class="header-section-number">3.4</span> Causalité</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span></li>
</ul>
</section>
<section id="largest-gaps" class="level3" data-number="3.5">
<h3 data-number="3.5" class="anchored" data-anchor-id="largest-gaps"><span class="header-section-number">3.5</span> Largest Gaps</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="braultFastConsistentAlgorithm2023">Brault et Channarond (<a href="#ref-braultFastConsistentAlgorithm2023" role="doc-biblioref">2023</a>)</span></li>
<li>❗📖 <span class="citation" data-cites="channarondClassificationEstimationStochastic2012">Channarond, Daudin, et Robin (<a href="#ref-channarondClassificationEstimationStochastic2012" role="doc-biblioref">2012</a>)</span> le papier qui introduit le <em>Largest Gaps</em></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">4</span> A discuter</h2>
<section id="congés-ps" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</h3>
</section>
<section id="thèse" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="thèse"><span class="header-section-number">4.2</span> Thèse</h3>
<ul>
<li>Faire préz CSI</li>
<li>Faire rapport CSI</li>
</ul>
</section>
<section id="inférence" class="level3" data-number="4.3">
<h3 data-number="4.3" class="anchored" data-anchor-id="inférence"><span class="header-section-number">4.3</span> Inférence</h3>
<ul>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
</section>
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-aitchisonStatisticalAnalysisCompositional1982a" class="csl-entry" role="listitem">
Aitchison, J. 1982. <span>«&nbsp;The <span>Statistical Analysis</span> of <span>Compositional Data</span>&nbsp;»</span>. <em>Journal of the Royal Statistical Society. Series B (Methodological)</em> 44 (2): 13977. <a href="https://www.jstor.org/stable/2345821">https://www.jstor.org/stable/2345821</a>.
</div>
<div id="ref-braultFastConsistentAlgorithm2023" class="csl-entry" role="listitem">
Brault, Vincent, et Antoine Channarond. 2023. <span>«&nbsp;Fast and <span>Consistent Algorithm</span> for the <span>Latent Block Model</span>&nbsp;»</span>. 9 mars 2023. <a href="https://doi.org/10.48550/arXiv.1610.09005">https://doi.org/10.48550/arXiv.1610.09005</a>.
</div>
<div id="ref-bystrovaCausalDiscovery" class="csl-entry" role="listitem">
Bystrova, Daria. s.&nbsp;d. <span>«&nbsp;Causal Discovery&nbsp;»</span>.
</div>
<div id="ref-channarondClassificationEstimationStochastic2012" class="csl-entry" role="listitem">
Channarond, Antoine, Jean-Jacques Daudin, et Stéphane Robin. 2012. <span>«&nbsp;Classification and Estimation in the <span>Stochastic Blockmodel</span> Based on the Empirical Degrees&nbsp;»</span>. <em>Electronic Journal of Statistics</em> 6 (janvier). <a href="https://doi.org/10.1214/12-ejs753">https://doi.org/10.1214/12-ejs753</a>.
</div>
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s.&nbsp;d. <span>«&nbsp;Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs&nbsp;»</span>.
</div>
<div id="ref-nennaLecture1Monge" class="csl-entry" role="listitem">
Nenna, Luca. s.&nbsp;d.a. <span>«&nbsp;Lecture 1 <span>Monge</span> and <span>Kantorovich</span> Problems: From Primal to Dual&nbsp;»</span>.
</div>
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
———. s.&nbsp;d.b. <span>«&nbsp;Lecture 2: <span>Entropic Optimal Transport</span>&nbsp;»</span>.
</div>
<div id="ref-payneFiniteMixturesMultivariate2023" class="csl-entry" role="listitem">
Payne, Andrea, Anjali Silva, Steven J. Rothstein, Paul D. McNicholas, et Sanjeena Subedi. 2023. <span>«&nbsp;Finite <span>Mixtures</span> of <span>Multivariate Poisson-Log Normal Factor Analyzers</span> for <span>Clustering Count Data</span>&nbsp;»</span>. 13 novembre 2023. <a href="https://doi.org/10.48550/arXiv.2311.07762">https://doi.org/10.48550/arXiv.2311.07762</a>.
</div>
</div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,147 +0,0 @@
---
title: "Bilan semaine 35 2025 : 25 août - 29 août"
categories: [colBiSBM, inférence, GNN]
date: 2025-08-29
date-modified: last-modified
bibliography: references.bib
---
## TODO List
- Pour clustering de collections sur données ~~réelles~~ :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- ❓Je n'arrive plus à reproduire le bug pour l'inférence...
- 😫 bug encore. S'assurer que ça marche et relancer
- ⌛ A Roscoff avec Julie et Pierre nous avons constaté que c'était l'extraction des dyades pour le calcul des métriques qui était incorrecte. Maintenant c'est corrigé et ça fonctionne !
En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues.Revérifier que j'entraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant
Pour corriger cet effet :
- Donner la matrice identité comme features
- Corriger les degrés calculés.
- Faible performances de l'inférence :
- Vérifier que les conditions d'identifiabilité des modèles fautifs sont bien remplies.
- Récupérer des jeux de paramètres et essayer de reproduire les résultats.
- 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 les codes Mangal database pour $\delta$
- Voir $\delta$ mais additif
:::{.callout-note}
### $\delta$ additif Bernoulli
En Bernoulli pas de forme analytique non plus :
Pour $\alpha_{qr}$:
$$ \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
$$\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0$$
Et pour $\delta_m$:
$$ \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
:::
:::{.callout-note}
### $\delta$ additif Poisson
Forme analytique mais risque de confusion ?
$$\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} $$
:::
- Regarder la liste des cours du MathSV et de l'Université Paris-Saclay.
- ⌛ **Plutôt regarder pour introduire un modèle $\delta$-colBiSBM**.
- Ajouter le produit par $\delta$ là où nécessaire
- Ajouter les modèles $\delta$, $\delta\pi, \dots$ et les blocs conditionnels
- Ajouter les tests unitaires adéquats et les vérifier
- Regarder *Largest gap* sur réseaux Doré
- Essayer *clustering* sur `supinfo`
- Homogénéiser notations dans les supplementaries
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Inférence et microbes
- easy16s : se renseigner sur
- $\alpha$, $\beta$ diversité
- Heatmap
- Voir avec Mahendra à l'occasion du CSI
- 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)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
#### Causalité
Plus sur le temps long, à regarder
- GT causalité
- Daria Bystrova lire présentation @bystrovaCausalDiscovery (Meek rules, V-structure)
## 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*
## A discuter
### Congés P&S
### Thèse
- Faire préz CSI
- Faire rapport CSI
### Inférence
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS

View file

@ -1,144 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}
@article{nennaLecture1Monge,
title = {Lecture 1 {{Monge}} and {{Kantorovich}} Problems: From Primal to Dual},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-13T09:24:13.832Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/7LVQPD6D/Nenna - Lecture 1 Monge and Kantorovich problems from primal to dual.pdf}
}
@article{Morton2021.11.09.467939,
title = {Scalable Estimation of Microbial Co-Occurrence Networks with {{Variational Autoencoders}}},
author = {Morton, James T. and Silverman, Justin and Tikhonov, Gleb and Lähdesmäki, Harri and Bonneau, Rich},
date = {2021},
journaltitle = {bioRxiv : the preprint server for biology},
shortjournal = {bioRxiv},
eprint = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939.full.pdf},
publisher = {Cold Spring Harbor Laboratory},
doi = {10.1101/2021.11.09.467939},
url = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939},
abstract = {Estimating microbe-microbe interactions is critical for understanding the ecological laws governing microbial communities. Rapidly decreasing sequencing costs have promised new opportunities to estimate microbe-microbe interactions across thousands of uncultured, unknown microbes. However, typical microbiome datasets are very high dimensional and accurate estimation of microbial correlations requires tens of thousands of samples, exceeding the computational capabilities of existing methodologies. Furthermore, the vast majority of microbiome studies collect compositional metagenomics data which enforces a negative bias when computing microbe-microbe correlations. The Multinomial Logistic Normal (MLN) distribution has been shown to be effective at inferring microbe-microbe correlations, however scalable Bayesian inference of these distributions has remained elusive. Here, we show that carefully constructed Variational Autoencoders (VAEs) augmented with the Isometric Log-ratio (ILR) transform can estimate low-rank MLN distributions thousands of times faster than existing methods. These VAEs can be trained on tens of thousands of samples, enabling co-occurrence inference across tens of thousands of microbes without regularization. The latent embedding distances computed from these VAEs are competitive with existing beta-diversity methods across a variety of mouse and human microbiome classification and regression tasks, with notable improvements on longitudinal studies.Competing Interest StatementThe authors have declared no competing interest.},
elocation-id = {2021.11.09.467939},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-30T14:17:29.518Z}
}
@article{aitchisonStatisticalAnalysisCompositional1982a,
title = {The {{Statistical Analysis}} of {{Compositional Data}}},
author = {Aitchison, J.},
date = {1982},
journaltitle = {Journal of the Royal Statistical Society. Series B (Methodological)},
volume = {44},
number = {2},
eprint = {2345821},
eprinttype = {jstor},
pages = {139--177},
publisher = {[Royal Statistical Society, Oxford University Press]},
issn = {0035-9246},
url = {https://www.jstor.org/stable/2345821},
urldate = {2025-05-07},
abstract = {The simplex plays an important role as sample space in many practical situations where compositional data, in the form of proportions of some whole, require interpretation. It is argued that the statistical analysis of such data has proved difficult because of a lack both of concepts of independence and of rich enough parametric classes of distributions in the simplex. A variety of independence hypotheses are introduced and interrelated, and new classes of transformed-normal distributions in the simplex are provided as models within which the independence hypotheses can be tested through standard theory of parametric hypothesis testing. The new concepts and statistical methodology are illustrated by a number of applications.},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-05-07T07:43:38.485Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/S97URH4Y/Aitchison - 1982 - The Statistical Analysis of Compositional Data.pdf}
}
@online{payneFiniteMixturesMultivariate2023,
title = {Finite {{Mixtures}} of {{Multivariate Poisson-Log Normal Factor Analyzers}} for {{Clustering Count Data}}},
author = {Payne, Andrea and Silva, Anjali and Rothstein, Steven J. and McNicholas, Paul D. and Subedi, Sanjeena},
date = {2023-11-13},
eprint = {2311.07762},
eprinttype = {arXiv},
eprintclass = {stat},
doi = {10.48550/arXiv.2311.07762},
url = {http://arxiv.org/abs/2311.07762},
urldate = {2025-07-02},
abstract = {A mixture of multivariate Poisson-log normal factor analyzers is introduced by imposing constraints on the covariance matrix, which resulted in flexible models for clustering purposes. In particular, a class of eight parsimonious mixture models based on the mixtures of factor analyzers model are introduced. Variational Gaussian approximation is used for parameter estimation, and information criteria are used for model selection. The proposed models are explored in the context of clustering discrete data arising from RNA sequencing studies. Using real and simulated data, the models are shown to give favourable clustering performance. The GitHub R package for this work is available at https://github.com/anjalisilva/mixMPLNFA and is released under the open-source MIT license.},
pubstate = {prepublished},
keywords = {/unread,Statistics - Computation,Statistics - Machine Learning,Statistics - Methodology},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:31:47.579Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/BXVPEIDD/Payne et al. - 2023 - Finite Mixtures of Multivariate Poisson-Log Normal Factor Analyzers for Clustering Count Data.pdf;/home/louis/snap/zotero-snap/common/Zotero/storage/L5DAS5C2/2311.html}
}
@unpublished{bystrovaCausalDiscovery,
title = {Causal Discovery},
author = {Bystrova, Daria},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:34:39.476Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/NQE5DY92/Bystrova - Causal discovery.pdf}
}
@online{braultFastConsistentAlgorithm2023,
title = {Fast and {{Consistent Algorithm}} for the {{Latent Block Model}}},
author = {Brault, Vincent and Channarond, Antoine},
date = {2023-03-09},
eprint = {1610.09005},
eprinttype = {arXiv},
eprintclass = {math},
doi = {10.48550/arXiv.1610.09005},
url = {http://arxiv.org/abs/1610.09005},
urldate = {2025-07-09},
abstract = {The latent block model is used to simultaneously rank the rows and columns of a matrix to reveal a block structure. The algorithms used for estimation are often time consuming. However, recent work shows that the log-likelihood ratios are equivalent under the complete and observed (with unknown labels) models and the groups posterior distribution to converge as the size of the data increases to a Dirac mass located at the actual groups configuration. Based on these observations, the algorithm Largest Gaps is proposed in this paper to perform clustering using only the marginals of the matrix, when the number of blocks is very small with respect to the size of the whole matrix in the case of binary data. In addition, a model selection method is incorporated with a proof of its consistency. Thus, this paper shows that studying simplistic configurations (few blocks compared to the size of the matrix or very contrasting blocks) with complex algorithms is useless since the marginals already give very good parameter and classification estimates.},
langid = {english},
pubstate = {prepublished},
keywords = {/unread,Mathematics - Statistics Theory,Statistics - Computation,Statistics - Statistics Theory},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:58:53.533Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/5LXC6Y68/Brault et Channarond - 2023 - Fast and Consistent Algorithm for the Latent Block Model.pdf}
}
@article{braultGeneralisationLalgorithmeLargest,
title = {Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique},
author = {Brault, Vincent and Channarond, Antoine and Robert, Valérie},
abstract = {The latent block model assumes there exists a distribution for each crossing between an object cluster and a variable cluster of a data table ; the cells are supposed to be independent conditionally to the choice of these clusters. To estimate the model parameters, most of algorithms are time consuming. Brault and Channarond (2016) proposed to adapt the Largest Gaps algorithm which consists in using the margins. They thus obtained a procedure which estimates all the model parameters consistently but requires a large number of observations. In this talk, we will extend the procedure to the case of any distribution having a second order moment by using an EM algorithm estimation.},
langid = {french},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T12:29:43.098Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/GIUNC4L3/Brault et al. - Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique.pdf}
}
@article{channarondClassificationEstimationStochastic2012,
title = {Classification and Estimation in the {{Stochastic Blockmodel}} Based on the Empirical Degrees},
author = {Channarond, Antoine and Daudin, Jean-Jacques and Robin, Stéphane},
date = {2012-01-01},
journaltitle = {Electronic Journal of Statistics},
shortjournal = {Electron. J. Statist.},
volume = {6},
publisher = {Institute of Mathematical Statistics},
issn = {1935-7524},
doi = {10.1214/12-ejs753},
url = {https://projecteuclid.org/journals/electronic-journal-of-statistics/volume-6/issue-none/Classification-and-estimation-in-the-Stochastic-Blockmodel-based-on-the/10.1214/12-EJS753.full},
urldate = {2025-07-09},
abstract = {The Stochastic Blockmodel [16] is a mixture model for heterogeneous network data. Unlike the usual statistical framework, new nodes give additional information about the previous ones in this model. Thereby the distribution of the degrees concentrates in points conditionally on the node class. We show under a mild assumption that classification, estimation and model selection can actually be achieved with no more than the empirical degree data. We provide an algorithm able to process very large networks and consistent estimators based on it. In particular, we prove a bound of the probability of misclassification of at least one node, including when the number of classes grows.},
issue = {none},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:59:33.921Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/8TL8AJ2G/Channarond et al. - 2012 - Classification and estimation in the Stochastic Blockmodel based on the empirical degrees.pdf}
}

869
suivi/2025-38/2025-38.html Normal file
View file

@ -0,0 +1,869 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 38 2025 : 15 septembre - 19 septembre Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 38 2025 : 15 septembre - 19 septembre</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">19 septembre 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list"><span class="header-section-number">1</span> TODO List</a>
<ul class="collapse">
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#biblio-à-faire" id="toc-biblio-à-faire" class="nav-link" data-scroll-target="#biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</a></li>
<li><a href="#lectures-en-cours" id="toc-lectures-en-cours" class="nav-link" data-scroll-target="#lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</a>
<ul class="collapse">
<li><a href="#hdr-vincent-brault" id="toc-hdr-vincent-brault" class="nav-link" data-scroll-target="#hdr-vincent-brault"><span class="header-section-number">3.1</span> HDR Vincent Brault</a></li>
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot"><span class="header-section-number">3.2</span> OT</a></li>
<li><a href="#inférence-de-graphes" id="toc-inférence-de-graphes" class="nav-link" data-scroll-target="#inférence-de-graphes"><span class="header-section-number">3.3</span> Inférence de graphes</a></li>
<li><a href="#causalité-1" id="toc-causalité-1" class="nav-link" data-scroll-target="#causalité-1"><span class="header-section-number">3.4</span> Causalité</a></li>
<li><a href="#largest-gaps" id="toc-largest-gaps" class="nav-link" data-scroll-target="#largest-gaps"><span class="header-section-number">3.5</span> Largest Gaps</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">4</span> A discuter</a>
<ul class="collapse">
<li><a href="#congés-ps" id="toc-congés-ps" class="nav-link" data-scroll-target="#congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</a></li>
<li><a href="#thèse" id="toc-thèse" class="nav-link" data-scroll-target="#thèse"><span class="header-section-number">4.2</span> Thèse</a></li>
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">4.3</span> Inférence</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="todo-list" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="todo-list"><span class="header-section-number">1</span> TODO List</h2>
<ul>
<li>Pour clustering de collections sur données <del>réelles</del> :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.
<ul>
<li>❓Je narrive plus à reproduire le bug pour linférence…</li>
<li>😫 bug encore. Sassurer que ça marche et relancer</li>
</ul></li>
<li>⌛ A Roscoff avec Julie et Pierre nous avons constaté que cétait lextraction des dyades pour le calcul des métriques qui était incorrecte. Maintenant cest corrigé et ça fonctionne ! En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues.Revérifier que jentraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant Pour corriger cet effet :
<ul>
<li>Donner la matrice identité comme features</li>
<li>Corriger les degrés calculés.</li>
</ul></li>
<li>⚠️ Discuter intersection simulations</li>
<li>Clustering sur Doré :
<ul>
<li>Regarder pour les couples date+nom les études et le nombre de réseaux analysables (Possible demander à Élisa)
<ul>
<li>⌛ Chamberlain et al semble intéressant à regarder ! Voir le Rmarkdown</li>
</ul></li>
<li>Clusteriser sur la base des noms et voir parmi les réseaux Européens (désagrégés ?)</li>
<li>Si M &gt; 10, alors voir si je retrouve les mêmes résultats que dans les études.</li>
</ul></li>
<li>Regarder les codes Mangal database pour <span class="math inline">\delta</span></li>
<li>Voir <span class="math inline">\delta</span> mais additif</li>
</ul>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Bernoulli
</div>
</div>
<div class="callout-body-container callout-body">
<p>En Bernoulli pas de forme analytique non plus : Pour <span class="math inline">\alpha_{qr}</span>: <span class="math display"> \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span> <span class="math display">\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0</span></p>
<p>Et pour <span class="math inline">\delta_m</span>: <span class="math display"> \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span></p>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Poisson
</div>
</div>
<div class="callout-body-container callout-body">
<p>Forme analytique mais risque de confusion ? <span class="math display">\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} </span></p>
</div>
</div>
<ul>
<li><p>Regarder la liste des cours du MathSV et de lUniversité Paris-Saclay.</p></li>
<li><p><strong>Plutôt regarder pour introduire un modèle <span class="math inline">\delta</span>-colBiSBM</strong>.</p>
<ul>
<li>Ajouter le produit par <span class="math inline">\delta</span> là où nécessaire</li>
<li>Ajouter les modèles <span class="math inline">\delta</span>, <span class="math inline">\delta\pi, \dots</span> et les blocs conditionnels</li>
<li>Ajouter les tests unitaires adéquats et les vérifier</li>
</ul></li>
<li><p>Regarder <em>Largest gap</em> sur réseaux Doré</p></li>
<li><p>Essayer <em>clustering</em> sur <code>supinfo</code></p></li>
<li><p>Homogénéiser notations dans les supplementaries</p></li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<section id="inférence-et-microbes" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</h3>
<ul>
<li>easy16s : se renseigner sur
<ul>
<li><span class="math inline">\alpha</span>, <span class="math inline">\beta</span> diversité</li>
<li>Heatmap</li>
<li>Voir avec Mahendra à loccasion du CSI</li>
</ul></li>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>TabNet pratiquer les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
<section id="causalité" class="level4" data-number="1.1.1">
<h4 data-number="1.1.1" class="anchored" data-anchor-id="causalité"><span class="header-section-number">1.1.1</span> Causalité</h4>
<p>Plus sur le temps long, à regarder</p>
<ul>
<li>GT causalité</li>
<li>Daria Bystrova lire présentation <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span> (Meek rules, V-structure)</li>
</ul>
</section>
</section>
</section>
<section id="biblio-à-faire" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</h2>
<ul>
<li>Regarder Transport optimal graphes bipartite.</li>
</ul>
</section>
<section id="lectures-en-cours" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</h2>
<section id="hdr-vincent-brault" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="hdr-vincent-brault"><span class="header-section-number">3.1</span> HDR Vincent Brault</h3>
<ul>
<li>⌛ Chap 2 : Creuser lidé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</li>
<li>Chap 3</li>
</ul>
</section>
<section id="ot" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="ot"><span class="header-section-number">3.2</span> OT</h3>
<ul>
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s.&nbsp;d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes | Regarder si regularization entropique ne marche pas bien pour le graphe.</li>
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s.&nbsp;d.b</a>)</span> Pour comprendre le problème dOT régularisé pour lentropie.</li>
<li><span class="citation" data-cites="nennaLecture1Monge">Nenna (<a href="#ref-nennaLecture1Monge" role="doc-biblioref">s.&nbsp;d.a</a>)</span></li>
</ul>
</section>
<section id="inférence-de-graphes" class="level3" data-number="3.3">
<h3 data-number="3.3" class="anchored" data-anchor-id="inférence-de-graphes"><span class="header-section-number">3.3</span> Inférence de graphes</h3>
<ul>
<li><p><span class="citation" data-cites="aitchisonStatisticalAnalysisCompositional1982a">Aitchison (<a href="#ref-aitchisonStatisticalAnalysisCompositional1982a" role="doc-biblioref">1982</a>)</span>, en cours</p></li>
<li><p>❗📖 <span class="citation" data-cites="payneFiniteMixturesMultivariate2023">Payne et al. (<a href="#ref-payneFiniteMixturesMultivariate2023" role="doc-biblioref">2023</a>)</span> sur MixMPLN</p></li>
</ul>
</section>
<section id="causalité-1" class="level3" data-number="3.4">
<h3 data-number="3.4" class="anchored" data-anchor-id="causalité-1"><span class="header-section-number">3.4</span> Causalité</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span></li>
</ul>
</section>
<section id="largest-gaps" class="level3" data-number="3.5">
<h3 data-number="3.5" class="anchored" data-anchor-id="largest-gaps"><span class="header-section-number">3.5</span> Largest Gaps</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="braultFastConsistentAlgorithm2023">Brault et Channarond (<a href="#ref-braultFastConsistentAlgorithm2023" role="doc-biblioref">2023</a>)</span></li>
<li>❗📖 <span class="citation" data-cites="channarondClassificationEstimationStochastic2012">Channarond, Daudin, et Robin (<a href="#ref-channarondClassificationEstimationStochastic2012" role="doc-biblioref">2012</a>)</span> le papier qui introduit le <em>Largest Gaps</em></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">4</span> A discuter</h2>
<section id="congés-ps" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</h3>
</section>
<section id="thèse" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="thèse"><span class="header-section-number">4.2</span> Thèse</h3>
<ul>
<li>Faire préz CSI</li>
<li>Faire rapport CSI</li>
</ul>
</section>
<section id="inférence" class="level3" data-number="4.3">
<h3 data-number="4.3" class="anchored" data-anchor-id="inférence"><span class="header-section-number">4.3</span> Inférence</h3>
<ul>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
</section>
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-aitchisonStatisticalAnalysisCompositional1982a" class="csl-entry" role="listitem">
Aitchison, J. 1982. <span>«&nbsp;The <span>Statistical Analysis</span> of <span>Compositional Data</span>&nbsp;»</span>. <em>Journal of the Royal Statistical Society. Series B (Methodological)</em> 44 (2): 13977. <a href="https://www.jstor.org/stable/2345821">https://www.jstor.org/stable/2345821</a>.
</div>
<div id="ref-braultFastConsistentAlgorithm2023" class="csl-entry" role="listitem">
Brault, Vincent, et Antoine Channarond. 2023. <span>«&nbsp;Fast and <span>Consistent Algorithm</span> for the <span>Latent Block Model</span>&nbsp;»</span>. 9 mars 2023. <a href="https://doi.org/10.48550/arXiv.1610.09005">https://doi.org/10.48550/arXiv.1610.09005</a>.
</div>
<div id="ref-bystrovaCausalDiscovery" class="csl-entry" role="listitem">
Bystrova, Daria. s.&nbsp;d. <span>«&nbsp;Causal Discovery&nbsp;»</span>.
</div>
<div id="ref-channarondClassificationEstimationStochastic2012" class="csl-entry" role="listitem">
Channarond, Antoine, Jean-Jacques Daudin, et Stéphane Robin. 2012. <span>«&nbsp;Classification and Estimation in the <span>Stochastic Blockmodel</span> Based on the Empirical Degrees&nbsp;»</span>. <em>Electronic Journal of Statistics</em> 6 (janvier). <a href="https://doi.org/10.1214/12-ejs753">https://doi.org/10.1214/12-ejs753</a>.
</div>
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s.&nbsp;d. <span>«&nbsp;Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs&nbsp;»</span>.
</div>
<div id="ref-nennaLecture1Monge" class="csl-entry" role="listitem">
Nenna, Luca. s.&nbsp;d.a. <span>«&nbsp;Lecture 1 <span>Monge</span> and <span>Kantorovich</span> Problems: From Primal to Dual&nbsp;»</span>.
</div>
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
———. s.&nbsp;d.b. <span>«&nbsp;Lecture 2: <span>Entropic Optimal Transport</span>&nbsp;»</span>.
</div>
<div id="ref-payneFiniteMixturesMultivariate2023" class="csl-entry" role="listitem">
Payne, Andrea, Anjali Silva, Steven J. Rothstein, Paul D. McNicholas, et Sanjeena Subedi. 2023. <span>«&nbsp;Finite <span>Mixtures</span> of <span>Multivariate Poisson-Log Normal Factor Analyzers</span> for <span>Clustering Count Data</span>&nbsp;»</span>. 13 novembre 2023. <a href="https://doi.org/10.48550/arXiv.2311.07762">https://doi.org/10.48550/arXiv.2311.07762</a>.
</div>
</div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,144 +0,0 @@
---
title: "Bilan semaine 38 2025 : 15 septembre - 19 septembre"
categories: [colBiSBM, inférence, GNN]
date: 2025-09-19
date-modified: last-modified
bibliography: references.bib
---
## TODO List
- Pour clustering de collections sur données ~~réelles~~ :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- ❓Je n'arrive plus à reproduire le bug pour l'inférence...
- 😫 bug encore. S'assurer que ça marche et relancer
- ⌛ A Roscoff avec Julie et Pierre nous avons constaté que c'était l'extraction des dyades pour le calcul des métriques qui était incorrecte. Maintenant c'est corrigé et ça fonctionne !
En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues.Revérifier que j'entraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant
Pour corriger cet effet :
- Donner la matrice identité comme features
- Corriger les degrés calculés.
- ⚠️ Discuter intersection simulations
- 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 les codes Mangal database pour $\delta$
- Voir $\delta$ mais additif
:::{.callout-note}
### $\delta$ additif Bernoulli
En Bernoulli pas de forme analytique non plus :
Pour $\alpha_{qr}$:
$$ \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
$$\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0$$
Et pour $\delta_m$:
$$ \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
:::
:::{.callout-note}
### $\delta$ additif Poisson
Forme analytique mais risque de confusion ?
$$\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} $$
:::
- Regarder la liste des cours du MathSV et de l'Université Paris-Saclay.
- ⌛ **Plutôt regarder pour introduire un modèle $\delta$-colBiSBM**.
- Ajouter le produit par $\delta$ là où nécessaire
- Ajouter les modèles $\delta$, $\delta\pi, \dots$ et les blocs conditionnels
- Ajouter les tests unitaires adéquats et les vérifier
- Regarder *Largest gap* sur réseaux Doré
- Essayer *clustering* sur `supinfo`
- Homogénéiser notations dans les supplementaries
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Inférence et microbes
- easy16s : se renseigner sur
- $\alpha$, $\beta$ diversité
- Heatmap
- Voir avec Mahendra à l'occasion du CSI
- 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)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
#### Causalité
Plus sur le temps long, à regarder
- GT causalité
- Daria Bystrova lire présentation @bystrovaCausalDiscovery (Meek rules, V-structure)
## 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*
## A discuter
### Congés P&S
### Thèse
- Faire préz CSI
- Faire rapport CSI
### Inférence
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS

View file

@ -1,144 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}
@article{nennaLecture1Monge,
title = {Lecture 1 {{Monge}} and {{Kantorovich}} Problems: From Primal to Dual},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-13T09:24:13.832Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/7LVQPD6D/Nenna - Lecture 1 Monge and Kantorovich problems from primal to dual.pdf}
}
@article{Morton2021.11.09.467939,
title = {Scalable Estimation of Microbial Co-Occurrence Networks with {{Variational Autoencoders}}},
author = {Morton, James T. and Silverman, Justin and Tikhonov, Gleb and Lähdesmäki, Harri and Bonneau, Rich},
date = {2021},
journaltitle = {bioRxiv : the preprint server for biology},
shortjournal = {bioRxiv},
eprint = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939.full.pdf},
publisher = {Cold Spring Harbor Laboratory},
doi = {10.1101/2021.11.09.467939},
url = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939},
abstract = {Estimating microbe-microbe interactions is critical for understanding the ecological laws governing microbial communities. Rapidly decreasing sequencing costs have promised new opportunities to estimate microbe-microbe interactions across thousands of uncultured, unknown microbes. However, typical microbiome datasets are very high dimensional and accurate estimation of microbial correlations requires tens of thousands of samples, exceeding the computational capabilities of existing methodologies. Furthermore, the vast majority of microbiome studies collect compositional metagenomics data which enforces a negative bias when computing microbe-microbe correlations. The Multinomial Logistic Normal (MLN) distribution has been shown to be effective at inferring microbe-microbe correlations, however scalable Bayesian inference of these distributions has remained elusive. Here, we show that carefully constructed Variational Autoencoders (VAEs) augmented with the Isometric Log-ratio (ILR) transform can estimate low-rank MLN distributions thousands of times faster than existing methods. These VAEs can be trained on tens of thousands of samples, enabling co-occurrence inference across tens of thousands of microbes without regularization. The latent embedding distances computed from these VAEs are competitive with existing beta-diversity methods across a variety of mouse and human microbiome classification and regression tasks, with notable improvements on longitudinal studies.Competing Interest StatementThe authors have declared no competing interest.},
elocation-id = {2021.11.09.467939},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-30T14:17:29.518Z}
}
@article{aitchisonStatisticalAnalysisCompositional1982a,
title = {The {{Statistical Analysis}} of {{Compositional Data}}},
author = {Aitchison, J.},
date = {1982},
journaltitle = {Journal of the Royal Statistical Society. Series B (Methodological)},
volume = {44},
number = {2},
eprint = {2345821},
eprinttype = {jstor},
pages = {139--177},
publisher = {[Royal Statistical Society, Oxford University Press]},
issn = {0035-9246},
url = {https://www.jstor.org/stable/2345821},
urldate = {2025-05-07},
abstract = {The simplex plays an important role as sample space in many practical situations where compositional data, in the form of proportions of some whole, require interpretation. It is argued that the statistical analysis of such data has proved difficult because of a lack both of concepts of independence and of rich enough parametric classes of distributions in the simplex. A variety of independence hypotheses are introduced and interrelated, and new classes of transformed-normal distributions in the simplex are provided as models within which the independence hypotheses can be tested through standard theory of parametric hypothesis testing. The new concepts and statistical methodology are illustrated by a number of applications.},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-05-07T07:43:38.485Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/S97URH4Y/Aitchison - 1982 - The Statistical Analysis of Compositional Data.pdf}
}
@online{payneFiniteMixturesMultivariate2023,
title = {Finite {{Mixtures}} of {{Multivariate Poisson-Log Normal Factor Analyzers}} for {{Clustering Count Data}}},
author = {Payne, Andrea and Silva, Anjali and Rothstein, Steven J. and McNicholas, Paul D. and Subedi, Sanjeena},
date = {2023-11-13},
eprint = {2311.07762},
eprinttype = {arXiv},
eprintclass = {stat},
doi = {10.48550/arXiv.2311.07762},
url = {http://arxiv.org/abs/2311.07762},
urldate = {2025-07-02},
abstract = {A mixture of multivariate Poisson-log normal factor analyzers is introduced by imposing constraints on the covariance matrix, which resulted in flexible models for clustering purposes. In particular, a class of eight parsimonious mixture models based on the mixtures of factor analyzers model are introduced. Variational Gaussian approximation is used for parameter estimation, and information criteria are used for model selection. The proposed models are explored in the context of clustering discrete data arising from RNA sequencing studies. Using real and simulated data, the models are shown to give favourable clustering performance. The GitHub R package for this work is available at https://github.com/anjalisilva/mixMPLNFA and is released under the open-source MIT license.},
pubstate = {prepublished},
keywords = {/unread,Statistics - Computation,Statistics - Machine Learning,Statistics - Methodology},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:31:47.579Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/BXVPEIDD/Payne et al. - 2023 - Finite Mixtures of Multivariate Poisson-Log Normal Factor Analyzers for Clustering Count Data.pdf;/home/louis/snap/zotero-snap/common/Zotero/storage/L5DAS5C2/2311.html}
}
@unpublished{bystrovaCausalDiscovery,
title = {Causal Discovery},
author = {Bystrova, Daria},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:34:39.476Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/NQE5DY92/Bystrova - Causal discovery.pdf}
}
@online{braultFastConsistentAlgorithm2023,
title = {Fast and {{Consistent Algorithm}} for the {{Latent Block Model}}},
author = {Brault, Vincent and Channarond, Antoine},
date = {2023-03-09},
eprint = {1610.09005},
eprinttype = {arXiv},
eprintclass = {math},
doi = {10.48550/arXiv.1610.09005},
url = {http://arxiv.org/abs/1610.09005},
urldate = {2025-07-09},
abstract = {The latent block model is used to simultaneously rank the rows and columns of a matrix to reveal a block structure. The algorithms used for estimation are often time consuming. However, recent work shows that the log-likelihood ratios are equivalent under the complete and observed (with unknown labels) models and the groups posterior distribution to converge as the size of the data increases to a Dirac mass located at the actual groups configuration. Based on these observations, the algorithm Largest Gaps is proposed in this paper to perform clustering using only the marginals of the matrix, when the number of blocks is very small with respect to the size of the whole matrix in the case of binary data. In addition, a model selection method is incorporated with a proof of its consistency. Thus, this paper shows that studying simplistic configurations (few blocks compared to the size of the matrix or very contrasting blocks) with complex algorithms is useless since the marginals already give very good parameter and classification estimates.},
langid = {english},
pubstate = {prepublished},
keywords = {/unread,Mathematics - Statistics Theory,Statistics - Computation,Statistics - Statistics Theory},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:58:53.533Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/5LXC6Y68/Brault et Channarond - 2023 - Fast and Consistent Algorithm for the Latent Block Model.pdf}
}
@article{braultGeneralisationLalgorithmeLargest,
title = {Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique},
author = {Brault, Vincent and Channarond, Antoine and Robert, Valérie},
abstract = {The latent block model assumes there exists a distribution for each crossing between an object cluster and a variable cluster of a data table ; the cells are supposed to be independent conditionally to the choice of these clusters. To estimate the model parameters, most of algorithms are time consuming. Brault and Channarond (2016) proposed to adapt the Largest Gaps algorithm which consists in using the margins. They thus obtained a procedure which estimates all the model parameters consistently but requires a large number of observations. In this talk, we will extend the procedure to the case of any distribution having a second order moment by using an EM algorithm estimation.},
langid = {french},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T12:29:43.098Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/GIUNC4L3/Brault et al. - Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique.pdf}
}
@article{channarondClassificationEstimationStochastic2012,
title = {Classification and Estimation in the {{Stochastic Blockmodel}} Based on the Empirical Degrees},
author = {Channarond, Antoine and Daudin, Jean-Jacques and Robin, Stéphane},
date = {2012-01-01},
journaltitle = {Electronic Journal of Statistics},
shortjournal = {Electron. J. Statist.},
volume = {6},
publisher = {Institute of Mathematical Statistics},
issn = {1935-7524},
doi = {10.1214/12-ejs753},
url = {https://projecteuclid.org/journals/electronic-journal-of-statistics/volume-6/issue-none/Classification-and-estimation-in-the-Stochastic-Blockmodel-based-on-the/10.1214/12-EJS753.full},
urldate = {2025-07-09},
abstract = {The Stochastic Blockmodel [16] is a mixture model for heterogeneous network data. Unlike the usual statistical framework, new nodes give additional information about the previous ones in this model. Thereby the distribution of the degrees concentrates in points conditionally on the node class. We show under a mild assumption that classification, estimation and model selection can actually be achieved with no more than the empirical degree data. We provide an algorithm able to process very large networks and consistent estimators based on it. In particular, we prove a bound of the probability of misclassification of at least one node, including when the number of classes grows.},
issue = {none},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:59:33.921Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/8TL8AJ2G/Channarond et al. - 2012 - Classification and estimation in the Stochastic Blockmodel based on the empirical degrees.pdf}
}

889
suivi/2025-43/2025-43.html Normal file
View file

@ -0,0 +1,889 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.22">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste">
<title>Bilan semaine 43 2025 : 20 octobre - 24 octobre Suivi de la thèse</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
/* CSS for citations */
div.csl-bib-body { }
div.csl-entry {
clear: both;
margin-bottom: 0em;
}
.hanging-indent div.csl-entry {
margin-left:2em;
text-indent:-2em;
}
div.csl-left-margin {
min-width:2em;
float:left;
}
div.csl-right-inline {
margin-left:2em;
padding-left:1em;
}
div.csl-indent {
margin-left: 2em;
}</style>
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../../">
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="../../site_libs/quarto-html/popper.min.js"></script>
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 50,
"keyboard-shortcut": [
"f",
"/",
"s"
],
"show-item-context": false,
"language": {
"search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Effacer",
"search-text-placeholder": "",
"search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Envoyer",
"search-label": "Recherche"
}
}</script>
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}});
</script>
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
<script type="text/javascript">
const typesetMath = (el) => {
if (window.MathJax) {
// MathJax Typeset
window.MathJax.typeset([el]);
} else if (window.katex) {
// KaTeX Render
var mathElements = el.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
window.katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}
}
}
}
window.Quarto = {
typesetMath
};
</script>
</head>
<body class="nav-fixed quarto-light">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top quarto-banner">
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
<div class="navbar-container container-fluid">
<div class="navbar-brand-container mx-auto">
<a class="navbar-brand" href="../../index.html">
<span class="navbar-title">Suivi de la thèse</span>
</a>
</div>
<div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav navbar-nav-scroll me-auto">
<li class="nav-item">
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
</i>
<span class="menu-text">Liste des semaines</span></a>
</li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item compact">
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
</i>
<span class="menu-text"></span></a>
</li>
</ul>
</div> <!-- /navcollapse -->
<div class="quarto-navbar-tools">
</div>
</div> <!-- /container-fluid -->
</nav>
</header>
<!-- content -->
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
<div class="quarto-title-banner page-columns page-full">
<div class="quarto-title column-body">
<h1 class="title">Bilan semaine 43 2025 : 20 octobre - 24 octobre</h1>
<div class="quarto-categories">
<div class="quarto-category">colBiSBM</div>
<div class="quarto-category">inférence</div>
<div class="quarto-category">GNN</div>
</div>
</div>
</div>
<div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents">
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
</p>
</div>
</div>
<div class="quarto-title-meta">
<div>
<div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents">
<p class="date">20 octobre 2025</p>
</div>
</div>
<div>
<div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents">
<p class="date-modified">11 mai 2026</p>
</div>
</div>
</div>
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">Sur cette page</h2>
<ul>
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list"><span class="header-section-number">1</span> TODO List</a>
<ul class="collapse">
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</a></li>
</ul></li>
<li><a href="#biblio-à-faire" id="toc-biblio-à-faire" class="nav-link" data-scroll-target="#biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</a></li>
<li><a href="#lectures-en-cours" id="toc-lectures-en-cours" class="nav-link" data-scroll-target="#lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</a>
<ul class="collapse">
<li><a href="#hdr-vincent-brault" id="toc-hdr-vincent-brault" class="nav-link" data-scroll-target="#hdr-vincent-brault"><span class="header-section-number">3.1</span> HDR Vincent Brault</a></li>
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot"><span class="header-section-number">3.2</span> OT</a></li>
<li><a href="#inférence-de-graphes" id="toc-inférence-de-graphes" class="nav-link" data-scroll-target="#inférence-de-graphes"><span class="header-section-number">3.3</span> Inférence de graphes</a></li>
<li><a href="#causalité-1" id="toc-causalité-1" class="nav-link" data-scroll-target="#causalité-1"><span class="header-section-number">3.4</span> Causalité</a></li>
<li><a href="#largest-gaps" id="toc-largest-gaps" class="nav-link" data-scroll-target="#largest-gaps"><span class="header-section-number">3.5</span> Largest Gaps</a></li>
</ul></li>
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter"><span class="header-section-number">4</span> A discuter</a>
<ul class="collapse">
<li><a href="#congés-ps" id="toc-congés-ps" class="nav-link" data-scroll-target="#congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</a></li>
<li><a href="#thèse" id="toc-thèse" class="nav-link" data-scroll-target="#thèse"><span class="header-section-number">4.2</span> Thèse</a></li>
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence"><span class="header-section-number">4.3</span> Inférence</a></li>
</ul></li>
</ul>
</nav>
</div>
<!-- main -->
<main class="content quarto-banner-title-block" id="quarto-document-content">
<section id="todo-list" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="todo-list"><span class="header-section-number">1</span> TODO List</h2>
<ul>
<li><p>Finir le papier :</p>
<ul>
<li>Re-structurer le plan, mon plan, Donnet et Barbillon, échelle méso et comparaison inter réseau et noeuds non partagés.</li>
<li>✅ Écrire en annexe le BIC-L, faire attention à ajouter lentropie à la toute fin en mentionnant</li>
<li>⌛ Fusionner VGAE et information transfer (missing links seulement) donc refaire tourner sur même données quen R. A adapter pour Python et pouvoir intégrer dans la figure. (raccourcit).</li>
<li>Faire sep-VGAE (seulement sur le réseaux avec missing links) et VGAE avec les 4 réseaux. En train de reproduire les résultats, AUC stable autour de 0.7</li>
<li>Remplacer <em>Information tranfer on simu</em> par Network partitioning.</li>
<li>⌛ Écrire le poster avec un titre aguicheur “Are my pollinators your pollinators: …”: Commencé contenu à déterminer avec Pierre et Sophie</li>
</ul></li>
<li><p>Maitriser graphtools de Peixoto pour essayer dutiliser larbre taxonomique sur graphe de cooccurence inférer par SparCC</p></li>
<li><p>Maitriser SparCC</p></li>
<li><p>Faire LBM sur niveau taxonomique grossier, initialiser avec le résultat pour un niveau plus fin et ainsi de suite.</p></li>
<li><p>Clustering unipartite jai cassé une fonction de distance à vérifier et réparer</p></li>
</ul>
<!-- - Idée clustering unipartite graphes des métros
<div class="embed-container">
<iframe src="https://csun.uic.edu/wp-content/uploads/sites/1080/2023/12/pdf_7.pdf" width=100% height="475px" style="position: relative;">
</iframe>
</div> -->
<ul>
<li>Pour clustering de collections sur données <del>réelles</del> :<br>
→ Lintuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.
<ul>
<li>❓Je narrive plus à reproduire le bug pour linférence…</li>
<li>😫 bug encore. Sassurer que ça marche et relancer</li>
</ul></li>
<li>⌛ A Roscoff avec Julie et Pierre nous avons constaté que cétait lextraction des dyades pour le calcul des métriques qui était incorrecte. Maintenant cest corrigé et ça fonctionne ! En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues.Revérifier que jentraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant Pour corriger cet effet :
<ul>
<li>Donner la matrice identité comme features</li>
<li>Corriger les degrés calculés.</li>
</ul></li>
<li>⚠️ Discuter intersection simulations</li>
<li>Clustering sur Doré :
<ul>
<li>Regarder pour les couples date+nom les études et le nombre de réseaux analysables (Possible demander à Élisa)
<ul>
<li>⌛ Chamberlain et al semble intéressant à regarder ! Voir le Rmarkdown</li>
</ul></li>
<li>Clusteriser sur la base des noms et voir parmi les réseaux Européens (désagrégés ?)</li>
<li>Si M &gt; 10, alors voir si je retrouve les mêmes résultats que dans les études.</li>
</ul></li>
<li>Regarder les codes Mangal database pour <span class="math inline">\delta</span></li>
<li>Voir <span class="math inline">\delta</span> mais additif</li>
</ul>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Bernoulli
</div>
</div>
<div class="callout-body-container callout-body">
<p>En Bernoulli pas de forme analytique non plus : Pour <span class="math inline">\alpha_{qr}</span>: <span class="math display"> \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span> <span class="math display">\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0</span></p>
<p>Et pour <span class="math inline">\delta_m</span>: <span class="math display"> \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0</span></p>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="math inline">\delta</span> additif Poisson
</div>
</div>
<div class="callout-body-container callout-body">
<p>Forme analytique mais risque de confusion ? <span class="math display">\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} </span></p>
</div>
</div>
<ul>
<li><p>Regarder la liste des cours du MathSV et de lUniversité Paris-Saclay.</p></li>
<li><p><strong>Plutôt regarder pour introduire un modèle <span class="math inline">\delta</span>-colBiSBM</strong>.</p>
<ul>
<li>Ajouter le produit par <span class="math inline">\delta</span> là où nécessaire</li>
<li>Ajouter les modèles <span class="math inline">\delta</span>, <span class="math inline">\delta\pi, \dots</span> et les blocs conditionnels</li>
<li>Ajouter les tests unitaires adéquats et les vérifier</li>
</ul></li>
<li><p>Regarder <em>Largest gap</em> sur réseaux Doré</p></li>
<li><p>Essayer <em>clustering</em> sur <code>supinfo</code></p></li>
<li><p>Homogénéiser notations dans les supplementaries</p></li>
</ul>
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-ref figure">
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<ul>
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur lespace latent Jai commencé à regarder un peu</li>
</ul>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Reference&nbsp;1
</figcaption>
</figure>
</div>
<section id="inférence-et-microbes" class="level3" data-number="1.1">
<h3 data-number="1.1" class="anchored" data-anchor-id="inférence-et-microbes"><span class="header-section-number">1.1</span> Inférence et microbes</h3>
<ul>
<li>easy16s : se renseigner sur
<ul>
<li><span class="math inline">\alpha</span>, <span class="math inline">\beta</span> diversité</li>
<li>Heatmap</li>
<li>Voir avec Mahendra à loccasion du CSI</li>
</ul></li>
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
<li>TabNet pratiquer les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
<li>Regarder <strong>SPARTA</strong> Rennes</li>
<li>Lire Papiers compositional data (Aitchison et al.&nbsp;intro)</li>
<li>Lire article multi-niveaux Saint-Clair</li>
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
i \rightarrow &amp;~N^1_i \subseteq N^2_i \subseteq N^3_i &amp; \text{Taxonomie}\\
Z^0_i \overset{?}{=} &amp; Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i &amp; \text{Groupes fonctionnels}
\end{align*}</span></li>
</ul>
<section id="causalité" class="level4" data-number="1.1.1">
<h4 data-number="1.1.1" class="anchored" data-anchor-id="causalité"><span class="header-section-number">1.1.1</span> Causalité</h4>
<p>Plus sur le temps long, à regarder</p>
<ul>
<li>GT causalité</li>
<li>Daria Bystrova lire présentation <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span> (Meek rules, V-structure)</li>
</ul>
</section>
</section>
</section>
<section id="biblio-à-faire" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="biblio-à-faire"><span class="header-section-number">2</span> Biblio à faire</h2>
<ul>
<li>Regarder Transport optimal graphes bipartite.</li>
</ul>
</section>
<section id="lectures-en-cours" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="lectures-en-cours"><span class="header-section-number">3</span> Lectures en cours 📚</h2>
<section id="hdr-vincent-brault" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="hdr-vincent-brault"><span class="header-section-number">3.1</span> HDR Vincent Brault</h3>
<ul>
<li>⌛ Chap 2 : Creuser lidé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</li>
<li>Chap 3</li>
</ul>
</section>
<section id="ot" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="ot"><span class="header-section-number">3.2</span> OT</h3>
<ul>
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s.&nbsp;d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes | Regarder si regularization entropique ne marche pas bien pour le graphe.</li>
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s.&nbsp;d.b</a>)</span> Pour comprendre le problème dOT régularisé pour lentropie.</li>
<li><span class="citation" data-cites="nennaLecture1Monge">Nenna (<a href="#ref-nennaLecture1Monge" role="doc-biblioref">s.&nbsp;d.a</a>)</span></li>
</ul>
</section>
<section id="inférence-de-graphes" class="level3" data-number="3.3">
<h3 data-number="3.3" class="anchored" data-anchor-id="inférence-de-graphes"><span class="header-section-number">3.3</span> Inférence de graphes</h3>
<ul>
<li><p><span class="citation" data-cites="aitchisonStatisticalAnalysisCompositional1982a">Aitchison (<a href="#ref-aitchisonStatisticalAnalysisCompositional1982a" role="doc-biblioref">1982</a>)</span>, en cours</p></li>
<li><p>❗📖 <span class="citation" data-cites="payneFiniteMixturesMultivariate2023">Payne et al. (<a href="#ref-payneFiniteMixturesMultivariate2023" role="doc-biblioref">2023</a>)</span> sur MixMPLN</p></li>
</ul>
</section>
<section id="causalité-1" class="level3" data-number="3.4">
<h3 data-number="3.4" class="anchored" data-anchor-id="causalité-1"><span class="header-section-number">3.4</span> Causalité</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="bystrovaCausalDiscovery">Bystrova (<a href="#ref-bystrovaCausalDiscovery" role="doc-biblioref">s.&nbsp;d.</a>)</span></li>
</ul>
</section>
<section id="largest-gaps" class="level3" data-number="3.5">
<h3 data-number="3.5" class="anchored" data-anchor-id="largest-gaps"><span class="header-section-number">3.5</span> Largest Gaps</h3>
<ul>
<li>❗📖 <span class="citation" data-cites="braultFastConsistentAlgorithm2023">Brault et Channarond (<a href="#ref-braultFastConsistentAlgorithm2023" role="doc-biblioref">2023</a>)</span></li>
<li>❗📖 <span class="citation" data-cites="channarondClassificationEstimationStochastic2012">Channarond, Daudin, et Robin (<a href="#ref-channarondClassificationEstimationStochastic2012" role="doc-biblioref">2012</a>)</span> le papier qui introduit le <em>Largest Gaps</em></li>
</ul>
</section>
</section>
<section id="a-discuter" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="a-discuter"><span class="header-section-number">4</span> A discuter</h2>
<section id="congés-ps" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="congés-ps"><span class="header-section-number">4.1</span> Congés P&amp;S</h3>
</section>
<section id="thèse" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="thèse"><span class="header-section-number">4.2</span> Thèse</h3>
<ul>
<li>Faire préz CSI</li>
<li>Faire rapport CSI</li>
</ul>
</section>
<section id="inférence" class="level3" data-number="4.3">
<h3 data-number="4.3" class="anchored" data-anchor-id="inférence"><span class="header-section-number">4.3</span> Inférence</h3>
<ul>
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
</ul>
<blockquote class="blockquote">
<p>Combine networks at different taxonomic levels</p>
</blockquote>
<ul>
<li>Inférence + GREMLINS</li>
</ul>
</section>
</section>
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-aitchisonStatisticalAnalysisCompositional1982a" class="csl-entry" role="listitem">
Aitchison, J. 1982. <span>«&nbsp;The <span>Statistical Analysis</span> of <span>Compositional Data</span>&nbsp;»</span>. <em>Journal of the Royal Statistical Society. Series B (Methodological)</em> 44 (2): 13977. <a href="https://www.jstor.org/stable/2345821">https://www.jstor.org/stable/2345821</a>.
</div>
<div id="ref-braultFastConsistentAlgorithm2023" class="csl-entry" role="listitem">
Brault, Vincent, et Antoine Channarond. 2023. <span>«&nbsp;Fast and <span>Consistent Algorithm</span> for the <span>Latent Block Model</span>&nbsp;»</span>. 9 mars 2023. <a href="https://doi.org/10.48550/arXiv.1610.09005">https://doi.org/10.48550/arXiv.1610.09005</a>.
</div>
<div id="ref-bystrovaCausalDiscovery" class="csl-entry" role="listitem">
Bystrova, Daria. s.&nbsp;d. <span>«&nbsp;Causal Discovery&nbsp;»</span>.
</div>
<div id="ref-channarondClassificationEstimationStochastic2012" class="csl-entry" role="listitem">
Channarond, Antoine, Jean-Jacques Daudin, et Stéphane Robin. 2012. <span>«&nbsp;Classification and Estimation in the <span>Stochastic Blockmodel</span> Based on the Empirical Degrees&nbsp;»</span>. <em>Electronic Journal of Statistics</em> 6 (janvier). <a href="https://doi.org/10.1214/12-ejs753">https://doi.org/10.1214/12-ejs753</a>.
</div>
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s.&nbsp;d. <span>«&nbsp;Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs&nbsp;»</span>.
</div>
<div id="ref-nennaLecture1Monge" class="csl-entry" role="listitem">
Nenna, Luca. s.&nbsp;d.a. <span>«&nbsp;Lecture 1 <span>Monge</span> and <span>Kantorovich</span> Problems: From Primal to Dual&nbsp;»</span>.
</div>
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
———. s.&nbsp;d.b. <span>«&nbsp;Lecture 2: <span>Entropic Optimal Transport</span>&nbsp;»</span>.
</div>
<div id="ref-payneFiniteMixturesMultivariate2023" class="csl-entry" role="listitem">
Payne, Andrea, Anjali Silva, Steven J. Rothstein, Paul D. McNicholas, et Sanjeena Subedi. 2023. <span>«&nbsp;Finite <span>Mixtures</span> of <span>Multivariate Poisson-Log Normal Factor Analyzers</span> for <span>Clustering Count Data</span>&nbsp;»</span>. 13 novembre 2023. <a href="https://doi.org/10.48550/arXiv.2311.07762">https://doi.org/10.48550/arXiv.2311.07762</a>.
</div>
</div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copié");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const codeEl = trigger.previousElementSibling.cloneNode(true);
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});
</script>
</div> <!-- /content -->
</body></html>

View file

@ -1,168 +0,0 @@
---
title: "Bilan semaine 43 2025 : 20 octobre - 24 octobre"
categories: [colBiSBM, inférence, GNN]
date: 2025 10 20
date-modified: last-modified
bibliography: references.bib
---
## TODO List
- Finir le papier :
- Re-structurer le plan, mon plan, Donnet et Barbillon, échelle méso et comparaison inter réseau et noeuds non partagés.
- ✅ Écrire en annexe le BIC-L, faire attention à ajouter l'entropie à la toute fin en mentionnant
- ⌛ Fusionner VGAE et information transfer (missing links seulement) donc refaire tourner sur même données qu'en R. A adapter pour Python et pouvoir intégrer dans la figure. (raccourcit).
- Faire sep-VGAE (seulement sur le réseaux avec missing links) et VGAE avec les 4 réseaux.
En train de reproduire les résultats, AUC stable autour de 0.7
- Remplacer *Information tranfer on simu* par Network partitioning.
- ⌛ Écrire le poster avec un titre aguicheur "Are my pollinators your pollinators: ...":
Commencé contenu à déterminer avec Pierre et Sophie
- Maitriser graphtools de Peixoto pour essayer d'utiliser l'arbre taxonomique sur graphe de cooccurence inférer par SparCC
- Maitriser SparCC
- Faire LBM sur niveau taxonomique grossier, initialiser avec le résultat pour un niveau plus fin et ainsi de suite.
- Clustering unipartite j'ai cassé une fonction de distance à vérifier et réparer
<!-- - Idée clustering unipartite graphes des métros
<div class="embed-container">
<iframe src="https://csun.uic.edu/wp-content/uploads/sites/1080/2023/12/pdf_7.pdf" width=100% height="475px" style="position: relative;">
</iframe>
</div> -->
- Pour clustering de collections sur données ~~réelles~~ :
&rarr; L'intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs $(Q_1,Q_2)$.
- ❓Je n'arrive plus à reproduire le bug pour l'inférence...
- 😫 bug encore. S'assurer que ça marche et relancer
- ⌛ A Roscoff avec Julie et Pierre nous avons constaté que c'était l'extraction des dyades pour le calcul des métriques qui était incorrecte. Maintenant c'est corrigé et ça fonctionne !
En fait je donne tous les degrés donc le GNN a juste à retrouver les arêtes non vues.Revérifier que j'entraîne correctement le VGAE car résultats de généralisation trop bons sur les autres réseaux Doré, ce qui est étonnant
Pour corriger cet effet :
- Donner la matrice identité comme features
- Corriger les degrés calculés.
- ⚠️ Discuter intersection simulations
- 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 les codes Mangal database pour $\delta$
- Voir $\delta$ mais additif
:::{.callout-note}
### $\delta$ additif Bernoulli
En Bernoulli pas de forme analytique non plus :
Pour $\alpha_{qr}$:
$$ \sum_{m=1}^M \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\alpha_{qr}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
$$\Leftrightarrow \sum_m \frac{e^m_{qr}}{\alpha_{qr}} + \frac{1}{\alpha_{qr}+\delta_m-1} (n^m_{qr}-e^m_{qr}) = 0$$
Et pour $\delta_m$:
$$ \sum_{i=1}^{n_1^m} \sum_{j=1}^{n_2^m} \sum_{q=1}^{Q_1} \sum_{r=1}^{Q_2} \tau_{iq}^{1,m}\tau_{jr}^{2,m}(\frac{X_{ij}^m}{\delta_{m}} + \frac{(1-X_{ij}^m)}{\alpha_{qr} + \delta_m -1}) = 0$$
:::
:::{.callout-note}
### $\delta$ additif Poisson
Forme analytique mais risque de confusion ?
$$\widehat{\delta_m} = \frac{\sum_{q,r} e^m_{qr}}{\sum_{q,r} n^m_{qr}},~\widehat{\alpha_{qr}} = \frac{\sum_{m} e^m_{qr}}{\sum_{m} n^m_{qr}} $$
:::
- Regarder la liste des cours du MathSV et de l'Université Paris-Saclay.
- ⌛ **Plutôt regarder pour introduire un modèle $\delta$-colBiSBM**.
- Ajouter le produit par $\delta$ là où nécessaire
- Ajouter les modèles $\delta$, $\delta\pi, \dots$ et les blocs conditionnels
- Ajouter les tests unitaires adéquats et les vérifier
- Regarder *Largest gap* sur réseaux Doré
- Essayer *clustering* sur `supinfo`
- Homogénéiser notations dans les supplementaries
:::{#ref-kmeans-vae}
- Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l'espace latent
J'ai commencé à regarder un peu
:::
### Inférence et microbes
- easy16s : se renseigner sur
- $\alpha$, $\beta$ diversité
- Heatmap
- Voir avec Mahendra à l'occasion du CSI
- 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)
- Regarder **SPARTA** Rennes
- Lire Papiers compositional data (Aitchison et al. intro)
- Lire article multi-niveaux Saint-Clair
- Ecrire et étudier les modèles pour différents niveaux taxonomiques.
\begin{align*}
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
\end{align*}
#### Causalité
Plus sur le temps long, à regarder
- GT causalité
- Daria Bystrova lire présentation @bystrovaCausalDiscovery (Meek rules, V-structure)
## 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*
## A discuter
### Congés P&S
### Thèse
- Faire préz CSI
- Faire rapport CSI
### Inférence
- pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU ...)
> Combine networks at different taxonomic levels
- Inférence + GREMLINS

View file

@ -1,144 +0,0 @@
@article{mazeletUnsupervisedLearningOptimal,
title = {Unsupervised {{Learning}} for {{Optimal Transport}} Plan Prediction between Unbalanced Graphs},
author = {Mazelet, Sonia and Flamary, Rémi and Thirion, Bertrand},
abstract = {Optimal transport between graphs, based on Gromov-Wasserstein and other extensions, is a powerful tool for comparing and aligning graph structures. However, solving the associated non-convex optimization problems is computationally expensive, which limits the scalability of these methods to large graphs. In this work, we present Unbalanced Learning of Optimal Transport (ULOT), a deep learning method that predicts optimal transport plans between two graphs. Our method is trained by minimizing the fused unbalanced Gromov-Wasserstein (FUGW) loss. We propose a novel neural architecture with cross-attention that is conditioned on the FUGW tradeoff hyperparameters. We evaluate ULOT on synthetic stochastic block model (SBM) graphs and on real cortical surface data obtained from fMRI. ULOT predicts transport plans with competitive loss up to two orders of magnitude faster than classical solvers. Furthermore, the predicted plan can be used as a warm start for classical solvers to accelerate their convergence. Finally, the predicted transport plan is fully differentiable with respect to the graph inputs and FUGW hyperparameters, enabling the optimization of functionals of the ULOT plan.},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T09:08:09.864Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/HPZEYMM9/Mazelet et al. - Unsupervised Learning for Optimal Transport plan prediction between unbalanced graphs.pdf}
}
@article{nennaLecture2Entropic,
title = {Lecture 2: {{Entropic Optimal Transport}}},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-11T16:06:28.547Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/WGFIISDB/Nenna - Lecture 2 Entropic Optimal Transport.pdf}
}
@article{nennaLecture1Monge,
title = {Lecture 1 {{Monge}} and {{Kantorovich}} Problems: From Primal to Dual},
author = {Nenna, Luca},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-13T09:24:13.832Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/7LVQPD6D/Nenna - Lecture 1 Monge and Kantorovich problems from primal to dual.pdf}
}
@article{Morton2021.11.09.467939,
title = {Scalable Estimation of Microbial Co-Occurrence Networks with {{Variational Autoencoders}}},
author = {Morton, James T. and Silverman, Justin and Tikhonov, Gleb and Lähdesmäki, Harri and Bonneau, Rich},
date = {2021},
journaltitle = {bioRxiv : the preprint server for biology},
shortjournal = {bioRxiv},
eprint = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939.full.pdf},
publisher = {Cold Spring Harbor Laboratory},
doi = {10.1101/2021.11.09.467939},
url = {https://www.biorxiv.org/content/early/2021/11/11/2021.11.09.467939},
abstract = {Estimating microbe-microbe interactions is critical for understanding the ecological laws governing microbial communities. Rapidly decreasing sequencing costs have promised new opportunities to estimate microbe-microbe interactions across thousands of uncultured, unknown microbes. However, typical microbiome datasets are very high dimensional and accurate estimation of microbial correlations requires tens of thousands of samples, exceeding the computational capabilities of existing methodologies. Furthermore, the vast majority of microbiome studies collect compositional metagenomics data which enforces a negative bias when computing microbe-microbe correlations. The Multinomial Logistic Normal (MLN) distribution has been shown to be effective at inferring microbe-microbe correlations, however scalable Bayesian inference of these distributions has remained elusive. Here, we show that carefully constructed Variational Autoencoders (VAEs) augmented with the Isometric Log-ratio (ILR) transform can estimate low-rank MLN distributions thousands of times faster than existing methods. These VAEs can be trained on tens of thousands of samples, enabling co-occurrence inference across tens of thousands of microbes without regularization. The latent embedding distances computed from these VAEs are competitive with existing beta-diversity methods across a variety of mouse and human microbiome classification and regression tasks, with notable improvements on longitudinal studies.Competing Interest StatementThe authors have declared no competing interest.},
elocation-id = {2021.11.09.467939},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-06-30T14:17:29.518Z}
}
@article{aitchisonStatisticalAnalysisCompositional1982a,
title = {The {{Statistical Analysis}} of {{Compositional Data}}},
author = {Aitchison, J.},
date = {1982},
journaltitle = {Journal of the Royal Statistical Society. Series B (Methodological)},
volume = {44},
number = {2},
eprint = {2345821},
eprinttype = {jstor},
pages = {139--177},
publisher = {[Royal Statistical Society, Oxford University Press]},
issn = {0035-9246},
url = {https://www.jstor.org/stable/2345821},
urldate = {2025-05-07},
abstract = {The simplex plays an important role as sample space in many practical situations where compositional data, in the form of proportions of some whole, require interpretation. It is argued that the statistical analysis of such data has proved difficult because of a lack both of concepts of independence and of rich enough parametric classes of distributions in the simplex. A variety of independence hypotheses are introduced and interrelated, and new classes of transformed-normal distributions in the simplex are provided as models within which the independence hypotheses can be tested through standard theory of parametric hypothesis testing. The new concepts and statistical methodology are illustrated by a number of applications.},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-05-07T07:43:38.485Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/S97URH4Y/Aitchison - 1982 - The Statistical Analysis of Compositional Data.pdf}
}
@online{payneFiniteMixturesMultivariate2023,
title = {Finite {{Mixtures}} of {{Multivariate Poisson-Log Normal Factor Analyzers}} for {{Clustering Count Data}}},
author = {Payne, Andrea and Silva, Anjali and Rothstein, Steven J. and McNicholas, Paul D. and Subedi, Sanjeena},
date = {2023-11-13},
eprint = {2311.07762},
eprinttype = {arXiv},
eprintclass = {stat},
doi = {10.48550/arXiv.2311.07762},
url = {http://arxiv.org/abs/2311.07762},
urldate = {2025-07-02},
abstract = {A mixture of multivariate Poisson-log normal factor analyzers is introduced by imposing constraints on the covariance matrix, which resulted in flexible models for clustering purposes. In particular, a class of eight parsimonious mixture models based on the mixtures of factor analyzers model are introduced. Variational Gaussian approximation is used for parameter estimation, and information criteria are used for model selection. The proposed models are explored in the context of clustering discrete data arising from RNA sequencing studies. Using real and simulated data, the models are shown to give favourable clustering performance. The GitHub R package for this work is available at https://github.com/anjalisilva/mixMPLNFA and is released under the open-source MIT license.},
pubstate = {prepublished},
keywords = {/unread,Statistics - Computation,Statistics - Machine Learning,Statistics - Methodology},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:31:47.579Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/BXVPEIDD/Payne et al. - 2023 - Finite Mixtures of Multivariate Poisson-Log Normal Factor Analyzers for Clustering Count Data.pdf;/home/louis/snap/zotero-snap/common/Zotero/storage/L5DAS5C2/2311.html}
}
@unpublished{bystrovaCausalDiscovery,
title = {Causal Discovery},
author = {Bystrova, Daria},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-02T09:34:39.476Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/NQE5DY92/Bystrova - Causal discovery.pdf}
}
@online{braultFastConsistentAlgorithm2023,
title = {Fast and {{Consistent Algorithm}} for the {{Latent Block Model}}},
author = {Brault, Vincent and Channarond, Antoine},
date = {2023-03-09},
eprint = {1610.09005},
eprinttype = {arXiv},
eprintclass = {math},
doi = {10.48550/arXiv.1610.09005},
url = {http://arxiv.org/abs/1610.09005},
urldate = {2025-07-09},
abstract = {The latent block model is used to simultaneously rank the rows and columns of a matrix to reveal a block structure. The algorithms used for estimation are often time consuming. However, recent work shows that the log-likelihood ratios are equivalent under the complete and observed (with unknown labels) models and the groups posterior distribution to converge as the size of the data increases to a Dirac mass located at the actual groups configuration. Based on these observations, the algorithm Largest Gaps is proposed in this paper to perform clustering using only the marginals of the matrix, when the number of blocks is very small with respect to the size of the whole matrix in the case of binary data. In addition, a model selection method is incorporated with a proof of its consistency. Thus, this paper shows that studying simplistic configurations (few blocks compared to the size of the matrix or very contrasting blocks) with complex algorithms is useless since the marginals already give very good parameter and classification estimates.},
langid = {english},
pubstate = {prepublished},
keywords = {/unread,Mathematics - Statistics Theory,Statistics - Computation,Statistics - Statistics Theory},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:58:53.533Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/5LXC6Y68/Brault et Channarond - 2023 - Fast and Consistent Algorithm for the Latent Block Model.pdf}
}
@article{braultGeneralisationLalgorithmeLargest,
title = {Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique},
author = {Brault, Vincent and Channarond, Antoine and Robert, Valérie},
abstract = {The latent block model assumes there exists a distribution for each crossing between an object cluster and a variable cluster of a data table ; the cells are supposed to be independent conditionally to the choice of these clusters. To estimate the model parameters, most of algorithms are time consuming. Brault and Channarond (2016) proposed to adapt the Largest Gaps algorithm which consists in using the margins. They thus obtained a procedure which estimates all the model parameters consistently but requires a large number of observations. In this talk, we will extend the procedure to the case of any distribution having a second order moment by using an EM algorithm estimation.},
langid = {french},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T12:29:43.098Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/GIUNC4L3/Brault et al. - Généralisation de l'algorithme Largest Gaps pour le modèle des blocs latents non-paramétrique.pdf}
}
@article{channarondClassificationEstimationStochastic2012,
title = {Classification and Estimation in the {{Stochastic Blockmodel}} Based on the Empirical Degrees},
author = {Channarond, Antoine and Daudin, Jean-Jacques and Robin, Stéphane},
date = {2012-01-01},
journaltitle = {Electronic Journal of Statistics},
shortjournal = {Electron. J. Statist.},
volume = {6},
publisher = {Institute of Mathematical Statistics},
issn = {1935-7524},
doi = {10.1214/12-ejs753},
url = {https://projecteuclid.org/journals/electronic-journal-of-statistics/volume-6/issue-none/Classification-and-estimation-in-the-Stochastic-Blockmodel-based-on-the/10.1214/12-EJS753.full},
urldate = {2025-07-09},
abstract = {The Stochastic Blockmodel [16] is a mixture model for heterogeneous network data. Unlike the usual statistical framework, new nodes give additional information about the previous ones in this model. Thereby the distribution of the degrees concentrates in points conditionally on the node class. We show under a mild assumption that classification, estimation and model selection can actually be achieved with no more than the empirical degree data. We provide an algorithm able to process very large networks and consistent estimators based on it. In particular, we prove a bound of the probability of misclassification of at least one node, including when the number of classes grows.},
issue = {none},
langid = {english},
keywords = {/unread},
annotation = {Read\_Status: New\\
Read\_Status\_Date: 2025-07-09T13:59:33.921Z},
file = {/home/louis/snap/zotero-snap/common/Zotero/storage/8TL8AJ2G/Channarond et al. - 2012 - Classification and estimation in the Stochastic Blockmodel based on the empirical degrees.pdf}
}

Some files were not shown because too many files have changed in this diff Show more