X-Git-Url: https://git.auder.net/?p=valse.git;a=blobdiff_plain;f=src%2Ftest%2Fgenerate_test_data%2Fhelpers%2FconstructionModelesLassoRank.R;h=15305d91a5bd75621511b70bb6cdc0e2ff8e85a1;hp=ad4f7258b4d27ab6ae88c6fc99626e7e55b269d5;hb=ef67d338c7f28ba041abe40ca9a8ab69f8365a90;hpb=c3bc47052f3ccb659659c59a82e9a99ea842398d diff --git a/src/test/generate_test_data/helpers/constructionModelesLassoRank.R b/src/test/generate_test_data/helpers/constructionModelesLassoRank.R index ad4f725..15305d9 100644 --- a/src/test/generate_test_data/helpers/constructionModelesLassoRank.R +++ b/src/test/generate_test_data/helpers/constructionModelesLassoRank.R @@ -1,34 +1,49 @@ -constructionModelesLassoRank = function(Pi,Rho,mini,maxi,X,Y,tau,A1,rangmin,rangmax){ +constructionModelesLassoRank = function(pi,rho,mini,maxi,X,Y,tau,A1,rangmin,rangmax) +{ #get matrix sizes n = dim(X)[1] p = dim(X)[2] m = dim(rho)[2] k = dim(rho)[3] L = dim(A1)[2] - + + # On cherche les rangs possiblement intéressants deltaRank = rangmax - rangmin + 1 Size = deltaRank^k - Rank = matrix(0, Size, k) -# for(r in 1:k) { -# Rank[,r] = rangmin + <--- #FIXME: -# } - + Rank = matrix(0, nrow=Size, ncol=k) + for(r in 1:k) + { + # On veut le tableau de toutes les combinaisons de rangs possibles + # Dans la première colonne : on répète (rangmax-rangmin)^(k-1) chaque chiffre : + # ça remplit la colonne + # Dans la deuxieme : on répète (rangmax-rangmin)^(k-2) chaque chiffre, + # et on fait ça (rangmax-rangmin)^2 fois + # ... + # Dans la dernière, on répète chaque chiffre une fois, + # et on fait ça (rangmin-rangmax)^(k-1) fois. + Rank[,r] = rangmin + rep(0:(deltaRank-1), deltaRank^(r-1), each=deltaRank^(k-r)) + } + + # output parameters phi = array(0, dim=c(p,m,k,L*Size)) llh = matrix(0, L*Size, 2) #log-likelihood - for(lambdaIndex in 1:L){ - #on ne garde que les colonnes actives - #active sera l'ensemble des variables informatives - active = A1[, lambdaIndex] - active[active==0] = c() - if(length(active)>0){ - for(j in 1:Size){ - EMG_rank = EMGrank(Pi[,lambdaIndex], Rho[,,,lambdaIndex], mini, maxi, X[, active], Y, tau, Rank[j,]) - phiLambda = EMG_rank$phi - LLF = EMG_rank$LLF - llh[(lambdaIndex-1)*Size+j,] = c(LLF, sum(Rank[j,]^(length(active)- Rank[j,]+m))) - phi[active,,,(lambdaIndex-1)*Size+j] = phiLambda + for(lambdaIndex in 1:L) + { + # on ne garde que les colonnes actives + # 'active' sera l'ensemble des variables informatives + active = A1[,lambdaIndex] + active = active[-(active==0)] + if (length(active) > 0) + { + for (j in 1:Size) + { + res = EMGrank(Pi[,lambdaIndex], Rho[,,,lambdaIndex], mini, maxi, + X[,active], Y, tau, Rank[j,]) + llh[(lambdaIndex-1)*Size+j,] = + c( res$LLF, sum(Rank[j,] * (length(active)- Rank[j,] + m)) ) + phi[active,,,(lambdaIndex-1)*Size+j] = res$phi } } } - return(list(phi=phi, llh = llh)) + return (list(phi=phi, llh = llh)) }