<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://teaching.healthtech.dtu.dk/22140/index.php?action=history&amp;feed=atom&amp;title=ExTopology1_igraph_solutions</id>
	<title>ExTopology1 igraph solutions - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://teaching.healthtech.dtu.dk/22140/index.php?action=history&amp;feed=atom&amp;title=ExTopology1_igraph_solutions"/>
	<link rel="alternate" type="text/html" href="https://teaching.healthtech.dtu.dk/22140/index.php?title=ExTopology1_igraph_solutions&amp;action=history"/>
	<updated>2026-05-02T22:50:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://teaching.healthtech.dtu.dk/22140/index.php?title=ExTopology1_igraph_solutions&amp;diff=45&amp;oldid=prev</id>
		<title>WikiSysop: Created page with &quot;= Exercise: Network topology and statistics =  &#039;&#039;&#039;Exercise written by: Lars Rønn Olsen&#039;&#039;&#039;  Notes on today&#039;s exercise: today we will get a bit more advanced in our use of igraph. If you get stuck, remember that &#039;&#039;Google and chatGPT are your friends.&#039;&#039;  == Part I. Getting started ==  &lt;pre style=&quot;overflow:auto;&quot;&gt; load(&quot;/home/projects/22140/exercise3.Rdata&quot;) &lt;/pre&gt;  &#039;&#039;&#039;TASK: Create an igraph object with node attributes&#039;&#039;&#039;  &lt;pre style=&quot;overflow:auto;&quot;&gt; g &lt;- graph_from_data_f...&quot;</title>
		<link rel="alternate" type="text/html" href="https://teaching.healthtech.dtu.dk/22140/index.php?title=ExTopology1_igraph_solutions&amp;diff=45&amp;oldid=prev"/>
		<updated>2024-03-05T14:12:48Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Exercise: Network topology and statistics =  &amp;#039;&amp;#039;&amp;#039;Exercise written by: Lars Rønn Olsen&amp;#039;&amp;#039;&amp;#039;  Notes on today&amp;#039;s exercise: today we will get a bit more advanced in our use of igraph. If you get stuck, remember that &amp;#039;&amp;#039;Google and chatGPT are your friends.&amp;#039;&amp;#039;  == Part I. Getting started ==  &amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt; load(&amp;quot;/home/projects/22140/exercise3.Rdata&amp;quot;) &amp;lt;/pre&amp;gt;  &amp;#039;&amp;#039;&amp;#039;TASK: Create an igraph object with node attributes&amp;#039;&amp;#039;&amp;#039;  &amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt; g &amp;lt;- graph_from_data_f...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Exercise: Network topology and statistics =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exercise written by: Lars Rønn Olsen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes on today&amp;#039;s exercise: today we will get a bit more advanced in our use of igraph. If you get stuck, remember that &amp;#039;&amp;#039;Google and chatGPT are your friends.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Part I. Getting started ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
load(&amp;quot;/home/projects/22140/exercise3.Rdata&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TASK: Create an igraph object with node attributes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
g &amp;lt;- graph_from_data_frame(d = interactions, directed = FALSE, vertices = node_attributes)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Part II. Network layout and Selecting nodes ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TASK: Explore network layouts&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
Try two different layouts &amp;quot;kk&amp;quot; and &amp;quot;fr&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
ggraph(g, layout = &amp;quot;fr&amp;quot;) +&lt;br /&gt;
  geom_edge_link() + &lt;br /&gt;
  geom_node_point()&lt;br /&gt;
&lt;br /&gt;
ggraph(g, layout = &amp;quot;kk&amp;quot;) +&lt;br /&gt;
  geom_edge_link() + &lt;br /&gt;
  geom_node_point()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TASK: Explore TP53 in the network&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 1&amp;#039;&amp;#039;&amp;#039;: How many proteins interact with TP53?&lt;br /&gt;
&lt;br /&gt;
Color the nodes depending on whether they interact with TP53 or not, and change the shape of the TP53 node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
degree(graph = g, v = &amp;quot;prot_7157&amp;quot;)&lt;br /&gt;
V(g)$TP53_neighbors &amp;lt;- names(V(g)) %in% names(neighbors(graph = g, v = &amp;quot;prot_7157&amp;quot;))&lt;br /&gt;
V(g)$TP53 &amp;lt;- names(V(g)) == &amp;quot;prot_7157&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 2&amp;#039;&amp;#039;&amp;#039;: Paste a screen shot of your TP53 annotated network into your report.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
ggraph(g, layout = &amp;quot;fr&amp;quot;) +&lt;br /&gt;
  geom_edge_link() + &lt;br /&gt;
  geom_node_point(aes(color = TP53_neighbors, shape = TP53))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now create a subnetwork consisting only of TP53 and its interaction partners, and label with gene names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
g_TP53 &amp;lt;- delete_vertices(graph = g, v = !names(V(g)) %in% names(neighbors(graph = g, v = &amp;quot;prot_7157&amp;quot;)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 3&amp;#039;&amp;#039;&amp;#039;: Paste a screen shot of your TP53 subnetwork into your report.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
ggraph(g_TP53, layout = &amp;quot;fr&amp;quot;) +&lt;br /&gt;
  geom_edge_link() + &lt;br /&gt;
  geom_node_point(aes(color = TP53_neighbors, shape = TP53)) +&lt;br /&gt;
  geom_node_text(aes(label = Gene_Id), repel = TRUE)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Part III. Network statistics ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 4&amp;#039;&amp;#039;&amp;#039;: Calculate the following statistics for the full network:&lt;br /&gt;
&lt;br /&gt;
* Average node degree&lt;br /&gt;
* Average clustering coefficient (also known as transitivity)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
mean(degree(g))&lt;br /&gt;
transitivity(g)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 5&amp;#039;&amp;#039;&amp;#039;: Make a plot of the distribution of node degrees and paste this into your report&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
df &amp;lt;- data.frame(k = degree(g))&lt;br /&gt;
ggplot(df, aes(x = k)) +&lt;br /&gt;
  geom_density() + &lt;br /&gt;
  geom_vline(xintercept = length(neighbors(graph = g, v = &amp;quot;prot_7157&amp;quot;)), color = &amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now calculate the node-wise clustering coefficient. This is done with the transitivity() function, setting the variable type = &amp;quot;local&amp;quot;.&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 6&amp;#039;&amp;#039;&amp;#039;: Make a plot of the distribution of clustering coefficients and paste this into your report&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
df &amp;lt;- data.frame(c = transitivity(graph = g, type = &amp;quot;local&amp;quot;))&lt;br /&gt;
ggplot(df, aes(x = c)) +&lt;br /&gt;
  geom_density() +&lt;br /&gt;
  geom_vline(xintercept = transitivity(graph = g, type = &amp;quot;local&amp;quot;, v = &amp;quot;prot_7157&amp;quot;), color = &amp;quot;red&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Look at box 2 in the Barabasi paper. In order to determine whether a network is random, scale free or hierarchical, you need to produce two figures: log(k) vs log(P(k)) and log(k) vs log(C(k)). k is the degree of the nodes in the graph, P(k) is the probability of a given k, and C(k) is the average clustering coefficient of all nodes with a degree of k.&lt;br /&gt;
&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 7&amp;#039;&amp;#039;&amp;#039;: Make log-log plots of k vs P(k) and k vs C(k) with a regression line and paste them into your report.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
df &amp;lt;- data.frame(table(degree(graph = g))/sum(degree(graph = g)))&lt;br /&gt;
df$Var1 &amp;lt;- as.numeric(df$Var1)&lt;br /&gt;
colnames(df) &amp;lt;- c(&amp;quot;k&amp;quot;, &amp;quot;Pk&amp;quot;)&lt;br /&gt;
ggplot(data.frame(df), aes(x = log(k), y = log(Pk))) +&lt;br /&gt;
  geom_point() +&lt;br /&gt;
  geom_smooth(method = &amp;quot;lm&amp;quot;, se = FALSE)&lt;br /&gt;
&lt;br /&gt;
df &amp;lt;- data.frame(k = degree(graph = g), c = transitivity(graph = g, type = &amp;quot;local&amp;quot;))&lt;br /&gt;
df2 &amp;lt;- NULL&lt;br /&gt;
for(i in unique(df$k)) {&lt;br /&gt;
  df2 &amp;lt;- rbind(df2, c(i, mean(df[df$k==i,]$c, na.rm = TRUE)))&lt;br /&gt;
}&lt;br /&gt;
colnames(df2) &amp;lt;- c(&amp;quot;k&amp;quot;, &amp;quot;Ck&amp;quot;)&lt;br /&gt;
ggplot(data.frame(df2), aes(x = log(k), y = log(Ck))) +&lt;br /&gt;
  geom_point() +&lt;br /&gt;
  geom_smooth(method = &amp;quot;lm&amp;quot;, se = FALSE)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 8&amp;#039;&amp;#039;&amp;#039;: Based on the distribution of the node degree and the clustering coefficients, the network structure appears to be random, scale free or hierarchical? (Remember that a hierarchical network is also scale free).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Appears to be hierarchical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Part IV. Network connectivity ==&lt;br /&gt;
&lt;br /&gt;
Calculate the network diameter (longest shortest path).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
diameter(g)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Office-notes-line_drawing.png|30px|left]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Report question 9&amp;#039;&amp;#039;&amp;#039;: What is the highest number of edges that you need to connect any two nodes in the network?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
</feed>