【发布时间】:2015-07-09 11:25:55
【问题描述】:
不确定这是否应该进行交叉验证,但我们会看到。基本上,我最近从一台仪器中获得了数据(化合物的质量从 0 到 630),在绘制直方图之前,我将其分箱到 0.025 个箱中,如下所示:-
我想识别频率高且在背景噪声中突出的 bin(当您在轴上从右向左移动时,背景噪声会增加)。想象一下,在几乎已经模糊在一起的点上绘制一条曲线,形成一个黑色块,然后选择该曲线上方存在的 bin 进行进一步调查,这就是我正在尝试做的事情。我刚刚绘制了一个核密度图,看看是否可以将其覆盖在直方图之上并使用它来识别图上方存在的点。但是,密度图在这方面没有任何进展,因为密度值太低(参见第二张图)。有没有人对我如何解决这个问题有任何建议?蓝线代表覆盖的密度函数图,红线代表理想解决方案(需要一种在 R 中以某种方式自动执行此操作的方法)
下面的数据只是我的数据集的一部分,因此它不能很好地表示我的绘图(仅包含大约 300,000 个点),并且由于我的 bin 大小非常小(0.025),因此数据分布非常广泛(在总共有 25,000 个左右的垃圾箱)。
df <- read.table(header = TRUE, text = "
values
1 323.881306
2 1.003373
3 14.982121
4 27.995091
5 28.998639
6 95.983138
7 2.0117459
8 1.9095478
9 1.0072853
10 0.9038475
11 0.0055748
12 7.0964916
13 8.0725191
14 9.0765316
15 14.0102531
16 15.0137390
17 19.7887675
18 25.1072689
19 25.8338140
20 30.0151683
21 34.0635308
22 42.0393751
23 42.0504938
")
bin <- seq(0, 324, by = 0.025)
hist(df$values, breaks = bin, prob=TRUE, col = "grey")
lines(density(df$values), col = "blue")
【问题讨论】:
-
制作一个(可能是模拟的)随机示例将大大有助于让人们帮助您——当然还有共享代码。内核密度似乎是一个很好的方法,你使用了什么带宽?如果您提供一个起点,我会尝试一些东西并寻找解决方案。
-
:p 将在一秒钟内更新我的帖子。我没有设置任何特定的带宽c我只是使用默认设置
-
到目前为止我所做的非常基本。最初试图用 ggplot 来做,但因为我的 bin 尺寸很小,所以它不会飞
-
抱歉,使用的默认带宽是 8.28(这里是凌晨 1 点,有点累了)
-
我了解您在两个网站之间做出选择时会遇到困难:是信号处理/编程问题(例如,操纵带宽参数),还是统计问题?我认为是后者,因为您说方差(噪声)是 X 轴的函数,一旦我读到,我就开始考虑一个模型来描述这种行为。我首先将您的“数据”视为直方图中使用的一组 x 和 y 值——每个 bin 中的 bin 范围和频率(不是原始数据)。然后我会将数据视为时间序列,使用样条或卡尔曼滤波器
标签: r histogram density-plot