En particular puede ser útil para ver si existen soluciones periódicas o para visualizar el tipo de estabilidad de los puntos de equilibrio del sistema.
![]() |
Diagrama de fases de un modelo de competencia de 2 especies junto con las curvas isóclinas del sistema y 4 trayectorias solución |
En R se puede utilizar el paquete "pplane" para realizar un diagrama de fases (ver al final de este post sobre cómo instalar este paquete).
Librerías necesarias
Una vez instalado el paquete "pplane", se lo debe cargar mediante el comando: library(pplane).También se debe cargar el paquete "deSolve" que permite resolver ecuaciones diferenciales: library(deSolve). Este último paquete "deSolve" está disponible para instalar directamente desde la línea de comandos de R.
Sistema dinámico
El sistema dinámico que voy a tomar como ejemplo es un modelo de competencia de dos especies x1(t) y x2(t) por los recursos de cierto ambiente. El mismo se puede describir mediante el siguiente sistema de ecuaciones diferenciales:
dx1dt=r1x1(1−x1k1−α12x2k1)
dx2dt=r2x2(1−x2k2−α21x1k2)
Donde r1, r2, k1, k2, α12 y α21 son parámetros del sistema.
Parámetros
Si en el instante inicial las poblaciones toman valores x10 y x20 y se deja evolucionar el sistema, la situación final será una de las siguientes:- La especie 1 se extingue y la especie 2 alcanza una población igual a k2
- La especie 2 se extingue y la especie 1 alcanza una población igual a k1
- Ambas especies coexisten alcanzando poblaciones respectivas x1=α12k2−k1α12α21−1 y x2=α21k1−k2α12α21−1
En este ejemplo en particular utilizo los siguientes valores:
- r1=r2=1
- k1=400 y k2=300
- α12=0.9 y α21=0.4
Para estos valores se verifica:
Una vez que se tiene definido el modelo dinámico y se le han asignado valores a sus parámetros, ya se puede graficar el diagrama de fases. Para eso se utiliza el comando phaseArrows() del paquete "pplane".
También es posible indicar con un clik del mouse el punto inicial de la trayectoria mediante el uso del comando drawTrajectories(). Más en general se pueden indicar n puntos iniciales para que dibuje n trayectorias.
Es posible agregarlas al plano de fases mediante el comando phaseNullclines(). Notar que en el código al usar este comando utilizo la variable "plano_fases" que definí al dibujar el diagrama de fases con el comando phaseArrows().
En este modelo hay 4 isóclinas que son las dos rectas de pendiente negativa que se ven en el diagrama y los ejes x1=0 y x2=0. El color de las rectas indica si corresponden a la condición dx1dt=0 o dx2dt=0.
- α12<k1k2=1.333
- α21<k2k1=0.75
Código utilizado
La definición del modelo en R y los comandos utilizados para dibujar el plano de fases, algunas trayectorias y las curvas isóclinas se encuentran en el siguiente código que explico en las siguientes secciones:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
######## | |
# mayo 2013 | |
# plano de fases en R - modelo de competencia logístico | |
# CharlieXRay en blogspot.com | |
######## | |
######## | |
# librerias necesarias | |
######## | |
library(pplane) # para dibujar el plano de fases | |
library(deSolve) # para resolver el sistema de ecuaciones diferenciales | |
######## | |
# defino el sistema dinámico a utilizar | |
######## | |
modelo <- function(parametros){ | |
function(x1,x2){ | |
with(as.list(parametros),{ # con los componentes r1, k1, etc que conforman el array parametros | |
dx1 <- x1*( 1 - (x1/k1) - a12*(x2/k1) ) | |
dx2 <- x2*( 1 - (x2/k2) - a21*(x1/k2) ) | |
return( c(dx1,dx2) ) # retorna las derivadas | |
}) | |
} | |
} | |
######## | |
# parametros a utilizar | |
######## | |
r1 <- 1 | |
r2 <- 1 | |
k1 <- 400 | |
k2 <- 300 | |
####### | |
# parametros de interaccion de las especies | |
####### | |
a12 <- 0.9 # 0.9 < 400/300 = 1.333 | |
a21 <- 0.4 # 0.4 < 300/400 = 0.75 | |
parametros <- c(r1=r1,r2=r2,k1=k1,k2=k2,a12=a12,a21=a21) | |
####### | |
# plano de fases | |
####### | |
plano_fases <- phaseArrows( modelo(parametros), xlims=c(0,k1), ylims=c(0,k2) ) | |
####### | |
# dibujo trayectoria en el plano de fases | |
####### | |
tmax = 30 # trayectorias entre t=0 y t=tmax | |
drawTrajectories( modelo(parametros), tEnd=tmax, x0=c(x=100,y=80) ) # trayectoria con condicion inicial (100,80) | |
####### | |
# permito dibujar otras n=3 trayectorias indicando el inicio de cada trayectoria con un el mouse | |
####### | |
n <- 3 # numero de trayectorias a dibujar | |
drawTrajectories( modelo(parametros), tEnd=tmax, x0=locator(n,"p") ) | |
####### | |
# curvas isoclinas (nullclines) | |
####### | |
phaseNullclines(plano_fasesz,planofasesxy, add=TRUE) |
Plano de fases
En la primera parte del código se define el modelo dinámico a utilizar.Una vez que se tiene definido el modelo dinámico y se le han asignado valores a sus parámetros, ya se puede graficar el diagrama de fases. Para eso se utiliza el comando phaseArrows() del paquete "pplane".
Trayectorias
Al gráfico anterior se le puede añadir una trayectoria solución del sistema. Para esto se utiliza el comando drawTrajectories() del paquete "pplane". En el código de ejemplo la población inicial es (100,80).También es posible indicar con un clik del mouse el punto inicial de la trayectoria mediante el uso del comando drawTrajectories(). Más en general se pueden indicar n puntos iniciales para que dibuje n trayectorias.
Curvas Isóclinas
Las curvas isóclinas (nullclines en inglés) del sistema dinámico son aquellas donde alguna componente del vector de derivadas se anula. Es decir donde dx1dt=0 o dx2dt=0.Es posible agregarlas al plano de fases mediante el comando phaseNullclines(). Notar que en el código al usar este comando utilizo la variable "plano_fases" que definí al dibujar el diagrama de fases con el comando phaseArrows().
En este modelo hay 4 isóclinas que son las dos rectas de pendiente negativa que se ven en el diagrama y los ejes x1=0 y x2=0. El color de las rectas indica si corresponden a la condición dx1dt=0 o dx2dt=0.
Apéndice: Instalación del paquete pplane en R
Ejecuto los comandos en una línea de comandos de Debian GNU/Linux.
# indica comando ejecutado como super usuario
$ indica comando ejecutado como usuario normal
# indica comando ejecutado como super usuario
$ indica comando ejecutado como usuario normal
Instalo primero un cliente de "subversion":
# aptitude install subversion
Descargo los archivos del paquete "pplane" desde la web del proyecto en R-Forge mediante el siguiente comando:
$ svn checkout svn://r-forge.r-project.org/svnroot/pplane/
Esto crea una carpeta de nombre "pplane" con los archivos del proyecto en el directorio donde se ejecutó el comando.
Finalmente, en el mismo directorio donde se ejecutó el comando anterior, ejecuto el siguiente comando para instalar el paquete en R:
Finalmente, en el mismo directorio donde se ejecutó el comando anterior, ejecuto el siguiente comando para instalar el paquete en R:
$ R CMD INSTALL --build pplane/pkg/pplane
Si el comando anterior no logra instalar "pplane" e indica que faltan dependencias (en mi caso faltaba el paquete "abind"), hay que entrar a R, instalar estas dependencias con el comando install.packages() y luego volver a ejecutar el comando que instala "pplane".
Si el comando anterior no logra instalar "pplane" e indica que faltan dependencias (en mi caso faltaba el paquete "abind"), hay que entrar a R, instalar estas dependencias con el comando install.packages() y luego volver a ejecutar el comando que instala "pplane".
Hola:
ResponderEliminarTu Blog http://charliexray.blogspot.com.es es muy interesante. ¿Deseas enlazarnos entre nosotros?
Mi Blog es: http://electronica-pic.blogspot.com.es
Un cordial saludo.
no
Eliminar