Hello,

This is here for some days now, and I've decided to give it a try.

I've rewritten your fitfunction(), making it simpler. And include the gamma distribution in the list.



require(MASS)

fitfunction <- function(Type, x) list(Type=Type, Fit=fitdistr(x, Type))

fun <- function(x, data){
        data <- sort(data)
        if(x$Type == "exponential")
                y <- pexp(data, rate=x$Fit$estimate['rate'])
        else if(x$Type == "geometric")
                y <- pgeom(data, prob=x$Fit$estimate['prob'])
        else if(x$Type == "log-normal")
y <- plnorm(data, meanlog=x$Fit$estimate['meanlog'], sdlog=x$Fit$estimate['sdlog'])
        else if(x$Type == "normal")
                y <- pnorm(data, mean=x$Fit$estimate['mean'], 
sd=x$Fit$estimate['sd'])
        else if(x$Type == "Poisson")
                y <- ppois(data, lambda=x$Fit$estimate['lambda'])
        else if(x$Type == "gamma")
y <- pgamma(data, shape=x$Fit$estimate['shape'], rate=x$Fit$estimate['rate'])
        list(x=data, y=y)
}


set.seed(1)

distrList <- list("exponential", "geometric", "log-normal", "normal", "Poisson", "gamma")

On <- round(abs(rnorm(10000, sd=100))+5,digits=0)

storeOn <- lapply(distrList, fitfunction, x=On)
str(storeOn)
lapply(storeOn, function(x) AIC(x$Fit))

coord <- lapply(storeOn, fun, On)
color <- seq_along(distrList) + 1

plot(ecdf(On), verticals= TRUE, do.p = FALSE, lwd=2)
lapply(seq_along(coord), function(i)
        lines(coord[[i]]$x, coord[[i]]$y, col=color[i]))
legend("right", legend=distrList, col=color, lty=1, bty="n")


Hope this helps,

Rui Barradas

Em 02-07-2012 07:13, Alaios escreveu:
Dear all,
I have wrote some sample code that would allow me easier fit fast many 
distributions and check which of the fits performs better. My sample code (that 
you can of course execute it looks like that)


distrList<-list(   "exponential",  "geometric", "log-normal",  "normal",
"Poisson")



fitfunction<-function(Type,x){
     return (list(Type,(fitdistr(x,Type))))
}

require(MASS)
On<-round(abs(rnorm(10000,sd=100))+5,digits=0)

storeOn<-lapply(distrList,fitdistr,x=On)
plot(ecdf(On))
str(storeOn)


what I am looking now is to plot with the initial dataset plot(ecdf(On)) all 
the fitted distributions over the same window.
I am not sure though, if there is some straightforward way (i.e same random 
distribution generator) for the fitted paramemeters to plot those over the 
existing
plot(ecdf(On)).

Could you please help me with that?

Regards
Alex

        [[alternative HTML version deleted]]



______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to