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
# 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)}

Binary file not shown.