Como se mencionó en la entrada del blog anterior, tenemos como variables de estado a jóvenes trans, adultos trans y adultos mayores trans. Hemos decidido actualizar el diagrama causal agregando la cadena de envejecimiento de la población mexicana, para que nuestro modelo considere el incremento de la población de México en el aumento de muertes y riesgo de las personas trans.

En la siguiente imagen pueden observar el diagrama causal ya con la cadena de envejecimiento de la población mexicana. (IMAGEN) - PONER IMAGEN

También, hemos encontrado información más certera del modelo, lo cual nos permite calibrar y tener un análisis más preciso. Nuestros parámetros son los siguientes:

Tasa de natalidad Tasa de población trans

Tasa de suicidio en adultos trans: Nos basamos en la tasa de suicidio de adultos en Estados Unidos (que es 0.014) y en un estudio sobre intentos de suicidio cometidos por adultos trans, que sugiere que son 3.5 veces más propensos a cometer suicidio. Realizamos una operación para obtener esta tasa.

Tasa de suicidio en jóvenes trans: Encontramos que el 18% de los jóvenes trans en Latinoamérica han intentado suicidarse. Basándonos en estudios psicológicos que muestran que entre el 10% y el 15% de las personas que intentan suicidarse lo vuelven a intentar y logran, estimamos un porcentaje de 1.8. Sin embargo, como no es una estimación precisa, un análisis de incertidumbre será de gran ayuda para manejar las cifras en las que no tenemos un 100% de seguridad.

Tasa de homicidio en adultos trans: En México, se cometen un total de 87 homicidios de personas por su orientación sexual o identidad de género, y más del 50% son de personas trans. Aunque no hay datos específicos, estimamos que son 70 personas y luego calculamos la tasa.

Tenemos otros parámetros basados en la información proporcionada, por lo cual no hay certeza de que los datos estén correctos. Por lo cual hemos hecho análisis de incertidumbre. Estos son:

Es con estos datos que hemos realizado el modelo, de igual manera está presente el código en RStudio para su revisión.

library(deSolve)
## Warning: package 'deSolve' was built under R version 4.2.3
library(ggplot2)
#exógenas
parameters <- c(tasa_natalidad =  15.75, #Verificado: por cada 1000 habitantes
                tasa_poblacion_trans = 1.734/100, #Verificada de datos ensideg 
                tasa_suicidio_jovenes_trans = 0.09, #Asumida de fuente real
                tasa_suicidio_adultos_trans = 0.049, #Verificada, estudio nyt 
                tasa_suicidio_adultos_mayores_trans = 0.020, #Asumida de datos reales
                tasa_homicidio_jovenes_trans = 0.0017, #Asumida conforme dato oficial
                tasa_homicidio_adultos_trans = 0.4017, #  Semi-real Asumida conforme a fuentes nacionales (85 homicidios lgbt, mas del 50% de trans,se asume que 70 son trans) 
                tasa_homicidio_adultos_mayores_trans = 0.0117 ,#Asumida confrome dato real.
                periodo_adolescencia_cis = 7, #Años promedio de infancia a adolescencia
                periodo_madurez_cis = 3, # Edad promedio para ser adulto
                periodo_madurez_trans = 3, #de 15 a 25 ("adulto" biologico)
                periodo_envejecimiento_trans = 30, # de 25 a 55 (edad para jubvilarse)
                periodo_envejecimiento_cis = 30, # de 25 a 55 (edad para jubvilarse)
                periodo_muerte_cis = 20,
                periodo_muerte = 20
) 

initial.conditions <- c(ninos_cis = 25870672, #dato INEGI
                        jovenes_cis = 25896449, #dato UNFPA
                        adultos_cis = 10939569,
                        adultos_mayores_cis = 17958707, #dato INEGI, adultos 60+
                        jovenes_trans= 154460, #entre 1.2 y 2.7 de la poblacion total de jovenes
                        adultos_trans = 705063,
                        adultos_mayores_trans = 49428) 

# Definir el vector de tiempos para la simulación
times <- seq(0,
             30, 
             1) #años 

intg.method <- c("rk4")

model_reto <-function(t, state, parameters){
  with(as.list(c(state, parameters)),{
    #Variables Auxiliares o endógenas
    suicidio_jovenes_trans = jovenes_trans * tasa_suicidio_jovenes_trans
    homicidio_jovenes_trans = jovenes_trans * tasa_homicidio_jovenes_trans
    suicidio_adultos_trans = adultos_trans * tasa_suicidio_adultos_trans
    homicidio_adultos_trans = adultos_trans * tasa_homicidio_adultos_trans
    suicidio_adultos_mayores_trans = adultos_mayores_trans * tasa_suicidio_adultos_mayores_trans
    homicidio_adultos_mayores_trans = adultos_mayores_trans * tasa_homicidio_adultos_mayores_trans
    muerte_natural = adultos_mayores_trans / periodo_muerte
  
  
    #Variables de flujo (son las que modifican a las variables de estado)
    nacimientos = adultos_cis/ 10000 * tasa_natalidad
    adolescencia_cis = ninos_cis / periodo_adolescencia_cis
    madurez_cis = jovenes_cis / periodo_madurez_cis
    autoid_poblacion_trans = jovenes_cis * tasa_poblacion_trans
    envejecimiento_cis = adultos_cis / periodo_envejecimiento_cis
    muerte_cis = adultos_mayores_cis / periodo_muerte_cis
    muertes_jovenes_trans = suicidio_jovenes_trans + homicidio_jovenes_trans
    madurez_trans = jovenes_trans / periodo_madurez_trans
    muertes_adultos_trans = suicidio_adultos_trans + homicidio_adultos_trans
    envejecimiento_trans = adultos_trans / periodo_envejecimiento_trans
    muertes_adultos_mayores_trans = suicidio_adultos_mayores_trans + homicidio_adultos_mayores_trans + muerte_natural
   
    #variable de estado (se establece su ecuación diferencial de ahí viene la d)
   dninos_cis = nacimientos - adolescencia_cis
   djovenes_cis = adolescencia_cis - madurez_cis - autoid_poblacion_trans
   dadultos_cis = madurez_cis - envejecimiento_cis
   dadultos_mayores_cis = envejecimiento_cis - muerte_cis
   
   djovenes_trans = autoid_poblacion_trans - muertes_jovenes_trans - madurez_trans
   dadultos_trans = madurez_trans - muertes_adultos_trans - envejecimiento_trans
   dadultos_mayores_trans = envejecimiento_trans - muertes_adultos_mayores_trans 
   
    
    #Devuelve los resultados de la variable de estado
    return(list(c(dninos_cis, djovenes_cis, dadultos_cis, dadultos_mayores_cis, djovenes_trans, dadultos_trans, dadultos_mayores_trans)
                
                ))
  })
}


# Seleccionar el método de integración a utilizar en la simulación, en este caso 'rk4' (Runge-Kutta de 4to orden)
intg.method <- c("rk4")

out <- ode(
  y = initial.conditions, #condiciones iniciales
  times = times, #tiempo de simulación
  func = model_reto, #función del modelo
  parms = parameters,
  method = intg.method
)
out <- as.data.frame(out)
ggplot(out, aes(x = time, y = jovenes_trans)) +geom_line()

ggplot(out, aes(x = time, y = adultos_trans)) +geom_line()

ggplot(out, aes(x = time, y = adultos_mayores_trans)) +geom_line()

(TEXTO )

Análisis de incertidumbres

#definimos las incertidumbres  

 x1<- seq(5/100, 15/100, 1/100) # tasa_suicidio_jovenes_trans 0.09
 x2<- seq(0.1/100, 0.5/100, 0.01/100)# tasa homicidio jovenes trans 0.0017
 x3<- seq(2.5/100, 7.5/100, 0.5/100)# tasa_suicidio_adultos_trans0.049
 x4<- seq(30.17/100, 50.17/100, 5/100) # tasa_homicidio_adultos_trans 0.4017
 
 Xs<-expand.grid(list(tasa_suicidio_jovenes_trans=x1,tasa_homicidio_jovenes_trans=x2, tasa_suicidio_adultos_trans=x3, tasa_homicidio_adultos_trans = x4))
 Xs$Run.ID <- 1:nrow(Xs)

#loop para n cantidad de escenarios

out_all <- list()
#Establecemos el loop
for (i in 1:nrow(Xs))
{
  
parameters.Xs <- c(tasa_natalidad =  15.75, #Verificado: por cada 1000 habitantes
                tasa_poblacion_trans = 1.734/100, #Verificada de datos ensideg 
                tasa_suicidio_jovenes_trans = Xs$tasa_suicidio_jovenes_trans[i], #Asumida de fuente real
                tasa_suicidio_adultos_trans = Xs$tasa_suicidio_adultos_trans[i], #Verificada, estudio nyt 
                tasa_suicidio_adultos_mayores_trans = 0.020, #Asumida de datos reales
                tasa_homicidio_jovenes_trans = Xs$tasa_homicidio_jovenes_trans[i], #Asumida conforme dato oficial
                tasa_homicidio_adultos_trans = Xs$tasa_homicidio_adultos_trans[i], #  Semi-real Asumida conforme a fuentes nacionales (85 homicidios lgbt, mas del 50% de trans,se asume que 70 son trans) 
                tasa_homicidio_adultos_mayores_trans = 0.0117 ,#Asumida confrome dato real.
                periodo_adolescencia_cis = 7, #Años promedio de infancia a adolescencia
                periodo_madurez_cis = 3, # Edad promedio para ser adulto
                periodo_madurez_trans = 3, #de 15 a 25 ("adulto" biologico)
                periodo_envejecimiento_trans = 30, # de 25 a 55 (edad para jubvilarse)
                periodo_envejecimiento_cis = 30, # de 25 a 55 (edad para jubvilarse)
                periodo_muerte_cis = 20,
                periodo_muerte = 20
)

# Seleccionar el método de integración a utilizar en la simulación, en este caso 'rk4' (Runge-Kutta de 4to orden)
intg.method <- c("rk4")

# Realizar la simulación utilizando la función 'ode' del paquete deSolve
out <- ode(
  y = initial.conditions, #condiciones iniciales
  times = times, #tiempo de simulación
  func = model_reto, #función del modelo
  parms = parameters.Xs,
  method = intg.method
)

out <- as.data.frame(out)

#agregar columna al dataframe
out$Run.ID <- Xs$Run.ID[i]
# Agregar el data frame out a la lista out_all.
# out_all es una lista que recopila los resultados de todas las simulaciones.
# La función append() se utiliza para agregar el data frame out a la lista out_all.
out_all <- append(out_all, list(out))

# Imprimir el Run.ID para esta simulación particular.
# Esto podría ser útil para el seguimiento del progreso de la simulación, especialmente si hay muchas iteraciones.
#print(Xs$Run.ID[i])

} 

# Concatenar resultados
# La función do.call() ejecuta una función (en este caso "rbind") en una lista de argumentos (en este caso out_all).
# "rbind" es una función que combina data frames por filas.
# Al utilizar do.call con "rbind", se están combinando todos los data frames en la lista out_all en un solo data frame.
out_all <- do.call("rbind", out_all)

# La función dim() devuelve las dimensiones del objeto, mostrando el número de filas y columnas del data frame out_all.
# Esto puede ser útil para verificar que todos los data frames se hayan combinado correctamente.
dim(out_all)
## [1] 768955      9
# Combinar out_all y Xs
# La función merge() combina dos data frames en uno, basándose en una o más columnas en común.
# En este caso, se están combinando los data frames out_all y Xs basándose en la columna "Run.ID".
# Esto agregará las columnas de Xs al data frame out_all, alineando las filas basadas en los valores de "Run.ID".
out_all <- merge(out_all, Xs, by="Run.ID")

# Nuevamente, se utiliza dim() para mostrar las dimensiones del objeto resultante.
# Esto puede ser útil para verificar que la fusión se haya realizado correctamente y para entender cómo ha cambiado
# el tamaño del data frame como resultado de la fusión.
dim(out_all)
## [1] 768955     13

#3 variables de interés

#Varios plots
# Crea una gráfica para cada variable de interés
p1<- ggplot(out_all,aes(x=time,y=adultos_mayores_trans,group=Run.ID, colour=tasa_suicidio_jovenes_trans))+
  geom_line()+
  scale_color_gradient(low = "blue", high = "orange")

p2<- ggplot(out_all,aes(x=time,y=adultos_mayores_trans,group=Run.ID, colour=tasa_homicidio_jovenes_trans))+
  geom_line()+
  scale_color_gradient(low = "blue", high = "green")
  
p3<- ggplot(out_all,aes(x=time,y=adultos_mayores_trans,group=Run.ID, colour=tasa_suicidio_adultos_trans))+
  geom_line()+
  scale_color_gradient(low = "blue", high = "red")

p4<- ggplot(out_all,aes(x=time,y=adultos_mayores_trans,group=Run.ID, colour=tasa_homicidio_adultos_trans))+
  geom_line()+
  scale_color_gradient(low = "pink", high = "skyblue")

# Ahora puedes ver las gráficas individualmente
p1

p2

p3

p4