[R] Fitting distributions
kjetil halvorsen
kjetilh at umsanet.edu.bo
Thu Sep 6 19:24:24 CEST 2001
Hola!
I think some of this is avaliable as fit.dist in Jim Lindsays
package gnlm.
Kjetil Halvorsen
Prof Brian Ripley wrote:
>
> This has come up a couple of times recently. MASS4 will have a
> general-purpose function for maximum-likelihood fitting and a set of
> wrappers for common distributions.
>
> Here's a preview of the R version (rapidly converted this morning).
> You can do things like
>
> fitdist(x, dnorm, list(mean = 0, sd = 1))
> fitdist(x, dnorm, list(sd = 1), mean=0.5)
>
> the latter fixing the mean.
>
> This is not much tested (in R and much of it had to be changed for R) but
> should give a flavour of what is possible. Eventually there will be
> a much more comprehensive interface.
>
> fitdist <- function(x, dist, start, ...)
> {
> myfn <- function(parm, ...) -sum(log(dens(parm, ...)))
>
> dens1 <- function(parm, x, ...) dist(x, parm, ...)
> dens2 <- function(parm, x, ...) dist(x, parm[1], parm[2], ...)
> dens3 <- function(parm, x, ...) dist(x, parm[1], parm[2], parm[3], ...)
> dens4 <- function(parm, x, ...)
> dist(x, parm[1], parm[2], parm[3], , parm[4], ...)
>
> if(missing(x) || length(x) == 0 || mode(x) != "numeric")
> stop("`x' must be a non-empty numeric vector")
> if(missing(dist) || !is.function(dist))
> stop("`dist' must be supplied as a function")
> if(missing(start) || !is.list(start))
> stop("`start' must be a named list")
> nm <- names(start)
> ## reorder arguments to dist
> f <- formals(dist)
> args <- names(f)
> m <- match(nm, args)
> if(any(is.na(m)))
> stop("`start' specifies names which are not arguments to `dist'")
> formals(dist) <- c(f[c(1, m)], f[-c(1, m)])
> ## try to be somewhat efficient
> switch(length(nm),
> "1" = {dens <- dens1},
> "2" = {dens <- dens2},
> "3" = {dens <- dens3},
> "4" = {dens <- dens3},
> stop("only handle 1:4 variable parms"))
> res <- optim(start, myfn, x=x, ...)
> if(res$convergence > 0) stop("optimization failed")
> res$par
> }
>
> --
> Brian D. Ripley, ripley at stats.ox.ac.uk
> Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
> University of Oxford, Tel: +44 1865 272861 (self)
> 1 South Parks Road, +44 1865 272860 (secr)
> Oxford OX1 3TG, UK Fax: +44 1865 272595
>
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list