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.
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 = ",")
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
# 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)
}
Valores ausentes indica que en el instante inicial no había afectados en la correspondiente CCAA
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:
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 |
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
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 |