reorganize test folder: tests generation with MATLAB almost OK (but suboptimal method)
[valse.git] / src / test / generate_test_data / MATLAB_test_helpers / constructionModelesLassoMLE.m
diff --git a/src/test/generate_test_data/MATLAB_test_helpers/constructionModelesLassoMLE.m b/src/test/generate_test_data/MATLAB_test_helpers/constructionModelesLassoMLE.m
new file mode 100644 (file)
index 0000000..5b7c65e
--- /dev/null
@@ -0,0 +1,58 @@
+function[phi,rho,pi,lvraisemblance] = constructionModelesLassoMLE(...
+       phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda,X,Y,seuil,tau,A1,A2)
+
+       PI = 4.0 * atan(1.0);
+
+       %get matrix sizes
+       n = size(X, 1);
+       [p,m,k] = size(phiInit);
+       L = length(glambda);
+
+       %output parameters
+       phi = zeros(p,m,k,L);
+       rho = zeros(m,m,k,L);
+       pi = zeros(k,L);
+       lvraisemblance = zeros(L,2);
+
+       for lambdaIndex=1:L
+               % Procedure Lasso-MLE
+               a = A1(:,1,lambdaIndex);
+               a(a==0) = [];
+               if length(a) == 0
+                       continue;
+               end
+               [phiLambda,rhoLambda,piLambda,~,~] = EMGLLF(...
+                       phiInit(a,:,:),rhoInit,piInit,gamInit,mini,maxi,gamma,0,X(:,a),Y,tau);
+
+               for j=1:length(a)
+                       phi(a(j),:,:,lambdaIndex) = phiLambda(j,:,:);
+               end
+               rho(:,:,:,lambdaIndex) = rhoLambda;
+               pi(:,lambdaIndex) = piLambda;
+
+               dimension = 0;
+               for j=1:p
+                       b = A2(j,2:end,lambdaIndex);
+                       b(b==0) = [];
+                       if length(b) > 0
+                               phi(A2(j,1,lambdaIndex),b,:,lambdaIndex) = 0.0;
+                       end
+                       c = A1(j,2:end,lambdaIndex);
+                       c(c==0) = [];
+                       dimension = dimension + length(c);
+               end
+
+               %on veut calculer l'EMV avec toutes nos estimations
+               densite = zeros(n,L);
+               for i=1:n
+                       for r=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(-dot(delta,delta)/2.0);
+                       end
+               end
+               lvraisemblance(lambdaIndex,1) = sum(log(densite(:,lambdaIndex)));
+               lvraisemblance(lambdaIndex,2) = (dimension+m+1)*k-1;
+       end
+
+end