Diagrama de Flujo

Diagrama de Flujo # Primer modelo

library(deSolve)
## Warning: package 'deSolve' was built under R version 4.4.3
InitialConditions <- c(migrantes.transito = 778905,
                       migrantes.violentados = 146219,
                       migrantes.EUA = 3825000
  )

times <- seq(  0, #initial time
               30, #end time
               1) #time step / años

violencia.migrantes <- function(t, state, parameters) {
  with(as.list(c(state,parameters)), {
    
    #Endogenous auxiliary variables
    migrantes.interceptados.sur = agentes.sur*intercepcion.por.agente.sur #numero de migrantes por año que intentan cruzar a México por la frontera sur pero son atrapados por las autoridades (no entran a la variable de estado)
    migrantes.interceptados.norte = intercepcion.por.agente.norte*border.patrols #numero de migrantes por año que intentan cruzar a EUA pero son atrapados por border patrols (no salen de la variable de estado)
    tasa.conclusion.migratoria = tasa.deportacion.mx + tasa.normal.salida + tasa.deportacion.mx #la suma de las tasas que concluyen el tiempo como migrante
    inmigracion.normal.sur = 11380.08 + 28307.46 * (t + 14) #consideramos esta variable como endógena porque incluye el tiempo. Se realizó una regresión lineal para entender el flujo natural de migrantes que vienen del sur. La regresión se realizó con datos de 2013 a 2024
    tarjetas.solicitadas = inmigracion.normal.sur * tasa.solicitantes #Cantidad de migrantes que solicitan una TVRH antes de entrar a México. Tarjeta de Visitante por Razones Humanitarias (TVRH): es un permiso que otorga el gobierno mexicano para que una persona migrante pueda permanecer legalmente en el país de forma temporal. Se entrega, por ejemplo, a quienes solicitan asilo o han vivido situaciones de riesgo.
    
    tarjetas.aceptadas = tarjetas.solicitadas * porcentaje.aceptacion #cantidad de TVRH que son aceptadas.
    
    
    #Flow variables
    inmigracion.sur =  inmigracion.normal.sur - migrantes.interceptados.sur - tarjetas.aceptadas #principal flujo de entrada a migrantes.transito. Se restan migrantes interceptados y tarjetas aceptadas porque son migrantes que nunca están irregularmente en México.
    deportacion.EUA.MX = tasa.deportacion.EUA * migrantes.EUA #cantidad de migrantes latinos no mexicanos que son deportados de EUA a México al año
    estadia = (tasa.estadia.normal*migrantes.transito)/tiempo.estadia + asilos.politicos #cantidad de migrantes que dejan de ser irregulares. Se divide la cantidad total entre el tiempo que se tardan en conseguir los permisos adecuados. Se suma los asilos políticos ya que los convierte en migrantes regulares.
    salida.EUA = (tasa.normal.salida*migrantes.transito)/tiempo.salida - migrantes.interceptados.norte #cantidad de migrantes al año que sale de México a EUA. Se divide entre el tiempo que tardan en salir desde que entran a méxico. Se restan los migrantes que no lograron llegar a EUA
    deportacion.MX = (tasa.deportacion.mx*migrantes.transito)/tiempo.deportacion #cantidad de migrantes al año que son deportados por las autoridades mexicanas dentro de México, se divide entre el tiempo que se tardan en ser deportados. 
    incremento.violencia.por.autoridades = (tasa.crimenes.autoridades*migrantes.transito) #cantidad de migrantes al año que son violentados por autoridades
    incremento.violencia.por.polleros = (tasa.crimenes.polleros*migrantes.transito) #cantidad de migrantes al año que son violentados por traficantes de migrantes (polleros)
    conclusion.migratoria = tasa.conclusion.migratoria * migrantes.violentados #cantidad de migrantes al año que salen de situación de violencia por que dejan de ser migrantes en tránsito
    defunciones = tasa.defunciones * migrantes.violentados #cantidad de migrantes al año que mueren por situaciones de violencia
      
    #State (stock) variables (d)
    dmigrantes.transito = inmigracion.sur + deportacion.EUA.MX - estadia - salida.EUA - deportacion.MX #migrantes en tránsito irregulares que hay en México
    dmigrantes.violentados= incremento.violencia.por.autoridades + incremento.violencia.por.polleros - conclusion.migratoria - defunciones #Variable más importante para el análisis. Cantidad de migrantes en tránsito irregulares que están en situación de violencia en México
    dmigrantes.EUA = salida.EUA - deportacion.EUA.MX #Cantidad de migrantes irregulares en EUA que pasaron por México irregularmente
    
    list(c(dmigrantes.transito, dmigrantes.violentados, dmigrantes.EUA), inmigracion.sur = inmigracion.sur, deportacion.EUA.MX = deportacion.EUA.MX, estadia = estadia, salida.EUA = salida.EUA, deportacion.MX = deportacion.MX)
  })
}

parameters<-c( 
  tiempo.estadia = 5, #tiempo estimado en el que un migrante tramita sus permisos para cambiar su situación a regular y quedarse en México permanente mente. (años)
  tiempo.deportacion = 0.58, #tiempo aproximado que tardan las autoridades en deportar a un migrante desde su entrada al país hasta la salida de este.(años)
  tiempo.salida = .5, #tiempo aproximado que tarda un migrante en llegar a EUA desde que entra a México (años).
  tasa.estadia.normal = 9/100, #porcentaje de migrantes en tránsito irregulares que deciden cambiar su estatus a regular.
  tasa.deportacion.mx = 13/100, #porcentaje de migrantes que son deportados por las autoridades mexicanas
  tasa.normal.salida = 50/100, #porcentaje de migrantes que salen a EUA
  tasa.defunciones = 0.06/100, #porcentaje de migrantes que mueren por situaciones de violencia en México
  tasa.crimenes.polleros = 10.72/100, #Porcentaje de migrantes que son violentados por traficantes de migrantes Se obstuvo multiplicando el porcentaje de migrantes violentados que fueron violentados por traficantes de migrantes por el porcentaje de migrantes totales que sufre violencia.
  inmigracion.normal.norte = 1424, #cantidad de migrantes irregulares que entran a méxico por año desde la frontera norte.
  asilos.politicos = 16682, #cantidad de asilos políticos dados anualmente.
  agentes.sur = 6180, #cantidad de agentes en la frontera sur.
  intercepcion.por.agente.sur = 20, #cantidad de migrantes que son interceptados por cada agente de la frontera sur.
  border.patrols = 22000, #cantidad de border patrols en la frontera de EUA
  intercepcion.por.agente.norte = 39.7, #cantidad de migrantes que son interceptados por cada border patrol
  tasa.crimenes.autoridades = 15.72/100, #Porcentaje de migrantes que son violentados por autoridades migratorias. Se obstuvo multiplicando el porcentaje de migrantes violentados que fueron violentados por autoridades por el porcentaje de migrantes totales que sufre violencia.
  tasa.deportacion.EUA = 1.27/100, #porcentaje de migrantes irregulares que son deportados a México y no son mexicanos (este valor probablemente haya cambiado en el año del análisis, pero aún no se tienen datos suficientes para elaborar una nueva tasa)
  porcentaje.aceptacion = 5/100, #porcentaje de TVRH que son aceptadas
  tasa.solicitantes = 22/100 #porcentaje de migrantes provenientes del sur que solicitan TVRH para transitar México
  )

intg.method<-c("rk4")

out <- ode(y = InitialConditions,
           times = times,
           func = violencia.migrantes,
           parms = parameters,
           method =intg.method )

plot(out,
     col=c("blue"))

library(ggplot2)
library(tidyr)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(scales)
## Warning: package 'scales' was built under R version 4.4.3
out_df <- as.data.frame(out)
out_filtrado <- out_df %>%
  select(time, migrantes.transito, migrantes.violentados)
out_long <- out_filtrado %>%
  pivot_longer(cols = -time, names_to = "variable", values_to = "valor")
ggplot(out_long, aes(x = time, y = valor, color = variable)) +
  geom_line(size = 1.3) +
  labs(title = "Evolución de migrantes en México",
       x = "Años",
       y = "Número de migrantes",
       color = "Variable") +
  scale_color_manual(values = c("migrantes.transito" = "#1f77b4",
                                "migrantes.violentados" = "#e15759"),
                     labels = c("Migrantes en tránsito", "Migrantes violentados")) +
  theme_minimal(base_size = 14) +
  scale_y_continuous(labels = comma) +
  theme(legend.position = "bottom")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

En la gráfica se muestra la evolución de las variables de estado según la simulación. Se omite los resultados de la variable de migrantes irregulares en EUA, ya que no es pertinente para el análisis objetivo de este estudio.

Ambas variables de estado muestran comportamientos similares en toda la evolución, esto se debe a que la cantidad de migrantes violentados depende únicamente de tasas exógenas y la cantidad de migrantes en tránsito irregulares. También es por esto que la cantidad de migrantes violentados es mucho menor a la cantidad de migrantes en tránsito en el país.

Del año 0 al 1 ambas variables experimentan un aumento veloz, sin embargo, el crecimiento desacelera a partir del año 1, donde la pendiente de ambas curvas se mantiene igual hasta el año 30. Este comportamiento es causado por los retrasos en las salidas que tiene el modelo, ya que al inicio entran muchos migrantes a la variable de estado pero no sale ninguno por los retrasos, después del año 1 empiezan a salir más migrantes.

Incertidumbres

Las incertidumbres son variables cuyo valor en el futuro es incierto. En este caso seleccionamos las incertidumbres que mayor efecto tienen en las dos principales variables de estado y cuyo valor no depende del gobierno mexicano. Esta decisión está basada en que el gobierno mexicano tiene control sobre el valor de ciertas variables, lo que realmente no las hace inciertas para el gobierno mexicano.

Por lo mencionado anteriormente, las variables selectas como incertidumbres son las siguientes: Border patrols Tasa de deportación de EUA Tasa normal de salida a EUA

Las primeras dos dependen de Estados Unidos y la tercera de los migrantes. A cada incertidumbre se le da un rango alrededor del valor real de la variable, para Border Patrols es (17000, 27000), para tasa de salida a EUA es (45/100, 55/100) y para la tasa de deportación es (1/100, 15/100).

Cada gráfica de incertidumbre contiene 1 línea para cada combinación posible de los valores de las incertidumbres. Es decir, el escenario donde hay 22 mil border patrols, 0.5 de tasa de salida y 0.01 de tasa de deportación de EUA está incluido en cada gráfica en forma de una línea, cualquier alteración de los valores, dentro de los rangos, igualmente se encuentra en cada gráfica. El valor de la incertidumbre se representa en la gráfica por medio de colores, el color de la línea cambia mientras más grande o más pequeño es el valor de la incertidumbre. Con todos los posibles escenarios y las líneas de colores se crean las gráficas de incertidumbres a continuación.

x1<- seq(17000, 27000, 1000) #border.patrols 22000
x2<- seq(45/100, 55/100, 1/100) #tasa.normal.salida 50/100
x3<- seq(1/100, 15/100, 1/100) #tasa.deportacion.EUA 1.27/100

#combine all stressors 
 Xs<-expand.grid(list(border.patrols=x1, tasa.normal.salida=x2, tasa.deportacion.EUA=x3))
 Xs$Run.ID <- 1:nrow(Xs)

#map all Xs into the model 
out_all <- list()
for (i in 1:nrow(Xs))
{

#Variables exógenas o parámetros
parameters.Xs<-c(
  tiempo.estadia = 5,
  tiempo.deportacion = 0.58,
  tiempo.salida = .5,
  tasa.estadia.normal = 9/100,
  tasa.deportacion.mx = 13/100,
  tasa.normal.salida = Xs$tasa.normal.salida[i],
  tasa.defunciones = 0.06/100,
  tasa.crimenes.polleros = 26.8/100 * 28.6/100,
  inmigracion.normal.norte = 1424,
  asilos.politicos = 16682,
  agentes.sur = 6180,
  intercepcion.por.agente.sur = 20,
  border.patrols = Xs$border.patrols[i],
  intercepcion.por.agente.norte = 39.7,
  tasa.crimenes.autoridades = 39.3/100 * 28.6/100,
  tasa.deportacion.EUA = Xs$tasa.deportacion.EUA[i],
  porcentaje.aceptacion = 5/100,
  tasa.solicitantes = 22/100
  )
#Simulación del model
out <- ode(y = InitialConditions,
           times = times,
           func = violencia.migrantes, 
           parms = parameters.Xs,
           method =intg.method )

out <- data.frame(out)

out$Run.ID <- Xs$Run.ID[i]

out_all <- append(out_all, list(out))

} 

out_all <- do.call("rbind", out_all)

dim(out_all)
## [1] 56265    10
out_all <- merge(out_all, Xs, by="Run.ID")

dim(out_all)
## [1] 56265    13
p1<- ggplot(out_all,aes(x=time,y=migrantes.transito,group=Run.ID, colour=tasa.deportacion.EUA))+
  geom_line()+
  labs(title = "Tasa de Deportación EUA",
       x = "Años",
       y = "Migrantes en tránsito en México")+
  scale_y_continuous(labels = comma) +
  scale_color_gradient(low = "green", high = "red")

p2<- ggplot(out_all,aes(x=time,y=migrantes.transito,group=Run.ID, colour=tasa.normal.salida))+
  geom_line()+
  labs(title = "Tasa normal de Salida",
       x = "Años",
       y = "Migrantes en tránsito en México")+
  scale_y_continuous(labels = comma) +
  scale_color_gradient(low = "blue", high = "orange")
  
p3<- ggplot(out_all,aes(x=time,y=migrantes.transito,group=Run.ID, colour=border.patrols))+
  geom_line()+
  labs(title = "Border patrols (EUA)",
       x = "Años",
       y = "Migrantes en tránsito en México")+
  scale_y_continuous(labels = comma) +
  scale_color_gradient(low = "purple", high = "yellow")


# Ahora puedes ver las gráficas individualmente
p1

La gráfica demuestra una clara relación entre la tasa de deportación de EUA y la cantidad de migrantes en tránsito. La relación entre estas variables es directa, es decir, mientras menor es la tasa menor es la cantidad de migrantes en tránsito en México. Esto se debe a que si menos son deportados, menor son regresados a México.

p2

La relación entre la tasa de salida a EUA y la cantidad de migrantes en tránsito es inversa. El entendimiento de esta relación es meramente lógico, mientras más salen, menos hay en la variable de estado.

p3

Si la cantidad de Border Patrols es bajo la cantidad de migrantes dentro del país también será más baja y vice versa. Esto se debe a que si hay muchos Border Patrols más migrantes serán interceptados y regresarán a México.

p4<- ggplot(out_all,aes(x=time,y=migrantes.violentados,group=Run.ID, colour=tasa.deportacion.EUA))+
  geom_line()+
  labs(title = "Tasa de Deportación EUA",
       x = "Años",
       y = "Migrantes Violentados")+
  scale_y_continuous(labels = comma) +
  scale_color_gradient(low = "green", high = "red")

p5<- ggplot(out_all,aes(x=time,y=migrantes.violentados,group=Run.ID, colour=tasa.normal.salida))+
  geom_line()+
  labs(title = "Tasa Normal de Salida a EUA",
       x = "Años",
       y = "Migrantes Violentados")+
  scale_y_continuous(labels = comma) +
  scale_color_gradient(low = "blue", high = "orange")
  
p6<- ggplot(out_all,aes(x=time,y=migrantes.violentados,group=Run.ID, colour=border.patrols))+
  geom_line()+
  labs(title = "Border patrols (EUA)",
       x = "Años",
       y = "Migrantes Violentados")+
  scale_y_continuous(labels = comma) +
  scale_color_gradient(low = "purple", high = "yellow")


# Ahora puedes ver las gráficas individualmente
p4

El efecto de esta incertidumbre en la cantidad de migrantes violentados es el mismo que en la cantidad de migrantes en tránsito en el país. A mayor tasa de deportación de EUA, número de migrantes violentados.

p5

Añ igual que en la variable de estado anterior, en los escenarios donde la tasa de salida a EUA es más cercano a 55% la cantidad de migrantes violentados es menor. Esto se debe a que si hay menos migrantes en México hay menos que podrían caer en situación de violencia.

p6

Por último la cantidad de Border Patrols afecta proporcionalmente a la cantidad de migrantes en situación de violencia, si hay más border patrols hay más migrantes violentados.

Políticas

Para disminuir la cantidad de migrantes que son violentados en México se proponen las siguientes 3 políticas: - Política 1: Prevención estructural – Fortalecimiento del ingreso regulado en la frontera sur - Política 2: Protección desde el inicio – Aumentar la presencia del Grupo Beta en la frontera sur - Política 3: Gobernanza migratoria y garantía de derechos: Reforma del sistema de gestión y detención migratoria

A continuación se explica cada política y su efecto en el modelo:

Política 1: Prevención estructural – Fortalecimiento del ingreso regulado en la frontera sur

Política- Variable a la que afecta (tarjetas aceptadas -> inmigración por frontera sur) Aumentar la entrega de la Tarjeta de Visitante por Razones Humanitarias (TVRH), garantizando que al menos el 60% de quienes solicitan asilo o refugio en México puedan obtenerla. La Tarjeta de Visitante por Razones Humanitarias (TVRH) es un permiso que otorga el gobierno mexicano para que una persona migrante pueda permanecer legalmente en el país de forma temporal. Se entrega, por ejemplo, a quienes solicitan asilo o han vivido situaciones de riesgo.

Esta política busca ofrecer una ruta legal, rápida y segura para que las personas migrantes no tengan que cruzar por caminos peligrosos ni depender de traficantes. Al contar con un permiso, pueden ingresar y moverse por México sin esconderse ni exponerse a abusos. Eso significaría menos personas cruzando por rutas peligrosas, menor dependencia de traficantes, menos detenciones arbitrarias, mayor acceso a servicios básicos, menos saturación en estaciones migratorias y un mejor control del Estado sobre quién entra y en qué condiciones.

Es necesaria porque en 2024 se entregaron 97% menos permisos que el año anterior. Aunque bajaron las solicitudes de asilo, la migración continuó, pero en condiciones más riesgosas. La falta de alternativas legales no detiene el flujo migratorio, solo lo vuelve más violento y costoso para todos.

Política 2: Protección desde el inicio – Aumentar la presencia del Grupo Beta en la frontera sur

Política- Variable a la que afecta (incremento de crímenes a migrantes por traficantes de migrantes)

Esta política propone aumentar la presencia del Grupo Beta, el equipo del Instituto Nacional de Migración especializado en ayuda humanitaria, incrementando sus recorridos en Chiapas, Tabasco, Oaxaca y Veracruz, principales puntos de entrada al país.

El objetivo es proteger desde el inicio a quienes migran, brindándoles orientación, auxilio y acompañamiento para que no queden expuestos a traficantes ni a situaciones de riesgo por falta de apoyo. Aunque la mayoría de personas entra por el sur, solo una de cada cinco acciones del Grupo Beta ocurre ahí. Esto deja a quienes recién llegan sin información ni protección en un momento clave.

A diferencia de otras autoridades, el Grupo Beta no detiene ni criminaliza. Ofrece ayuda, canaliza a servicios y orienta a quienes migran. Si se aplica bien, esta política podría reducir en 12% los casos de violencia en los próximos 30 años, al ofrecer apoyo desde el primer momento, reducir la necesidad de recurrir a redes delictivas y fortalecer la confianza en las instituciones.

Política 3: Gobernanza migratoria y garantía de derechos: Reforma del sistema de gestión y detención migratoria

Política- Variable a la que afecta (incremento de crímenes a migrantes por autoridades)

Esta política propone cambiar cómo el gobierno mexicano trata a las personas migrantes sin papeles, dejando de encerrarlas en estaciones migratorias y garantizando un trato digno, sin criminalización.

Se plantean cuatro cambios clave: eliminar condiciones carcelarias en estaciones migratorias, capacitar al personal en derechos humanos, ofrecer alternativas al encierro como albergues o permisos temporales, y permitir la supervisión de estos espacios por parte de organizaciones y medios.

Si se implementa correctamente, esta política podría reducir en 40% los casos de violencia contra personas migrantes en los próximos 30 años. Un cambio en la actitud del Estado puede marcar una gran diferencia.

Diagrama de Flujo con Políticas

Diagrama de Flujo En este diagrama de flujo actualizado se muestra de que forma impactan las políticas a las variables existentes del modelo.

Modelo con políticas

library(deSolve)
InitialConditions <- c(migrantes.transito = 778905,
                       migrantes.violentados = 146219,
                       migrantes.EUA = 3825000
  )

times <- seq(  0, #initial time
               30, #end time
               1) #time step / años

violencia.migrantes.politicas <- function(t, state, parameters.politicas) {
  with(as.list(c(state,parameters.politicas)), {
      migrantes.interceptados.sur = agentes.sur*intercepcion.por.agente.sur
      migrantes.interceptados.norte = intercepcion.por.agente.norte*border.patrols
      tasa.conclusion.migratoria = tasa.deportacion.mx + tasa.normal.salida + tasa.deportacion.mx
      inmigracion.normal.sur = 11380.08 + 28307.46 * (t + 14)
      tarjetas.solicitadas = inmigracion.normal.sur * tasa.solicitantes
      tarjetas.aceptadas = tarjetas.solicitadas * (porcentaje.aceptacion + politica1)
      
      
      inmigracion.sur =  inmigracion.normal.sur - migrantes.interceptados.sur - tarjetas.aceptadas
      deportacion.EUA.MX = tasa.deportacion.EUA * migrantes.EUA 
      estadia = (tasa.estadia.normal*migrantes.transito)/tiempo.estadia + asilos.politicos
      salida.EUA = (tasa.normal.salida*migrantes.transito)/tiempo.salida - migrantes.interceptados.norte
      deportacion.MX = (tasa.deportacion.mx*migrantes.transito)/tiempo.deportacion
      incremento.violencia.por.autoridades = (tasa.crimenes.autoridades*migrantes.transito) * (1-politica3)
      incremento.violencia.por.polleros = (tasa.crimenes.polleros*migrantes.transito) * (1-politica2)
      conclusion.migratoria = tasa.conclusion.migratoria * migrantes.violentados
      defunciones = tasa.defunciones * migrantes.violentados
      
      dmigrantes.transito = inmigracion.sur + deportacion.EUA.MX - estadia - salida.EUA - deportacion.MX
      dmigrantes.violentados= incremento.violencia.por.autoridades + incremento.violencia.por.polleros - conclusion.migratoria - defunciones
      dmigrantes.EUA = salida.EUA - deportacion.EUA.MX
    
    list(c(dmigrantes.transito, dmigrantes.violentados, dmigrantes.EUA), inmigracion.sur = inmigracion.sur, deportacion.EUA.MX = deportacion.EUA.MX, estadia = estadia, salida.EUA = salida.EUA, deportacion.MX = deportacion.MX)
  })
}

parameters.politicas<-c( 
  tiempo.estadia = 5, 
  tiempo.deportacion = 0.58, 
  tiempo.salida = .5, 
  tasa.estadia.normal = 9/100, 
  tasa.deportacion.mx = 13/100, 
  tasa.normal.salida = 50/100,
  tasa.defunciones = 0.06/100,
  tasa.crimenes.polleros = 10.72/100, 
  inmigracion.normal.norte = 1424, 
  asilos.politicos = 16682, 
  agentes.sur = 6180, 
  intercepcion.por.agente.sur = 20, 
  border.patrols = 22000, 
  intercepcion.por.agente.norte = 39.7, 
  tasa.crimenes.autoridades = 15.72/100, 
  tasa.deportacion.EUA = 1.27/100,
  porcentaje.aceptacion = 5/100,
  tasa.solicitantes = 22/100,
  politica1 = 55/100, #Debido a que el porcentaje estandarizado es de 60% y el actual es de 5% se aumenta 55 puntos base para que este llegue al objetivo y tenga los resultados esperados.
  politica2 = 12/100, #Porcentaje de reducción de casos de violencia por traficantes de migrantes esperado en una implementación exitosa de la política.
  politica3 = 40/100 #Porcentaje de reducción de casos de violencia por autoridades migratorias esperado en una implementación exitosa de la política.
  )

intg.method<-c("rk4")

out.politicas <- ode(y = InitialConditions,
           times = times,
           func = violencia.migrantes.politicas,
           parms = parameters.politicas,
           method =intg.method )

plot(out.politicas,
     col=c("blue"))

out.p_df <- as.data.frame(out.politicas)

# Filtramos solo las variables que nos interesan para la gráfica
out.p_filtrado <- out.p_df %>%
  select(time, migrantes.transito, migrantes.violentados)

# Transformamos a formato largo para ggplot
out.p_long <- out.p_filtrado %>%
  pivot_longer(cols = -time, names_to = "variable", values_to = "valor")

# Gráfico con ggplot
ggplot(out.p_long, aes(x = time, y = valor, color = variable)) +
  geom_line(size = 1.3) +
  labs(title = "Evolución de migrantes en México",
       x = "Años",
       y = "Número de migrantes",
       color = "Variable") +
  scale_color_manual(values = c("migrantes.transito" = "#1f77b4",
                                "migrantes.violentados" = "#e15759"),
                     labels = c("Migrantes en tránsito", "Migrantes violentados")) +
  theme_minimal(base_size = 14) +
  scale_y_continuous(labels = comma) +
  theme(legend.position = "bottom")

Ambas variables presentan una disminución en sus cantidades, sin embargo el comportamiento de las líneas es el mismo. Esto se debe a que los cambios afectan de forma directa a los flujos de entrada de las variables de estado. Con estas políticas es posible mantener la cantidad de migrantes violentados por debajo de 400,000 en 30 años, mientras que sin políticas, la cantidad de migrantes en situación de violencia superaba los 500,000. Por otra parte, la cantidad de migrantes en tránsito en México tiene una diferencia de 1 millón de personas cuando hay políticas y cuando no. El número de migrantes en tránsito en 30 años con políticas alcanza 1,567,608, mientras que sin políticas este número llega hasta 2,599,463.

http://rpubs.com/CesarCepedaa/1322255