Как установить подразделения для функции auc () в пакете MESS, чтобы предотвратить получение сообщения об ошибке? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть данные временных рядов из нескольких образцов (дикий тип (WT) против нокаута (KO)) для концентраций кальция.В частности, я получаю 2 пика для каждого образца и использую 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')

Мой ожидаемый результат заключается в том, что я получаю значение AUC для WT1.Но я всегда получаю сообщение об ошибке:

Ошибка в интегрировании (myfunction, lower = from, upper = to): максимальное число подразделений достигло

1 Ответ

2 голосов
/ 25 марта 2019

Сообщение об ошибке исходит от функции integrate, которая используется в MESS::auc.

Точнее, он исходит из аргумента 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)

A Лучшее решение - связаться с сопровождающим, рассказать им о своей проблеме и возможном решении. Просто откройте вопрос здесь: https://github.com/ekstroem/MESS/issues. Таким образом, проблема может быть решена напрямую.

...