LOCUS_BIC_selection {LOCUS}R Documentation

BIC-based Hyper-parameters selection for LOCUS

Description

This function is to conduct the BIC-based hyper-parameters selection for LOCUS.

Usage

LOCUS_BIC_selection(Y, q, V, MaxIteration=50, penalty="SCAD", 
phi_grid_search=seq(0.2, 1, 0.2), rho_grid_search=c(0.95), 
espli1=0.001, espli2=0.001, save_LOCUS_output=TRUE, 
preprocess=TRUE)

Arguments

Y

Group-level connectivity data from N subjects, which is of dimension N x p, where p is number of edges. Each row of Y represents a subject's vectorized connectivity matrix by Ltrans function.

q

Number of ICs/subnetworks to extract.

V

Number of nodes in the network. Note: p should be equal to V(V-1)/2.

MaxIteration

Maximum number of iteractions.

penalty

The penalization approach for uniform sparsity, which can be NULL, SCAD, L1, Hardthreshold.

phi_grid_search

Grid search candidates for tuning parameter of uniform sparse penalty.

espli1

Toleration for convergence on mixing coefficient matrix, i.e. A.

espli2

Toleration for convergence on latent sources, i.e. S.

rho_grid_search

Grid search candidates for tuning parameter for selecting number of ranks in each subnetwork's decomposition.

save_LOCUS_output

Whether to save LOCUS output from each grid search.

preprocess

Whether to preprocess the data, which reduces the data dimension to q and whiten the data.

Details

In Wang, Y. and Guo, Y. (2023), the tuning parameters for learning the LOCUS model include \phi, \rho. The BIC-type criterion is proposed to select those parameters.

BIC = -2 \sum_{i=1}^N log \{g(y_i; \sum_{l=1}^{q} \hat{a}_{il} \hat{s}_l, \hat{\sigma}^2 I_p)\} + log(N) \sum_{l=1}^{q}\|\hat{s}_l\|_0

where g denotes the pdf of a multivariate Gaussian distribution, \hat{\sigma}^2 = \frac{1}{Np}\sum_i \|y_i-\sum_{l=1}^{q}\hat{a}_{il}\hat{s}_{l}\|_2^2, \|\cdot\|_0 denotes the L_0 norm . This criterion balances between model fitting and model sparsity.

Value

bic_tab

BIC values per phi and rho.

LOCUS_results

LOCUS output, if save_LOCUS_output is TRUE.

Examples

## Simulated the data to use. 
V = 50
S1 = S2 = S3 = matrix(0,ncol = V,nrow = V)
S1[5:20,5:20] = 4;S1[23:37,23:37] = 3;S1[40:48,40:48] = 3
S2[15:20,] = -3;S2[,15:20] = -3
S3[15:25,36:45] = 3; S3[36:45,15:25] = 3
Struth = rbind(Ltrans(S1,FALSE) , Ltrans(S2,FALSE), Ltrans(S3,FALSE))
set.seed(100)
Atruth = matrix(rnorm(100*3),nrow=100,ncol=3)
Residual = matrix(rnorm(100*dim(Struth)[2]),nrow=100)
Yraw = Atruth%*%Struth + Residual

##### Run Locus on the data ##### 
Locus_bic_result = LOCUS_BIC_selection(Yraw,3,V)
print(Locus_bic_result$bic_tab)
# line plot
plot(Locus_bic_result$bic_tab[,2], Locus_bic_result$bic_tab[,3], type = "b",
     xlab = "phi", ylab = "BIC")
     
# visualize the best result based on BIC
idx = which.min(Locus_bic_result$bic_tab[,3])
oldpar = par(mfrow=c(2,3))
for(i in 1:3){image(Ltrinv(Struth[i,], V, FALSE))}
for(i in 1:3){image(Ltrinv(Locus_bic_result$LOCUS_results[[idx]]$LOCUS$S[i,], 
V, FALSE))}
par(oldpar)

[Package LOCUS version 1.0 Index]