Descripción del Caso

Introduction

After having made a model for the Dutch police about burglaries by occasional burglars and organized criminals, you are now asked to make a simulation model about home burglaries (from now on referred to as burglaries) and shop robberies (from now on referred to as robberies) with a time horizon of 10 years for a particular police precinct. Burglary and robbery are both ‘High Impact Crimes’. Such models are needed since burglaries and robberies are substitutes: more/better preventive measures against robberies lead to more burglaries, and vice versa. Use the following information, obtained during interviews and background research, in your model.

In this precinct, burglaries and robberies are committed by locals, initially by some 200 known offenders at liberty and –so the police thinks– by some 750 unknown offenders at liberty. The average number of offenses per known offender at liberty amounts to 2.5 per year and the average number of offenses per unknown offender is assumed to amount to 1 per year. Burglaries are seasonal: the number of seasonal robberies and burglaries could be modeled as the seasonality of these offenses times the sum of the number of offenses per known offender at liberty times the number of known offenders at liberty and the number of offenses per unknown offender times the unknown offenders at liberty. Model the seasonality of these offenses such that the number of offenses reaches its peak at the end of the year and its low during the summer holidays, and that the peak is 50% higher than the average and the low 50% lower.

The number of burglaries could be calculated as the relative attractiveness of burglary times the number of seasonal robberies and burglaries. The relative attractiveness of burglary could be calculated as the attractiveness of burglary divided by the sum of the attractiveness of burglary and the attractiveness of robbery. The attractiveness of burglary is proportional to the average gain per burglary and inversely proportional to both the chance of being caught after a burglary and the relative difficulty of a burglary. The average gain per burglary is e600, the chance of being caught after a burglary is 8%, and the relative difficulty of a burglary is the norm for all High Impact Crimes, i.e. it equal to 100%. The number of effective arrests after burglaries equals the chance of being caught after a burglary times the number of burglaries.

Do the same for robberies. Assume that the relative difficulty of a robbery is 10 times higher than the relative difficulty of a burglary, that the average gain per robbery is about e1200, and that the chance of being caught after a robbery is about 33%.Model the total number of arrests after burglaries and robberies as a 3rd order delay of thesum of arrests after burglaries and arrests after robberies with a delay time of a quarter of a yearand an initial value of 100 offenses. The number of known offenders that is sent to jail thenconsists of the total number of arrests after burglaries and robberies times the number of offensesper known offender at liberty divided by the sum of the number of offenses per known offenderat liberty and the number of offenses per unknown offender. The remainder of the arrests arearrests of unknown offenders. In other words, the non-negative number of unknown offenders sentto jail equals the difference between the total number of arrests after burglaries and robberies andthe number of known offenders sent to jail. Initially, the number of offenders in jail is equal to185.

This stock only increases through the inflows of unknown offenders sent to jail and known offenders sent to jail, and only decreases through the outflows of known offenders released from jail and those who stop after leaving jail. Assume that 25% stops after leaving jail: model the number of those who stop after leaving jail as the product of the percentage that stops after leaving jail of 25% and the number of offenders in jail, divided by an average time in jail of 2 year. The flow of known offenders released from jail then equals the number of offenders in jail divided by the average time in jail minus the number of those who stop after leaving jail. Do not forget at this point, to adapt the equation of the stock variable known offenders at liberty. That is, known offenders released from jail become, after being released, known offenders at liberty. The number of unknown offenders at liberty is the integral of the new offenders minus the unknown offenders sent to jail over time. Model the number of new offenders as the number of unknown offenders at liberty times the percentage increase of new offenders of 2% per year. After all, petty crime is contagious. . .

Modelo base del caso

library(deSolve)
library(ggplot2)
library(tidyr)
library(scales) 


# CONDICIONES INICIALES 

InitialConditions <- c(
  KOL           = 200,  # 200 delincuentes conocidos en libertad 
  UOL           = 750,  # 750 delincuentes desconocidos en libertad
  OIJ           = 185,  # 185 delincuentes en la carcel 
  Arrests_lag1  = 100,  # Sub‐retardo 1 (fase de detención preliminar y papeleo inicial)
  Arrests_lag2  = 100,  # Sub‐retardo 2 (comisaría, juicio, fichaje, etc.) 
  Total_Arrests = 100   # Arrestos totales iniciales, ambos arriba son 100 porque empezamoso con 100 arestos.
)


# PARÁMETROS 

parameters <- c(
  offenses_known       = 2.5,   # Número promedio de delitos por delincuente conocido
  offenses_unknown     = 1,     # Número promedio de delitos por delincuente desconocido
  gain_burglary        = 600,   # Ganancia promedio por robo a casa 
  gain_robbery         = 1200,  # Ganancia promedio por robo a tienda 
  caught_burglary      = 0.08,  # Probabilidad de arresto tras robo a casa (8%)
  caught_robbery       = 0.33,  # Probabilidad de arresto tras robo a tienda (33%)
  difficulty_burglary  = 1,     # Dificultad relativa de robo a casa (100%)
  difficulty_robbery   = 10,    # Dificultad relativa de robo a tienda (10× robo a casa)
  delay_time           = 0.25,  # Tiempo total de retardo (0.25 años = 3 meses)
  jail_time            = 2,     # Tiempo promedio en prisión (años)
  stop_rate            = 0.25,  # % que abandona el crimen tras prisión (25%)
  new_offenders_rate   = 0.02   # Tasa anual de nuevos delincuentes (2%)
)


# FUNCIÓN DEL MODELO 

crime_model <- function(t, state, parameters) {
  with(as.list(c(state, parameters)), {
    
    # 1. Cálculo de atractividad 
    attractiveness_burglary <- gain_burglary / (caught_burglary * difficulty_burglary)
    attractiveness_robbery   <- gain_robbery  / (caught_robbery  * difficulty_robbery)
    rel_attractiveness_burglary <- attractiveness_burglary / 
      (attractiveness_burglary + attractiveness_robbery)
    
    # 2. Estacionalidad (pico +50% en diciembre, -50% en verano)
    # t = 0 es enero, t = 0.75 es octubre (pico en diciembre en t ≈ 0.92)
    seasonality <- 1 + 0.5 * sin(2 * pi * (t - 0.25))
    
    # 3. Cálculo de crímenes totales 
    total_crimes <- seasonality * (offenses_known * KOL + offenses_unknown * UOL)
    
    # 4. Distribución entre burglaries y robberies
    burglaries <- rel_attractiveness_burglary * total_crimes
    robberies  <- total_crimes - burglaries
    
    # 5. Arrestos por cada tipo de crimen
    arrests_burglary <- burglaries * caught_burglary
    arrests_robbery  <- robberies  * caught_robbery
    
    # 6. Retardo de arrestos 
    dTotal_Arrests <- (arrests_burglary + arrests_robbery - Total_Arrests) / delay_time
    
    # 7. Distribución de arrestos entre conocidos y desconocidos 
    KOSJ <- Total_Arrests * (offenses_known / (offenses_known + offenses_unknown))
    UOSJ <- Total_Arrests - KOSJ
    
    # 8. Dinámica carcelaria 
    stopping_rate <- stop_rate * (OIJ / jail_time)
    KOR           <- (OIJ / jail_time) - stopping_rate
    
    # 9. Nuevos delincuentes (2% de UOL por año, como especificó el texto)
    new_offenders <- UOL * new_offenders_rate
    
    # Ecuaciones diferenciales 
    dKOL   <- KOR - KOSJ
    dUOL   <- new_offenders - UOSJ
    dOIJ   <- KOSJ + UOSJ - KOR - stopping_rate
    
    # El sub‐retardo 1 (Arrests_lag1) y sub‐retardo 2 (Arrests_lag2) se usan internamente
    dArrests_lag1 <- (KOSJ + UOSJ - Arrests_lag1) / (delay_time / 2)
    dArrests_lag2 <- (Arrests_lag1 - Arrests_lag2) / (delay_time / 2)
    
    # Total_Arrests sí depende de Arrests_lag2
    dTotal_Arrests <- (Arrests_lag2 - Total_Arrests) / (delay_time / 2)
    
    # Resultados adicionales
    list(
      c(dKOL, dUOL, dOIJ, dArrests_lag1, dArrests_lag2, dTotal_Arrests),
      burglaries                  = burglaries,
      robberies                   = robberies,
      total_crimes                = total_crimes,
      rel_attractiveness_burglary = rel_attractiveness_burglary,
      seasonality                 = seasonality
    )
  })
}


# TIEMPO DE SIMULACIÓN 
# Usé 10 años porque son los que menciona el texto, además agregué pasos mensuales para capturar adecuadamente la estacionalidad anual y observar mejor los efectos a largo plazo

times <- seq(0, 10, by = 1/12)  # 10 años con pasos mensuales


# SIMULACIÓN DEL MODELO
set.seed(123)  # Para que despues se pueda reproducir nuevamente sin cambios
out <- ode(
  y      = InitialConditions,
  times  = times,
  func   = crime_model,
  parms  = parameters,
  method = "rk4"
)
results <- as.data.frame(out)


# VISUALIZACIONES 

# 1. Dinámica de poblaciones de delincuentes
library(ggplot2)

ggplot(results, aes(x = time)) +
  geom_line(aes(y = KOL, color = "Delincuentes conocidos en libertad"), linewidth = 1) +
  geom_line(aes(y = UOL, color = "Delincuentes desconocidos en libertad"), linewidth = 1) +
  geom_line(aes(y = OIJ, color = "Delincuentes en prisión"), linewidth = 1) +
  labs(
    title    = "Dinámica de poblaciones de delincuentes",
    subtitle = "Evolución a lo largo de 10 años",
    x        = "Tiempo (años)",
    y        = "Número de individuos",
    color    = "Población"
  ) +
  theme_minimal() +
  theme(
    legend.position = "bottom"
  ) +
  scale_color_manual(
    values = c(
      "Delincuentes conocidos en libertad"     = "#1f77b4",
      "Delincuentes desconocidos en libertad"  = "#ff7f0e",
      "Delincuentes en prisión"               = "#2ca02c"
    ),
    guide = guide_legend(
      title.position = "top",  
      title.hjust    = 0.5    
    )
  )

En el transcurso de diez años se observa que el número de delincuentes desconocidos en libertad baja de unos 750 a 600, mientras que los delincuentes conocidos en libertad pasan de alrededor de 200 a 225 y los encarcelados aumentan ligeramente de 180 a 200. Esto refleja que, con el tiempo, muchos individuos “ocultos” dejan de ser desconocidos: algunos pasan a ser identificados y quedan libres, y otros terminan en prisión. Así, la población de delincuentes se redistribuye gradualmente de la categoría de desconocidos hacia las de conocidos en libertad y en reclusión.

# 2. Comparación de tipos de delitos
ggplot(results, aes(x = time)) +
  geom_line(aes(y = burglaries, color = "Robos a casas (burglaries)"), linewidth = 1) +
  geom_line(aes(y = robberies,  color = "Robos a tiendas (robberies)"),  linewidth = 1) +
  labs(
    title    = "Evolución de delitos por tipo",
    subtitle = "Patrón estacional y efecto sustitución",
    x        = "Tiempo (años)",
    y        = "Número de delitos",
    color    = "Tipo de delito"
  ) +
  theme_minimal() +
  theme(legend.position = "bottom") +
  scale_color_manual(
    values = c(
      "Robos a casas (burglaries)" = "#d62728",
      "Robos a tiendas (robberies)" = "#9467bd"
    )
  )

A lo largo de los diez años, los robos a casas muestran un ciclo estacional ya que cada año suben desde aproximadamente de 600 hasta casi 1,700 incidentes y luego vuelven a caer, repitiendo ese patrón con ligeras oscilaciones. Por su parte, los robos a tiendas también siguen un cambio anual, pero en una escala mucho menor.

A medida que los robos a casas tienden a disminuir suavemente en sus picos, los robos a tiendas registran un ligero aumento en sus máximos, lo que sugiere un efecto de sustitución, lo que quiere decir que cuando baja un tipo de delito, tiende a subir el otro.

# 3. Atractividad relativa de robos a casas
library(ggplot2)

ggplot(results, aes(x = time, y = rel_attractiveness_burglary)) +
  geom_line(color = "#1f77b4", linewidth = 1) +
  labs(
    title    = "Atractividad relativa de robos a casas",
    subtitle = "Influencia de ganancias, dificultad y probabilidad de arresto",
    x        = "Tiempo (años)",
    y        = "Proporción de atractividad"
  ) +
  scale_y_continuous(
    limits = c(0.90, 1.00),  # Ajusté el rango de Y a partir de .9 para ver más de cerca el efecto porque sino solo se veía una linea que parecia horizontal
  ) +
  theme_minimal()

A lo largo de los diez años, la proporción de atractividad de los robos a casas se mantiene prácticamente constante alrededor de 0.95, sin variaciones perceptibles. Esto quiere decir que bajo los parámetros dados de ganancias esperadas, dificultad del delito y probabilidad de arresto, la decisión de cometer un ilícito de este tipo no cambia con el tiempo; la “rentabilidad ajustada por riesgo” de robar viviendas permanece estable y sigue siendo alta, lo que refleja que ningún factor hace que estas ganancias netas suban o bajen significativamente durante el período analizado.

# 4. Patrón de estacionalidad
ggplot(results, aes(x = time, y = seasonality)) +
  geom_line(color = "#e377c2", linewidth = 1) +
  geom_hline(yintercept = 1, linetype = "dashed", color = "gray40") +
  labs(
    title    = "Factor de estacionalidad de delitos",
    subtitle = "Pico: +50% en diciembre (1.5), Valle: -50% en verano (0.5)",
    x        = "Tiempo (años)",
    y        = "Factor de estacionalidad"
  ) +
  theme_minimal()

Cada año, el “factor de estacionalidad” sube a 1,5 en diciembre y baja a 0,5 en verano. Eso quiere decir que en diciembre los delitos aumentan un 50 % frente a lo normal, mientras que en verano caen un 50 %.

La línea muestra ese ciclo repetido durante los diez años, cada diciembre hay un pico de delitos y cada verano un mínimo.


Modelado de incertidumbre

Escogí estos tres parámetros porque porque considero que juntos cubren las piezas clave de la dinámica ya que:

La amplitud de estacionalidad refleja por qué los robos a casas suben en invierno y bajan en verano.

El factor de sustitución porque muestra como los delincuentes pasan de casas a tiendas cuando cambia la oportunidad

Y finalmente la atractividad de inicial de robar viviandas porque establece el incentivo base para elegir un objetivo u otro antes de considerar la esacionalidad.

Definamos los parámetros que consideraremos como parte de nuestras incertidumbres

# Modelado de incertidumbres: Robos a casas y tiendas

library(deSolve)
library(ggplot2)
library(gridExtra)

# 1. Definir condiciones iniciales y tiempos
# El texto dice:
#  - Hay 200 delincuentes conocidos (KOL) y 750 desconocidos (UOL) libres al inicio.
#  - Cada delincuente conocido comete 2.5 delitos al año, cada desconocido 1 delito al año.
#  - En t = 0 (enero), la estacionalidad es baja: 50 % del nivel promedio.
#
# Para llegar a estos números para Crímenes_Hogar y Crímenes_Tienda en t = 0:
#
# 1) Primero sumé cuántos delitos harían en total si no hubiera estacionalidad:
#      delitos_conocidos + delitos_desconocidos
#      = (2.5 delitos/año * 200 delincuentes) + (1 delito/año * 750 delincuentes)
#      = 500 + 750 = 1250 delitos por año.
#
# 2) Como enero está en la parte baja de la temporada, usé estacionalidad = 0.5:
#      total_crimes(0) = 0.5 * 1250 = 625 delitos en el primer mes.
#
# 3) Asigné esos 625 delitos entre hogares y tiendas según su “atractividad”:
#    burglary: gain_burglary / (caught_burglary * difficulty_burglary)
#             = 600 / (0.08 * 1) = 7500
#    robbery : gain_robbery  / (caught_robbery  * difficulty_robbery)
#             = 1200 / (0.33 * 10) ≈ 363.64
#    - Sumé ambas           = 7500 + 363.64 = 7863.64
#
# 4) Por lo tanto la fracción que toca a “burglaries” es:
#      rel_attr_burglary(0) = 7500 / 7863.64 ≈ 0.953
#
# 5) Entonces:
#    Crimenes_Hogar(0)  = 0.953 * 625 ≈ 596 delitos
#    Crimenes_Tienda(0) = 625 - 596 ≈ 29 delitos
#
InitialConditions <- c(
  Crimenes_Hogar  = 596,  
  Crimenes_Tienda = 29     
)
times <- seq(0, 10, by = 0.1)  # de 0 a 10 años en pasos de 0.1

# 3. Definir la función de EDO que modela los robos
robbery_model <- function(time, state, parms) {
  # state   = c(Crimenes_Hogar, Crimenes_Tienda)
  # parms   = c(BaseRate_Burglary, BaseRate_Store,
  #             Amplitud_Est_Burglary, Amplitud_Est_Store,
  #             Factor_Sustitucion, Atractividad0_Burglary,
  #             Atractividad0_Store, Prob_Arresto)
  
  hogar <- state[1]
  tienda <- state[2]
  
  base_h <- parms["BaseRate_Burglary"]
  base_s <- parms["BaseRate_Store"]
  amp_h  <- parms["Amplitud_Est_Burglary"]
  amp_s  <- parms["Amplitud_Est_Store"]
  fac_s  <- parms["Factor_Sustitucion"]
  attr_b <- parms["Atractividad0_Burglary"]
  attr_s <- parms["Atractividad0_Store"]
  p_ar   <- parms["Prob_Arresto"]
  
  # 3.1. Componente estacional 
  #      El texto del problema pedía ±50% sobre la tasa base en el pico y valle.
  #      amp_h=0.5 significa que la tasa varía entre 1+0.5=1.5 y 1-0.5=0.5 de base_h.
  
  tasa_est_h <- base_h * (1 + amp_h * sin(2 * pi * time))
  tasa_est_s <- base_s * (1 + amp_s * sin(2 * pi * time))
  
  # 3.2. Flujo neto considerando atractividad y probabilidad de arresto
  #      Se usa “rel_attractiveness_burglary” como proporción entre 0 y 1
  rel_attr_b <- attr_b / (attr_b + attr_s)  # siempre ∈ [0,1]
  rel_attr_s <- attr_s / (attr_b + attr_s)  # complemento, ∈ [0,1]
  
  flujo_h <- tasa_est_h * rel_attr_b - p_ar * hogar
  flujo_s <- tasa_est_s * rel_attr_s - p_ar * tienda
  
  # 3.3. Efecto de sustitución:
  #      Cuando caen los robos a casas por debajo de base_h, un porcentaje
  #      ‘fac_s’ de esa diferencia se traslada a robos a tiendas.
  flujo_s <- flujo_s + fac_s * pmax(0, (base_h - hogar))
  
  # 3.4. Derivadas
  d_hogar  <- flujo_h
  d_tienda <- flujo_s
  
  list(c(d_hogar, d_tienda))
}

# 4. Definir rangos de valores para los parámetros inciertos

x1 <- seq(0.30, 0.70, 0.05)  # Amplitud_estacionalidad (30 % a 70 %)
                            #   - El enunciado original pedía ±50 % (i.e., amp_h = 0.5).
                            #   - Aquí exploramos de 0.30 (poco estacional) a 0.70 (muy estacional).
x2 <- seq(0.10, 0.50, 0.05)  # Factor_sustitucion (10 % a 50 %) ya que el ejercicio sugiere explorar cómo varía la sustitución de crímenes.

x3 <- seq(0.30, 0.70, 0.10)  # Porque atractividad_inicial_burglary [0.30, 0.70]
                            

# 5. Generar todas las combinaciones posibles de incertidumbres
Xs <- expand.grid(
  Amplitud_estacionalidad       = x1,
  Factor_sustitucion            = x2,
  Atractividad_inicial_burglary = x3
)
Xs$Run.ID <- 1:nrow(Xs)

# 6. Preparar lista para guardar resultados
out_all <- list()

# 7. Definir método de integración 
intg.method <- "rk4"  

# 8. Loop de simulación para cada escenario
for (i in 1:nrow(Xs)) {
  
  # Parámetros constantes
  base_rate_burglary <- 1000
  base_rate_store    <- 100
  
  # Extraer valores inciertos del escenario i
  amp_est <- Xs$Amplitud_estacionalidad[i]
  fac_sub <- Xs$Factor_sustitucion[i]
  attr0_b <- Xs$Atractividad_inicial_burglary[i]
  
  #  Construir vector de parámetros para esta corrida
  
  parameters.Xs <- c(
    BaseRate_Burglary       = base_rate_burglary,
    BaseRate_Store          = base_rate_store,
    Amplitud_Est_Burglary   = amp_est,
    Amplitud_Est_Store      = amp_est * 0.5,        # 50 % de la amplitud de casas
    Factor_Sustitucion      = fac_sub,
    Atractividad0_Burglary  = attr0_b,
    Atractividad0_Store     = 1 - attr0_b,          # <- complementaria, ∈ [0,1]
    Prob_Arresto            = 0.30
  )
  
  # Ejecutar la simulación con ode()
  out <- ode(
    y      = InitialConditions,
    times  = times,
    func   = robbery_model,
    parms  = parameters.Xs,
    method = intg.method
  )
  
  # Convertir resultado a data.frame 
  out <- data.frame(out)
  out$Run.ID <- Xs$Run.ID[i]
  
  # Almacenar en la lista de resultados
  out_all <- append(out_all, list(out))
}

# 9. Combinar resultados de todas las corridas
out_all <- do.call("rbind", out_all)

# 10. Fusionar con la tabla de incertidumbres Xs
out_all <- merge(out_all, Xs, by = "Run.ID")

dim(out_all)
## [1] 40905     7
# Gráficas de sensibilidad


# Robos a casas vs. Amplitud estacionalidad
p1 <- ggplot(out_all, aes(
              x      = time,
              y      = Crimenes_Hogar,
              group  = Run.ID,
              colour = Amplitud_estacionalidad
            )) +
  geom_line(linewidth = 0.5) +  
  scale_color_gradient(low  = "lightblue", high = "darkblue") +
  labs(
    title  = "Robos a casas vs. Amplitud de estacionalidad",
    x      = "Tiempo (años)",
    y      = "Número de robos a casas",
    colour = "Amp. estacionalidad\n(± %)"
  ) +
  theme_minimal()

#  Robos a tiendas vs. Factor de sustitución
p2 <- ggplot(out_all, aes(
              x      = time,
              y      = Crimenes_Tienda,
              group  = Run.ID,
              colour = Factor_sustitucion
            )) +
  geom_line(linewidth = 0.5) +  
  scale_color_gradient(low  = "lightgreen", high = "darkgreen") +
  labs(
    title  = "Robos a tiendas vs. Factor de sustitución",
    x      = "Tiempo (años)",
    y      = "Número de robos a tiendas",
    colour = "Factor sustitución\n(%)"
  ) +
  theme_minimal()

#  Robos a casas y tiendas vs. Atractividad inicial
p3_hogar <- ggplot(out_all, aes(
                    x      = time,
                    y      = Crimenes_Hogar,
                    group  = Run.ID,
                    colour = Atractividad_inicial_burglary
                  )) +
  geom_line(linewidth = 0.5) +  
  scale_color_gradient(low  = "pink", high = "red") +
  labs(
    title  = "Robos a casas vs. Atractividad inicial",
    x      = "Tiempo (años)",
    y      = "Número de robos a casas",
    colour = "Atractividad inicial\n(0–1)"
  ) +
  theme_minimal()

p3_tienda <- ggplot(out_all, aes(
                     x      = time,
                     y      = Crimenes_Tienda,
                     group  = Run.ID,
                     colour = Atractividad_inicial_burglary
                   )) +
  geom_line(linewidth = 0.5) +  
  scale_color_gradient(low  = "pink", high = "red") +
  labs(
    title  = "Robos a tiendas vs. Atractividad inicial",
    x      = "Tiempo (años)",
    y      = "Número de robos a tiendas",
    colour = "Atractividad inicial\n(0–1)"
  ) +
  theme_minimal()

A continuación se muestran las gráficas con su respectiva explicación

p1

En esta gráfica se peude observar que todas las líneas parten de un valor inicial similar y a medida que avanza el tiempo, suben de forma ondulada. Estas ondulaciones tienen sentido con lo que el caso expone en la oscilación estacional ya que se menciona que en invierno el robo a casas alcanza un pico, y en verano desciende hasta un valle.

Es interesante ver como si el parámetro de amplitud de estacionalidad está en el extremo bajo (30 %), la diferencia entre ese punto más alto (invierno) y el punto más bajo (verano) es más pequeño ya que la curva apenas se mueve arriba y abajo.

Pero si ese parámetro lo subo al 70 %, cada ola se vuelve muy pronunciada pues los picos invernales se elevan mucho más y los puntos bajos veraniegos descienden mucho más, lanzando la curva de robos a casas hacia arriba con cada nueva estación.

Esto significa que esa misma estacionalidad provoca que el efecto en los robos a casas oscile con mayor intensidad sobre una tendencia creciente.

p2

En esta segunda gráfica muestro la relacion entre los robos a tiendas vs el Factor de sustitución.

Lo que sucede es que, cuando los robos a casas bajan, un porcentaje (dejado por ese factor) migra a robar tiendas. Por eso al principio de cada año, cuando la ola estacional presiona hacia abajo a la serie de hogar, se ve que esa caída inunda la serie de tienda con un aumento.

Si ese factor de sustitución es pequeño (por ejemplo 10 %), el traspase de delincuentes a tiendas es mínimo: cada vez que el robo a casas decae a su punto bajo, apenas se suma un pequeño incremento a la curva de tiendas, y por eso la serie de tiendas arranca cerca de su valor inicial y crece muy despacio, con apenas ondulaciones leves.

En cambio, si se eleva el factor a 50 %, cada desplome puntual de robos a casas transfiere la mitad de esa diferencia a tiendas, y entonces esa curva de robos a tiendas experimenta saltos mucho más marcados. Así, en la misma fecha del año, se ve que las líneas coloreadas con el tono verde más oscuro (50 %) llegan hasta cerca de 250 robos por tienda, mientras que las verdes claritas (10 %) apenas tocan 100 o 120.

Todo esto sucede siempre encima de la tendencia de fondo, porque “robo a tienda” también crece por su propia línea base menos la fracción de arrestos.

grid.arrange(p3_hogar, p3_tienda, ncol = 1)

Finalmente, en estas dos últimas gráficas de Robos vs. Atractividad inicial se puede ver cómo el parámetro de atractividad reparte a los delincuentes entre casas y tiendas desde el instante cero.

Cuando ese número es 0.7 (mucho atractivo a robar casas), en la sección de “robos a casas” se nota que esa línea roja oscura queda por encima de todas las demás y se dispara antes y sube más alto durante los diez años. Simultáneamente, en la gráfica de tiendas se produce el efecto inverso: esa misma corrida (atractivo 0.7 a hogares) equivale a atractivo 0.3 en tiendas, de modo que la curva “tiendas” para ese tono rojo oscuro se queda muy abajo, casi tocando las 80 entradas iniciales, con mínima subida y apenas un ligero cambio.

A la inversa, cuando se tiene la atractividad a robar casas en 0.3, la atractividad a robar tiendas es 0.7. En ese caso se ve que la curva de “hogar” en rojo clarito queda abajo y apenas sube, mientras que la curva de “tienda” en rosado más intenso sobresale arriba, porque la mayoría de la atención de los delincuentes se concentra en esos blancos de oportunidad que, en ese escenario, son las tiendas.

Conclusión

Para mí fue muy interesante ver cómo cada parámetro impacta directamente en los dos conteos de robos. La amplitud de estacionalidad hace que los robos a casas tengan un “sube y baja” más pronunciado o más leve a lo largo de los años. El factor de sustitución muestra cuánto de esa caída en los robos a casas se transforma en nuevos robos a tiendas. Y la atractividad inicial, desde el minuto cero, determina si los delincuentes prefieren atacar primero las viviendas o las tiendas, empujando hacia arriba o hacia abajo la curva de una u otra variable durante toda la simulación.