diff --git a/Schrick-Noah_CS-7863_Homework-1.R b/Schrick-Noah_CS-7863_Homework-1.R index b7640b4..d008ed0 100644 --- a/Schrick-Noah_CS-7863_Homework-1.R +++ b/Schrick-Noah_CS-7863_Homework-1.R @@ -1,87 +1,94 @@ -# 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) -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=" ") -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=" ") -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=" ") -plot(g, main=mainname) - - +# 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)} + diff --git a/Schrick-Noah_CS-7863_Homework-1.pdf b/Schrick-Noah_CS-7863_Homework-1.pdf new file mode 100644 index 0000000..3b54f91 Binary files /dev/null and b/Schrick-Noah_CS-7863_Homework-1.pdf differ