--- title: "Introduction to BrainNetTest" author: "Maximiliano Martino, Daniel Fraiman" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Introduction to BrainNetTest} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup_intro, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ## Overview `BrainNetTest` implements the non-parametric L1-distance ANOVA test of Fraiman and Fraiman (2018) for comparing populations of brain networks represented as graphs. The package provides: * utilities to build a central (mean) graph for a population and measure Manhattan (L1) distances between adjacency matrices; * the group test statistic `T` and its permutation null distribution; * a fast procedure (`identify_critical_links`) that pinpoints the edges driving between-group differences; and * helpers to simulate synthetic community-structured graphs and to visualise networks. This vignette introduces the basic API on simple synthetic data. The companion vignette, *Generating and Analyzing Brain Networks with Community Structures*, shows the full pipeline on community-structured populations. ## Installation ```r # Release version (once on CRAN) install.packages("BrainNetTest") # Development version from GitHub # install.packages("remotes") remotes::install_github("mmaximiliano/BrainNetTest") ``` ## A minimal example ```{r} library(BrainNetTest) set.seed(1) ``` ### Generating random graphs `generate_random_graph()` returns a symmetric binary adjacency matrix with no self-loops: ```{r} G <- generate_random_graph(n_nodes = 10, edge_prob = 0.2) isSymmetric(G) all(diag(G) == 0) ``` ### Central graph and Manhattan distance Given a population (list of adjacency matrices), the *central graph* is the entry-wise mean; `compute_distance()` returns the L1 (Manhattan) distance between two graphs: ```{r} population <- replicate( 5, generate_random_graph(n_nodes = 10, edge_prob = 0.2), simplify = FALSE) central <- compute_central_graph(population) compute_distance(population[[1]], central) ``` ### The group test statistic `T` `compute_test_statistic()` aggregates within- and between-group Manhattan distances into the statistic `T`. Larger values indicate stronger evidence that the groups differ: ```{r} control <- replicate( 15, generate_random_graph(n_nodes = 10, edge_prob = 0.20), simplify = FALSE) patient <- replicate( 15, generate_random_graph(n_nodes = 10, edge_prob = 0.40), simplify = FALSE) populations <- list(Control = control, Patient = patient) compute_test_statistic(populations, a = 1) ``` ### Global test and critical edges `identify_critical_links()` combines the global permutation test with an iterative edge-removal procedure that returns the edges driving the observed difference: ```{r} result <- identify_critical_links( populations, alpha = 0.05, method = "fisher", n_permutations = 200, seed = 42) head(result$critical_edges) ``` The `get_critical_nodes()` helper summarises this result at the node level: ```{r} get_critical_nodes(result) ``` ## References Fraiman, D. and Fraiman, R. (2018) An ANOVA approach for statistical comparisons of brain networks. *Scientific Reports*, 8, 4746.