## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----simulate----------------------------------------------------------------- library(INCVCommunityDetection) set.seed(42) net <- community.sim(k = 3, n = 150, n1 = 50, p = 0.5, q = 0.05) table(net$membership) ## ----adj-dim, fig.width=5, fig.height=5--------------------------------------- dim(net$adjacency) ord <- order(net$membership) image(net$adjacency[ord, ord], main = "Adjacency matrix (3-community SBM, reordered)", xlab = "Node", ylab = "Node") ## ----incv-ffold--------------------------------------------------------------- result <- nscv.f.fold(net$adjacency, k.vec = 2:6, f = 5) result$k.loss # K selected by neg-log-likelihood result$k.mse # K selected by MSE ## ----loss-curve, fig.width=6, fig.height=4------------------------------------ plot(2:6, result$cv.loss, type = "b", pch = 19, xlab = "Number of communities (K)", ylab = "CV Negative Log-Likelihood", main = "INCV f-fold: CV loss by K") abline(v = result$k.loss, lty = 2, col = "red") ## ----incv-random-------------------------------------------------------------- result2 <- nscv.random.split(net$adjacency, k.vec = 2:6, split = 0.66, ite = 20) result2$k.chosen ## ----random-curve, fig.width=6, fig.height=4---------------------------------- plot(2:6, result2$cv.loss, type = "b", pch = 19, xlab = "Number of communities (K)", ylab = "CV Negative Log-Likelihood", main = "INCV random-split: CV loss by K") abline(v = result2$k.chosen, lty = 2, col = "red") ## ----ecv---------------------------------------------------------------------- ecv <- ECV.for.blockmodel(net$adjacency, max.K = 6, B = 3) ecv$dev.model # best by deviance ecv$l2.model # best by L2 ecv$auc.model # best by AUC ## ----ncv---------------------------------------------------------------------- ncv <- NCV.for.blockmodel(net$adjacency, max.K = 6, cv = 3) ncv$dev.model ncv$l2.model ## ----spectral----------------------------------------------------------------- cl <- SBM.spectral.clustering(net$adjacency, k = 3) table(cl$cluster) prob <- SBM.prob(cl$cluster, k = 3, A = net$adjacency, restricted = TRUE) round(prob$p.matrix, 3) ## ----sbm-decay---------------------------------------------------------------- net2 <- community.sim.sbm(n = 120, n1 = 40, eta = 0.3, rho = 0.2, K = 4) round(net2$conn, 4) ## ----session------------------------------------------------------------------ sessionInfo()