X-Git-Url: https://git.auder.net/?p=valse.git;a=blobdiff_plain;f=pkg%2Fsrc%2Fsources%2FEMGLLF.c;h=e0195880c84faff4f70dc3db405ca7c4baa525f0;hp=a028919defff9a15415607c55fb833d01c8531f4;hb=8be79c465ecbbe849c9ee43e2a25c2760134e07a;hpb=37e11bb06399b30c3a26d5e21a80a921898053d6 diff --git a/pkg/src/sources/EMGLLF.c b/pkg/src/sources/EMGLLF.c index a028919..e019588 100644 --- a/pkg/src/sources/EMGLLF.c +++ b/pkg/src/sources/EMGLLF.c @@ -22,6 +22,7 @@ void EMGLLF_core( Real* pi, // parametre des proportions renormalisé, calculé par l'EM Real* LLF, // log vraisemblance associée à cet échantillon, pour les valeurs estimées des paramètres Real* S, + int* affec, // additional size parameters int n, // nombre d'echantillons int p, // nombre de covariables @@ -77,7 +78,7 @@ void EMGLLF_core( { //Y2[,mm,r] = sqrt(gam[,r]) * Y[,mm] for (int u=0; u + //< X2[i,,r] , phi[,mm,r] > Real dotProduct = 0.; for (int u=0; u n*lambda*pow_pir_gamma) + //S[j,mm,r] = -rho[mm,mm,r]*ps2[j,mm,r] + sum(phi[-j,mm,r] * Gram2[j,-j,r]) + S[ai(j,mm,r,p,m,k)] = -rho[ai(mm,mm,r,m,m,k)] * ps2[ai(j,mm,r,p,m,k)] + phiDotGram2; + Real pirPowGamma = pow(pi[r],gamma); + if (fabs(S[ai(j,mm,r,p,m,k)]) <= n*lambda*pirPowGamma) + phi[ai(j,mm,r,p,m,k)] = 0.; + else if (S[ai(j,mm,r,p,m,k)] > n*lambda*pirPowGamma) { - phi[ai(j,mm,r,p,m,k)] = (n*lambda*pow_pir_gamma - S[ai(j,mm,r,p,m,k)]) + phi[ai(j,mm,r,p,m,k)] = (n*lambda*pirPowGamma - S[ai(j,mm,r,p,m,k)]) / Gram2[ai(j,j,r,p,p,k)]; } else { - phi[ai(j,mm,r,p,m,k)] = -(n*lambda*pow_pir_gamma + S[ai(j,mm,r,p,m,k)]) + phi[ai(j,mm,r,p,m,k)] = -(n*lambda*pirPowGamma + S[ai(j,mm,r,p,m,k)]) / Gram2[ai(j,j,r,p,p,k)]; } } @@ -281,7 +284,7 @@ void EMGLLF_core( YiRhoR[u] += Y[mi(i,v,n,m)] * rho[ai(v,u,r,m,m,k)]; } - //compute X(i,:)*phi(:,:,r) + //compute X[i,]%*%phi[,,r] for (int u=0; u rowMax) + { + affec[i] = j+1; //R indices start at 1 + rowMax = gam[mi(i,j,n,k)]; + } + } + } //free memory free(b);