R - 针对多种情况最大化曲线下面积

时间:2017-01-11 11:48:12

标签: r zoo auc

考虑到我有两个向量,一个称为residues,另一个称为scores,它们有31个分数,每个残差一个,所有正数。为了说明,获得两种载体,如下所示:

residues <- 1:31
scores <- runif(n = 31, min = 0.35, max = 3.54)

我正在考虑一个随机序列来举例说明。 如果我绘制residues x scores我将得到以下图形:

enter image description here

我想要做的是以下内容:我将考虑15个残基的特定组合(以下称为15mer),跳过一个残基(即1:15,2:16,3:17一直到17: 31)我想计算所有这17种组合的曲线下面积(AUC)。我的最终目标是选择具有最高AUC的15mer。

可以使用zoo包中的rollmean函数计算AUC,如this question所示。但是,正如我所拥有的,在这个例子中,有17种可能的组合,我试图找到一个脚本来自动化该过程。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

library(zoo)

set.seed(555)
residues <- 1:31
scores <- runif(n = 31, min = 0.35, max = 3.54)


which.max(sapply(1:17, function(x){sum(diff(residues[x:(x+14)])*rollmean(scores[x:(x+14)],2))}))
# result 7 i.e. 7:21

sapply(1:17, function(x){sum(diff(residues[x:(x+14)])*rollmean(scores[x:(x+14)],2))}) # gives you the AUCs
# result [1] 28.52530 29.10203 28.52847 27.65325 27.19925 28.77782 29.29373 28.13133 28.23705 27.68724 25.75294 25.27226 25.44963 25.81201 25.49907 23.48632
        #[17] 22.45763

或使用自定义功能

f_AUC <- function(x, y, lngth){
  sapply(1:(length(x)-lngth+1), function(z) sum(diff(x[z:(z+lngth-1)])*rollmean(y[z:(z+lngth-1)],2)))
}

f_AUC(x=residues, y=scores, lngth=15)

答案 1 :(得分:0)

以下是我使用的以下功能

scores <- runif(n = 31, min = 0.35, max = 3.54)

fun <- function(dat, n) {
  require(zoo)
  N <- which(max(rollmean(dat, n)) == rollmean(dat, n))
  output <- matrix(0, length(N), n)
  for (i in 1:length(N)) {
   output[i, ] <- dat[N[i]:(N[i] + n - 1)]
  }
  output
}

fun(scores, 15)

让我们从内到外运行

rollmean(dat, n)
你提到的动物园包中的

给了我们滚动的意思,我们

max(rollmean(dat, n))

找到滚动平均值的最大值

max(rollmean(dat, n)) == rollmean(dat, n)

返回一个TRUE / FALSE向量,其中哪个滚动均值等于max

N <- which(max(rollmean(dat, n)) == rollmean(dat, n))

返回最大值的索引。根据您的数据,您可能有多个获取最大值的序列,我们决定使用以下循环返回所有序列

for (i in 1:length(N)) {
  output[i, ] <- dat[N[i]:(N[i] + n -1)]
}

结果:

set.seed(12345)
scores <- runif(n = 31, min = 0.35, max = 3.54)

fun(scores, 15)
         [,1]     [,2]      [,3]     [,4]     [,5]    [,6]
[1,] 1.588179 1.633928 0.9208938 3.385791 1.797393 1.39234
         [,7]     [,8]     [,9]    [,10]    [,11]    [,12]
[1,] 3.429675 2.606867 2.406091 1.593553 2.578354 2.085545
       [,13]    [,14]    [,15]
[1,] 1.07243 1.895739 2.879693

fun(rpois(1000, 1), 10)
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    1    4    2    1    1    3    3    2     2
[2,]    1    4    2    1    1    3    3    2    2     1
[3,]    4    2    1    1    3    3    2    2    1     1