[R-sig-finance] Distribution Fitting and fitdistr()

Krishna Kumar kriskumar at earthlink.net
Tue Apr 25 05:09:09 CEST 2006


Lorenzo Isella wrote:

>Dear All,
>I think I understood how to use the fitdistr() function to fit random
>draws to a certain distribution.
>I first tested it on a unimodal Gaussian distribution:
>
>  
>

This only works for distributions that are specified below
 >>>
Distributions '"beta"', '"cauchy"', '"chi-squared"',
          '"exponential"', '"f"', '"gamma"', '"geometric"',
          '"log-normal"', '"lognormal"', '"logistic"', '"negative
          binomial"', '"normal"', '"Poisson"', '"t"' and '"weibull"'
          are recognised, case being ignored.
 >>>>>>>>

>Then I tested it on a set of draws from a mixture made up of three
>Gaussian distributions.
>This time I used 9 fitting parameters:
>- 3 weights N1,N2,N3 for the components of the Gaussian mixture
>- 3 standard deviations sig1,sig2,sig3
>- 3 means mu1,mu2,mu3
>
>  
>

The package nor1Mix has density , distribution and rng for mixtures but 
no fitting so here is a  fitting function..

mydistr<-function(x,mu,sig,wt)
{
sum(wt*dnorm(x,mu,sig))
}

mydistrmle<-function(x, y = x) {

#mu goes from x1:3 sig goes x 4:6 and wt goes x 7:9
        f = -sum(log(mydistr(y, c(x[1],x[2],x[3]),     
c(x[4],x[5],x[6]),     c(x[7],x[8],x[9])  )))
        cat("\n Function value:  ", -f)
        cat("\n  Estimated parameters:       ", 
c(x[1],x[2],x[3]),c(x[4],x[5],x[6]),c(x[7],x[8],x[9]), "\n")

        f
    }
   


#generate 1000 samples from norMix  mixture MW.nm2
x<-rnorMix(1000,MW.nm2)
hist(rnorMix(1000,MW.nm2))
#  Give it a starting values
mu<-c(-0.2,0.4,0.9)
sigma<-c(0.2, 0.2, 0.6)
wt<-c(0.3,0.3,0.2)
r<-optim(c(mu,sigma,wt),mydistrmle,control=list(maxit=50000))
print(matrix(r$par,3,3))
print(MW.nm2)

You will have to add additional constraints on the "wt" etc.  ( see 
?constrOptim)

Further I don't think there is a guaranteed unique decomposition of 
variance between the three gaussians. Just try different starting values
and also is there a reason to stop at 3 gaussians ?..

Krishna



More information about the R-sig-finance mailing list