Qué paquete R usar para calcular los parámetros de componentes para un modelo de mezcla

8

Me gustaría ajustar un modelo de mezcla a datos generados por Monte Carlo con densidades de probabilidad que generalmente se parecen a las de la imagen adjunta. densidades típicas

Parecería por inspección visual que un modelo de mezcla normal podría ser aplicable, pero al verificar la vista de tareas CRAN realmente no sé qué paquete podría ser apropiado para mis necesidades.

Básicamente, lo que me gustaría hacer es proporcionar un vector de los datos y luego hacer que la función de paquete devuelva la media, la varianza y los pesos proporcionales para cada componente en el modelo de mezcla, y también quizás identificar cuántos componentes hay en el modelo.

lector de babelproof
fuente

Respuestas:

8

Prueba mixdist

Aquí hay un ejemplo:

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"   

ingrese la descripción de la imagen aquí

bill_080
fuente
5

El paquete Mclust es agradable. La función mclust ajusta una mezcla de distribución normal a los datos. Puede elegir automáticamente la cantidad de componentes según BIC ( mclustmodel ) o especificar la cantidad de componentes. Tampoco es necesario convertir sus datos en un marco de datos.

Además, el paquete Mixtools y la función normalmixEM se ajustan a una mezcla de normales.

Actualización: Recientemente descubrí el paquete mixAK y la función NMixMCMC y es excelente. Tiene muchas opciones, incluido RJMCMC para la selección de componentes, censura derecha e izquierda, etc.

Cañada
fuente