#include <stdlib.h>
#include <omp.h>
+#include <math.h>
#include "EMGLLF.h"
#include "utils.h"
// Main job on raw inputs (after transformation from mxArray)
-void selectiontotale(
+void selectiontotale_core(
// IN parameters
- const double* phiInit, // parametre initial de moyenne renormalisé
- const double* rhoInit, // parametre initial de variance renormalisé
- const double* piInit,// parametre initial des proportions
- const double* gamInit, // paramètre initial des probabilités a posteriori de chaque échantillon
+ 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
- double gamma, // valeur de gamma : puissance des proportions dans la pénalisation pour un Lasso adaptatif
- const double* glambda, // valeur des paramètres de régularisation du Lasso
- const double* X,// régresseurs
- const double* Y,// réponse
- double seuil, // seuil pour prendre en compte une variable
- double tau, // seuil pour accepter la convergence
+ 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
- double* Rho,// estimateur ainsi calculé par le Lasso
- double* Pi,// estimateur ainsi calculé par le Lasso
+ Real* Rho,// estimateur ainsi calculé par le Lasso
+ Real* Pi,// estimateur ainsi calculé par le Lasso
// additional size parameters
int n,// taille de lambdaIndex'echantillon
int p,// nombre de covariables
for (lambdaIndex=0; lambdaIndex<L; lambdaIndex++)
{
//allocate output variables
- double* phi = (double*)malloc(p*m*k*sizeof(double));
- double* rho = (double*)malloc(m*m*k*sizeof(double));
- double* pi = (double*)malloc(k*sizeof(double));
- double* LLF = (double*)malloc(maxi*sizeof(double));
- double* S = (double*)malloc(p*m*k*sizeof(double));
- EMGLLF(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda[lambdaIndex],X,Y,tau,
+ Real* phi = (Real*)malloc(p*m*k*sizeof(Real));
+ Real* rho = (Real*)malloc(m*m*k*sizeof(Real));
+ Real* pi = (Real*)malloc(k*sizeof(Real));
+ Real* LLF = (Real*)malloc(maxi*sizeof(Real));
+ Real* S = (Real*)malloc(p*m*k*sizeof(Real));
+ EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda[lambdaIndex],X,Y,tau,
phi,rho,pi,LLF,S,
n,p,m,k);
free(LLF);
int cpt2 = 0;
for (int jj=0; jj<m; jj++)
{
- double maxPhi = 0.0;
+ Real maxPhi = 0.0;
for (int r=0; r<k; r++)
{
if (fabs(phi[ai(j,jj,r,p,m,k)]) > maxPhi)