From d7afb3cdb02c2a3a02b8fd216b295836d4d1a3a9 Mon Sep 17 00:00:00 2001 From: noah Date: Mon, 24 Jan 2022 23:26:05 -0600 Subject: [PATCH] Submission --- Schrick-Noah_CS-7863_Homework-1.R | 86 +++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Schrick-Noah_CS-7863_Homework-1.R diff --git a/Schrick-Noah_CS-7863_Homework-1.R b/Schrick-Noah_CS-7863_Homework-1.R new file mode 100644 index 0000000..6a6387c --- /dev/null +++ b/Schrick-Noah_CS-7863_Homework-1.R @@ -0,0 +1,86 @@ +# 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=" ") +plot(g, vertex.size = g.deg) +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 <- 50/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=" ") +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 <- 50/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=" ") +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 <- 50/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=" ") +plot(g, main=mainname) + +