Commit | Line | Data |
---|---|---|
7064275b | 1 | #' selectVariables |
bb551124 | 2 | #' |
7064275b | 3 | #' It is a function which construct, for a given lambda, the sets of relevant variables. |
e01c9b1f | 4 | #' |
5 | #' @param phiInit an initial estimator for phi (size: p*m*k) | |
6 | #' @param rhoInit an initial estimator for rho (size: m*m*k) | |
09ab3c16 | 7 | #' @param piInit an initial estimator for pi (size : k) |
e01c9b1f | 8 | #' @param gamInit an initial estimator for gamma |
09ab3c16 BA |
9 | #' @param mini minimum number of iterations in EM algorithm |
10 | #' @param maxi maximum number of iterations in EM algorithm | |
11 | #' @param gamma power in the penalty | |
e01c9b1f | 12 | #' @param glambda grid of regularization parameters |
09ab3c16 BA |
13 | #' @param X matrix of regressors |
14 | #' @param Y matrix of responses | |
15 | #' @param thres threshold to consider a coefficient to be equal to 0 | |
16 | #' @param tau threshold to say that EM algorithm has converged | |
4cc632c9 | 17 | #' @param ncores Number or cores for parallel execution (1 to disable) |
e01c9b1f | 18 | #' |
7064275b | 19 | #' @return a list of outputs, for each lambda in grid: selected,Rho,Pi |
cad71b2c BA |
20 | #' |
21 | #' @examples TODO | |
e01c9b1f | 22 | #' |
cad71b2c | 23 | #' @export |
bb551124 BA |
24 | #' |
25 | selectVariables = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda, | |
aa480ac1 | 26 | X,Y,thresh,tau, ncores=3, fast=TRUE) |
09ab3c16 | 27 | { |
bb551124 BA |
28 | if (ncores > 1) |
29 | { | |
b9b0b72a | 30 | cl = parallel::makeCluster(ncores, outfile='') |
bb551124 BA |
31 | parallel::clusterExport(cl=cl, |
32 | varlist=c("phiInit","rhoInit","gamInit","mini","maxi","glambda","X","Y","thresh","tau"), | |
33 | envir=environment()) | |
34 | } | |
35 | ||
36 | # Calcul pour un lambda | |
0eb161e3 | 37 | computeCoefs <- function(lambda) |
09ab3c16 | 38 | { |
aa480ac1 | 39 | params = EMGLLF(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,tau,fast) |
bb551124 | 40 | |
7064275b BA |
41 | p = dim(phiInit)[1] |
42 | m = dim(phiInit)[2] | |
07848d25 | 43 | |
7064275b | 44 | #selectedVariables: list where element j contains vector of selected variables in [1,m] |
4e826748 | 45 | selectedVariables = lapply(1:p, function(j) { |
7064275b BA |
46 | #from boolean matrix mxk of selected variables obtain the corresponding boolean m-vector, |
47 | #and finally return the corresponding indices | |
4e826748 | 48 | seq_len(m)[ apply( abs(params$phi[j,,]) > thresh, 1, any ) ] |
7064275b | 49 | }) |
09ab3c16 | 50 | |
51485a7d | 51 | list("selected"=selectedVariables,"Rho"=params$rho,"Pi"=params$pi) |
bb551124 BA |
52 | } |
53 | ||
54 | # Pour chaque lambda de la grille, on calcule les coefficients | |
55 | out <- | |
4e826748 BA |
56 | if (ncores > 1) |
57 | parLapply(cl, glambda, computeCoefs) | |
4cc632c9 BA |
58 | else |
59 | lapply(glambda, computeCoefs) | |
4e826748 BA |
60 | if (ncores > 1) |
61 | parallel::stopCluster(cl) | |
62 | ||
63 | # Suppression doublons | |
64 | sha1_array <- lapply(out, digest::sha1) | |
65 | out[ !duplicated(sha1_array) ] | |
66 | ||
5955cc25 | 67 | out |
09ab3c16 | 68 | } |