c7dab9ff |
1 | #' Main function |
2 | #' |
3 | #' @param X matrix of covariates (of size n*p) |
4 | #' @param Y matrix of responses (of size n*m) |
5 | #' @param procedure among 'LassoMLE' or 'LassoRank' |
6 | #' @param selecMod method to select a model among 'SlopeHeuristic', 'BIC', 'AIC' |
7 | #' @param gamma integer for the power in the penaly, by default = 1 |
8 | #' @param mini integer, minimum number of iterations in the EM algorithm, by default = 10 |
9 | #' @param maxi integer, maximum number of iterations in the EM algorithm, by default = 100 |
10 | #' @param eps real, threshold to say the EM algorithm converges, by default = 1e-4 |
11 | #' @param kmin integer, minimum number of clusters, by default = 2 |
12 | #' @param kmax integer, maximum number of clusters, by default = 10 |
13 | #' @param rang.min integer, minimum rank in the low rank procedure, by default = 1 |
14 | #' @param rang.max integer, maximum rank in the |
15 | #' @return a list with estimators of parameters |
16 | #' @export |
17 | #----------------------------------------------------------------------- |
51485a7d |
18 | valse = function(X,Y,procedure = 'LassoMLE',selecMod = 'BIC',gamma = 1,mini = 10, |
19 | maxi = 100,eps = 1e-4,kmin = 2,kmax = 5, |
c7dab9ff |
20 | rang.min = 1,rang.max = 10) { |
21 | ################################## |
22 | #core workflow: compute all models |
23 | ################################## |
24 | |
25 | p = dim(phiInit)[1] |
26 | m = dim(phiInit)[2] |
51485a7d |
27 | n = dim(X)[1] |
c7dab9ff |
28 | |
51485a7d |
29 | tableauRecap = array(, dim=c(1000,4)) |
30 | cpt = 0 |
c7dab9ff |
31 | print("main loop: over all k and all lambda") |
51485a7d |
32 | |
33 | for (k in kmin:kmax){ |
c7dab9ff |
34 | print(k) |
c7dab9ff |
35 | print("Parameters initialization") |
36 | #smallEM initializes parameters by k-means and regression model in each component, |
37 | #doing this 20 times, and keeping the values maximizing the likelihood after 10 |
38 | #iterations of the EM algorithm. |
39 | init = initSmallEM(k, X, Y) |
40 | phiInit <<- init$phiInit |
41 | rhoInit <<- init$rhoInit |
42 | piInit <<- init$piInit |
43 | gamInit <<- init$gamInit |
51485a7d |
44 | source('~/valse/pkg/R/gridLambda.R') |
e54d1bb9 |
45 | gridLambda <<- gridLambda(phiInit, rhoInit, piInit, gamInit, X, Y, gamma, mini, maxi, eps) |
c7dab9ff |
46 | |
47 | print("Compute relevant parameters") |
48 | #select variables according to each regularization parameter |
49 | #from the grid: A1 corresponding to selected variables, and |
50 | #A2 corresponding to unselected variables. |
51485a7d |
51 | |
52 | params = selectiontotale(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,gridLambda[seq(1,length(gridLambda), by=3)],X,Y,1e-8,eps) |
53 | params2 = selectVariables(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,gridLambda[seq(1,length(gridLambda), by=3)],X,Y,1e-8,eps) |
54 | ## etrange : params et params 2 sont différents ... |
55 | |
f1b0e0ab |
56 | selected <<- params$selected |
c7dab9ff |
57 | Rho <<- params$Rho |
58 | Pi <<- params$Pi |
59 | |
60 | if (procedure == 'LassoMLE') { |
61 | print('run the procedure Lasso-MLE') |
62 | #compute parameter estimations, with the Maximum Likelihood |
63 | #Estimator, restricted on selected variables. |
51485a7d |
64 | model[[k]] = constructionModelesLassoMLE(phiInit, rhoInit,piInit,gamInit,mini,maxi,gamma,X,Y,thresh,eps,selected) |
65 | LLH = unlist(model[[k]]$llh)[seq(1,2*length(model[[k]]),2)] |
66 | D = unlist(model[[k]]$llh)[seq(1,2*length(model[[k]]),2)+1] |
c7dab9ff |
67 | } else { |
68 | print('run the procedure Lasso-Rank') |
69 | #compute parameter estimations, with the Low Rank |
70 | #Estimator, restricted on selected variables. |
71 | model = constructionModelesLassoRank(Pi, Rho, mini, maxi, X, Y, eps, |
72 | A1, rank.min, rank.max) |
73 | |
74 | ################################################ |
75 | ### Regarder la SUITE |
76 | phi = runProcedure2()$phi |
77 | Phi2 = Phi |
78 | if (dim(Phi2)[1] == 0) |
79 | { |
80 | Phi[, , 1:k,] <<- phi |
81 | } else |
82 | { |
83 | Phi <<- array(0, dim = c(p, m, kmax, dim(Phi2)[4] + dim(phi)[4])) |
84 | Phi[, , 1:(dim(Phi2)[3]), 1:(dim(Phi2)[4])] <<- Phi2 |
85 | Phi[, , 1:k,-(1:(dim(Phi2)[4]))] <<- phi |
86 | } |
87 | } |
51485a7d |
88 | tableauRecap[(cpt+1):(cpt+length(model[[k]])), ] = matrix(c(LLH, D, rep(k, length(model[[k]])), 1:length(model[[k]])), ncol = 4) |
89 | cpt = cpt+length(model[[k]]) |
c7dab9ff |
90 | } |
91 | print('Model selection') |
51485a7d |
92 | |
93 | tableauRecap = array(dim = c()) |
c7dab9ff |
94 | if (selecMod == 'SlopeHeuristic') { |
95 | |
96 | } else if (selecMod == 'BIC') { |
51485a7d |
97 | BIC = -2*tableauRecap[,1]+log(n)*tableauRecap[,2] |
98 | indMinBIC = which.min(BIC) |
99 | return(model[[tableauRecap[indMinBIC,3]]][[tableauRecap[indMinBIC,4]]]) |
c7dab9ff |
100 | } else if (selecMod == 'AIC') { |
101 | |
102 | } |
103 | } |