Qual pacote R usar para calcular parâmetros de componentes para um modelo de mistura

8

Gostaria de ajustar um modelo de mistura aos dados gerados em Monte Carlo com densidades de probabilidade que normalmente se parecem com as da imagem anexada. densidades típicas

Parece que, por inspeção visual, um modelo normal de mistura pode ser aplicável, mas, ao verificar a exibição da tarefa CRAN, eu realmente não sei qual pacote pode ser apropriado para minhas necessidades.

Basicamente, o que eu gostaria de fazer é fornecer um vetor dos dados e, em seguida, fazer com que a função do pacote retorne a média, a variação e os pesos proporcionais para cada componente no modelo de mistura, e também talvez identifique quantos componentes existem no modelo.

babelproofreader
fonte

Respostas:

8

Tente mixdist

Aqui está um exemplo:

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"   

insira a descrição da imagem aqui

bill_080
fonte
5

O pacote Mclust é bom. A função mclust ajusta uma mistura de distribuição de normais aos dados. Você pode escolher automaticamente o número de componentes com base no BIC ( mclustmodel ) ou especificar o número de componentes. Também não há necessidade de converter seus dados em um quadro de dados.

Além disso, o pacote Mixtools e a função normalmixEM se encaixam em uma mistura de normais.

Atualização: Descobri recentemente o pacote mixAK e a função NMixMCMC e é fantástico. Possui muitas opções, incluindo RJMCMC para seleção de componentes, censura à esquerda, etc ...

Glen
fonte