Commit | Line | Data |
---|---|---|
ef67d338 BA |
1 | constructionModelesLassoRank = function(pi,rho,mini,maxi,X,Y,tau,A1,rangmin,rangmax) |
2 | { | |
3f145e9a BG |
3 | #get matrix sizes |
4 | n = dim(X)[1] | |
5 | p = dim(X)[2] | |
6 | m = dim(rho)[2] | |
7 | k = dim(rho)[3] | |
8 | L = dim(A1)[2] | |
ef67d338 BA |
9 | |
10 | # On cherche les rangs possiblement intéressants | |
3f145e9a BG |
11 | deltaRank = rangmax - rangmin + 1 |
12 | Size = deltaRank^k | |
ef67d338 BA |
13 | Rank = matrix(0, nrow=Size, ncol=k) |
14 | for(r in 1:k) | |
15 | { | |
16 | # On veut le tableau de toutes les combinaisons de rangs possibles | |
17 | # Dans la première colonne : on répète (rangmax-rangmin)^(k-1) chaque chiffre : | |
18 | # ça remplit la colonne | |
19 | # Dans la deuxieme : on répète (rangmax-rangmin)^(k-2) chaque chiffre, | |
20 | # et on fait ça (rangmax-rangmin)^2 fois | |
21 | # ... | |
22 | # Dans la dernière, on répète chaque chiffre une fois, | |
23 | # et on fait ça (rangmin-rangmax)^(k-1) fois. | |
24 | Rank[,r] = rangmin + rep(0:(deltaRank-1), deltaRank^(r-1), each=deltaRank^(k-r)) | |
25 | } | |
26 | ||
27 | # output parameters | |
3f145e9a | 28 | phi = array(0, dim=c(p,m,k,L*Size)) |
c3bc4705 | 29 | llh = matrix(0, L*Size, 2) #log-likelihood |
ef67d338 BA |
30 | for(lambdaIndex in 1:L) |
31 | { | |
32 | # on ne garde que les colonnes actives | |
33 | # 'active' sera l'ensemble des variables informatives | |
34 | active = A1[,lambdaIndex] | |
35 | active = active[-(active==0)] | |
36 | if (length(active) > 0) | |
37 | { | |
38 | for (j in 1:Size) | |
39 | { | |
40 | res = EMGrank(Pi[,lambdaIndex], Rho[,,,lambdaIndex], mini, maxi, | |
41 | X[,active], Y, tau, Rank[j,]) | |
42 | llh[(lambdaIndex-1)*Size+j,] = | |
43 | c( res$LLF, sum(Rank[j,] * (length(active)- Rank[j,] + m)) ) | |
44 | phi[active,,,(lambdaIndex-1)*Size+j] = res$phi | |
3f145e9a BG |
45 | } |
46 | } | |
47 | } | |
ef67d338 | 48 | return (list(phi=phi, llh = llh)) |
9ade3f1b | 49 | } |