CASCORE {CASCORE} | R Documentation |
Covariate Assisted Spectral Clustering on Ratios of Eigenvectors.
Description
Using ratios-of-eigenvectors to detect underlying communities in networks with node covariates.
Usage
CASCORE(
Adj,
Covariate,
K,
alpha = NULL,
alphan = 5,
itermax = 100,
startn = 10
)
Arguments
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 |
|
Details
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.
Value
estall |
A lavel vector |
.
References
Hu, Y., & Wang, W. (2023) Network-AdjustedCovariatesforCommunity Detection,
https://arxiv.org/abs/2306.15616
Examples
# 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)