Commit | Line | Data |
---|---|---|
46a2e676 | 1 | constructionModelesLassoMLE = function(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda, |
07848d25 | 2 | X,Y,seuil,tau,selected) |
46a2e676 | 3 | { |
07848d25 BA |
4 | #TODO: parameter ncores (chaque tâche peut aussi demander du parallélisme...) |
5 | cl = parallel::makeCluster( parallel::detectCores() / 4 ) | |
6 | parallel::clusterExport(cl=cl, | |
7 | varlist=c("phiInit","rhoInit","gamInit","mini","maxi","glambda","X","Y","seuil","tau"), | |
8 | envir=environment()) | |
9 | #Pour chaque lambda de la grille, on calcule les coefficients | |
10 | out = parLapply( seq_along(glambda), function(lambdaindex) | |
46a2e676 | 11 | { |
07848d25 BA |
12 | n = dim(X)[1] |
13 | p = dim(phiInit)[1] | |
14 | m = dim(phiInit)[2] | |
15 | k = dim(phiInit)[3] | |
46a2e676 | 16 | |
07848d25 | 17 | #TODO: phiInit[selected] et X[selected] sont bien sûr faux; par quoi remplacer ? |
74110135 | 18 | #lambda == 0 c'est normal ? -> ED : oui, ici on calcule le maximum de vraisembance, donc on ne pénalise plus |
07848d25 | 19 | res = EMGLLF(phiInit[selected],rhoInit,piInit,gamInit,mini,maxi,gamma,0.,X[selected],Y,tau) |
46a2e676 | 20 | |
07848d25 BA |
21 | #comment évaluer la dimension à partir du résultat et de [not]selected ? |
22 | #dimension = ... | |
46a2e676 | 23 | |
74110135 | 24 | #on veut calculer la vraisemblance avec toutes nos estimations |
07848d25 BA |
25 | densite = vector("double",n) |
26 | for (r in 1:k) | |
46a2e676 | 27 | { |
07848d25 BA |
28 | delta = Y%*%rho[,,r] - (X[selected]%*%res$phi[selected,,r]) |
29 | densite = densite + pi[r] * | |
30 | det(rho[,,r])/(sqrt(2*base::pi))^m * exp(-tcrossprod(delta)/2.0) | |
b05e34dc | 31 | } |
07848d25 BA |
32 | llh = c( sum(log(densite[,lambdaIndex])), (dimension+m+1)*k-1 ) |
33 | list("phi"=res$phi, "rho"=res$rho, "pi"=res$pi, "llh" = llh) | |
34 | }) | |
35 | parallel::stopCluster(cl) | |
36 | out | |
c3bc4705 | 37 | } |