From e412e0015127b1361bb7cee42d4f84dc98121cce Mon Sep 17 00:00:00 2001 From: Louis Lacoste Date: Mon, 8 Jul 2024 09:30:06 +0200 Subject: [PATCH] rapport : updating and adding Rnw --- Rcodes/simulation/inference_analyze.Rnw | 264 +++++++++++++++++++++++ rapport/chapter3-structure-detection.tex | 11 +- rapport/rapport.pdf | Bin 887390 -> 887375 bytes rapport/rapport.tex | 2 - 4 files changed, 271 insertions(+), 6 deletions(-) create mode 100644 Rcodes/simulation/inference_analyze.Rnw diff --git a/Rcodes/simulation/inference_analyze.Rnw b/Rcodes/simulation/inference_analyze.Rnw new file mode 100644 index 0000000..bec3191 --- /dev/null +++ b/Rcodes/simulation/inference_analyze.Rnw @@ -0,0 +1,264 @@ +<>= +require("ggplot2") +require("ggokabeito") +require("tidyr") +require("dplyr") +require("stringr") +require("knitr") +require("pander") +require("patchwork") +require("latex2exp") +@ + + +<>= +options(dplyr.summarise.inform = FALSE) +knitr::opts_knit$set(kable.force.latex = TRUE) + +meanse <- function(x, ...) { + mean1 <- signif(round(mean(x, na.rm = T), 2), 5) # calculate mean and round + se1 <- signif(round(sd(x, na.rm = T) / sqrt(sum(!is.na(x))), 2), 2) # std error - round adding zeros + out <- paste(mean1, "$\\pm$", se1) # paste together mean plus/minus and standard error + if (str_detect(out, "NA")) { + out <- "NA" + } # if missing do not add plusminus + if (se1 == 0) { + out <- paste(mean1) + } + return(out) +} +@ + +<>= +filenames <- list.files( + path = "./data/", + pattern = "inference_testing_2023-07-*", + full.names = TRUE +) +data_list <- lapply(filenames, readRDS) +col_id_BICLS <- c(11, 16, 23, 30, 37) +result_data_frame <- dplyr::bind_rows(data_list) + +# Compute the preferred model +result_data_frame <- cbind(result_data_frame, preferred_model = sapply(seq_len(nrow(result_data_frame)), function(n) sub("_BICL", "", names(which.max(result_data_frame[n, col_id_BICLS]))))) +result_data_frame$preferred_model <- factor(result_data_frame$preferred_model, levels = c( + "sep", "iid", "pi", + "rho", "pirho" +)) +@ + +# Efficiency of the inference + +\paragraph{Simulation settings} For this simulation the data is simulated with +$M = 2, n_{1}^{m} = 120, n_{2}^{m} = 120, Q_1 = Q_2 = 4$, $\bm{\alpha}, \bm{\pi}$ +and $\bm{\rho}$ are set as follows: +\begin{align*} + &&\bm{\alpha} = .25 + + \begin{pmatrix} + 3 \eps[\alpha] & 2 \eps[\alpha] & \eps[\alpha] & - \eps[\alpha]\\ + 2 \eps[\alpha] & 2 \eps[\alpha] & - \eps[\alpha] & \eps[\alpha]\\ + \eps[\alpha] & - \eps[\alpha] & \eps[\alpha] & 2 \eps[\alpha]\\ + - \eps[\alpha] & \eps[\alpha] & 2 \eps[\alpha] & 0 + \end{pmatrix}, \\ \bm{\pi}^1 = \sigma_1 + \begin{pmatrix} + 0.2 & 0.4 & 0.4 & 0 + \end{pmatrix}, + && \bm{\pi}^2 = + \begin{pmatrix} + 0.25 & 0.25 & 0.25 & 0.25 + \end{pmatrix}, \\ + \bm{\rho}^1 = + \begin{pmatrix} + 0.25 & 0.25 & 0.25 & 0.25 + \end{pmatrix}, && + \bm{\rho}^2 = \sigma_2 + \begin{pmatrix} + 0 & 0.33 & 0.33 & 0.33 + \end{pmatrix}, && +\end{align*} +with $\eps[\alpha]$ taking nine equally spaced values ranging from 0 to 0.24. +For each value of $\eps[\alpha]$, 108 datasets ($X_1, X_2$) are simulated, +resulting in $9 \times 108 = 972$ datasets. More precisely, for each dataset, +we pick uniformly at random two permutations of $\{ 1, \dots , 4 \}$ +($\sigma_1, \sigma_2$) with the constraint that $\sigma_1(4) \neq \sigma_2(1)$. +This ensures that each of the two networks have a non-empty block that is empty +in the other one. Then the networks are simulated with +$\mathcal{B}$ern-$BiSBM_{120}(4, \bm{\alpha}, \bm{\pi}^m, \bm{\rho}^m)$ +with the previous parameters. Each network has 2 blocks in common and their +connectivity structures encompass a mix of core-periphery, assortative +community and disassortative community structures, depending on which 3 of the 4 +blocks are selected for each network. $\eps[\alpha]$ represents the strength of +these structures, the larger, the easier it is to tell apart one block from +another. +The true model of all the simulation is a $\pi\rho\text{-}colBiSBM$. + +\paragraph{Inference} We want to measure the quality of the +inference procedure, for this we use the inference described in the section +\ref{sec:variational-estimation-of-the-parameters}. + +\paragraph{Quality indicators} To assess the quality of the inference, we will +use the following indicators: +\begin{itemize} + \item First, for each dataset, we put in competition $\pi\text{-}colBiSBM$ with + $sep\text{-}BiSBM$, $iid\text{-}colBiSBM$, $\rho\text{-}colBiSBM$, + $\pi\rho\text{-}colBiSBM$ + respectively. To do so, for each dataset, we compute the + BIC-L of each model $\pi\text{-}colBiSBM$ is preferred to $sep\text{-}BiSBM$ + (resp. $iid\text{-}colBiSBM$, $\rho\text{-}colBiSBM$, + $\pi\rho\text{-}colBiSBM$) if + its BIC-L is greater. + \item When considering $\pi\text{-}colBiSBM$, $\rho\text{-}colBiSBM$, + $\pi\rho\text{-}colBiSBM$ we compare $\widehat{Q_1}$, $\widehat{Q_2}$ to + their true values. ($Q_1 = 4$ and $Q_2 = 4$) + \item Finally, we assess the quality of the node grouping by computing the + Adjusted Rand Index \parencite[][, ARI = 0 for a random grouping, ARI = 1 for a perfect recovery]{hubertComparingPartitions1985}. For each network, for the + $\pi\text{-}colBiSBM$, $\rho\text{-}colBiSBM$, + $\pi\rho\text{-}colBiSBM$ we compare the inferred block memberships to the + real ones by computing the mean of the ARI per axis over the two networks + \begin{equation*} + \overline{\text{ARI}}_d = \frac{1}{2} \text{ARI}\big( \text{ARI}(\widehat{\bm{Z}^1_d},\bm{Z}^1_d) + \text{ARI}(\widehat{\bm{Z}^2_d},\bm{Z}^2_d) \big) + \end{equation*} + where $d$ is the dimension or axis (i.e., rows, $d=1$, or columns, $d=2$) of + the block memberships. + And we compute the ARI of the whole set of nodes to account for block + pairing between networks + \begin{equation*} + \text{ARI}_d = \text{ARI}\big((\widehat{\bm{Z}^1_d},\widehat{\bm{Z}^2_d}),(\bm{Z}^1_d,\bm{Z}^2_d) \big) + \end{equation*} +\end{itemize} + +All these quality indicators are averaged over the 108 datasets. The results are +provided in the tables \ref{tab:per_model_sep} to \ref{tab:per_model_pirho}. Each line corresponds to the +108 datasets for a given value of value of $\eps[\alpha]$. + +<>= +averaged_data <- result_data_frame %>% + group_by(epsilon_alpha) %>% + summarise(across(-preferred_model, list("avrg" = meanse))) %>% + select(-c(2:10)) +averaged_data <- averaged_data %>% + select(which(!grepl("*_BICL_*", colnames(averaged_data)), + arr.ind = TRUE)) +@ + +<>= +dataframe_per_model <- function(model) { + averaged_data %>% + select(epsilon_alpha, starts_with(paste0(model, "_"))) +} +@ + +\tiny +<>= +for (model in c("sep", "iid", "pi", "rho", "pirho")) { + kable_colnames <- c( + "$\\eps[\\alpha]$", #"BIC-L", + "$\\overline{\\text{ARI}}_{1}$", + "$\\overline{\\text{ARI}}_{2}$", "$\\text{ARI}_{1}$", "$\\text{ARI}_{2}$" + ) + model_name <- model + if (model != "sep") { + kable_colnames <- c( + kable_colnames, "Recovered $Q_1$", + "Recovered $Q_2$" + ) + } + if (model == "pirho") { + model_name <- "$\\pi\\rho$" + } else { + if (model != "iid" && model != "sep") { + model_name <- paste0("$\\", model, "$") + } else { + model_name <- paste0("$", model, "$") + } + } + print(kable(dataframe_per_model(model), + escape = FALSE, + booktabs = TRUE, + digits = 2, + position = "!h", + caption = paste0( + "\\label{tab:per_model_", model, + "}Quality metrics for ", + ifelse(model != "sep", paste0(model_name, "$\\text{-}colBiSBM$"),"$sep\\text{-}BiSBM$") + ), + col.names = kable_colnames + )) +} +@ +\normalsize + +<>= +proportion_preferred_data <- result_data_frame %>% + group_by(epsilon_alpha, preferred_model) %>% + summarise(n = n()) %>% + mutate(prop_model = n / sum(n)) %>% + ungroup() %>% + select(-n) + +proportion_preferred_table <- proportion_preferred_data %>% + pivot_wider( + names_from = preferred_model, + values_from = prop_model, values_fill = 0 + ) + +kable(proportion_preferred_table, + escape = FALSE, + booktabs = TRUE, + digits = 2, + position = "!h", + caption = "\\label{tab:proportion-preferred-table}Proportions of models selected per \\eps[\\alpha] (data for Figure \\ref{fig:inference-proportion-preferred})", + col.names = c( + "\\eps[\\alpha]", + "$sep\\text{-}BiSBM$", + "$iid\\text{-}colBiSBM$", + "$\\pi\\text{-}colBiSBM$", + "$\\rho\\text{-}colBiSBM$", + "$\\pi\\rho\\text{-}colBiSBM$" + ), + align = "rccccc", + format = "latex" +) +@ + +<>= +#| fig.cap="\\label{fig:inference-proportion-preferred}Plot of the proportions of different preferred models in function of \\eps[\\alpha]", +#| fig.asp = 0.5, +#| fig.pos = "H", +#| fig.width = 7, +#| fig.height = 4, +#| dpi=300 + +plot <- proportion_preferred_data %>% ggplot() + + aes( + x = epsilon_alpha, y = prop_model, color = preferred_model, + fill = preferred_model + ) + + guides( + fill = guide_legend(title = "Preferred Model"), + color = guide_legend(title = "Preferred Model") + ) + + scale_x_continuous(breaks = seq(from = 0.0, to = 0.24, by = 0.03)) + + scale_color_okabe_ito() + + scale_fill_okabe_ito() + + xlab(TeX("$\\epsilon_{\\alpha}$")) + + ylab("Model proportions") + + geom_col(position = "stack") +print(plot) +@ + +\paragraph{Results} For the model comparison, when $\eps[\alpha]$ is small +($\eps[\alpha]\in[0, .04]$), the simulation model is close to the +Erd\H{o}s-Reńyi network and it is very hard to find any structure beyond the one +of a single block on each dimension. + +On the figure \ref{fig:inference-proportion-preferred} and table +\ref{tab:proportion-preferred-table} we can see that from +$\eps[\alpha] = 0.12$ around $70\%$ of the time the $\pi\rho\text{-}colBiSBM$ +model (i.e., the correct one) is selected. + +An interesting result we can read in the tables is that our models outperform +the $sep\text{-}BiSBM$ when considering the ARI on the whole set of nodes +($\text{ARI}_d$). This means that our models are able to recover the block +pairing \emph{between the networks} in addition to recovering the blocks and +their parameters. \ No newline at end of file diff --git a/rapport/chapter3-structure-detection.tex b/rapport/chapter3-structure-detection.tex index e8b7961..a3e5cf8 100644 --- a/rapport/chapter3-structure-detection.tex +++ b/rapport/chapter3-structure-detection.tex @@ -70,7 +70,7 @@ network $m$ is assumed to follow a $BiSBM$ with its own parameters ($\bm{\pi}^m, % Here are some common notations and conventions that we will use in the following % sections. -\subsection{A collection of i.i.d bipartite SBM}\label{ssec:a-collection-of-i-i-d-bipartite-sbm} +\subsection{A collection of iid bipartite SBM}\label{ssec:a-collection-of-i-i-d-bipartite-sbm} As for \emph{colSBM} this first model is the most constrained. It assumes that all the networks are the independent realizations of the same $Q_1$-$Q_2$-BiSBM with identical parameters. The \emph{iid-colBiSBM} is defined as follows: @@ -653,9 +653,12 @@ The process of clustering a collection of networks involves discovering a partition $\mathcal{G} = (\mathcal{M}_g)_{g=1,\dots,G}$ of $\{1,\dots, M\}$. Given $\mathcal{G}$ we set the following model on $\bm{X}$: -\[ - \forall g \in \{1,\dots, G\}, \forall m \in \mathcal{M}_g, X^m \sim \mathcal{F}\text{-}BiSBM(Q_1^g, Q_2^g, \bm{\pi^m, \rho^m,} \bm{\alpha}^g) -\] +\begin{align*} + \forall g \in \{1,\dots, G\}, + ~\forall m \in \mathcal{M}_g, + ~X^m \sim + \mathcal{F}\text{-}BiSBM(Q_1^g, Q_2^g, \bm{\pi^m, \rho^m,} \bm{\alpha}^g) +\end{align*} And we defined the score of a given partition $\mathcal{G}$: \[ diff --git a/rapport/rapport.pdf b/rapport/rapport.pdf index 127412590ee662e5331e996c5772080ab33d4891..94a386a90c310c86ddafb08044c25c7342be3ec8 100644 GIT binary patch delta 15034 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 delta 15066 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 Tql!c%fn{TXqokBjl!W^~#NZhk diff --git a/rapport/rapport.tex b/rapport/rapport.tex index a031de1..7de3824 100644 --- a/rapport/rapport.tex +++ b/rapport/rapport.tex @@ -221,8 +221,6 @@ automata,positioning} \addtocounter{maincontentend}{1} \addtocounter{customchapter}{1} \printbibliography -\end{selectlanguage} -\begin{selectlanguage}{french} \listoffigures \listoftables \end{selectlanguage}