首页 > 解决方案 > 如何拟合 R 中频率和强度的正态分布?

问题描述

我有一个数据列表

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

我想对数据进行正态分布。

我通过以下过程在网上找到了一些网站,例如(http://www.di.fc.ul.pt/~jpn/r/distributions/fitting.html),

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

但显然,这些方法行不通。

如何将上述数据拟合到正态分布?

标签: rcurve-fitting

解决方案


您可以使用最大似然函数mle, 来解决这个问题。以下是您将如何执行此操作:

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需要一个对数似然函数,用于确定最佳参数(在正态分布的情况下为mu(mean) 和sigma(st. dev.))。它将对数似然的负和-sum(log(ll))作为数值过程的一部分,以找到分布的最佳参数。然后它返回估计的参数:

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

Coefficients:
    sigma        mu 
0.4595003 0.9724402 

推荐阅读