#include #include #include #include "EMGLLF.h" #include "utils.h" // Main job on raw inputs (after transformation from mxArray) void selectiontotale_core( // IN parameters const float* phiInit, // parametre initial de moyenne renormalisé const float* rhoInit, // parametre initial de variance renormalisé const float* piInit,// parametre initial des proportions const float* 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 float gamma, // valeur de gamma : puissance des proportions dans la pénalisation pour un Lasso adaptatif const float* glambda, // valeur des paramètres de régularisation du Lasso const float* X,// régresseurs const float* Y,// réponse float seuil, // seuil pour prendre en compte une variable float 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 float* Rho,// estimateur ainsi calculé par le Lasso float* Pi,// estimateur ainsi calculé par le Lasso // additional size parameters int n,// taille de lambdaIndex'echantillon int p,// nombre de covariables int m,// taille de Y (multivarié) int k,// nombre de composantes int L) // taille de glambda { // Fill outputs with zeros: they might not be assigned for (int u=0; u maxPhi) maxPhi = fabs(phi[ai(j,jj,r,p,m,k)]); } if (maxPhi > seuil) { selectedVariables[mi(j,cpt,p,m)] = jj+1; atLeastOneSelectedVariable = 1; cpt++; } else { discardedVariables[mi(j,cpt2,p,m)] = jj+1; cpt2++; } } } free(phi); if (atLeastOneSelectedVariable) { int* vec = (int*)malloc(p*sizeof(int)); int vecSize = 0; for (int j=0; j