rdistributiongaussianfitdistrplus

Fit Bi-Modal / two-gaussian Distribution To Data Set in R


I have some data sets that look like they are composed of a superposition of two normal distributions forming a bimodal plot. I would like to estimate best fit parameters for the distribution of these data sets. Typically I would use fitdistrplus package but I can't find a distribution function to feed its algorithms.

Can someone point me in the direction of one or suggest how I might do it myself?


Solution

  • The response to this question looks like it gets at your query. I repeat their code here:

    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"