Commit | Line | Data |
---|---|---|
1d3c1faa BA |
1 | function[phi,lvraisemblance] = constructionModelesLassoRank(Pi,Rho,mini,maxi,X,Y,tau,A1,rangmin,rangmax) |
2 | ||
3 | PI = 4.0 * atan(1.0); | |
4 | ||
5 | %get matrix sizes | |
6 | [n,p] = size(X); | |
7 | [~,m,k,~] = size(Rho); | |
8 | L = size(A1, 2); %A1 est p x m+1 x L ou p x L ?! | |
9 | ||
10 | %On cherche les rangs possiblement intéressants | |
11 | deltaRank = rangmax - rangmin + 1; | |
12 | Size = deltaRank^k; | |
13 | Rank = zeros(Size,k,'int64'); | |
14 | for r=1:k | |
15 | %On veut le tableau de toutes les combinaisons de rangs possibles | |
16 | %Dans la première colonne : on répète (rangmax-rangmin)^(k-1) chaque chiffre : ca remplit la colonne | |
17 | %Dans la deuxieme : on répète (rangmax-rangmin)^(k-2) chaque chiffre, et on fait ca (rangmax-rangmin)^2 fois | |
18 | %... | |
19 | %Dans la dernière, on répète chaque chiffre une fois, et on fait ca (rangmin-rangmax)^(k-1) fois. | |
20 | Rank(:,r) = rangmin + reshape(repmat(0:(deltaRank-1), deltaRank^(k-r), deltaRank^(r-1)), Size, 1); | |
21 | end | |
22 | ||
23 | %output parameters | |
24 | phi = zeros(p,m,k,L*Size); | |
25 | lvraisemblance = zeros(L*Size,2); | |
26 | for lambdaIndex=1:L | |
27 | %On ne garde que les colonnes actives | |
28 | %active sera l'ensemble des variables informatives | |
29 | active = A1(:,lambdaIndex); | |
30 | active(active==0) = []; | |
31 | if length(active) > 0 | |
32 | for j=1:Size | |
33 | [phiLambda,LLF] = EMGrank(Pi(:,lambdaIndex),Rho(:,:,:,lambdaIndex),mini,maxi,X(:,active),Y,tau,Rank(j,:)); | |
34 | lvraisemblance((lambdaIndex-1)*Size+j,:) = [LLF, sum(Rank(j,:) .* (length(active)-Rank(j,:)+m))]; | |
35 | phi(active,:,:,(lambdaIndex-1)*Size+j) = phiLambda; | |
36 | end | |
37 | end | |
38 | end | |
39 | ||
40 | end |