Cuestiones iniciales

Supongamos tiempo discreto, \(t \in \lbrace 0,1, \dots \rbrace\). Cada unidad de tiempo se denomina período. Sea \(x(t)\) el número de infectados en el período \(t\). Supongamos que dicho número sigue la recurrencia: \[ \frac{x(t)-x(t-1)}{x(t-1)} = r \] Partiendo de \(x(0)=x_0\) en el instante inicial, tenemos \(x(t)=(1+r)^{t}x_0\). Llamamos a \(r\) la tasa de variación. En este script calculamos \(r\) para diferentes comunidades autónomas, tomando datos diarios. Tomamos como período la mediana de días de incubación del virus, unos cinco días.

Captura de datos

Fuente de datos: @datadista. Datos y script para COVID-19 en CCAA de España. Datos de Ministerio de Sanidad de España extraídos por Datadista.com.

# clear all variables
rm(list=ls())

# take data
data_cases_original <- read.delim("https://github.com/datadista/datasets/raw/master/COVID%2019/ccaa_covid19_casos.csv",sep = ",")

Parámetros para el cálculo de \(r\)

Los parámetros esenciales son: * Periodo de incubacion (en dias) * Número de períodos hacia atrás a coger

# periodo de incubacion (en dias)
perinc <- 5
# numero de periodos hacia atras a coger
numper <- 4

Funcion para calcular la tasa \(r\) (para cada CCAA)

# recibe filas enteras de data_cases_original
numrep <- function(zz){
  
  # elimina todas las filas cuya columna no sea fecha (las columnas fecha contienen "X")
  zz <- zz[,grepl("X", colnames(zz))]
  # coge las fechas, elimina "X"'s y convierte a fechas
  mydates <- colnames(zz)
  mydates <- gsub("X","",mydates)
  mydates <- as.Date(mydates,format="%Y.%m.%d")
  # crea data.frame a lo largo
  zz = data.frame(dates = mydates, val = as.numeric(zz))
  rm(mydates)
  # fuerza ordenacion por fechas (la mas reciente al final)
  zz <- zz[order(zz$dates),]
  
  # calculamos r
  # todas las fechas entre el primer y ultimo dia de datos
  alldates <- seq.Date(from = zz$dates[1], to = zz$dates[nrow(zz)], by = 1)
  # tomamos la ultima fecha y hacia atras cada <perinc> dias
  mydates <- alldates[seq(from = length(alldates), by = -perinc)]
  # cortamos mydates a numper
  mydates <- mydates[1:numper]
  # cogemos los valores para esos días
  yy <- zz[zz$dates %in% mydates,]
  # tasa de variacion (basado en ODE's)
  if (yy$val[1]>0){
    r <- (yy$val[numper]/yy$val[1])^(1/(numper-1)) -1
  }else{
    r <- NA
  }
  out = data.frame(ini.dat = yy$dates[1], fin.dat = yy$dates[numper], tasa=r)
return(out)  
}

Mostrar resultados

Valores ausentes indica que en el instante inicial no había afectados en la correspondiente CCAA

Otras medidas

Ritmo vs. tasa. Notemos que la recurrencia inicial es equivalente a \[ \frac{x(t)}{x(t-1)} = 1+r \] \(1+r\) se denomina habitualmente ritmo. El ritmo mide cuantas personas nuevas infectadas hay tras un período (de incubación), pongamos al comienzo de \(t\), por cada persona que había infectada en \(t-1\).

Notemos, mirando la ecuación anterior, que el número de infectados se reduce en el tiempo si y solo si \(1+r <1\), o bien \(r<0\). Esa es la razón por la que hemos marcado en rojo la vertical 0 en el gráfico anterior.

Tiempo de duplicación Las recurrencias anteriores nos permiten calcular el tiempo que tarda en duplicarse el número de infectados. En efecto, en dos períodos \(t\) y \(s\) cualesquiera tenemos \(x(t)=(1+r)^{t}x_0\) y \(x(s)=(1+r)^{s}x_0\), de modo que \(x(t) = 2x(s)\) implica: \[ t-s = \frac{ln2}{ln(1+r)} \] EL siguiente gráfico muestra el tiempo de duplicación:

Ultimos datos

La siguiente tabla muestra los datos del último período de incubación.

2020-04-12 2020-04-13 2020-04-14 2020-04-15 2020-04-16
Andalucía 10006 10187 10192 10595 10807
Aragón 4070 4187 4245 4338 4566
Asturias 1892 1958 2051 2096 2170
Baleares 1534 1550 1571 1606 1637
Canarias 1918 1944 1958 1975 1988
Cantabria 1752 1777 1796 1823 1845
Castilla-La Mancha 13698 14054 14329 14680 15151
Castilla y León 12118 12628 13180 13697 14380
Cataluña 34027 34726 35197 36505 37354
Ceuta 93 95 96 98 100
C. Valenciana 8841 9060 9213 9424 9615
Extremadura 2580 2658 2684 2762 2881
Galicia 7336 7494 7597 7708 7873
Madrid 46587 47146 48048 49526 50694
Melilla 98 101 101 102 103
Murcia 1449 1463 1487 1520 1598
Navarra 3969 4092 4150 4246 4348
País Vasco 10772 11018 11226 11475 11790
La Rioja 3279 3358 3420 3457 3916
Total 166019 169496 172541 177633 182816

Tasas de variacion vs contagios por 100.000 habitantes

La tasa de variación es de último período (tiene que ver con el período de incubación).

## Loading required package: calibrate
## Loading required package: MASS

Estimaciones de pico de contagios

Utilizando un análisis básico de \(\beta\)-convergencia podemos usar la anterior nube de puntos para estimar el pico de contagios. La idea es sencilla: suponemos que todas las CCAA’s siguen la misma evolución temporal de contagio por cada 100.000 habitantes, y por tanto lo que observamos en el gráfico anterior es que unas CCAA van más adelantadas que otras en dicha evolución. Denotemos por \(x^{\ast}\) al pico de contagios (con un ligero abuso de notación, supongamos que referido a contagio por cada 100.000) habitantes. Por definición, ningún valor de \(x\) debe ser mayor que \(x^{\ast}\), y la tasa debe ser cercana a cero en las proximidades de \(x^{\ast}\). En la siguiente tabla mostramos los resultados de un ajuste cuadrático. Si la función ajustada es cóncava, el punto de corte de dicha función con el eje de abcisas (tasa igual a cero) es la predicción de \(x^{\ast}\). Como ilustración, el gráfico anterior muestra un ajuste cuadrático en rojo solamente en el rango de valores observados.

Para ofrecer una medida de la variabilidad en las predicciones presentamos tres ajustes: excluyendo o no las CCAA’s con mayor y menor número de contagios. Para cada ajuste, presentamos una medida de concavidad de la función (p-valor del coeficiente del término cuadrático). Recordemos que el pico se mide en contagios por cada 100.000 habitantes.

concavidad pico
eliminando mayor y menor 0.9635415 10707.110
eliminando solo mayor 0.7074634 2658.414
eliminando solo menor 0.5751499 3859.864