Network-Theory_Compliance-G.../Schrick-Noah_CG-Analysis.R
2022-04-30 19:29:02 -05:00

147 lines
4.6 KiB
R

# Final Project for the University of Tulsa's CS-7863 Network Theory Course
# Compliance Graph Analysis
# Professor: Dr. McKinney, Spring 2022
# Noah L. Schrick - 1492657
library(igraph)
library(centiserve)
library(RBGL)
################## Read in the previously generated networks ##################
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
source("./CG_Files/manual_import.R")
car <- import_networks(1)
car.netname <- "Vehicle Maintenance"
hipaa <- import_networks(2)
hipaa.netname <- "HIPAA Compliance"
pci <- import_networks(3)
pci.netname <- "PCI Compliance"
# Get basic network attributes
car.adj <- get.adjacency(car)
car.deg <- rowSums(as.matrix(car.adj)) # degree
car.n <- length(V(car))
hipaa.adj <- get.adjacency(hipaa)
hipaa.deg <- rowSums(as.matrix(hipaa.adj)) # degree
hipaa.n <- length(V(hipaa))
pci.adj <- get.adjacency(pci)
pci.deg <- rowSums(as.matrix(pci.adj)) # degree
pci.n <- length(V(pci))
################################ Centralities ################################
source("centralities.R")
#### Katz
car.katz <- katz.cent(car)
hipaa.katz <- katz.cent(hipaa)
pci.katz <- katz.cent(pci)
### Page Rank
car.pr <- page.rank(car)
hipaa.pr <- page.rank(hipaa)
pci.pr <- page.rank(pci)
### K-path
car.kpe <- geokpath(car, V(car), "out")
hipaa.kpe <- geokpath(hipaa, V(hipaa), "out")
pci.kpe <- geokpath(pci, V(pci), "out")
### Betweenness
car.btwn <- betweenness(car, TRUE)
hipaa.btwn <- betweenness(hipaa, TRUE)
pci.btwn <- betweenness(pci, TRUE)
################################# Clustering #################################
source("self_newman_mod.R")
### Laplacian
car.Lap <- diag(car.deg) - car.adj # L = D-A
hipaa.Lap <- diag(hipaa.deg) - hipaa.adj
pci.Lap <- diag(pci.deg) - pci.adj
# get eigvals and vecs
car.eigs <- Re(eigen(car.Lap)$vectors[,car.n-1])
car.eig_val <- eigen(car.Lap)$values[car.n-1]
names(car.eigs) <- names(V(car))
car.l_clusters <- ifelse(car.eigs>0,1,-1)
hipaa.eigs <- Re(eigen(hipaa.Lap)$vectors[,hipaa.n-1])
hipaa.eig_val <- eigen(hipaa.Lap)$values[hipaa.n-1]
names(hipaa.eigs) <- names(V(hipaa))
hipaa.l_clusters <- ifelse(hipaa.eigs>0,1,-1)
pci.eigs <- Re(eigen(pci.Lap)$vectors[,pci.n-1])
pci.eig_val <- eigen(pci.Lap)$values[pci.n-1]
names(pci.eigs) <- names(V(pci))
pci.l_clusters <- ifelse(pci.eigs>0,1,-1)
### Recursive Newmann
car.modularity <- fastgreedy.community(car,merges=TRUE, modularity=TRUE, membership=TRUE)
car.membership.ids <- unique(car.modularity$membership)
cat(paste('Number of detected communities in the car network =',length(car.membership.ids)))
cat("community sizes: ")
sapply(membership.ids,function(x) {sum(x==car.modularity$membership)})
cat("modularity: ")
max(car.modularity$modularity)
V(car)$color=car.modularity$membership
plot(car,vertex.size=10,
vertex.label=NA,vertex.color=V(car)$color,
main=paste(car.netname, " Recursive Newman Modularity"))
hipaa.modularity <- fastgreedy.community(hipaa,merges=TRUE, modularity=TRUE, membership=TRUE)
hipaa.membership.ids <- unique(hipaa.modularity$membership)
cat(paste('Number of detected communities in the HIPAA network =',length(hipaa.membership.ids)))
cat("community sizes: ")
sapply(membership.ids,function(x) {sum(x==hipaa.modularity$membership)})
cat("modularity: ")
max(hipaa.modularity$modularity)
V(hipaa)$color=hipaa.modularity$membership
plot(hipaa,vertex.size=10,
vertex.label=NA,vertex.color=V(hipaa)$color,
main=paste(hipaa.netname, " Recursive Newman Modularity"))
pci.modularity <- fastgreedy.community(pci,merges=TRUE, modularity=TRUE, membership=TRUE)
pci.membership.ids <- unique(pci.modularity$membership)
cat(paste('Number of detected communities in the PCI network =',length(pci.membership.ids)))
cat("community sizes: ")
sapply(membership.ids,function(x) {sum(x==pci.modularity$membership)})
cat("modularity: ")
max(pci.modularity$modularity)
V(pci)$color=pci.modularity$membership
plot(pci,vertex.size=10,
vertex.label=NA,vertex.color=V(pci)$color,
main=paste(pci.netname, " Recursive Newman Modularity"))
############# Other- Tmp work
min_cut(car,"0", "2490")
min_cut(hipaa,"0","2320")
min_cut(pci,"0","60")
max_flow(car, "0", "2490")
max_flow(hipaa,"0","2320")
max_flow(pci,"0","60")
### Transitive closure
car.graph <- as.graphnel(car)
hipaa.graph <- as.graphnel(hipaa)
pci.graph <- as.graphnel(pci)
car.tc <- transitive.closure(car)
hipaa.tc <- transitive.closure(hipaa)
pci.tc <- transitive.closure(pci)
### Edge connectivty
edge_connectivity(car, "0", "2490")
edge_connectivity(hipaa,"0","2320")
edge_connectivity(pci,"0","60")
# Dominator Tree
car.dtree <- dominator_tree(car, "0", "out")$domtree
hipaa.dtree <- dominator_tree(hipaa, "0", "out")$domtree
pci.dtree <- dominator_tree(pci, "0", "out")$domtree