# kolaczyk/sand

Fetching contributors…
Cannot retrieve contributors at this time
305 lines (267 sloc) 6.25 KB
 # SAND with R, chapter5.tex # CHUNK 1 library(sand) set.seed(42) g.er <- erdos.renyi.game(100, 0.02) plot(g.er, layout=layout.circle, vertex.label=NA) # CHUNK 2 is.connected(g.er) # --- ## [1] FALSE # --- # CHUNK 3 table(sapply(decompose.graph(g.er), vcount)) # --- ## ## 1 2 3 4 71 ## 15 2 2 1 1 # --- # CHUNK 4 mean(degree(g.er)) # --- ## [1] 1.9 # --- # CHUNK 5 hist(degree(g.er), col="lightblue", xlab="Degree", ylab="Frequency", main="") # CHUNK 6 average.path.length(g.er) # --- ## [1] 5.276511 # --- diameter(g.er) # --- ## [1] 14 # --- # CHUNK 7 transitivity(g.er) # --- ## [1] 0.01639344 # --- # CHUNK 8 degs <- c(2,2,2,2,3,3,3,3) g1 <- degree.sequence.game(degs, method="vl") g2 <- degree.sequence.game(degs, method="vl") plot(g1, vertex.label=NA) plot(g2, vertex.label=NA) # CHUNK 9 graph.isomorphic(g1, g2) # --- ## [1] FALSE # --- # CHUNK 10 c(ecount(g1), ecount(g2)) # --- ## [1] 10 10 # --- # CHUNK 11 data(yeast) degs <- degree(yeast) fake.yeast <- degree.sequence.game(degs, method=c("vl")) all(degree(yeast) == degree(fake.yeast)) # --- ## [1] TRUE # --- # CHUNK 12 diameter(yeast) # --- ## [1] 15 # --- diameter(fake.yeast) # --- ## [1] 7 # --- # CHUNK 13 transitivity(yeast) # --- ## [1] 0.4686178 # --- transitivity(fake.yeast) # --- ## [1] 0.03968903 # --- # CHUNK 14 g.ws <- watts.strogatz.game(1, 25, 5, 0.05) plot(g.ws, layout=layout.circle, vertex.label=NA) # CHUNK 15 g.lat100 <- watts.strogatz.game(1, 100, 5, 0) transitivity(g.lat100) # --- ## [1] 0.6666667 # --- # CHUNK 16 diameter(g.lat100) # --- ## [1] 10 # --- average.path.length(g.lat100) # --- ## [1] 5.454545 # --- # CHUNK 17 g.ws100 <- watts.strogatz.game(1, 100, 5, 0.05) diameter(g.ws100) # --- ## [1] 4 # --- average.path.length(g.ws100) # --- ## [1] 2.669091 # --- transitivity(g.ws100) # --- ## [1] 0.4864154 # --- # CHUNK 18 steps <- seq(-4, -0.5, 0.1) len <- length(steps) cl <- numeric(len) apl <- numeric(len) ntrials <- 100 function(x) { for (i in (1:len)) { cltemp <- numeric(ntrials) apltemp <- numeric(ntrials) for (j in (1:ntrials)) { g <- watts.strogatz.game(1, 1000, 10, 10^steps[i]) cltemp[j] <- transitivity(g) apltemp[j] <- average.path.length(g) } cl[i] <- mean(cltemp) apl[i] <- mean(apltemp) } } cl <- c(0.710063379997766, 0.709978692214238, 0.709907143256545, 0.709724130686251, 0.709438119171845, 0.709084388626035, 0.708846266062516, 0.70839051192321, 0.707759691875033, 0.707113107172047, 0.706190905933217, 0.705111695935303, 0.703784841816035, 0.702347962546443, 0.699998029666335, 0.696966876979092, 0.693486200400489, 0.689434391992611, 0.683909800354255, 0.676998368887877, 0.669280399418907, 0.657931797843006, 0.645296561052957, 0.628819148376097, 0.609573848258676, 0.585356133848734, 0.55633728515175, 0.521088308467222, 0.480754321558662, 0.433680652553029, 0.378558209487185, 0.318761294080951, 0.25616767320489, 0.193136725458156, 0.134572797222469, 0.0849655822333312) apl <- c(19.2309712512513, 18.1696153953954, 17.7627795195195, 16.6679303103103, 14.5979843643644, 12.8854347747748, 12.1038251251251, 11.2341607007007, 9.82806862862863, 9.11716512512512, 8.24078900900901, 7.61965115115115, 7.0006803003003, 6.52964078078078, 6.03792086086086, 5.60314024024024, 5.26338822822823, 4.98922616616617, 4.70584088088088, 4.45406394394394, 4.26384696696697, 4.05971747747748, 3.89097137137137, 3.72829705705706, 3.58416728728729, 3.45041687687688, 3.33307095095095, 3.22760666666667, 3.12912454454454, 3.0362582982983, 2.94736488488488, 2.87122124124124, 2.80854338338338, 2.75799567567568, 2.71760948948949, 2.68516954954955) # CHUNK 19 plot(steps, cl/max(cl), ylim=c(0, 1), lwd=3, type="l", col="blue", xlab=expression(log[10](p)), ylab="Clustering and Average Path Length") lines(steps, apl/max(apl), lwd=3, col="red") # CHUNK 20 set.seed(42) g.ba <- barabasi.game(100, directed=FALSE) # CHUNK 21 plot(g.ba, layout=layout.circle, vertex.label=NA) # CHUNK 22 hist(degree(g.ba), col="lightblue", xlab="Degree", ylab="Frequency", main="") # CHUNK 23 summary(degree(g.ba)) # --- ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 1.00 1.00 1.00 1.98 2.00 11.00 # --- # CHUNK 24 average.path.length(g.ba) # --- ## [1] 4.923434 # --- diameter(g.ba) # --- ## [1] 9 # --- # CHUNK 25 transitivity(g.ba) # --- ## [1] 0 # --- # CHUNK 26 data(karate) nv <- vcount(karate) ne <- ecount(karate) degs <- degree(karate) # CHUNK 27 ntrials <- 1000 # CHUNK 28 num.comm.rg <- numeric(ntrials) for(i in (1:ntrials)){ g.rg <- erdos.renyi.game(nv, ne, type="gnm") c.rg <- fastgreedy.community(g.rg) num.comm.rg[i] <- length(c.rg) } # CHUNK 29 num.comm.grg <- numeric(ntrials) for(i in (1:ntrials)){ g.grg <- degree.sequence.game(degs, method="vl") c.grg <- fastgreedy.community(g.grg) num.comm.grg[i] <- length(c.grg) } # CHUNK 30 rslts <- c(num.comm.rg,num.comm.grg) indx <- c(rep(0, ntrials), rep(1, ntrials)) counts <- table(indx, rslts)/ntrials barplot(counts, beside=TRUE, col=c("blue", "red"), xlab="Number of Communities", ylab="Relative Frequency", legend=c("Fixed Size", "Fixed Degree Sequence")) # CHUNK 31 library(igraphdata) data(macaque) summary(macaque) # --- ## IGRAPH DN-- 45 463 -- ## attr: Citation (g/c), Author (g/c), shape (v/c), ## name (v/c) # --- # CHUNK 32 clust.coef.dir <- function(graph) { A <- as.matrix(get.adjacency(graph)) S <- A + t(A) deg <- degree(graph, mode=c("total")) num <- diag(S %*% S %*% S) denom <- diag(A %*% A) denom <- 2 * (deg * (deg - 1) - 2 * denom) cl <- mean(num/denom) return(cl) } # CHUNK 33 ntrials <- 1000 nv <- vcount(macaque) ne <- ecount(macaque) cl.rg <- numeric(ntrials) apl.rg <- numeric(ntrials) for (i in (1:ntrials)) { g.rg <- erdos.renyi.game(nv, ne, type="gnm", directed=TRUE) cl.rg[i] <- clust.coef.dir(g.rg) apl.rg[i] <- average.path.length(g.rg) } # CHUNK 34 summary(cl.rg) # --- ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.2159 0.2302 0.2340 0.2340 0.2377 0.2548 # --- # CHUNK 35 summary(apl.rg) # --- ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 1.810 1.827 1.833 1.833 1.838 1.858 # --- # CHUNK 36 clust.coef.dir(macaque) # --- ## [1] 0.5501073 # --- average.path.length(macaque) # --- ## [1] 2.148485 # ---