CASCORE {CASCORE} | R Documentation |
Using ratios-of-eigenvectors to detect underlying communities in networks with node covariates.
CASCORE(
Adj,
Covariate,
K,
alpha = NULL,
alphan = 5,
itermax = 100,
startn = 10
)
Adj |
A 0/1 adjacency matrix. |
Covariate |
A covariate matrix. The rows correspond to nodes and the columns correspond to covariates. |
K |
A positive integer, indicating the number of underlying communities in graph |
alpha |
A numeric vector, each element of which is a tuning parameter to weigh the covariate matrix. |
alphan |
The number of candidates |
itermax |
|
startn |
|
CASCORE is fully established in Network-Adjusted Covariates for Community Detection
of Hu & Wang (2023). CASCORE detects the latent community structure under the covariate
assisted degree corrected stochastic block model (CADCSBM), and it allows the disagreement
between the community structures indicated in the graph and the covariates, respectively.
K-means
is applied on the entry-wise ratios between first leading eigenvector and
each of the other K
leading eigenvectors of the combined matrix of the adjacency matrix
and the covariate matrix, to reveal the underlying memberships.
estall |
A lavel vector |
.
Hu, Y., & Wang, W. (2023) Network-AdjustedCovariatesforCommunity Detection,
https://arxiv.org/abs/2306.15616
# Simulate the Network
n = 10; K = 2;
theta = 0.4 + (0.45-0.05)*(seq(1:n)/n)^2; Theta = diag(theta);
P = matrix(c(0.8, 0.2, 0.2, 0.8), byrow = TRUE, nrow = K)
set.seed(2022)
l = sample(1:K, n, replace=TRUE); # node labels
Pi = matrix(0, n, K) # label matrix
for (k in 1:K){
Pi[l == k, k] = 1
}
Omega = Theta %*% Pi %*% P %*% t(Pi) %*% Theta;
Adj = matrix(runif(n*n, 0, 1), nrow = n);
Adj = Omega - Adj;
Adj = 1*(Adj >= 0)
diag(Adj) = 0
Adj[lower.tri(Adj)] = t(Adj)[lower.tri(Adj)]
caseno = 4; Nrange = 10; Nmin = 10; prob1 = 0.9; p = n*4;
Q = matrix(runif(p*K, 0, 1), nrow = p, ncol = K)
Q = sweep(Q,2,colSums(Q),`/`)
W = matrix(0, nrow = n, ncol = K);
for(jj in 1:n) {
if(runif(1) <= prob1) {W[jj, 1:K] = Pi[jj, ];}
else W[jj, sample(K, 1)] = 1;
}
W = t(W)
D0 = Q %*% W
X = matrix(0, n, p)
N = switch(caseno, rep(100, n), rep(100, n), round(runif(n)*Nrange+ Nmin),
round(runif(n)* Nrange+Nmin))
for (i in 1: ncol(D0)){
X[i, ] = rmultinom(1, N[i], D0[, i])
}
CASCORE(Adj, X, 2)