简体   繁体   中英

How to fit normal distribution with respect to frequency and intensity in R?

I have a list of data

frequency x1,x2,...,xn
     i.e. 10,20,...,5000.
Intensity y1,yx,...,yn
          0,0,...,50,60,50,...,0

where I want to fit a normal distribution to the data.

I found some website online such as ( http://www.di.fc.ul.pt/~jpn/r/distributions/fitting.html ) through the procedure like,

my_data <- rnorm(250, mean=1, sd=0.45)# unkonwn distribution parameters
fit <- fitdistr(my_data, densfun="normal")

but obviously, those methods won't work.

How to fit the above data to a normal distribution?

You can use the maximum likelihood function, mle , to solve this problem. Here is how you would do that:

my_data <- rnorm(250, mean=1, sd=0.45)# unkonwn distribution parameters

logLik <- function(sigma, mu){
  ll <- vapply(my_data,
               function(x) dnorm(x, mean = mu, sd = sigma),
               FUN.VALUE = numeric(1))
  -sum(log(ll))
}

mle(logLik, start = list(sigma = 1, mu = 1))

mle requires a log-likehood function that it uses to determine the optimal parameters (which in the case of a normal distribution are mu (mean) and sigma (st. dev.)). It takes the negative sum of the log-likelihood -sum(log(ll)) as part of a numerical procedure to find the best parameters for the distribution. It then returns the estimated parameters:

Call:
mle(minuslogl = logLik, start = list(sigma = 1, mu = 1))

Coefficients:
    sigma        mu 
0.4595003 0.9724402 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM