Несогласованные множественные квантили ddply по группе

Я пытаюсь использовать ddply для суммирования медианы и 25/75 прецентилей нескольких групп в относительно небольшом наборе данных. Я группирую по DoseWt измеренные точки данных AUC_INFobs и Cmax. (Использование R 4.0.4 в RStudio 1.3.1093 в Windows 10). Хотя результаты для AUCINF_obs совпадают, вычисленные по строкам (для DoseWt == 0,3) и ddply & summarize, это не относится к моим данным для Cmax:

median(NCAtrim$Cmax[NCAtrim$DoseWt==0.3])
quantile(NCAtrim$Cmax[NCAtrim$DoseWt==0.3], 0.25)
quantile(NCAtrim$Cmax[NCAtrim$DoseWt==0.3], 0.75)

NCA.by.Dose.25_75tile<-ddply(NCAtrim, .(DoseWt), summarize,
   AUC_inf = round(median(AUCINF_obs),2), AUCinf25 = round(quantile(AUCINF_obs, 0.25),2), AUCinf75 = round(quantile(AUCINF_obs, 0.75),2),
     Cmax = round(median(Cmax), 2), Cmax_25 = round(quantile(Cmax, 0.25), 2), Cmax_75 = round(quantile(Cmax, 0.75), 2))    
NCA.by.Dose.25_75tile

Может ли кто-нибудь объяснить, почему я не могу сгенерировать 25-й и 75-й процентили с помощью ddply summarize для Cmax здесь, но 25-й, 50-й и 75-й процентили AUCINF_obs работают? (Я также пробовал квантиль (Cmax, probs = 0,25).

NCAtrim <- structure(list(Subject = c(103L, 103L, 103L, 105L, 105L, 107L, 
107L, 107L, 109L, 111L, 111L, 111L, 113L, 113L, 113L, 114L, 114L, 
114L, 117L, 117L, 117L, 124L, 124L, 124L, 126L, 126L, 126L, 127L, 
127L, 127L, 130L, 130L, 130L), DoseWt = c(0.3, 0.45, 0.6, 0.3, 
0.45, 0.3, 0.45, 0.6, 0.3, 0.3, 0.45, 0.6, 0.3, 0.45, 0.6, 0.3, 
0.45, 0.6, 0.3, 0.45, 0.6, 0.3, 0.45, 0.6, 0.3, 0.45, 0.6, 0.3, 
0.45, 0.6, 0.3, 0.45, 0.6), AUCINF_obs = c(75.57957417, 104.7376298, 
193.1863023, 150.8553768, 231.6657641, 97.55371159, 153.2804929, 
213.179011, 90.84944244, 54.65739998, 93.3108462, 78.07527241, 
61.31713576, 89.91275385, 126.6723822, 94.02414615, 166.3379068, 
227.4162735, 98.84793101, 172.1750658, 149.2339892, 79.45304645, 
142.0389319, 171.7761067, 44.36951602, 86.64275743, 107.4389943, 
56.42917332, 112.4691754, 144.4193233, 87.22135293, 137.3190569, 
151.0853702), Cmax = c(17.2, 22.7, 54.1, 16, 43.3, 19.8, 35.1, 
48, 30.6, 12.4, 18.2, 16.4, 16, 27.8, 31.3, 14.5, 24.6, 37.6, 
15.3, 26, 27.7, 16.5, 24.3, 19.7, 11, 15.8, 43.2, 14.6, 29.8, 
35.6, 19, 38.1, 39)), class = "data.frame", row.names = c(NA, 
-33L))

person PHutson    schedule 16.03.2021    source источник


Ответы (1)


Это потому, что значение Cmax изменяется при запуске Cmax = round(median(Cmax), 2). Следующая выполняемая вами команда (Cmax_25 = round(quantile(Cmax, 0.25), 2)) получает это измененное Cmax значение, а не исходное.

Вы можете оставить эту строку последней, чтобы она не изменила значение Cmax. Также plyr больше не работает, поэтому вы можете перейти на dplyr.

library(dplyr)

NCAtrim %>%
  group_by(DoseWt) %>%
  summarise(AUC_inf = round(median(AUCINF_obs),2), 
            AUCinf25 = round(quantile(AUCINF_obs, 0.25),2), 
            AUCinf75 = round(quantile(AUCINF_obs, 0.75),2),
            Cmax_25 = round(quantile(Cmax, 0.25), 2), 
            Cmax_75 = round(quantile(Cmax, 0.75), 2), 
            Cmax = round(median(Cmax), 2)) -> NCA.by.Dose.25_75tile

NCA.by.Dose.25_75tile
person Ronak Shah    schedule 16.03.2021
comment
Спасибо за краткое (и доброе) исправление моей глупой ошибки и за указатель на dplyr. - person PHutson; 17.03.2021