Ir al contenido

Calcula esl Índice Estandarizado de Precipitación para distintas escalas. El spi_indice toma valores de precipitación mientras que el spei_indice toma valores del balance entre precipitación y evapotranspiración potencial. Internamente hacen lo mismo; la única diferencia es la distribución teórica usada por defecto para ajustar los datos.

Uso

spi_indice(
  fecha,
  precipitacion,
  escalas,
  referencia = rep(TRUE, length(fecha)),
  distribucion = "Gamma",
  ...
)

spei_indice(fecha, balance, escalas, distribucion = "log-Logistic", ...)

spi_referencia(fecha, precipitacion)

Argumentos

fecha

vector de fechas.

precipitacion

vector de precipitacion.

escalas

vector numérico con las escalas requeridas. La unidad de la escala está dada por el vector de fechas. Si escalas = 6 y los datos son mensuales entonces el cálculo del indice se hará en escalas de 6 meses.

referencia

serie de precipitación para usar de referencia en el ajuste a la distribución teórica. Puede ser:

  • vector lógico o numérico que se usará para filtrar los datos de entrada.

  • un data frame con columna fecha y precipitacion. La función spi_referencia() es un simple wrapper a data.frame() que le pone el nombre correcto a las variables.

distribucion

distribución usada para ajustar los datos.

...

argumentos pasados a SPEI::spi

balance

balance entre precipitación y evapotranspiración potencial.

Valor

Un data.frame con columnas

  • fecha (fecha)

  • escala (numérico) definidas en el argumento de entrada

  • spi o spei (numérico)

Detalles

Estas funciones usan internamente a la función SPEI::spi pero tienen la ventaja de devolver el resultado como un data.frame que se puede usar de manera directa para el análisis de datos con dplyr.

Referencias

Vicente-Serrano, S. M., Beguería, S. and López-Moreno, J. I.: A multiscalar drought index sensitive to global warming: The standardized precipitation evapotranspiration index, J. Clim., 23(7), doi:10.1175/2009JCLI2909.1 , 2010.

R Package SPEI: Calculation of the Standardized Precipitation-Evapotranspiration Index

Ejemplos


library(dplyr)

# datos aleatorios
datos <- data.frame(fecha = seq(as.Date("1985-01-01"), as.Date("2015-12-01"), by = "1 month"))
set.seed(42)
datos$pp <- rgamma(nrow(datos), shape = 2, scale = 10)

with(datos, spi_indice(fecha, pp, escalas = 1:5)) %>%
slice_head(n = 10)
#>         fecha escala          spi
#> 1  1985-01-01      1  1.083697896
#> 2  1985-02-01      1 -1.019570097
#> 3  1985-03-01      1 -0.005701827
#> 4  1985-04-01      1 -1.364974042
#> 5  1985-05-01      1 -0.176312295
#> 6  1985-06-01      1 -0.582748565
#> 7  1985-07-01      1  1.883677464
#> 8  1985-08-01      1 -0.001867550
#> 9  1985-09-01      1 -1.007481944
#> 10 1985-10-01      1 -1.457246889

# Si entran nuevos datos y hay que calcular el spi nuevamente pero sin que
# cambien los valores viejos, hay que usar `referencia`

nuevos_datos <- data.frame(fecha = seq(as.Date("2016-01-01"),
                                       as.Date("2017-12-01"), by = "1 month"))
nuevos_datos$pp <- rgamma(nrow(nuevos_datos), shape = 2, scale = 10)
nuevos_datos <- rbind(datos, nuevos_datos)

# Usando un vector lógico
with(nuevos_datos, spi_indice(fecha, pp, escalas = 1:5,
                       referencia = data.table::year(fecha) < 2016)) %>%
slice_head(n = 10)
#>         fecha escala          spi
#> 1  1985-01-01      1  1.083697896
#> 2  1985-02-01      1 -1.019570097
#> 3  1985-03-01      1 -0.005701827
#> 4  1985-04-01      1 -1.364974042
#> 5  1985-05-01      1 -0.176312295
#> 6  1985-06-01      1 -0.582748565
#> 7  1985-07-01      1  1.883677464
#> 8  1985-08-01      1 -0.001867550
#> 9  1985-09-01      1 -1.007481944
#> 10 1985-10-01      1 -1.457246889

# O un data.frame
with(nuevos_datos, spi_indice(fecha, pp, escalas = 1:5,
                       referencia = spi_referencia(datos$fecha, datos$pp))) %>%
slice_head(n = 10)
#>         fecha escala          spi
#> 1  1985-01-01      1  1.083697896
#> 2  1985-02-01      1 -1.019570097
#> 3  1985-03-01      1 -0.005701827
#> 4  1985-04-01      1 -1.364974042
#> 5  1985-05-01      1 -0.176312295
#> 6  1985-06-01      1 -0.582748565
#> 7  1985-07-01      1  1.883677464
#> 8  1985-08-01      1 -0.001867550
#> 9  1985-09-01      1 -1.007481944
#> 10 1985-10-01      1 -1.457246889