-constructionModelesLassoMLE = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda,X,Y,seuil,tau,A1,A2){
- #get matrix sizes
+constructionModelesLassoMLE = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda,
+ X,Y,seuil,tau,A1,A2)
+{
n = dim(X)[1];
p = dim(phiInit)[1]
m = dim(phiInit)[2]
- k = dim(phiInit)[3]
+ k = dim(phiInit)[3]
L = length(glambda)
-
+
#output parameters
phi = array(0, dim=c(p,m,k,L))
rho = array(0, dim=c(m,m,k,L))
- Pi = matrix(0, k, L)
+ pi = matrix(0, k, L)
llh = matrix(0, L, 2) #log-likelihood
- for(lambdaIndex in 1:L){
- a = A1[, 1, lambdaIndex]
- a[a==0] = c()
- if(length(a)==0){
+ for(lambdaIndex in 1:L)
+ {
+ a = A1[,1,lambdaIndex]
+ a = a[a!=0]
+ if(length(a)==0)
next
- }
- EMGLLf = EMGLLF(phiInit[a,,],rhoInit,piInit,gamInit,mini,maxi,gamma,0,X[,a],Y,tau)
-
- phiLambda = EMGLLf$phi
- rhoLambda = EMGLLf$rho
- piLambda = EMGLLf$Pi
-
- for(j in 1:length(a)){
- phi[a[j],,,lambdaIndex] = phiLambda[j,,]
- }
- rho[,,,lambdaIndex] = rhoLambda
- Pi[,lambdaIndex] = piLambda
-
+
+ res = EMGLLF(phiInit[a,,],rhoInit,piInit,gamInit,mini,maxi,gamma,0.,X[,a],Y,tau)
+
+ for (j in 1:length(a))
+ phi[a[j],,,lambdaIndex] = res$phi[j,,]
+ rho[,,,lambdaIndex] = res$rho
+ pi[,lambdaIndex] = res$pi
+
dimension = 0
- for(j in 1:p){
- vec = c(2, dim(A2)[2])
- b = A2[j,vec,lambdaIndex]
- b[b==0] = c()
- if(length(b) > 0){
- phi[A2[j,1,lambdaIndex],b,,lambdaIndex] = 0
- }
- c = A1[j,vec,lambdaIndex]
- c[c==0] = c()
- dimension = dimension + length(c)
+ for (j in 1:p)
+ {
+ b = A2[j,2:dim(A2)[2],lambdaIndex]
+ b = b[b!=0]
+ if (length(b) > 0)
+ phi[A2[j,1,lambdaIndex],b,,lambdaIndex] = 0.
+ c = A1[j,2:dim(A1)[2],lambdaIndex]
+ dimension = dimension + sum(c!=0)
}
-
+
#on veut calculer l'EMV avec toutes nos estimations
- densite = matrix(0, n, L)
- for(i in 1:n){
- for( r in 1:k){
+ densite = matrix(0, nrow=n, ncol=L)
+ for (i in 1:n)
+ {
+ for (r in 1:k)
+ {
delta = Y[i,]%*%rho[,,r,lambdaIndex] - (X[i,a]%*%phi[a,,r,lambdaIndex]);
- densite[i,lambdaIndex] = densite[i,lambdaIndex] + Pi[r,lambdaIndex]*det(rho[,,r,lambdaIndex])/(sqrt(2*pi))^m*exp(-tcrossprod(delta)/2.0)
+ densite[i,lambdaIndex] = densite[i,lambdaIndex] + pi[r,lambdaIndex] *
+ det(rho[,,r,lambdaIndex])/(sqrt(2*base::pi))^m * exp(-tcrossprod(delta)/2.0)
}
}
llh[lambdaIndex,1] = sum(log(densite[,lambdaIndex]))
llh[lambdaIndex,2] = (dimension+m+1)*k-1
}
- return(list(phi=phi, rho=rho, Pi=Pi, llh = llh))
+ return (list("phi"=phi, "rho"=rho, "pi"=pi, "llh" = llh))
}