【问题标题】:How to fit normal distribution with respect to frequency and intensity in R?如何拟合 R 中频率和强度的正态分布?
【发布时间】:2019-02-24 20:06:55
【问题描述】:

我有一个数据列表

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")

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

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

【问题讨论】:

  • 请展示您的数据,或许可以更好地描述您的最终目标是什么?

标签: r curve-fitting


【解决方案1】:

您可以使用最大似然函数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(平均值)和sigma(标准偏差))。它将对数似然 -sum(log(ll)) 的负和作为数值过程的一部分,以找到分布的最佳参数。然后它返回估计的参数:

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

Coefficients:
    sigma        mu 
0.4595003 0.9724402 

【讨论】:

    猜你喜欢
    • 2017-02-19
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2015-03-31
    • 2016-10-30
    • 2017-11-16
    相关资源
    最近更新 更多