r - 将多个峰拟合到数据集并在 R 中提取单个峰信息

标签 r histogram curve-fitting gaussian

我有许多数据集,由不同海拔处的要素数量组成。目前有1-30m每1m间隔的数据。绘制时,我的许多数据集都会显示 3-4 个峰值,这些峰值表示高度层。

这是一个示例数据集:

Height <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30) Counts <-c(4000,2000,500,300,200,100,0,0,400,700,800,800,500,1000,1500,2000,2500,2200,1700,1100,500,0,0,1000,1500,2000,3000,4000,4000,2000)

我想对这些数据集进行某种形式的曲线函数拟合,以确定“峰”的总数、峰中心位置(即高度)和峰宽度。 前段时间我可以通过使用fityk软件手动拟合多个高斯函数来执行这种分析,但是我想知道是否可以通过R自动执行这样的过程?

我已经探索了许多其他有关将峰值拟合到直方图的帖子,例如通过 mixtools 包,但我不知道您是否可以提取单个峰值信息。

如果您能提供任何帮助,我们将不胜感激。

最佳答案

“如何将曲线拟合到我的数据”是一个太宽泛的问题,因为有无数种方法可以做到这一点。它也可能更适合 https://stats.stackexchange.com/比这里。然而,来自 R 基础的 ksmooth 是基本平滑器的一个非常好的起点:

plot(Height,Counts)
smoothCounts<-ksmooth(Height,Counts,kernel="normal",bandwidth=2)
dsmooth<-diff(smoothCounts$y)
locmax<-sign(c(0,dsmooth))>0 & sign(c(dsmooth,0))<0
lines(smoothCounts)
points(smoothCounts$x[locmax],smoothCounts$y[locmax],cex=3,c=2)

enter image description here

关于r - 将多个峰拟合到数据集并在 R 中提取单个峰信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19434998/

相关文章:

python - 在 Python 中等同于 R 的 sapply 条件

r - 如何获得 R 中 quartz 设备的当前尺寸?

r - 突出显示 ggplot2 中的特定点

r - 加速手工制作的 Cox 模型拟合(v.s. `survival::coxph`)

gnuplot - gnuplot 直方图上的平滑线

Python 有缺陷的直方图?

Matlab:直方图数据与许多高斯和 AIC 评估的拟合

histogram - CIAreaHistogram 输入比例因子

r - nls() 错误收敛(尽管起始值很好)

algorithm - 具有两个给定点和成本函数的抛物线拟合