Quel package R utiliser pour calculer les paramètres des composants d'un modèle de mélange

8

Je voudrais adapter un modèle de mélange aux données générées par Monte Carlo avec des densités de probabilité qui ressemblent généralement à celles de l'image jointe. densités typiques

Il semblerait, d'après l'inspection visuelle, qu'un modèle de mélange normal pourrait être applicable, mais en vérifiant la vue des tâches CRAN, je ne sais vraiment pas quel package pourrait convenir à mes besoins.

Fondamentalement, ce que je voudrais faire, c'est fournir un vecteur des données, puis demander à la fonction de package de renvoyer la moyenne, la variance et les poids proportionnels pour chaque composant du modèle de mélange, et peut-être aussi d'identifier le nombre de composants dans le modèle.

babelproofreader
la source

Réponses:

8

Essayez mixdist

Voici un exemple:

library(mixdist)  

#Build data vector "x" as a mixture of data from 3 Normal Distributions  
x1 <- rnorm(1000, mean=0, sd=2.0)  
x2 <- rnorm(500, mean=9, sd=1.5)  
x3 <- rnorm(300, mean=13, sd=1.0)  
x <- c(x1, x2, x3)  

#Plot a histogram (you'll play around with the value for "breaks" as    
#you zero-in on the fit).   Then build a data frame that has the  
#bucket midpoints and counts.  
breaks <- 30  
his <- hist(x, breaks=breaks)  
df <- data.frame(mid=his$mids, cou=his$counts)  
head(df)  

#The above Histogram shows 3 peaks that might be represented by 3 Normal  
#Distributions.  Guess at the 3 Means in Ascending Order, with a guess for  
#the associated 3 Sigmas and fit the distribution.  
guemea <- c(3, 11, 14)  
guesig <- c(1, 1, 1)  
guedis <- "norm"  
(fitpro <- mix(as.mixdata(df), mixparam(mu=guemea, sigma=guesig), dist=guedis))  

#Plot the results  
plot(fitpro, main="Fit a Probability Distribution")  
grid()  
legend("topright", lty=1, lwd=c(1, 1, 2), c("Original Distribution to be Fit", "Individual Fitted Distributions", "Fitted Distributions Combined"), col=c("blue", "red", rgb(0.2, 0.7, 0.2)), bg="white")  


===========================  


Parameters:  
      pi     mu  sigma  
1 0.5533 -0.565 1.9671  
2 0.2907  8.570 1.6169  
3 0.1561 12.725 0.9987  

Distribution:  
[1] "norm"  

Constraints:  
   conpi    conmu consigma   
  "NONE"   "NONE"   "NONE"   

entrez la description de l'image ici

bill_080
la source
5

Le paquet Mclust est sympa. La fonction mclust adapte un mélange de distribution normale aux données. Vous pouvez choisir automatiquement le nombre de composants en fonction du BIC ( mclustmodel ) ou spécifier le nombre de composants. Il n'est pas non plus nécessaire de convertir vos données en un bloc de données.

De plus, le package Mixtools et la fonction normalmixEM s'adaptent à un mélange de normales.

Mise à jour: J'ai récemment découvert le package mixAK et la fonction NMixMCMC et c'est formidable. Il a de nombreuses options, y compris RJMCMC pour la sélection des composants, la censure droite gauche, etc ...

Glen
la source