Counting motifs

In this use case, we will count the number of motifs in a food web. Specifically, we will count how many times there is a linear food chain (A→B→C) between three species.

using EcologicalNetwork

N = stony();

# List of motifs
m = unipartitemotifs();


The m object has 13 different motifs, named as in Stouffer et al. (2007). The function unipartitemotifs will generate them when needed.

The function to count motifs is called motif, and returns a count: how many triplets of species are in a given conformation. For example:

s1 = motif(N, m[:S1])

1035.0


We may be interested in knowing whether this motif is over or under-represented in the empirical network, compared to a random expectation. To determine this, we will shuffle interactions around in a way that preserves the number of interactionsand the degree distribution of all species, using swaps. We will create 100 replicated networks to test.

permutations = swaps(N, 100, constraint=:degree)

ms1 = map(x -> motif(x, m[:S1]), permutations)

100-element Array{Float64,1}:
602.0
451.0
588.0
572.0
582.0
617.0
483.0
612.0
589.0
567.0
⋮
523.0
548.0
450.0
577.0
515.0
627.0
575.0
536.0
576.0