Considérons un mélange de $K$ lois gaussiennes dont la densité est donnée par $$f_\theta(x)=\sum_{k=1}^K\pi_kf_{\mathcal N(\mu_k,\sigma^2_k)}(x),$$ où $0<\pi_k<1$, $\sum_{k=1}^K\pi_k=1$, $\mu_k\in\mathbb R$ et $\sigma_k>0$, $k=1,\dots,K$.
Pour gérer les paramètres d'un mélange gaussien sous R nous allons travailler avec des listes. Exemple : Les paramètres du mélange suivant : $$f_\theta(x)= 0.2*f_{\mathcal N(2,4)}(x)+0.2*f_{\mathcal N(-5,1)}(x)+0.6*f_{\mathcal N(2,0.01)}(x)$$ sont stocké dans la liste suivante :
theta = list(pi=c(.2,.2,.6), mu=c(2,-5,2), sig=c(2,1,.1))
theta
Remarquons que les trois vecteurs dans la liste theta ont la même longueur et que les $\pi_k$ et les $\sigma_k$ vérifient les conditions precisées ci-dessus.
Ecrire une fonction drnormmix qui prend en argument un vecteur x et une liste de paramètres theta d'un mélange gaussien. Cette fonction évalue la densité du mélange gaussien associé aux paramètres theta en les éléments de x.
dnormmix <- function(x,theta){
return(dens)
}
En changeant les paramètres d'un mélange gaussien, essayez de reproduire les six graphiques suivants, qui sont tous des mélanges gaussiens.
rnormmix <- function(n,theta){
return(obs)
}
Dans l'optique du calcul de l'estimateur de maximum de vraisemblance, considérons la fonction de log-vraisemblance d'un modèle de mélange défini par $$\ell(\theta)=\sum_{i=1}^n\log f_\theta(x_i),$$ où $f_\theta$ est la densité du mélange et $(x_1,\dots,x_n)$ un échantillon du mélange $f_\theta$.
Ecrire une fonction lvraisnorm qui prend en argument un échantillon observé obs et une liste param de paramètres d'un mélange gaussien. La fonction renvoie la valeur de la log-vraisemblance du mélange gaussien associé.
lvraisnorm <- function(param,obs){
return(logvrais)
}
L'EMV est définit comme le point $\hat\theta$ où la log-vraisemblance $\ell(\theta)$ atteint son maximum. Dans des modèles de mélange, $\theta$ n'est jamais un scalaire, ce qui rend la visualisation de $\ell(\theta)$ compliquée.
Dans la question suivante nous allons considérer le mélange gaussien d'ordre 2 de densité $$f_\theta(x) = p f_{\mathcal N(0,1)}(x) + (1-p) f_{\mathcal N(2.5,1)}(x).$$ Afin de faciliter la visualisation de la log-vraisemblance, nous supposons que les écarts-types $\sigma_1=\sigma_2=1$ ainsi que les proportions $p$ et $1-p$ sont connus, et seulement les moyennes $\mu_1$ et $\mu_2$ sont inconnus et à estimer à partir des données. Dans ce cas, notons la fonction de log-vraisemblance par $$\ell(\mu_1,\mu_2)= \sum_{i=1}^n\log\left\{ p f_{\mathcal N(\mu_1,1)}(x_i) + (1-p) f_{\mathcal N(\mu_2,1)}(x_i)\right\}.$$
Nous allons utiliser la fonction image pour la représentation graphique de $\ell(\mu_1,\mu_2)$. La syntaxe est la suivante :
où x et y sont les grilles de l'abscisse et de l'ordonnée (des vecteurs de valeurs strictement croissantes de longueur r et s, resp.) et z est une matrice de taille r$\times$s contenant les valeurs de la fonction à tracer. Pour les autres options consulter les pages d'aide de R.
Exemple : Illustration de la fonction $(x,y)\mapsto y^x$ :
x <- seq(0,2,by=.03)
y <- seq(0,1,by=.03)
M <- matrix(NA,nrow=length(x),ncol=length(y))
for (k in 1:length(x))
M[k,] <- y^x[k]
image(x,y,M,col=grey(0:255/255))
On peut ajouter des lignes de niveau par la fonction contour. Ajouter aux instructions ci-dessus la commande :
contour(x,y,M,add=T,nlevels=10,col='yellow')