first draft of EMGLLF.R and EMGrank.R (should work)
[valse.git] / pkg / R / constructionModelesLassoRank.R
CommitLineData
ef67d338
BA
1constructionModelesLassoRank = 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 }
46a2e676 48 return (list("phi"=phi, "llh" = llh))
9ade3f1b 49}