## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(igraph) library(graphonmix) library(ggplot2) ## ----------------------------------------------------------------------------- # create the dense graphon W(x,y) = exp(-(x+y)/40) where x and y ranges from 1 to 100 W <- create_exp_matrix(100, 40) # plot this graphon plot_graphon(W) + coord_fixed(ratio = 1) + ggtitle("Dense graphon W") ## ----------------------------------------------------------------------------- # weights for the sparse part seq <- 2:5 wts <- (1/1.2^seq) wts <- wts/sum(wts) wts U <- line_graphon(wts) plot_graphon(U) + coord_fixed(ratio = 1) + ggtitle("Line graphon U") ## ----------------------------------------------------------------------------- # single function to generate a graph mixture gr1 <- sample_mixed_graph(W, wts, nd = 100, ns = 300, p = 0.5) # plot(gr1, vertex.label = NA, vertex.size = 1, main = "(U,W) Graph mixture") plot(gr1, edge.curved = 0.3, vertex.size = degree(gr1)*0.1, edge.color = "lightgray", # Light colored edges vertex.label = NA, vertex.color = "lightblue", main = "(U,W) Graph mixture" ) ## ----------------------------------------------------------------------------- # sample dense part and plot it grdense <- sample_graphon(W, n = 100) plot(grdense, edge.curved = 0.3, vertex.size = degree(grdense) * 0.1, edge.color = "lightgray", # Light colored edges vertex.label = NA, vertex.color = "lightblue", main = "Dense Part" ) # sample sparse part and plot it grsparse <- generate_star_union(wts, n = 300) plot(grsparse, edge.curved = 0.3, vertex.size = degree(grsparse) * 0.1, edge.color = "lightgray", # Light colored edges vertex.label = NA, vertex.color = "lightblue", main = "Sparse Part" ) # join the two graphs and plot it gr2 <- graph_join(grdense, grsparse, p = 0.5) plot(gr2, edge.curved = 0.3, vertex.size = degree(gr2) * 0.1, edge.color = "lightgray", # Light colored edges vertex.label = NA, vertex.color = "lightblue", main = "(U,W) Graph mixture" ) ## ----------------------------------------------------------------------------- degu <- sort(unique(degree(gr2)), decreasing = TRUE) # we only take the top 1/2 of the unique degree values here to see the effect of the hub nodes clearly degu <- degu[degu >= median(degu)] df <- data.frame( index = 1:length(degu), log_degree = log(degu) ) ggplot(df, aes(index, log_degree)) + geom_point() + xlab("Index") + ylab("Log Degree") ## ----------------------------------------------------------------------------- deg_dense <- sort(unique(degree(grdense)), decreasing = TRUE) deg_dense deg_sparse <- sort(unique(degree(grsparse)), decreasing = TRUE) deg_sparse deg_mix <- sort(unique(degree(gr2)), decreasing = TRUE) deg_mix ## ----------------------------------------------------------------------------- which(deg_sparse > max(deg_dense)) ## ----------------------------------------------------------------------------- out <- extract_sparse(gr2) out$num_hubs # Estimate of the mass-partition out$phat # Actual mass partition wts ## ----------------------------------------------------------------------------- autoplot(out) ## ----------------------------------------------------------------------------- Uhat <- line_graphon(out$phat) plot_graphon(Uhat) + coord_fixed(ratio = 1) + ggtitle("Estimate of U")