【问题标题】:Peak Analysis of Density Histogram - R密度直方图的峰值分析 - R
【发布时间】:2023-03-30 10:20:01
【问题描述】:

我正在使用 R 语言,我必须绘制两个样本的密度比较:

样本1:

id1 2

id2 2

id3 2

id4 2

id5 2

id6 2

id7 3

id8 3

id9 3

id10 2

和样本2:

id1 1

id2 1

id3 1

id4 1

id5 1

id6 1

id7 1

id8 2

id9 2

id10 1

第一列是 ID,第二列是该 ID 的值。

例如:

Id1 - 值。

Id2 - 值。

...

  • 请注意,这两个样本具有相同的大小和相同的 ID,但值不同。

我使用下面的代码来绘制这张图片:

library(ggplot2) 
library(sm)
library(scales)

x <- data.frame(read.table("C:/Users/Filli/Desktop/pasta/samples1.txt"), type = "Agregado")
y <- data.frame(read.table("C:/Users/Filli/Desktop/pasta/samples2.txt"), type = "Temporal")

data <- rbind(x,y)


print(ggplot( data, aes(x = V2, group = type)) +  geom_density(aes(fill= type), size=0, alpha=0.7))

http://prntscr.com/fdespg

我想要的是,如何找出每个密度(红色和蓝色)峰值的 id?例如,在这种情况下,我想为每个密度(红色和蓝色)找到上图中红色矩形中包含的 id。我不想绘制红色矩形,这只是为了说明。我想要的是从每个峰值(红色和蓝色)中获取 id 并比较它们以查看 id 是否相同。考虑到每个密度只有一个大峰。我只想从每个峰中获取最大的 id(如上图)并比较它们以查看它们是相同还是不同。

【问题讨论】:

  • 可能类似于 maxID1 &lt;- df1$ID[df1$val == max(df1$val)] 和 df2 类似。然后您可以使用intersect 或setdiff 或setequal 来查找重叠。您可能必须使用 as.character 将这些向量转换为字符。
  • 我认为这是错误的!因为密度计算和你做的不一样,所以结果是错误的:S

标签: r density-plot


【解决方案1】:

您可以使用基本 R density 函数,ggplot 用于密度图表。例如,要查找峰的位置,您可以使用

density(data$V2)$x[which.max(density(data$V2)$y)]

更多详情请见?density。

【讨论】:

  • 使用密度(data$V2)$y[which.max(density(data$V2)$y)] 我有:0.5186269。这种密度的“id”是什么?
  • 第一个 $y 应该是 $x 以给出峰的 x 位置。您的值是密度曲线的最大高度。
  • 如何获得“id”这个值?
  • 您正在绘制图形并将密度应用于V2,而不是ids。峰值是密度最高的V2 的值 - id 只是样本点的名称。也许您需要重新起草问题,因为不清楚您在寻找什么。这种密度对于离散变量不一定有意义——它将 V2 视为连续变量。
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
相关资源
最近更新 更多