#! /usr/bin/Rscript
###
### Simulations for how the number of seeds, vois, and vertices
### in the graphs affects the accuracy of TopK.
### --
### Fix ratio of number of vertices in graphs: 1 (or .75)
### Fix number of vois: 1
### vary the number of seeds
###
### Heather Gaddy Patsolic
### 2015 <[email protected]>
### S.D.G
#
require(igraph)
require(clue)
require(raster)
require(foreach)
require(ggplot2)
require(VN)
run <- FALSE
if(run){
#require(doMC); nCores <- 4
require(doMPI)
## Register Cores for parallelism
if("package:doMPI" %in% search()){
cl <- startMPIcluster()
registerDoMPI(cl)} else {
registerDoMC(nCores)
}
#source("localnbd.r") # Was setting for plot, but this function is
#same as vnsgm.
frakn <- 300 # number of vertices in graph 1
fraknp <- 300 # number of vertices in graph 2
feat <- 20 # number of feature vectors
corr <- .6
svec <- 4
#svec <- c(2:5)
ratiovec <- seq(0.25,1,by=0.05)
rhovec <- 0.6
#rhovec <- c(0.6,0.7,0.8)
srv <- expand.grid(s=svec,rho=rhovec,ratio=ratiovec)
lensr <- nrow(srv)
set.seed(1234567)
# Random vectors for RDPG
lpvs <- matrix(rnorm(feat*frakn), feat, frakn) # features, 10 vertices
lpvs <- apply(lpvs, 2, function(x) { return (abs(x)/sqrt(sum(x^2))) })
Pmat <- t(lpvs)%*%lpvs
#########################
v <- 1 # voi
h <- 2 # max walk from voi
ell <- 2
g <- 0.1 # gamma <- max tolerance for alpha
R <- 30
iternum <- 20
len2 <- 300
MK <- foreach(srl = 1:lensr)%:%
foreach(le = 1:len2,.combine='rbind')%dopar%{
s <- srv[srl,]$s
r <- srv[srl,]$ratio
frakm <- frakn*r
corr <- srv[srl,]$rho
set.seed <- 12345*srl + 19*le
## A randomly generated graph
g1 <- sample_dot_product(lpvs)
A <- as.matrix(get.adjacency(g1,type="both"))
B <- adjcorrH(A,Pmat,corr)
shared <- sample(c(1:frakn),frakm,replace=FALSE)
unshared1 <- setdiff(c(1:frakn),shared)
A <- A[c(shared,unshared1),c(shared,unshared1)]
g1 <- graph_from_adjacency_matrix(A)
B <- B[shared,shared]
g2 <- graph_from_adjacency_matrix(B)
voi <- sample(c(1:(frakm)),1)
Nhtmp <- unlist(ego(g1,h,nodes=voi,mindist=1)) # mindist=0: close, 1: open
S <- sample(intersect(Nhtmp,c(1:summ)),s)
seedpot <- intersect(Nhtmp,c(1:frakm))
lsp <- length(seedpot)
# what if lsp < s ???
S <- sample(seedpot,s)
#L <- localnbd(voi,S,g1,g2,h,ell,R,g)
seeds <- cbind(S,S)
L <- vnsgm(voi,seeds,g1,g2,h,ell,R,g,sim=TRUE)
if(L$case=="possible"){
Ps <- L$P
Ps <- Ps[(1:length(L$labelsGx)),(1:length(L$labelsGxp))]
rankPs <- pass2ranksuplus(Ps)
rankvoi <- rankPs[(length(L$Sx)+1),(length(L$Sx)+1)]
rankvoi <- (rankvoi - 1)/(length(L$Cxp)-1)
}else{
rankvoi <- NA
}
c(case=L$case,normrankvoi=rankvoi,"sx"=length(L$Sx),numcand=length(L$Cxp),"s"=length(L$S))#,mstime)
}
#save.image(file="rdpgratiovaryNOplot.RData")
}else{
load("rdpgratiovaryNOplot.RData")
}
MKnrkbar <- as.numeric(lapply(MK,function(x){mean(as.numeric(x[,2]))}))
MKnrksd <- as.numeric(lapply(MK,function(x){sd(as.numeric(x[,2]))}))
MKnrksd <- MKnrksd/sqrt(len2)
MKnrkci <- cbind(c(MKnrkbar-2*MKnrksd),c(MKnrkbar+2*MKnrksd))
# for 95% CI, use 1.96 instead of 2
df1 <- data.frame(srv,MKnrkbar, MKnrkci)
#rpref <- seq(0,1,by=0.2)
#rpref <- c(0,.3,.5,.7,1)
#rstr <- which(as.numeric(as.character(df1$r)) %in% rpref)
#df1rstr <- df1[rstr,]
p04 <-
ggplot(data=df1, aes(x=ratio, y = MKnrkbar))+ #,colour=as.factor(rho))) +
scale_x_continuous(breaks = df1$ratio) +
geom_line(size=1) + #aes(colour=as.factor(rho)),size=1) +
geom_point() +
theme(axis.line.x = element_line(colour="black"),
axis.line.y = element_line(colour="black")) +
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
geom_errorbar(aes(ymin=X1, ymax=X2,aes=.7),width=0.04,size=0.75) +
theme(text=element_text(size=25)) +
ylab(expression(paste(tau,"(x')"))) +
xlab(expression(r)) +
theme(plot.title = element_text(hjust = 0.5)) +
#guides(color=guide_legend(title="rho")) +
labs(title= "RDPG: Vary ratio (r)")
## Warning: Ignoring unknown aesthetics: aes
# theme_bw() +
# theme(plot.background = element_blank(),
# panel.grid.major = element_blank(),
# panel.grid.minor = element_blank()) +
# theme(panel.border=element_blank()) +
#pdf("rdpg_ratiovary.pdf",width=8,height=6)
p04
#dev.off()
###save.image(file="srhovaryWITHplot.RData")
#if(run){
# if(exists("cl")){
# closeCluster(cl)
# mpi.quit()
# }
#}
# Time:
## Working status:
### Comments:
####Soli Deo Gloria