View source: R/LOCUS_BIC_selection.R
LOCUS_BIC_selection | R Documentation |
This function is to conduct the BIC-based hyper-parameters selection for LOCUS.
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)
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 |
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 |
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 |
In Wang, Y. and Guo, Y. (2023), the tuning parameters for learning the LOCUS model include φ, ρ. The BIC-type criterion is proposed to select those parameters.
BIC = -2 ∑_{i=1}^N log \{g(y_i; ∑_{l=1}^{q} \hat{a}_{il} \hat{s}_l, \hat{σ}^2 I_p)\} + log(N) ∑_{l=1}^{q}\|\hat{s}_l\|_0
where g denotes the pdf of a multivariate Gaussian distribution, \hat{σ}^2 = \frac{1}{Np}∑_i \|y_i-∑_{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.
bic_tab |
BIC values per phi and rho. |
LOCUS_results |
LOCUS output, if save_LOCUS_output is TRUE. |
## 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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.