fonctions pour l'algorithme EM en regression logistique

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

mor absa loum
Messages : 12
Enregistré le : 17 Juil 2014, 11:24

fonctions pour l'algorithme EM en regression logistique

Messagepar mor absa loum » 29 Fév 2016, 15:10

Bonjour,

j'ai des données X (une matrice n*d ) et Y (un vecteur de données binaires d'un mélange logistique de taille n). Je voudrais estimer les paramètres du mélange logistique via une fonction de R. Je connais pas trop les fonctions disponibles sur R pour le faire.

Cordialement,
Mor.

Vincent Guillemot
Messages : 451
Enregistré le : 05 Mai 2010, 15:11

Re: fonctions pour l'algorithme EM en regression logistique

Messagepar Vincent Guillemot » 01 Mar 2016, 09:54

Bonjour,

Il y a de nombreux exemples d'utilisation de fonctions R pour la régression logistique disponibles en ligne.
Par exemple : http://pbil.univ-lyon1.fr/R/pdf/tdr341.pdf

Cdlt,
V.

mor absa loum
Messages : 12
Enregistré le : 17 Juil 2014, 11:24

Re: fonctions pour l'algorithme EM en regression logistique

Messagepar mor absa loum » 01 Mar 2016, 12:59

Bonjour Vincent,
Merci pour ta réponse. Je connais les fonctions pour étudier juste un modèle logistique. Mon problème actuel est: Si on dispose des données d'un mélange de K populations (K>=2) et qu'on souhaite utiliser l'algorithme EM pour estimer tout les paramètres du modèles...

Cdt,
Mor.

Vincent Guillemot
Messages : 451
Enregistré le : 05 Mai 2010, 15:11

Re: fonctions pour l'algorithme EM en regression logistique

Messagepar Vincent Guillemot » 01 Mar 2016, 13:31

mor absa loum a écrit :Mon problème actuel est: Si on dispose des données d'un mélange de K populations (K>=2) et qu'on souhaite utiliser l'algorithme EM pour estimer tout les paramètres du modèles...


Désolé, mais je ne peux pas deviner la fin de la question. Je ne peux pas non plus deviner ce que vous savez ou non.
Pour vous aider, il nous donc faut une question claire, accompagnée d'un exemple reproductible et de tentatives d'analyses en R.

Cdlt,
V.

mor absa loum
Messages : 12
Enregistré le : 17 Juil 2014, 11:24

Re: fonctions pour l'algorithme EM en regression logistique

Messagepar mor absa loum » 01 Mar 2016, 13:54

D'accord Vincent,

Supposons qu'on ait un vecteur Y de taille n=100 ( dans ce vecteur il n y a que des 0 et des 1). Et ces données sont issues d'un mélanges de deux modèles logistique:

n=100
d=3
K=2
X=matrix(nrow=n,ncol=d)
set.seed(1)
for(i in 1:n){
X[i,]=rnorm(d)
}
beta=matrix(nrow=d,ncol=K)
beta[,1]=c(2,3,1)
beta[,2]=c(-1,0,2)
Pr=rdirichlet(1,c(2.5,1.8))
Y=Sim_2_3(X,beta,Pr)

Avec la fonction Sim_2_3 ci-dessous:

Sim_2_3=function(X,beta,Pr){
n=nrow(X)
K=length(Pr)
Y=c()
for(i in 1:n){
Zi=rbinom(1,1,Pr[1])
if(Zi==1){
p_i1=exp(X[i,]%*%beta[,1])/(1+exp(X[i,]%*%beta[,1]))
Y[i]=rbinom(1,1,p_i1)
}else{
p_i2=exp(X[i,]%*%beta[,2])/(1+exp(X[i,]%*%beta[,2]))
Y[i]=rbinom(1,1,p_i2)
}
}
return(Y)
}



A partir de là on les données X (une matrice de taille n*d) et Y (un vecteur de taille n contenant un mélange de deux modèles logistique).

A partir de cette exemple, j'aimerai utiliser une fonction de R pour étudier le mélange et retrouver les beta (approximativement peut etre).

Cdt,
Mor.

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Re: fonctions pour l'algorithme EM en regression logistique

Messagepar Nicolas Péru » 02 Mar 2016, 12:40

Bonjour,

Pour ce qui est les modèles de mélange je me suis déjà servi du package flexmix. C'est l'algorithme EM qui est utilisé et il y a une documentation bien détaillée.

Il existe d'autres packages dispo.

A toi de voir.

Nicolas

Vincent Guillemot
Messages : 451
Enregistré le : 05 Mai 2010, 15:11

Re: fonctions pour l'algorithme EM en regression logistique

Messagepar Vincent Guillemot » 02 Mar 2016, 14:39

Bonjour,

Merci pour l'exemple, c'est beaucoup plus clair maintenant !

il semblerait que flexmix ne soit pas très efficace avec les modèles de mélange logistique : ci dessous un exemple qui montre que cela ne fonctionne que si l'on spécifie quel individu provient de quelle partie du mélange (et encore).

Code : Tout sélectionner

Sim_2_3 <- function(X,beta,Pr){
  n=nrow(X)
  K=length(Pr)
  Y=c()
  Zi=c()
  for(i in 1:n){
    Zi[i] <- rbinom(1,1,Pr[1])
    if(Zi[i]==0){
      p_i1=exp(X[i,]%*%beta[,1])/(1+exp(X[i,]%*%beta[,1]))
      Y[i]=rbinom(1,1,p_i1)
    }else{
      p_i2=exp(X[i,]%*%beta[,2])/(1+exp(X[i,]%*%beta[,2]))
      Y[i]=rbinom(1,1,p_i2)
    }
  }
  return(data.frame(Y=Y, Zi=Zi+1))
}

require(gtools)

n <- 1000
d <- 3
K <- 2
set.seed(1)
X <- matrix(rnorm(n*d), nrow=n, ncol=d)
beta <- cbind(k1=c(2,3,1), k2=c(-1,0,2))
Pr <- rdirichlet(1,c(2.5,1.8))
res.sim <- Sim_2_3(X, beta, Pr)

require(flexmix)

dat <- data.frame(res.sim, X)

mellog1 <- flexmix(cbind(Y, 1 - Y) ~ 0+X1, data = dat, k = 2,
                  model = FLXMRglm(family = "binomial"))

mellog2 <- flexmix(cbind(Y, 1 - Y) ~ 0+X1 | Zi, data = dat, k = 2,
                   model = FLXMRglm(family = "binomial"))

mellog1@components
table(mellog1@cluster, dat$Zi)

mellog2@components
table(mellog2@cluster, dat$Zi)


Cdlt,
V.

mor absa loum
Messages : 12
Enregistré le : 17 Juil 2014, 11:24

Re: fonctions pour l'algorithme EM en regression logistique

Messagepar mor absa loum » 04 Mar 2016, 17:53

Bonjour Vincent et nicolas,

Merci de m'avoir aider. Vous avez raison Vincent sur le fonctionnement.

Un grand merci à vous tous,
Cordialement,
Mor.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité