X-Git-Url: https://git.auder.net/?p=valse.git;a=blobdiff_plain;f=src%2Ftest%2Fgenerate_test_data%2Fhelpers%2FconstructionModelesLassoMLE.R;h=ed05b2a1c625a1735c5f99b031664bf5241e61ac;hp=359bada51e08e8750f4da6f8c37b9f77db65835f;hb=46a2e676b2d85eef5a1811a6e623b65327fc451d;hpb=ef67d338c7f28ba041abe40ca9a8ab69f8365a90 diff --git a/src/test/generate_test_data/helpers/constructionModelesLassoMLE.R b/src/test/generate_test_data/helpers/constructionModelesLassoMLE.R index 359bada..ed05b2a 100644 --- a/src/test/generate_test_data/helpers/constructionModelesLassoMLE.R +++ b/src/test/generate_test_data/helpers/constructionModelesLassoMLE.R @@ -1,58 +1,56 @@ -constructionModelesLassoMLE = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda,X,Y,seuil,tau,A1,A2){ - #get matrix sizes +constructionModelesLassoMLE = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda, + X,Y,seuil,tau,A1,A2) +{ n = dim(X)[1]; p = dim(phiInit)[1] m = dim(phiInit)[2] - k = dim(phiInit)[3] + k = dim(phiInit)[3] L = length(glambda) - + #output parameters phi = array(0, dim=c(p,m,k,L)) rho = array(0, dim=c(m,m,k,L)) - Pi = matrix(0, k, L) + pi = matrix(0, k, L) llh = matrix(0, L, 2) #log-likelihood - for(lambdaIndex in 1:L){ - a = A1[, 1, lambdaIndex] - a[a==0] = c() - if(length(a)==0){ + for(lambdaIndex in 1:L) + { + a = A1[,1,lambdaIndex] + a = a[a!=0] + if(length(a)==0) next - } - EMGLLf = EMGLLF(phiInit[a,,],rhoInit,piInit,gamInit,mini,maxi,gamma,0,X[,a],Y,tau) - - phiLambda = EMGLLf$phi - rhoLambda = EMGLLf$rho - piLambda = EMGLLf$Pi - - for(j in 1:length(a)){ - phi[a[j],,,lambdaIndex] = phiLambda[j,,] - } - rho[,,,lambdaIndex] = rhoLambda - Pi[,lambdaIndex] = piLambda - + + res = EMGLLF(phiInit[a,,],rhoInit,piInit,gamInit,mini,maxi,gamma,0.,X[,a],Y,tau) + + for (j in 1:length(a)) + phi[a[j],,,lambdaIndex] = res$phi[j,,] + rho[,,,lambdaIndex] = res$rho + pi[,lambdaIndex] = res$pi + dimension = 0 - for(j in 1:p){ - vec = c(2, dim(A2)[2]) - b = A2[j,vec,lambdaIndex] - b[b==0] = c() - if(length(b) > 0){ - phi[A2[j,1,lambdaIndex],b,,lambdaIndex] = 0 - } - c = A1[j,vec,lambdaIndex] - c[c==0] = c() - dimension = dimension + length(c) + for (j in 1:p) + { + b = A2[j,2:dim(A2)[2],lambdaIndex] + b = b[b!=0] + if (length(b) > 0) + phi[A2[j,1,lambdaIndex],b,,lambdaIndex] = 0. + c = A1[j,2:dim(A1)[2],lambdaIndex] + dimension = dimension + sum(c!=0) } - + #on veut calculer l'EMV avec toutes nos estimations - densite = matrix(0, n, L) - for(i in 1:n){ - for( r in 1:k){ + densite = matrix(0, nrow=n, ncol=L) + for (i in 1:n) + { + for (r in 1:k) + { delta = Y[i,]%*%rho[,,r,lambdaIndex] - (X[i,a]%*%phi[a,,r,lambdaIndex]); - densite[i,lambdaIndex] = densite[i,lambdaIndex] + Pi[r,lambdaIndex]*det(rho[,,r,lambdaIndex])/(sqrt(2*pi))^m*exp(-tcrossprod(delta)/2.0) + densite[i,lambdaIndex] = densite[i,lambdaIndex] + pi[r,lambdaIndex] * + det(rho[,,r,lambdaIndex])/(sqrt(2*base::pi))^m * exp(-tcrossprod(delta)/2.0) } } llh[lambdaIndex,1] = sum(log(densite[,lambdaIndex])) llh[lambdaIndex,2] = (dimension+m+1)*k-1 } - return(list(phi=phi, rho=rho, Pi=Pi, llh = llh)) + return (list("phi"=phi, "rho"=rho, "pi"=pi, "llh" = llh)) }