有没有一种方法可以计算R中多个因变量的阈值以上的峰值数量?

时间:2020-06-30 18:00:41

标签: r ggplot2 statistics auc

很抱歉是否已经提出这个问题。我是R的初学者,并且没有高级统计背景。我正在尝试确定我在R中的数据的峰数(最大值)。对于那些熟悉GraphPad Prism的人,本质上,我正在尝试通过在“曲线下”区域进行分析并使用阈值来查找“峰数”。 y = 2。我的数据框如下(称为example1)。

time a  b   c   d   e   f
0   248 413 473 370 501 235
3   243 408 468 356 496 237
6   243 406 476 354 503 235
9   243 412 469 352 500 232
12  245 411 467 355 504 235
15  241 420 483 348 499 227
18  239 416 477 344 493 230
21  236 413 478 338 490 227
24  234 406 475 337 481 229

我的x变量将是第一列,而我的y变量将是其余的列(非常大的数据集-50多个因变量)。对于每个因变量或列,我试图找到峰值数(局部最大值)。我需要将y阈值设为2。

我已经通过融化数据框来使用ggplot绘制了数据(以下代码)。

#Melt data
melted <- melt(example1, id.vars="time")

#Create line graph
ggplot(data=melted, aes(x=time, y=value, group=variable)) + 
  geom_line(show.legend = TRUE))

如何计算和输出每列的峰数(y = 2阈值)?我需要在曲线分析下做一个区域吗?我希望计算出这样的数据(每列峰数)... a = 0,b = 3,c = 0,d = 6,e = 1,f = 0 但输出可能是0、3、0、6、1、0

我不需要产生另一个图。我只需要输出每个因变量的峰值数量即可。

2 个答案:

答案 0 :(得分:3)

通过findpeaks()包提供了一个pracma函数,该函数对于此类事情非常有用。 See documentation here。您可以指定阈值或使用默认设置。还有一些参数可以帮助忽略或包括跨越多个点的峰。

您向findpeaks()输入时间序列向量(这意味着请确保先按x轴对其进行排序),它将输出一个矩阵,其中行数与峰值数相对应,对于每个峰都会得到最大值(y值),索引,开始索引和结束索引。参见下面的example1数据集利用率:

peak_info <- lapply(example1[,2:7], findpeaks, threshold=2)

> peak_info
$a
     [,1] [,2] [,3] [,4]
[1,]  245    5    4    9

$b
     [,1] [,2] [,3] [,4]
[1,]  420    6    5    9

$c
     [,1] [,2] [,3] [,4]
[1,]  476    3    2    5
[2,]  483    6    5    7

$d
     [,1] [,2] [,3] [,4]
[1,]  355    5    4    9

$e
     [,1] [,2] [,3] [,4]
[1,]  503    3    2    4
[2,]  504    5    4    9

$f
     [,1] [,2] [,3] [,4]
[1,]  237    2    1    4
[2,]  235    5    4    6
[3,]  230    7    6    8

如果只想知道峰数,可以运行以下命令:

> unlist(lapply(peak_info, nrow))

a b c d e f 
1 1 2 1 2 3 

答案 1 :(得分:0)

如果您要查找的是局部最大值或最小值,则可以查看此post

如果您正在寻找它,那么您只需要为每一列做一次即可:

df <- data.frame(var1 = c(1,2,3,2,1, 1, 2, 1),
                 var2 = c(1,2,3,2,1, 1, 1, 1),
                 var3 = c(1,2,3,2,1, 5, 1, 2))

res_list <- apply(df, 2, function(x){
    return(which(diff(sign(diff(x)))==-2)+1)
})

res_list :
$var1
[1] 3 7

$var2
[1] 3

$var3
[1] 3 6

它不适用于域边缘的极值。

相关问题