MESS包中auc()函数如何设置细分,防止报错?

How to set subdivisions for the auc() function in the MESS package to prevent getting an error message?

我有几个样本(野生型 (WT) 与敲除型 (KO))的钙浓度时间序列数据。特别是,我为每个样本获得 2 个峰,并使用第二个峰来校准第一个峰,为此我需要两个峰的 AUC。 我的目标是将样条函数应用于我的时间序列数据并计算 AUC。

到目前为止,我使用了 MESS 包和 auc() 函数并设置了 type=spline

时间以毫秒为单位,从 0 到 1801204 毫秒

df <- data

df
# A tibble: 551 x 7
    Time         KO_1     WT1           KO_2    WT2           KO_3    WT3

 1 29800            87      80            94      99           102      99
 2 30000            77      91            89      89            80     104
 3 31487           264     334           261     147           330     257
 4 31687           352     294           349     176           242     356
 5 31887           341     333           359     260           303     353
 6 32087           349     436           346     250           280     334
 7 32287           328     373           383     321           287     443
 8 32487           382     484           376     323           270     416
 9 32687           437     495           295     317           300     458
10 32887           351     542           387     378           312     422
# ... with 541 more rows


library(MESS)

auc(df$Time, df$WT1, from=min(df$Time, na.rm = TRUE), 
    to = max(df$Time, na.rm = TRUE) ,type = 'spline')

我的预期结果是我得到了 WT1 的 AUC 值。但我总是收到错误信息:

Error in integrate(myfunction, lower = from, upper = to) : maximum number of subdivisions reached

错误消息来自 MESS::auc 中使用的函数 integrate

更准确地说,它来自参数 subdivisions(最大子间隔数),默认设置为 100。但是,在您的情况下,更高的值可能更有意义。

一个快速简单的解决方法(但不是一个非常可持续的方法!),就是将 auc 函数复制并粘贴到 R 脚本中,使其适应您的需要(见下文),然后在使用它之前获取它。

工作原理如下:

  1. 将 auc 函数复制并粘贴到 R 脚本中并将其另存为 mess_auc_adapted.R
  2. 将函数分配为 auc (auc <- function...)。
  3. 在 auc 函数中,更改最后一位:

res <- integrate(myfunction, lower = from, upper = to)$value

变成

res <- integrate(myfunction, lower = from, upper = to, ...)$value

  1. 然后按以下方式使用auc

source("mess_auc_adapted.R")

auc(x = df$Time, y = df$WT1, from=min(df$Time, na.rm = TRUE), to = max(df$Time, na.rm = TRUE) ,type = 'spline', subdivisions = WHATEVER_NUMBER_THAT_MAKES_SENSE)

一个更好的解决方案是联系维护者,告诉他们您的问题和可能的解决方案。在这里打开一个问题:https://github.com/ekstroem/MESS/issues。这样就可以直接解决问题。