我正在尝试将曲线拟合到点以计算最大值和中心值。
我有二维数据(x和y轴),我使用包pracma
和findpeak
函数来检测此矩阵中的峰值。
peak <- structure(c(86.0953485633098, 86.0955380284491, 86.0957274942138,
86.095916960604, 86.0961064276196, 86.0962958952606, 86.096485363527,
86.0966748324189, 86.0968643019362, 86.0970537720789, 86.097243242847,
86.0974327142406, 86.0976221862597, 86.0978116589041, 86.0980011321741,
86.0981906060695, 86.0983800805903, 86.0985695557366, 0, 178.362274169922,
1118.56115722656, 1993.09130859375, 2681.42016601562, 3771.77612304688,
12054.2744140625, 41142.8828125, 82771.796875, 126647.4296875,
124873.390625, 80395.8046875, 38812.58203125, 11192.2685546875,
3193.95947265625, 1768.93249511719, 487.752838134766, 0),
.Dim = c(18L, 2L))
pracma::findpeaks(peak[,2])
plot(peak)
我的问题是,findpeak
只给出了数据点内的最大值,但我想通过绘图,每个人都可以想象最大值有点高,而且在不同的y坐标上。我期望的大致是x=86.09712
和y=12750.00
......就像那样。
我发现MASS::fitdistr
但这只适用于发行版,而不适用于我的数据。我想我的问题已经被问到,但我找不到解决方案,也许我错过了正确的搜索词汇。
答案 0 :(得分:2)
一种方法是创建一个模型,然后使用predict
在你知道它的高范围内找到拟合值,在这个范围内可以找到{{1 }}:
which.max
这种方法仅限于一次找到一个峰值,但对于多模态数据,信号处理领域可能存在更强大的替代方案。