Network Analyses: Difference between revisions
No edit summary |
|||
(46 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
Network analyses use graph-theoretic approaches to identifying/quantifying/describing/classifying networks of any sort. For example, a network analysis could be used to identify potential bottlenecks in a city design when large numbers of people have to evacuate, or the robustness of a distributed computer network to disruption in the event that one or more redundant servers goes offline. | Network analyses use graph-theoretic approaches to identifying/quantifying/describing/classifying networks of any sort. For example, a network analysis could be used to identify potential bottlenecks in a city design when large numbers of people have to evacuate, or the robustness of a distributed computer network to disruption in the event that one or more redundant servers goes offline. | ||
In our lab, we apply these analytic approaches to networks that describe functional (primarily) or anatomical (potentially) connectivity. Under certain assumptions about what functional role various network nodes play, we can test hypotheses about how the connections between these nodes relates to cognitive processing. Most of our work here will be done in MATLAB and using networks that are represented as adjacency matrices. An adjacency matrix is an NxN square matrix that has entries that indicate whether there is a connection (and potentially how strong it is) between any two of the N nodes in the network. Using the Louvain 2008 parcellation scheme, for example, we break the cortical surface up into 1000 regions. Each region is a node in the network, and so the adjacency matrix for this network is a 1000 x 1000 square matrix. What follows assumes that you have obtained an adjacency matrix, one way or another, and wish to carry out different types of network analyses on it. | In our lab, we apply these analytic approaches to networks that describe functional (primarily) or anatomical (potentially) connectivity. Under certain assumptions about what functional role various network nodes play, we can test hypotheses about how the connections between these nodes relates to cognitive processing. Most of our work here will be done in MATLAB and using networks that are represented as adjacency matrices. An adjacency matrix is an NxN square matrix that has entries that indicate whether there is a connection (and potentially how strong it is) between any two of the N nodes in the network. Using the Louvain 2008 parcellation scheme, for example, we break the cortical surface up into up to 1000 regions. Each region is a node in the network, and so the adjacency matrix for this network is a 1000 x 1000 square matrix. What follows assumes that you have obtained an adjacency matrix, one way or another, and wish to carry out different types of network analyses on it. We have used [[ Functional_Connectivity_(Neural_Network_Method) | neural networks]] and [[Functional_Connectivity_(Cross-Correlation_Method) | correlation-based]] methods to obtain these adjacency matrices. | ||
==Visualize Connectivity Distributions == | |||
=== Histograms === | |||
We can plot a histogram of weights for two different connectivity matrices. For example, if we have weights from two different conditions, '''lo''' and '''hi''': | |||
bins=51; | |||
figure(); | |||
hist(lo(:), bins); | |||
h=findobj(gca, 'Type', 'patch'); | |||
set(h, 'FaceColor', 'r', 'EdgeColor', 'w', 'facealpha', 0.75); | |||
hold on; | |||
hist(hi(:), bins); | |||
h1=findobj(gca, 'Type', 'patch'); | |||
set(h1, 'facealpha', 0.75); | |||
== | === Graph Diagram === | ||
MATLAB's graphing tools are helpful here. If we have a NxN adjacency matrix, '''''M''''', we can turn it into a graph (if symmetrical) or a digraph (if asymmetrical) , '''''G''''', and plot the nodes and edges using the plot function. | |||
M=rand(8)-0.5; %adjacency matrix in matrix form, includes positive and negative values | |||
M(logical(eye(size(M))))=0; %0 disconnects two nodes; remove self-connections if desired | |||
G1=digraph(M); | |||
figure(1); | |||
plot(G1); %all edges in blue | |||
figure(2); | |||
G2=rmedge(G1,find(abs(G1.Edges.Weight)<0.1)); %drop weights below a certain threshold | |||
handle=plot(G2, 'EdgeColor', 'g'); %plot pruned graph in green | |||
isneg=G2.Edges.EndNodes(G2.Edges.Weight<0,:); %get endpoints of edges that are negative | |||
highlight(handle, isneg(:,1), isneg(:,2), 'EdgeColor', 'r'); %recolor negative edges to red | |||
== | == Identify Clusters/Subnetworks == | ||
One of the first things we might wish to do is [[Community_Detection | identify the network community structure]] of our brain networks. When visualized as a sorted connectivity matrix or rendered on a brain map, this allows us to make inferences of the nature of processing taking place during the period captured in the time series data. | |||
== Obtain Network Metrics == | |||
Though visualization of network communities is instrumental to interpreting the data, we are going to rely on the hard numbers provided by various [[Connectivity Metrics | metrics of network properties]] over which we can carry out any number of statistical analyses we have at our disposal. | |||
== | ==Stochastic (Non-Parametric) Analyses== | ||
MATLAB functions exist to create synthetic networks or randomize existing networks to test against. For example, we can ask whether a particular network measure (e.g., modularity) is greater in our set of functional networks than you would expect by chance in a randomly connected set of networks with the same overall connectivity. This sort of Monte Carlo (a.k.a. Boostrap or jacknife) analysis can be set up using a simple procedure: | |||
#Obtain the set of network metrics for the intact networks | |||
#Loop for a large number of times: | |||
##Create a new set of randomized or synthetic networks | |||
##Compute these network metrics for the new networks | |||
##Record whether the network metrics for the intact network is greater than (or less than, if that's your hypothesis) the new networks | |||
#Compute the fraction of times the intact networks were better (or worse) than the simulated networks (e.g., modularity for intact networks was greater than shuffled networks 980 simulations out of 1000) | |||
Useful functions include: | |||
<code>randomizer_bin_und</code> and <code>randomize_graph_partial_und</code> from the Brain Connectivity Toolbox, and <code>randomize_graph_full</code> which was written in-house and can be found on UBFS/Scripts/Matlab. | |||
[[Category: Networks]] | [[Category: Networks]] | ||
[[Category: Network Analyses]] | |||
[[Category: Time Series]] | [[Category: Time Series]] |
Latest revision as of 13:26, 30 October 2018
Network analyses use graph-theoretic approaches to identifying/quantifying/describing/classifying networks of any sort. For example, a network analysis could be used to identify potential bottlenecks in a city design when large numbers of people have to evacuate, or the robustness of a distributed computer network to disruption in the event that one or more redundant servers goes offline.
In our lab, we apply these analytic approaches to networks that describe functional (primarily) or anatomical (potentially) connectivity. Under certain assumptions about what functional role various network nodes play, we can test hypotheses about how the connections between these nodes relates to cognitive processing. Most of our work here will be done in MATLAB and using networks that are represented as adjacency matrices. An adjacency matrix is an NxN square matrix that has entries that indicate whether there is a connection (and potentially how strong it is) between any two of the N nodes in the network. Using the Louvain 2008 parcellation scheme, for example, we break the cortical surface up into up to 1000 regions. Each region is a node in the network, and so the adjacency matrix for this network is a 1000 x 1000 square matrix. What follows assumes that you have obtained an adjacency matrix, one way or another, and wish to carry out different types of network analyses on it. We have used neural networks and correlation-based methods to obtain these adjacency matrices.
Visualize Connectivity Distributions
Histograms
We can plot a histogram of weights for two different connectivity matrices. For example, if we have weights from two different conditions, lo and hi:
bins=51; figure(); hist(lo(:), bins); h=findobj(gca, 'Type', 'patch'); set(h, 'FaceColor', 'r', 'EdgeColor', 'w', 'facealpha', 0.75); hold on; hist(hi(:), bins); h1=findobj(gca, 'Type', 'patch'); set(h1, 'facealpha', 0.75);
Graph Diagram
MATLAB's graphing tools are helpful here. If we have a NxN adjacency matrix, M, we can turn it into a graph (if symmetrical) or a digraph (if asymmetrical) , G, and plot the nodes and edges using the plot function.
M=rand(8)-0.5; %adjacency matrix in matrix form, includes positive and negative values M(logical(eye(size(M))))=0; %0 disconnects two nodes; remove self-connections if desired G1=digraph(M); figure(1); plot(G1); %all edges in blue figure(2); G2=rmedge(G1,find(abs(G1.Edges.Weight)<0.1)); %drop weights below a certain threshold handle=plot(G2, 'EdgeColor', 'g'); %plot pruned graph in green isneg=G2.Edges.EndNodes(G2.Edges.Weight<0,:); %get endpoints of edges that are negative highlight(handle, isneg(:,1), isneg(:,2), 'EdgeColor', 'r'); %recolor negative edges to red
Identify Clusters/Subnetworks
One of the first things we might wish to do is identify the network community structure of our brain networks. When visualized as a sorted connectivity matrix or rendered on a brain map, this allows us to make inferences of the nature of processing taking place during the period captured in the time series data.
Obtain Network Metrics
Though visualization of network communities is instrumental to interpreting the data, we are going to rely on the hard numbers provided by various metrics of network properties over which we can carry out any number of statistical analyses we have at our disposal.
Stochastic (Non-Parametric) Analyses
MATLAB functions exist to create synthetic networks or randomize existing networks to test against. For example, we can ask whether a particular network measure (e.g., modularity) is greater in our set of functional networks than you would expect by chance in a randomly connected set of networks with the same overall connectivity. This sort of Monte Carlo (a.k.a. Boostrap or jacknife) analysis can be set up using a simple procedure:
- Obtain the set of network metrics for the intact networks
- Loop for a large number of times:
- Create a new set of randomized or synthetic networks
- Compute these network metrics for the new networks
- Record whether the network metrics for the intact network is greater than (or less than, if that's your hypothesis) the new networks
- Compute the fraction of times the intact networks were better (or worse) than the simulated networks (e.g., modularity for intact networks was greater than shuffled networks 980 simulations out of 1000)
Useful functions include:
randomizer_bin_und
and randomize_graph_partial_und
from the Brain Connectivity Toolbox, and randomize_graph_full
which was written in-house and can be found on UBFS/Scripts/Matlab.