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 脚本中,使其适应您的需要(见下文),然后在使用它之前获取它。
工作原理如下:
- 将 auc 函数复制并粘贴到 R 脚本中并将其另存为
mess_auc_adapted.R
- 将函数分配为
auc
(auc <- function...
)。
- 在 auc 函数中,更改最后一位:
res <- integrate(myfunction, lower = from, upper = to)$value
变成
res <- integrate(myfunction, lower = from, upper = to, ...)$value
- 然后按以下方式使用
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。这样就可以直接解决问题。
我有几个样本(野生型 (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 脚本中,使其适应您的需要(见下文),然后在使用它之前获取它。
工作原理如下:
- 将 auc 函数复制并粘贴到 R 脚本中并将其另存为
mess_auc_adapted.R
- 将函数分配为
auc
(auc <- function...
)。 - 在 auc 函数中,更改最后一位:
res <- integrate(myfunction, lower = from, upper = to)$value
变成
res <- integrate(myfunction, lower = from, upper = to, ...)$value
- 然后按以下方式使用
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。这样就可以直接解决问题。