У меня есть проблема применения решателя дифференциальных уравнений для каждого объекта ID
в пакете deSolve для расчета количества лекарственного средства в модели внутривенного вливания в 2 отсека. Мне удалось установить код (ниже), чтобы он разрешал для одного предмета. Мне нужна помощь в том, как применять его для каждого объекта в кадре данных, используя пакет ddply
.Имитация данных с использованием функции deSolve package-ddply
Ниже приведена кадр данных, называемый simeventdfi
, который имеет дозовые события, необходимые для расчетов.
library(deSolve)
Шаг 1: обеспечить событие DF для каждого субъекта
simeventdfi <-
ID var time value method
1 3 0.0 6 rep
1 3 16.7 0 rep
1 4 0.0 2.4 rep
1 4 16.7 2.4 rep
1 5 0.0 10 rep
1 5 16.7 10 rep
1 6 0.0 1 rep
1 6 16.7 1 rep
1 7 0.0 25 rep
1 7 16.7 25 rep
2 3 0.0 6 rep
2 3 16.7 0 rep
2 4 0.0 2.4 rep
2 4 16.7 2.4 rep
2 5 0.0 10 rep
2 5 16.7 10 rep
2 6 0.0 1 rep
2 6 16.7 1 rep
2 7 0.0 25 rep
2 7 16.7 25 rep
Шаг 2: Укажите время для имитационных значений
simtimes <- sort(unique(c(simeventdfi$time, seq(0,10,1))))
Шаг 3: Функциональные содержащие дифференциальные уравнения для сумм в отсеков (А)
#THETAin is empty for this model
simthetai <- NULL
DES <- function(T, A, THETAin)
{
RATE <- A[3] #Dose rate (time dependent)
CL <- A[4] #Time dependent
V1 <- A[5] #Time dependent
Q <- A[6] #Time dependent
V2 <- A[7] #Time dependent
dA1 <- RATE -Q/V1*A[1] +Q/V2*A[2] -CL/V1*A[1] #Central compartment
dA2 <- Q/V1*A[1] - Q/V2*A[2] #Peripheral compartment
RATE <- 0 #Set rate to zero so doesn't change unless event
dCL <- 0
dV1 <- 0
dQ <- 0
dV2 <- 0
list(c(dA1,dA2,RATE,dCL,dV1,dQ,dV2)) #List of derivatives
}
Шаг 4: Поскольку я смог установить код функции для решения только для одного объекта, то я должен подмножить один объект ID
из приведенного выше simeventdfi
. Однако мне нужна помощь в том, как применять решатель дифференциальных уравнений для каждого идентификатора объекта, используя ddply
. На данный момент я подмножу simeventdfi
выше для одного субъекта, чтобы продемонстрировать, как работает эта функция.
simeventdfi <- subset(simeventdfi,ID==1)
Установить начальные значения - отсеки и зависящие от времени параметры
A_0i <- c("A1"=0,"A2"=0,
"Rate"=simeventdfi$value[1],
"CL"=simeventdfi$value[simeventdfi$var==4 & simeventdfi$time==0],
"V1"=simeventdfi$value[simeventdfi$var==5 & simeventdfi$time==0],
"Q"= simeventdfi$value[simeventdfi$var==6 & simeventdfi$time==0],
"V2"=simeventdfi$value[simeventdfi$var==7 & simeventdfi$time==0])
print(A_0i)
Шаг 5: Выполнить дифференциальное уравнение решатель и получить результаты в dataframe
simdatadfi <- as.data.frame(ode(A_0i, simtimes, DES, simthetai, events=list(data=simeventdfi), method="lsoda"))
Она работает нормально с одного предмета только. Мне нужна помощь в том, как применять решатель дифференциального уравнения на шаге 5 для каждого объекта в simeventdfi
.
Ошибка в checkFunc (Func2, times, y, rho): Число производных, возвращаемых функцией func() (7), должно равняться длине вектора начальных условий (11) 'Существует проблема при установке начальных значений.Я думаю, что начальные значения (часть шага 4) должны быть закодированы для установки отдельно для каждого объекта. Я хотел «ddply», потому что я хочу сравнить скорость runnung deSolve с другой работой, которую я использовал, используя 'ddply' @shadow – Amer