Search code examples
rauc

Area under the curve


I have my data in long-format like this with 20 different variables (but they all have the same Time points):

   Time variable value
1    0       P1  0.07
2    1       P1  0.02
3    2       P1  0.12
4    3       P1  0.17
5    4       P1  0.10
6    5       P1  0.17


66     0      P12  0.02
67     1      P12  0.11
68     2      P12  0.20
69     3      P12  0.19
70     4      P12  0.07
71     5      P12  0.20
72     6      P12  0.19
73     7      P12  0.19
74     8      P12  0.12
75    10      P12  0.13
76    12      P12  0.08
77    14      P12    NA
78    24      P12  0.07
79     0      P13  0.14
80     1      P13  0.17
81     2      P13  0.24
82     3      P13  0.24
83     4      P13  0.26
84     5      P13  0.25
85     6      P13  0.21
86     7      P13  0.21
87     8      P13    NA
88    10      P13  0.19
89    12      P13  0.14
90    14      P13    NA
91    24      P13  0.12

I would like to calculate the area under the curve for each variable between time=0 and time=24. Ideally I would also like to calculate area under the curve where y>0.1.

I have tried the pracma package but it just comes out with NA.

trapz(x=P2ROKIlong$Time, y=P2ROKIlong$value)

Do I have to split my data into lots of different vectors and then do it manually or is there a way of getting it out of the long-format data?


Solution

  • The following code runs fine for me:

    require(pracma)
    df = data.frame(Time =c(0,1,2,3,4,5),value=c(0.07,0.02,0.12,0.17,0.10,0.17))
    AUC = trapz(df$Time,df$value)
    

    Is there anything strange (NA's?) in your the rest of your dataframe?

    EDIT: New code based on comments

    May not be the most efficient, but the size of your data seems limited. This returns a vector AUC_result with the AUC per variable. Does this solve your issue?

    require(pracma)
    df = data.frame(Time =c(0,1,2,3,4,5),value=c(0.07,0.02,0.12,0.17,NA,0.17),variable = c("P1","P1","P1","P2","P2","P2"))
    df=df[!is.na(df$value),]
    unique_groups = as.character(unique(df$variable))
    AUC_result = c()
    
    for(i in 1:length(unique_groups))
    {
      df_subset = df[df$variable %in% unique_groups[i],]
      AUC = trapz(df_subset$Time,df_subset$value)
      AUC_result[i] = AUC
      names(AUC_result)[i] = unique_groups[i]
    }