#include "selectiontotale.h" #include "EMGLLF.h" #include #include "omp_num_threads.h" // Main job on raw inputs (after transformation from mxArray) void selectiontotale( // IN parameters const Real* phiInit, // parametre initial de moyenne renormalisé const Real* rhoInit, // parametre initial de variance renormalisé const Real* piInit, // parametre initial des proportions const Real* gamInit, // paramètre initial des probabilités a posteriori de chaque échantillon Int mini, // nombre minimal d'itérations dans lambdaIndex'algorithme EM Int maxi, // nombre maximal d'itérations dans lambdaIndex'algorithme EM Real gamma, // valeur de gamma : puissance des proportions dans la pénalisation pour un Lasso adaptatif const Real* glambda, // valeur des paramètres de régularisation du Lasso const Real* X, // régresseurs const Real* Y, // réponse Real seuil, // seuil pour prendre en compte une variable Real tau, // seuil pour accepter la convergence // OUT parameters (all pointers, to be modified) Int* A1, // matrice des coefficients des parametres selectionnes Int* A2, // matrice des coefficients des parametres non selectionnes Real* Rho, // estimateur ainsi calculé par le Lasso Real* Pi, // estimateur ainsi calculé par le Lasso // additional size parameters mwSize n, // taille de lambdaIndex'echantillon mwSize p, // nombre de covariables mwSize m, // taille de Y (multivarié) mwSize k, // nombre de composantes mwSize L) // taille de glambda { // Fill outputs with zeros: they might not be assigned for (int u=0; u maxPhi) maxPhi = fabs(phi[j*m*k+jj*k+r]); } if (maxPhi > seuil) { selectedVariables[j*m+cpt] = jj+1; atLeastOneSelectedVariable = 1; cpt++; } else { discardedVariables[j*m+cpt2] = jj+1; cpt2++; } } } free(phi); if (atLeastOneSelectedVariable) { Int* vec = (Int*)malloc(p*sizeof(Int)); mwSize vecSize = 0; for (mwSize j=0; j