Submission

This commit is contained in:
Noah L. Schrick 2022-01-25 01:13:36 -06:00
parent 9a6b8e0a50
commit c8dabebd87
2 changed files with 94 additions and 87 deletions

View File

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

Binary file not shown.