🦋Begin adding sims

This commit is contained in:
Louis Lacoste 2024-03-11 18:08:58 +01:00
parent 12e30910be
commit c1de0ed378
6 changed files with 166 additions and 25 deletions

View file

@ -54,7 +54,6 @@ random_groups <- sample(1:K, nb_species, replace = TRUE)
plot_group_on_tree <- function(tree, groups) {
plot(tree, show.tip.label = FALSE)
tiplabels(bg = groups, pch = 21)
text(x = 10, y = 0, label = "This tree will be normalised.")
}
# Saving trees

View file

@ -25,7 +25,7 @@ tree <- read.tree(here("R","chen2019.tree"))
taille_tree <- diag(vcv(tree))[1]
tree$edge.length <- tree$edge.length / taille_tree
plotTree(tree, ftype="i", node.numbers=TRUE)
plotTree(tree, ftype="i", node.numbers = TRUE)
# Mus et Rat vs le reste

View file

@ -282,16 +282,6 @@ Cette méthode est à l'heure actuelle très utilisée.
d'après le message d'erreur, une optimisation n'a pas convergé. Ces gènes sont
présentés dans le tableau~\ref{tab:na-evemodel}.
\begin{table}[H]
\centering
<<'table_nas'>>=
knitr::kable(evegenesNA, col.names = "Gènes ayant produits des NA",
align = "c", booktabs = TRUE, format = "latex", escape = TRUE)
@
\caption{Table des gènes pour lesquels la méthode \texttt{EVEmodel} a produit des NA}
\label{tab:na-evemodel}
\end{table}
\subsection*{Toutes les méthodes}
Nous allons ici comparer toutes les méthodes dans un diagramme de Venn (figure~\ref{fig:venn-all-methods-eve}) afin de

View file

@ -0,0 +1,135 @@
<< 'knitr_options-simu', echo = FALSE>>=
knitr::opts_knit$set(cache = TRUE, fig.pos = "HT", fig.width = 6, fig.height = 6,
fig.align = "center", warnings = FALSE, echo = FALSE, format = "latex")
@
Simu: Plusieurs design, tailles etc
On sait la vérité, on peut connaitre les vrais positifs etc
Qu'est ce qu'on prend en entrées qu'est ce qu'on veut en sortie
Bien insister sur l'arbre d'entrée et l'objectif de la simu : quelle approche pour mieux détecter les gènes différentiellement exprimés.
Simulations :
\begin{itemize}
\item soit selon l'arbre des données
\item soit partir sur regarder l'impact de la taille de l'arbre etc.
\end{itemize}
\subsubsection*{ANOVA vs ANOVA Phylogénétique}
Dans cette partie nous souhaitons comparer les résultats de l'ANOVA et de
l'ANOVA phylogénétique.
Pour cela nous allons simuler des données selon plusieurs modalités et évaluer
l'\emph{erreur de première espèce} et la \emph{puissance} obtenue.
\begin{itemize}
\item Des données réparties en deux groupes indépendants de la
phylogénie.
\item Des données réparties en deux groupes cohérents avec la phylogénie.
\end{itemize}
Pour les simulations qui ne se font pas selon la phylogénie, nous nous attendons
à ce que l'ANOVA classique obtienne de bons résultats puisque c'est une
situation correspondant à l'application du modèle.
Pour les simulations qui se font selon l'information de l'arbre phylogénétique,
nous nous attendons à ce que l'ANOVA phylogénétique parvienne à mieux prendre en
compte l'information apportée par la phylogénie et à démêler son effet.\\
<<'modules-simulations', include = FALSE>>=
require("ape")
require("phylolm")
require("phytools")
require("here")
library(tidyverse)
library(ggplot2)
library(patchwork)
source(here("R","utils.R"))
@
<<'Import-arbre'>>=
K <- 2
nb_species <- 43
plot_group_on_tree <- function(tree, groups, ...) {
plot(tree, ...)
tiplabels(bg = groups, pch = 21)
}
tree <- read.tree(here("R","chen2019.tree"))
# Normalising tree edge length
taille_tree <- diag(vcv(tree))[1]
tree$edge.length <- tree$edge.length / taille_tree
@
<<'simus-groupes'>>=
seed <- 1234
set.seed(seed)
# Mus et Rat vs le reste
group_mus_rat_vs_other <- sapply(1:nb_species, function(tip) {
if (tip %in% getDescendants(tree = tree, 55)) {
return(1)
}
return(2)
})
# TODO Demander à Paul et Mélina si mieux de mettre groupes équilibrés 0.5 0.5
# Ou groupes comparables 16, 27
random_groups <- sample(1:K, nb_species,
replace = TRUE, prob = c(16, 27))
@
Pour faire nos simulations dans un contexte proche du cas réel nous allons
utiliser l'arbre présenté sur la figure~\ref{fig:arbre-chen2019}.
Nous choisissons de diviser les espèces en deux groupes.
Pour le groupe respectant la phylogénie, on a d'un côté les espèces
du genre \emph{Mus} avec les rats et les autres espèces dans un autre groupe
(voir la figure~\ref{fig:simu-groupes-mus}).
Et pour le groupe ne respectant pas la phylogénie on attribue aléatoirement les
individus à l'un des deux groupes en respectant les proportions du groupe défini
avant afin de rendre les résultats comparables (voir la
figure~\ref{fig:simu-groupes-alea-prop}).
Enfin pour que notre analyse soit reproductible nous fixons la graine à
\Sexpr{seed}.
\begin{figure}[H]
\centering
<<'plot-groupes-mus'>>=
plot_group_on_tree(tree, group = group_mus_rat_vs_other)
@
\caption{Groupes \emph{Mus} et rats contre les autres}
\label{fig:simu-groupes-mus}
\end{figure}
\begin{figure}[H]
\centering
<<'plot-groupes-random'>>=
plot_group_on_tree(tree, group = random_groups)
@
\caption{Groupes aléatoires respectant les proportions}
\label{fig:simu-groupes-alea-prop}
\end{figure}
<<'param-simulation'>>=
# Generate data for rat&mus vs the rest
N <- 500
base_values <- c(0, 1)
sigma2_phylo <- 1
sigma2_measure <- 0.1
risk_threshold <- 0.05
## Standardized parameters
total_variance <- 1.0 # sigma2_phylo + sigma2_error, fixed [as tree_height = 1]
heri <- c(0.3, 0.5, 0.7, 0.9) # heritability her = sigma2_phylo / total_variance. 0 means only noise. 1 means only phylo.
snr <- 1 # signal to noise ratio snr = size_effect / total_variance
@
Pour les paramètres de la simulation nous allons faire prendre à $h$, défini comme
l'héritabilité, les valeurs $h \in (\Sexpr{heri})$.
\subsubsection*{Avec Satterthwaite et le \emph{Likelihood Ratio Test} (LRT)}

View file

@ -10,6 +10,7 @@
\usepackage{graphicx}
\graphicspath{{img/}}
\usepackage{float}
\usepackage{subcaption} % for subfigures environments
% Booktabs
\usepackage{booktabs}
@ -296,21 +297,9 @@ puis sur arbre avec petites branches ?
\subsection{Simulations}
% On importe le fichier
Simu: Plusieurs design, tailles etc
On sait la vérité, on peut connaitre les vrais positifs etc
Qu'est ce qu'on prend en entrées qu'est ce qu'on veut en sortie
<<simulations-methodes, child='Rnw/simulations-methodes.Rnw'>>=
@
Bien insister sur l'arbre d'entrée et l'objectif de la simu : quelle approche pour mieux détecter les gènes différentiellement exprimés.
Simulations :
\begin{itemize}
\item soit selon l'arbre des données
\item soit partir sur regarder l'impact de la taille de l'arbre etc.
\end{itemize}
\section{Données}
\label{sec:data}
% Présentation des données utilisées.
@ -336,11 +325,39 @@ Intro
Application/Résultats: décrire les données, vite fait normalisation avec vrai aebre, on ne connait pas
Discussion/COnclusion ? Interprétation des résultats sinon la mettre dans les
f-cicd: CI/CD to build Latex PDF ...
CI/CD to build Latex pdf and create a release in with GitHub Actions. The workflow triggers on push to the repository. Integrates with Overleaf.
% Bibliographie
\printbibliography
\nocite{*}
% TODO Ici éventuellement une partie annexe discussion de l'impact des tailles d'abres
\appendix
\section{Application aux données réelles}
Comme nous l'avons remarqué dans la section~\ref{sec:data} l'application de la
méthode EVEmodel a produit des valeurs manquantes pour les gènes présentés dans
le tableau suivant.
\begin{table}[H]
\centering
<<'table_nas'>>=
knitr::kable(evegenesNA, col.names = "Gènes ayant produits des NA",
align = "c", booktabs = TRUE, format = "latex", escape = TRUE)
@
\caption{Table des gènes pour lesquels la méthode \texttt{EVEmodel} a produit des NA}
\label{tab:na-evemodel}
\end{table}
\section*{Code du projet}
Tout le code produit est disponible sur le dépôt GitHub suivant
\url{https://github.com/Polarolouis/anova-phylogenetique-projet-msv/}.
Ce dépôt contient le code pour implémenter la méthode, faire les
simulations et compiler le rapport.
Nous avons au maximum indiqué le code qui n'a pas été écrit par nous, la plupart
du temps dans les commentaires du code.
\end{document}

Binary file not shown.