Welches R-Paket zur Berechnung der Komponentenparameter für ein Mischungsmodell verwendet werden soll

8

Ich möchte ein Mischungsmodell an von Monte Carlo generierte Daten mit Wahrscheinlichkeitsdichten anpassen, die normalerweise wie im angehängten Bild aussehen. typische Dichten

Aus der Sichtprüfung scheint es, dass ein normales Mischungsmodell anwendbar sein könnte, aber beim Überprüfen der CRAN-Aufgabenansicht weiß ich wirklich nicht, welches Paket für meine Anforderungen geeignet sein könnte.

Grundsätzlich möchte ich einen Vektor der Daten angeben und dann die Paketfunktion den Mittelwert, die Varianz und die proportionalen Gewichte für jede Komponente im Mischungsmodell zurückgeben lassen und möglicherweise auch identifizieren, wie viele Komponenten im Modell vorhanden sind.

babelproofreader
quelle

Antworten:

8

Versuchen Sie es mit mixdist

Hier ist ein Beispiel:

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"   

Geben Sie hier die Bildbeschreibung ein

bill_080
quelle
5

Paket Mclust ist nett. Die mclust- Funktion passt eine Mischung aus Normalverteilung an Daten an. Sie können die Anzahl der Komponenten automatisch basierend auf BIC ( mclustmodel ) auswählen oder die Anzahl der Komponenten angeben. Sie müssen Ihre Daten auch nicht in einen Datenrahmen konvertieren.

Das Paket Mixtools und die Funktion normalmixEM passen auch zu einer Mischung von Normalen.

Update: Ich habe kürzlich das mixAK-Paket und die NMixMCMC-Funktion entdeckt und es ist großartig. Es gibt viele Optionen, einschließlich RJMCMC für die Komponentenauswahl, die Zensur von rechts nach links usw.

Tal
quelle