# Homework 1 for the University of Tulsa's CS-7863 Network Theory Course # Degree, Eigenvector, Katz, and Page Rank Centralities on igraph networks # Professor: Dr. McKinney, Fall 2021 # Noah Schrick - 1492657 # Imports #install.packages("igraph") #install.packages("igraphdata") library(igraph) library(igraphdata) data(karate) data(yeast) # Create our graph object g <- karate g.netname <- "karate" #g <- yeast #g.netname <- "yeast" ############### Degree ############### # Get degree g.deg <- degree(g) # Plots mainname <- paste("Network based on Degree for the", g.netname, "network", sep=" ") sizemult <- 25/max(g.deg) if(g.netname == "yeast"){ plot(g, vertex.size = g.deg*sizemult, main=mainname, vertex.label=NA) } else{plot(g, vertex.size = g.deg*sizemult, main=mainname)} g.hist <- hist(g.deg,-1:max(g.deg),plot=F) plot(g.hist) ############### Eigenvector Centrality ############### # igraph's eigenvector centrality g.eigs <- eigen_centrality(g)$vector # resolves degree ties g.eigs.sorted <- sort(g.eigs,decreasing=T) t(t(g.eigs.sorted)) #print one element per line sizemult <- 25/g.eigs.sorted[1] V(g)$size <- (g.eigs*sizemult) #size the network nodes by eigenvector centrality mainname <- paste("Network based on Eigenvector Centrality for the", g.netname, "network", sep=" ") if(g.netname == "yeast"){ plot(g, main=mainname, vertex.label=NA) } else{plot(g, main=mainname)} ############### Page Rank ############### # via library: g.pr <- page.rank(g,)$vector g.pr.sorted <- sort(g.pr, decreasing = T) t(t(g.pr.sorted)) sizemult <- 25/g.pr.sorted[1] V(g)$size <- (g.pr*sizemult) #size the network nodes by page rank mainname <- paste("Network based on Page Rank for the", g.netname, "network", sep=" ") if(g.netname == "yeast"){ plot(g, main=mainname, vertex.label=NA) } else{plot(g, main=mainname)} ############### Katz ############### katz.cent <- function(A, alpha=NULL, beta=NULL){ #NULL sets the default value if (class(A) == 'igraph'){ #Error checking. Turn into adj matrix. A <- get.adjacency(A) } lam.dom <- eigen(A)$values[1] #dom eigenvec if (is.null(alpha)){ alpha <- 0.9 * (1/lam.dom) #Set alpha to 90% of max allowed } n <- nrow(A) if (is.null(beta)){ beta <- matrix(rep(1/n, n),ncol=1) } #Katz scores scores <- solve(diag(n) - alpha*A,beta) return(scores) } kcs <- katz.cent(g) # call the function kcs.df <- data.frame(as.matrix(kcs), row.names = V(g)$name) # add the names kcs.df <- kcs.df[order(-kcs.df[,1]), , drop = FALSE] # sort by decreasing kcs.df <- kcs.df/max(kcs.df) # make non-neg kcs.df sizemult <- 25/kcs.df[,1][1] V(g)$size <- (kcs*sizemult) #size the network nodes by page rank mainname <- paste("Network based on Katz Centrality for the", g.netname, "network", sep=" ") if(g.netname == "yeast"){ plot(g, main=mainname, vertex.label=NA) } else{plot(g, main=mainname)}