Submission
This commit is contained in:
parent
9a6b8e0a50
commit
c8dabebd87
@ -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)}
|
||||
|
||||
|
||||
BIN
Schrick-Noah_CS-7863_Homework-1.pdf
Normal file
BIN
Schrick-Noah_CS-7863_Homework-1.pdf
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user