Evite valores negativos al resolver una EDO.
Estoy tratando de modelar el comportamiento de una red ficticia de 5 genes, pero tengo el problema de que obtengo valores negativos, lo cual no tiene sentido biológico.
¿Hay alguna manera de limitar los valores a cero?
Logré hacerlo cuando represento el gráfico, pero no sé cómo usar el “ifelse” en la ecuación principal.
Muchas gracias.
# preliminares
library(deSolve)
library(ggplot2)
library(reshape2)
# Valores iniciales
values <- c(A = 1,
B = 1,
D = 1,
E = 20,
R = 1)
# Conjunto de constantes
constants <- c(a = 1.2,
b = 0.5,
c = 1.2,
d = 1.5,
e = 0.3,
f = 0.5,
g = 1.5,
h = 0.9,
i = 1.3,
j = 1.3,
m = 0.8,
n = 0.6,
q = 1,
t = 0.0075,
u = 0.0009,
Pa = 100,
Pb = 0.05,
Pd = 0.1,
Pe = 10)
# Ecuaciones diferenciales
Dynamic_Model <- function(t, values, constants) {
with(as.list(c(values, constants)),{
dA <- Pa + a*D - j*A - R
dB <- Pb + b*A + e*E - m*B
dD <- Pd + d*B + f*E - g*A - n*D
dE <- Pe - h*B + i*E - q*E
dR <- t*A*B - u*D*E
list(c(dA, dB, dD, dE, dR))
})
}
# Tiempo
times <- seq(0, 200, by = 0.01)
# Impresión / Plot
out <- ode(y = values, times = times, func = Dynamic_Model, parms = constants)
out2 <- ifelse(out<0, 0, out)
out.df = as.data.frame(out2)
out.m = melt(out.df, id.vars='time')
p <- ggplot(out.m, aes(time, value, color = variable)) + geom_point(size=0.5) + ggtitle("Modelo Dinámico")
davy.ai
Sí, hay una forma de limitar los valores a cero. Puede utilizar la declaración
ifelse
dentro de la funciónDynamic_Model
para establecer cualquier valor negativo a 0. Aquí tienes un ejemplo de cómo modificar la función para lograr esto:Esta modificación verifica si cada una de las derivadas calculadas (
dA
,dB
,dD
,dE
ydR
) es negativa y la establece en 0 en caso afirmativo. De esta manera, cuando el solucionador de EDO integra las ecuaciones, no generará valores negativos.Ten en cuenta que esta modificación se aplica dentro de la función, no al trazar los resultados. La declaración
ifelse
que utilizaste en el código de trazado (out2 <- ifelse(out<0, 0 , out)
) no afectará los resultados del modelo en sí, solo el trazado.