CASC {CASCORE} R Documentation

## Covariate Assisted Spectral Clustering.

### Description

CASC clusters graph nodes by applying spectral clustering with the assistance from node covariates.

### Usage

CASC(Adj, Covariate, K, 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 Adj. alphan A tuning parameter to balance between the contributions of the graph and the covariates. itermax k-means parameter, indicating the maximum number of iterations allowed. The default value is 100. startn k-means parameter. If centers is a number, how many random sets should be chosen? The default value is 10.

### Details

CASC is a community detection algorithm for networks with node covariates, proposed in Covariate-assisted spectral clustering of Binkiewicz, et al. (2017). CASC applies k-means on the first K leading eigenvectors of the balanced matrix between the Laplacian matrix and the covariate matrix.

### Value

 estall A lavel vector.

### References

Binkiewicz, N., Vogelstein, J. T., & Rohe, K. (2017). Covariate-assisted spectral clustering. Biometrika, 104(2), 361-377.
doi: 10.1093/biomet/asx008

### 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);
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])
}