Lecturer and TA details

Shai Pilosof

Kesem Abramov

Course outline

The course is a concentrated 5-days course (8:30-17:30 daily). The course is dynamic and adapted to students’ needs as much as possible. Course material and topics may vary from what is currently written and the topics will be taught one after another. Here is the plan (which will likely change):

  • Days 1-3:
    • Morning: Class + hands-on exercise
    • Afternoon: Class + hands-on exercise
  • Day 4:
    • Morning: Prepare for paper discussions
    • Afternoon: Complete exercises and choose projects.
  • Day 5:
    • Morning: Discuss papers.
    • Afternoon: Work on your projects, and closure.
  • Student project presentations are planned for 12/3/2026.

Prerequisits

The only prerequisite is knowledge in programming (preferably in R, which is the language we will use). The course is general but examples and some theory are more focused on ecology. An introduction to ecology course is recommended, but not required. Knowledge in linear algebra is recommended, but not required.

Course requirements

Official Syllabus: https://ecomplab.com/network_course/

Projects and final reports (50% of grade)

The goal of a project is to provide you with real-life experience on how to use network in research. You are encouraged to select a project that will advance your own research. Consult with me during the course. Do not wait for the last moment if you need to discuss! See project page.

Presentation of project (20% of grade)

Project presentations are in a conference style:

  • 7 min + 5min questions and suggestions
  • Background + questions
  • Methods
  • Results. It is ok if the results are not completely final. You can improve the project towards your final report, based on comments you will receive on your presentation.
  • Discussion

I will evaluate the presentations according to: - Slides - Keeping time - Flow & clarity of storytelling - Definition of gaps and goals - Methodology - Results - Answering questions

Submit the presentations and the final reports by email to Shai. Please note the deadlines.

Paper discussions (20% of grade)

See full guidelines and requirements in the Paper discussion page.

Participation in class and exercises (10% of grade)

This is a small, intimate and dynamics course. The only way it works is if everyone participates actively. I expect you to participate in class and in the exercises. I will evaluate your participation based on your presence and engagement in class and exercises, and especially during the paper discussions.

Preparing your laptop for the course

You should come ready woith a laptop with R and RStudio installed. In addition, you can use this code to install all the relevant packages for the course. You can run it in R or RStudio. If you have any problem with the installation, we will help you in the first day, but please try to come prepared!

pkgs <- c(
  "RColorBrewer",
  "bipartite",
  "blockmodels",
  "devtools",
  "dplyr",
  "ggalluvial",
  "ggnetwork",
  "ggplot2",
  "ggrepel",
  "igraph",
  "magrittr",
  "maxnodf",
  "network",
  "networkD3",
  "readxl",
  "scales",
  "tidyverse",
  "vegan"
)

install_missing <- function(pkgs) {
  pkgs <- unique(pkgs)
  missing <- pkgs[!vapply(pkgs, requireNamespace, logical(1), quietly = TRUE)]
  if (length(missing) == 0) {
    message("All packages are already installed.")
    return(invisible(TRUE))
  }
  
  message("Installing missing packages from CRAN: ", paste(missing, collapse = ", "))
  ok <- character(0)
  failed <- character(0)
  
  for (p in missing) {
    tryCatch({
      install.packages(p, dependencies = TRUE)
      if (requireNamespace(p, quietly = TRUE)) ok <- c(ok, p) else failed <- c(failed, p)
    }, error = function(e) {
      failed <<- c(failed, p)
    })
  }
  
  if (length(ok)) message("Installed: ", paste(ok, collapse = ", "))
  if (length(failed)) {
    message("Could not install (not on CRAN / other issue): ", paste(failed, collapse = ", "))
    message("If needed, install these manually (e.g., from GitHub) after checking the package docs.")
  }
  
  invisible(list(installed = ok, failed = failed))
}

install_missing(pkgs)

# Install EMLN
package.list=c("tidyverse", "magrittr","igraph","Matrix","DT","hablar","devtools")
loaded <-  package.list %in% .packages()
package.list <-  package.list[!loaded]
installed <-  package.list %in% .packages(TRUE)
if (!all(installed)) install.packages(package.list[!installed],repos="http://cran.rstudio.com/")
devtools::install_github('Ecological-Complexity-Lab/emln', force=T)
library(emln)

# Install infomapecology
package.list=c("attempt", "cowplot", "igraph", "ggalluvial","magrittr","vegan", "dplyr","readr","ggplot2","stringr","tibble","tidyr","rlang","bipartite","tidyverse", "Matrix","DT","hablar","devtools")
loaded <-  package.list %in% .packages()
package.list <-  package.list[!loaded]
installed <-  package.list %in% .packages(TRUE)
if (!all(installed)) install.packages(package.list[!installed], repos="http://cran.rstudio.com/")
devtools::install_github('Ecological-Complexity-Lab/infomap_ecology_package', force=T)
library(infomapecology)

# install MuxViz
devtools::install_github("manlius/muxViz")