2015-08-11 2 views
2

площадь под кривой может быть вычислена с использованием trapz функцию pracma пакета в R. МАГК гораздо более точным, во многих случаях, особенно в биологии. Однако нет, мне известна, функция R, чтобы вычислить это. Функция ловушки следующим образом:инкрементного площадь под кривой (МАГК) в R

Пример:

a <- c(1, 4, 5, 6) 
b <- c(2, 4, 6, 8) 
plot(a, b) 
trapz(a, b) 

Ответ: 21

Кто-нибудь знает, как использовать R для расчета IAUC? Руководство можно найти here.

Заранее спасибо.

Обновление В ответ на ответ Cheng-Yow в поле ниже: Другой пример

# Recall that trapz-function is available in the pracma package 
# Here is the function kindly provided by Cheng-Yow Timothy Lin 
library(pracma) # should be loaded already 
traps <- function(a, b) { 
    for (i in 1:length(b)-1){ 
      iAUC[i] <-((b[i]+b[i+1])/2)*(a[i+1]-a[i]) 
    } 
    return(sum(iAUC)) 
} 

# Data example 
a <- c(-15, -5, 1, 2, 3, 5, 8, 10, 15, 20, 30, 45, 60, 90, 120) 
b <- c(50.20604, 49.59338, 47.39944, 56.38831, 69.43493, 73.92512, 61.92072, 67.92632, 115.45669, 
195.03242, 322.15894, 291.30094, 289.20284, 238.70562, 156.23798) 

traps(a, b) 

trapz(a, b) 

Они дают тот же конечные результаты это инкрементальный площадь под кривой? Это не то, как они объяснили функцию trapz ...

Спасибо за любое просвещение!

ответ

3
a <- c(1,2,3,4,5) 
b <- c(1,2,-1,-2,2) 
plot(a,b) 
lines(a, b) 
abline(b[1],0) 
iAUC <- vector() 

for (i in 1:(length(a)-1)){ 

    if((b[i+1]-b[1] >= 0) && (b[i]-b[1] >= 0)) 
    {iAUC[i] <-((b[i]-b[1]+b[i+1]-b[1])/2)*(a[i+1]-a[i])} 

    else if((b[i+1]-b[1] < 0) && (b[i]-b[1] >= 0)) 
    {iAUC[i] <-(b[i]-b[1])*((b[i]-b[1])/(b[i]-b[i+1])*(a[i+1]-a[i])/2)} 

    else if((b[i+1]-b[1] >= 0) && (b[i]-b[1] < 0)) 
    {iAUC[i] <-(b[i+1]-b[1])*((b[i+1]-b[1])/(b[i+1]-b[i])*(a[i+1]-a[i])/2)} 

    else if((b[i]-b[1] < 0) && (b[i+1]-b[1] < 0)) 
    {iAUC[i] <- 0} 
} 
sum(iAUC) 
iAUC  
+0

Большое спасибо Cheng-Yow за отличную функцию. См. Мое обновление в вопросе выше, как ответ на вашу функцию. –

+0

Привет, Адам, одно из ключевых отличий заключается в том, что мой код использует цикл, который медленный, когда ваши данные становятся больше. Функция в пакете pracma векторизована, поэтому она будет работать намного быстрее. Попробуйте запустить это после вашего фрагмента выше! 'а <- представитель (а, 1000) б <- представитель (б, 1000) участок (а, б) PTM <- proc.time() ловушки (а, б) proc.time() -ptm ptm <- proc.time() trapz (a, b) proc.time() - ptm'Также не забудьте инициализировать iAUC вектор с помощью 'iAUC <-vector()' в вашей функции 'traps' " –

+0

Большое спасибо @ Cheng-Yow, но ваша функция ловушек обеспечивает инкрементную AUC (я сожалею о повторении, возможно, глупого вопроса)? –

Смежные вопросы