r - 如何拟合 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")
但显然,这些方法行不通。
如何将上述数据拟合到正态分布?
解决方案
您可以使用最大似然函数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
推荐阅读
- vhdl - 在 SystemC 中使用接收到的参数设置信号长度
- pyarrow - PyArrow ParquetWriter:有没有办法限制输出文件的大小(拆分)?
- javascript - 我正在尝试将数据表值与组合框匹配以编辑数据
- amazon-web-services - 网站服务器迁移后流量丢失
- git - 新分支有很多变化 - 我如何合并到 Master 中?
- linux - 如何将交互式程序作为服务运行并向其发送消息
- node.js - nodejs如何验证令牌?
- android - 如何使用 Kivy 访问 Android 相机功能?
- javascript - 为什么 API 请求的结果是 Promise pending
- python - 我正在尝试从此链接中刮取产品的颜色和型号