X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=pkg%2FR%2FEMGLLF.R;h=92351d7546bef7de8b5a9e3dc7270856611e0ffc;hb=20d12623f4f395ba126570b3230fc80214191d8e;hp=5a69a52273da63777dc9fbd3c2966870e00586e6;hpb=fb6e49cb85308c3f99cc98fe955aa7c36839c819;p=valse.git diff --git a/pkg/R/EMGLLF.R b/pkg/R/EMGLLF.R index 5a69a52..92351d7 100644 --- a/pkg/R/EMGLLF.R +++ b/pkg/R/EMGLLF.R @@ -2,17 +2,17 @@ #' #' Description de EMGLLF #' -#' @param phiInit Parametre initial de moyenne renormalisé -#' @param rhoInit Parametre initial de variance renormalisé -#' @param piInit Parametre initial des proportions -#' @param gamInit Paramètre initial des probabilités a posteriori de chaque échantillon -#' @param mini Nombre minimal d'itérations dans l'algorithme EM -#' @param maxi Nombre maximal d'itérations dans l'algorithme EM -#' @param gamma Puissance des proportions dans la pénalisation pour un Lasso adaptatif -#' @param lambda Valeur du paramètre de régularisation du Lasso -#' @param X Régresseurs -#' @param Y Réponse -#' @param tau Seuil pour accepter la convergence +#' @param phiInit an initialization for phi +#' @param rhoInit an initialization for rho +#' @param piInit an initialization for pi +#' @param gamInit initialization for the a posteriori probabilities +#' @param mini integer, minimum number of iterations in the EM algorithm, by default = 10 +#' @param maxi integer, maximum number of iterations in the EM algorithm, by default = 100 +#' @param gamma integer for the power in the penaly, by default = 1 +#' @param lambda regularization parameter in the Lasso estimation +#' @param X matrix of covariates (of size n*p) +#' @param Y matrix of responses (of size n*m) +#' @param eps real, threshold to say the EM algorithm converges, by default = 1e-4 #' #' @return A list ... phi,rho,pi,LLF,S,affec: #' phi : parametre de moyenne renormalisé, calculé par l'EM @@ -23,12 +23,12 @@ #' #' @export EMGLLF <- function(phiInit, rhoInit, piInit, gamInit, - mini, maxi, gamma, lambda, X, Y, tau, fast=TRUE) + mini, maxi, gamma, lambda, X, Y, eps, fast=TRUE) { if (!fast) { # Function in R - return (.EMGLLF_R(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,tau)) + return (.EMGLLF_R(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,eps)) } # Function in C @@ -37,7 +37,7 @@ EMGLLF <- function(phiInit, rhoInit, piInit, gamInit, m = ncol(Y) #taille de Y (multivarié) k = length(piInit) #nombre de composantes dans le mélange .Call("EMGLLF", - phiInit, rhoInit, piInit, gamInit, mini, maxi, gamma, lambda, X, Y, tau, + phiInit, rhoInit, piInit, gamInit, mini, maxi, gamma, lambda, X, Y, eps, phi=double(p*m*k), rho=double(m*m*k), pi=double(k), LLF=double(maxi), S=double(p*m*k), affec=integer(n), n, p, m, k, @@ -45,7 +45,7 @@ EMGLLF <- function(phiInit, rhoInit, piInit, gamInit, } # R version - slow but easy to read -.EMGLLF_R = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X2,Y,tau) +.EMGLLF_R = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X2,Y,eps) { # Matrix dimensions n = dim(Y)[1] @@ -184,7 +184,7 @@ EMGLLF <- function(phiInit, rhoInit, piInit, gamInit, Dist3 = max( (abs(pi-Pi)) / (1+abs(Pi)) ) dist2 = max(Dist1,Dist2,Dist3) - if (ite >= mini && (dist >= tau || dist2 >= sqrt(tau))) + if (ite >= mini && (dist >= eps || dist2 >= sqrt(eps))) break }