Modelización estocástica de precipitaciones máximas para el cálculo de eventos extremos a partir de los periodos de retorno mediante R Prof. Dr. Antonio José Sáez Castillo 20 de marzo de 2009 Departamento de Estadística e Investigación Operativa, Universidad de Jaén Resumen Las precipitaciones máximas en una determinada zona geográfica son un fenómeno claramente sujeto a incertidumbre. Su modelización mediante distribuciones de probabilidad posibilita la determinación de lo que puede considerarse un evento extremo en un determinado periodo de retorno. En este trabajo se describe cómo realizar dicha modelización mediante distribuciones Gumbel, log-normal, log-Pearson Tipo III y SQRT-ETmax, ajustando sus parámetros mediante el método de máxima verosimilitud, evaluando la bondad de los ajustes mediante el test de Kolmogorov-Smirnoff y obteniendo los eventos extremos a partir de las funciones cuantil de las distribuciones ajustadas. Todos los procedimientos se han implementado en el software estadístico R. Palabras clave: precipitaciones máximas, eventos extremos, periodos de retorno, máxima verosimilitud, Gumbel, log-normal, log-Pearson Tipo III, SQRT-ETmax, Kolmogorov-Smirnoff, R. 1. Introducción Aunque la motivación del presente trabajo está en relación con las precipitaciones máximas soportadas por una determinada zona geográfica, en general podemos considerar que el objeto de estudio es una variable aleatoria X que cuantifica la magnitud de algún evento como tormentas, avenidas, sequías, subidas del nivel del mar, etc. Se dice que dicha variable toma como valor un evento extremo si supera un valor umbral, xT , previamente especificado bajo algún criterio. El tiempo que transcurre entre la ocurrencia de dos eventos extremos es asimismo una variable aleatoria, t, llamada intervalo de recurrencia, cuya media, E [t] = T , se denomina periodo de retorno. Teniendo en cuenta que t contabiliza el número de unidades de tiempo hasta la ocurrencia de un nuevo evento 1 Modelización estocástica de precipitaciones máximas extremo, su distribución de probabilidad de una distribución geométrica de parámetro p = P [X ≥ xT ] = 1 − F (xT ) , (1) donde F (x) = P [X ≤ x] es la función de distribución de la magnitud del fenómeno. Por tanto su media es E [t] = 1−p . p Sustituyendo (1) en esta expresión tenemos que F (xT ) = 1 T −1 =1− . T T Esta expresión permite relacionar el umbral a partir del cual se considera que un evento es extremo con su frecuencia de ocurrencia, es decir, con el periodo de retorno, a través de la distribución de probabilidad de la variable X. Concretamente, 1 −1 xT = F 1− . (2) T Por tanto, y a modo de resumen, si consideramos que un evento extremo es el que ocurre en promedio una vez cada T años, (2) determina cuál es el evento extremo. 2. Modelos probabilísticos para la magnitud del evento Queda manifiesto, por tanto, que es necesario conocer la distribución de probabilidad de la magnitud del evento, X, para poner en relación el periodo de retorno con el evento extremo. En ese sentido vamos a describir a continuación algunos de los modelos probabilísticos más utilizados para tal fin en la bibliografía consultada. 2.1. La distribución de Gumbel La distribudión de Gumbel puede caracterizarse a partir de su función de distribución, dada por [Wikipedia] F (x; µ, β) = e−e (µ−x)/β . El parámetro µ es conocido como parámetro de localización y el parámetro β 2 como parámetro de escala. Su media es µ + β × γ y su varianza π6 × β. A partir de estas dos expresiones de la media y la varianza poblacionales, despejando µ y β en términos de la media y la varianza de los datos, se pueden obtener las estimaciones de µ y β mediante el método de los momentos, aunque es conocido que este método no garantiza eficiencia en las estimaciones. Como Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 2 Modelización estocástica de precipitaciones máximas alternativa al método de los momentos, el método de máxima verosimilitud, que utilizaremos en este trabajo, se haya implementado en la mayoría de los paquetes de software estadístico, entre ellos R. 2.2. La distribución log-normal La distribución log-normal supone modelizar el logaritmo de los datos mediante una distribución normal. Es decir, consiste en plantear que Y = logX, sigue una distribución N (µ, σ). La estimación de sus parámetros viene dada por la estimación de los parámetros de la normal asociada. 2.3. La distribución log-Pearson Tipo III De igual forma, la distribución de log-Pearson Tipo III supone modelizar los datos en escala logarítmica, es decir, considerar un modelo para Y = logX. En este caso, el modelo es la llamada distribución de Pearson Tipo III [Kotz and Nadarajah, 2000]. Aunque existen distintas parametrizaciones de esta distribución, una de las más habituales es la dada por la versión biparamétrica cuya función de densidad es [HydroToolBox], f (x; k, θ) = xk−1 e−x/θ para x > 0 y k, θ > 0. θk Γ(k) Esta distribución es más conocida como distribución Gamma. El parámetro k es el llamado parámetro de forma y el parámetro θ, el parámetro de escala. En otras ocasiones esta densidad se expresa en términos del parámetro de razón λ = 1/θ. La estimación de los parámetros puede realizarse mediante el método de los momentos, aunque el método de máxima verosimilitud suele proporcionar mejores estimaciones y se encuentra implementado en los paquetes estadíticos más comunes. De cara a la implementación en R que veremos después hay que tener en cuenta que, al contrario que la distrbución log-normal, la distribución de logPearson Tipo III (a partir de ahora, por simplicidad, la llamaremos log-Gamma) no se encuentra explícitamente implementada en R, sino que debe considerarse a través de su relación con la distribución Gamma. En este sentido, si Y = logX y ajustamos una distribución Gamma a Y , dada por la densidad f (y; k, θ), tendríamos que la densidad de X sería g (x; k, θ) = 2.4. f (log (x) ; k, θ) . x La distribución SQRT-ETmax Esta distribución, originalmente propuesta en el contexto de precipitaciones máximas en Japón [Etoh et al, 1986], ha venido siendo recomendada por la Dirección General de Carreteras en los último años para la modelización de las Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 3 Modelización estocástica de precipitaciones máximas precipitaciones máximas [Ferrer y Ardiles, 1994]. Su definición puede hacerse a partir de su función de distribución, dada por F (x) = e−k(1+ √ αx)e− √ αx para valores positivos de x. Aunque algunos autores han desarrollado una implementación del método de los momentos que permite su evaluación en las hojas de cálculo más habituales [Zorraquino, 2004]1 , los propios autores que definieron la distribución recomendaban la estimación mediante el método de máxima verosimilitud [Etoh et al, 1986]. En esta ocasión, ni la distribución SQRT-ETmax ni por supuesto su estimación máximo-verosimil están implementadas en R (ni en ningún paquete estadístico común), aunque su programación es sencilla, como veremos. 3. Evaluación de la bondad del ajuste mediante el test de Kolmogorov-Smirnoff Acabamos de comentar en la descripción de los modelos la posibilidad de estimar los parámetros de las distintas distribuciones. Eso nos conducirá a obtener cuatro modelos ajustados a los datos, uno para cada distribución. Inmediatamente surgen dos cuestiones: 1. ¿Son esos modelos ajustados válidos para los datos que modelizan? 2. Si varios de ellos son válidos, ¿cuál es el mejor ? Hay que decir, en primer lugar, que ambas preguntas obligan a decidirse por un criterio de bondad. En el contexto de las distribuciones continuas, uno de los más habituales es el conocido como test de Kolmogorov-Smirnoff, que se basa en cuantificar la máxima diferencia entre el modelo teórico y los datos en su función de distribución. Recordemos que la función de distribución de un modelo teórico se define como F (x) = P [X ≤ x] . Por su parte, si tenemos la muestra de datos ordenados de menor a mayor, x(1) , ..., x(N ) , podríamos considerar la proporción de datos inferior a cada uno de ellos, es decir, numero de datos ≤ x(i) i = . SN x(i) = N N Lógicamente, el ajuste de los datos dado por F (x) será tanto mejor cuanto más se parezca a SN (x). Precisamente por ello el test de Kolmogorov-Smirnoff 1 El mismo autor comenta que la función de distribución no tiene primitiva. En realidad quiere decir que no tiene inversa explícita, pero tampoco algunas de las otras distribuciones propuestas, como la log-normal, y ello no es un problema, ya que puede aproximarse mediante métodos numéricos. Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 4 Modelización estocástica de precipitaciones máximas tiene como estadístico el supremo de las diferencias entre ambas funciones. Este estadístico es evaluado dentro de la distribución en el muestreo, proporcionando el p-valor del test. De forma resumida, el procedimiento en el siguiente: 1. El test se plantea la validez de la hipótesis nula H0 : el ajuste de F (x) es válido frente a la alternativa H1 : el ajuste de F (x) no es válido. 2. Se realiza el test, calculando el p-valor, p. 3. Si p < 0,05, rechazaremos H0 en favor de H1 concluyendo que el ajuste es no válido. Si por el contrario, p ≥ 0,05, aceptaremos el ajuste como válido. 4. Cuanto mayor sea el p-valor, mejor es el ajuste. 5. Si varios ajustes son válidos, el mejor será aquél con mayor p-valor. Hay que decir, por último, que esta comparación entre distintos modelos a partir del test de Kolmogorov-Smirnoff puede hacerse ya que nuestros cuatro modelos tienen todos ellos el mismo número de parámetros, dos. 4. Determinación del valor de xT dado un periodo de retorno T Una vez ajustados los datos por alguno de los modelos y evaluado el modelo ajustado mediante el test de Kolmogorov-Smirnoff, tendremos una (o varias) función de distribución ajustada. En ese caso, como se decía en (2), basta considerar la inversa de esta función de distribución para obtener la estimación de xT . El único problema viene dado por la inexistencia de expresiones explícitas para algunas de las distribuciones consideradas. Sin embargo, ese problema no es tal con el uso de R ya que, o bien el propio R dispone de algoritmos de aproximación de la inversa o bien podemos implementarlo nosotros mismos (caso de la SQRT-ETmax). 5. Implementación en R R [R Development Team] es un lenguaje de programación especialmente indicado para el análisis estadístico. A diferencia de la mayoría de los programas que solemos utilizar en nuestros ordenadores, que tienen interfaces tipo ventana, R es manejado a través de una consola en la que se introduce código propio de su lenguaje para obtener los resultados deseados. Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 5 Modelización estocástica de precipitaciones máximas R fue inicialmente diseñado por Robert Gentleman y Ross Ihaka, miembros del Departamento de Estadística de la Universidad de Auckland, en Nueva Zelanda. Sin embargo, una de las grandes ventajas de R es que hoy en día es, en realidad, fruto del esfuerzo de miles de personas en todo el mundo que colaboran en su desarrollo. Por otra parte, R se considera la versión libre de otro programa propietario, llamado S o S-Plus, desarrollado por los Laboratorios Bell. Aunque las diferencias entre R y S son importantes, la mayoría del código escrito para S funciona en R sin modificaciones. El código de R está disponible como software libre bajo las condiciones de la licencia GNU-GPL, y puede ser instalado tanto en el sistema operativo Windows como en Linux o MacOS X. La página principal desde la que se puede acceder tanto a los archivos necesarios para su instalación como al resto de recursos del proyecto R es http://www.r-project.org. De cara a la puesta en práctica de este trabajo, es necesaria la instalación de R y de los paquetes adicionales VGAM, MASS y RODBC. Lo que se describe en esta sección es el uso de un archivo de comandos de R (en adelante, script) que permite realizar todos los cálculos relativos al objeto del trabajo, es decir, al ajuste de las distribuciones, a la realización del test de Kolmogorov-Smirnoff y a la obtención de las estimaciones de las precipitaciones consideradas extremas dado un periodo de retorno. 5.1. Importación de los datos Vamos a suponer que los datos se encuentran en la primera columna de una hoja de datos de Excel. En el ejemplo desarrollado los datos se refieren al pantano de Iznájar, de manera que el encabezado de esa columna es iznajar. Asimismo, el archivo de Excel se llama iznajar.xls. Los comandos a ejecutar para la importación son los siguientes: library(RODBC) chan <- odbcConnectExcel("iznajar.xls") sqlTables(chan) Datos <- sqlQuery(chan, "select * from [Hoja1$]") close(chan) datos<-Datos$iznajar 5.2. Ajuste de los datos En primer lugar es necesario copiar los ficheros de código diseñados para la distribución SQRT-ETmax en el mismo directorio de trabajo que, en el ejemplo es "D:/Invest/Marian". A continuación hay que cargar los paquetes adicionales VGAM y MASS y los archivos adicionales. Para ello, ejecutamos las siguientes líneas: Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 6 Modelización estocástica de precipitaciones máximas setwd("D:/Invest/Marian") library(VGAM) library(MASS) source("fit.sqrt.et.max.R") source("dsqrtetmax.R") source("psqrtetmax.R") source("qsqrtetmax.R") 5.2.1. Ajuste mediante la distribución de Gumbel Ejecutamos ajuste.gumbel<-vgam(datos~1,family="gumbel") location.gumbel<-Coef(ajuste.gumbel)[1] scale.gumbel<-Coef(ajuste.gumbel)[2] Coef(ajuste.gumbel) En el caso del ejemplo la última línea nos dará como resultado que los parámetros ajustados son location scale 35.917573 8.981163 5.2.2. Ajuste mediante la distribución log-Gamma Ejecutamos ajuste.loggamma<-fitdistr(log(datos),"Gamma") ajuste.loggamma shape.loggamma<-ajuste.loggamma$estimate[1] scale.loggamma<-1/ajuste.loggamma$estimate[2] Obsérvese en la primera línea que en realidad se está ajustando el logaritmo de los datos. El resultado es shape rate 179.88642 48.82219 5.2.3. Ajuste mediante la distribución log-normal Ejecutamos ajuste.lognormal<-fitdistr(log(datos),"Normal") mean.lognormal<-ajuste.lognormal$estimate[1] sd.lognormal<-ajuste.lognormal$estimate[2] ajuste.lognormal De nuevo estamos ajustando el logaritmo de los datos. El resultado es mean sd 3.68452440 0.27610262 Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 7 Modelización estocástica de precipitaciones máximas 5.2.4. Ajuste mediante la distribución SQRT-ETmax Ejecutamos ajuste.sqrtetmax<-fit.sqrt.et.max(y=datos,metodo=3) k.sqrtetmax<-exp(ajuste.sqrtetmax$coefficients[1]) alfa.sqrtetmax<-exp(ajuste.sqrtetmax$coefficients[2]) ajuste.sqrtetmax En este caso el resultado es más amplio, ya que es necesario controlar algunos aspectos relativos al método de máxima verosimilitud. De todas formas, lo más relevante es el valor de las estimaciones de los parámetros, que en el ejemplo son c(k.sqrtetmax,alfa.sqrtetmax) [1] 1004.781812 2.409086 5.3. Evaluación de las bondades de ajuste El test de Kolmogorov-Smirnoff nos va a permitir contrastar si los ajustes son válidos y cuál es el más preciso. Ejecutamos ks.test(datos,"pgumbel",location.gumbel,scale.gumbel) ks.test(datos,"plnorm",mean.lognormal,sd.lognormal) ks.test(log(datos),"pgamma",shape.loggamma,1/scale.loggamma) ks.test(datos,"psqrtetmax",k.sqrtetmax,alfa.sqrtetmax) Los p-valores para los cuatro ajustes son, respectivamente, 0.6416, 0.7353, 0.746 y 0.6618. Ponen de manifiesto que los ajustes son bastante precisos y que el mejor de ellos es el de la log-Gamma. Una forma gráfica de plasmar la bondad de los ajustes es comparar la función de densidad ajustada con el histograma de los datos. Para hacerlo en nuestro caso debemos ejecutar hist(datos,freq=FALSE) lines(sort(datos),dsqrtetmax(sort(datos),k.sqrtetmax,alfa.sqrtetmax),col="red") lines(sort(datos),dgumbel(sort(datos),location.gumbel,scale.gumbel),col="blue") lines(sort(datos),dlnorm(sort(datos),mean.lognormal,sd.lognormal),col="green") lines(sort(datos),dgamma(log(sort(datos)),shape=shape.loggamma, scale=scale.loggamma)/sort(datos),col="grey") El resultado es la Figura 1. 5.4. Estimación del valor de xT Una vez realizados los ajustes es trivial aplicar la expresión dada en (2) para obtener la estimación del valor de xT para un valor de T dado. Como ejemplo, hemos considerado T = 100 años. Ejecutamos T<-100 p.max.gumbel<-qgumbel(1-1/T,location.gumbel,scale.gumbel) p.max.gumbel Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 8 Modelización estocástica de precipitaciones máximas Figura 1: Histograma de los datos y densidades ajustadas. En rojo la SQRTETmax, en azul la Gumbel, en verde la lognormal y en gris la Log-Gamma Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 9 Modelización estocástica de precipitaciones máximas p.max.lognormal<-qlnorm(1-1/T,mean.lognormal,sd.lognormal) p.max.lognormal p.max.loggamma<-exp(qgamma(1-1/T,shape=shape.loggamma,scale=scale.loggamma)) p.max.loggamma p.max.sqrtetmax<-qsqrtetmax(1-1/T,k.sqrtetmax,alfa.sqrtetmax) p.max.sqrtetmax El resultado nos dice que las estimaciones según los cuatro ajustes son 77.23226 (Gumbel), 75.70431 (log-normal), 77.75436 (log-Gamma) y 84.129 (SQRT-ETmax) años. Apéndices Vamos a detallar el código relativo a la implementacón de los cálculos correspondientes a la distribución SQRT-ETmax Densidad de la SQRT-ETmax dsqrtetmax<-function(x,k,alfa){ k*alfa/2*exp(-k*(1+sqrt((alfa*x)))*exp(-sqrt(alfa*x))-sqrt(alfa*x)) } Función de distribución de la SQRT-ETmax psqrtetmax<-function(x,k,alfa){ exp(-k*(1+sqrt((alfa*x)))*exp(-sqrt(alfa*x))) } Método de máxima verosimilitud para la estimación de los parámetros de la SQRT-ETmax fit.sqrt.et.max<-function(y=NULL,p0k=0.5,p0alfa=1,iters=10000,metodo=2){ logver<-function(p){ k<-exp(p[1]) alfa<-exp(p[2]) n<-length(y) -(-n*log(1-exp(-k))+n*log(k)+n*log(alfa)-n*log(2)-sum(sqrt(alfa*y)) -k*sum((1+sqrt(alfa*y))*exp(-sqrt(alfa*y)))) } p0<-c(p0k,p0alfa) if (metodo==1){ #nlm ajuste<-nlm(logver,p=p0,hessian= TRUE,iterlim=iters) ajuste$value<-ajuste$minimum ajuste$par<-ajuste$estimate ajuste$convergence<-ajuste$code Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 10 Modelización estocástica de precipitaciones máximas metodo="nlm con hessiano" } if (metodo==2){ #optim (Nelder-Mead con hessiano) ajuste<-optim(p0,logver,hessian=TRUE,control=list(maxit=iters)) metodo<-"optim Nelder-Mead con hessiano" } if (metodo==3){ #optim (BFGS) ajuste<-optim(p0,logver,method="BFGS",hessian=TRUE,control=list(maxit=iters)) metodo<-"optim BFGS con hessiano" } if (metodo==4){ #optim (CG) ajuste<-optim(p0,logver,method="CG",hessian=TRUE,control=list(maxit=iters)) metodo<-"optim CG con hessiano" } if (metodo==5){ #optim (L-BFGS-B) ajuste<-optim(p0,logver,method="L-BFGS-B",hessian=TRUE,control=list(maxit=iters)) metodo<-"optim L-BFGS-B con hessiano" } if (metodo==6){ #optim (SANN) ajuste<-optim(p0,logver,method="SANN",hessian=TRUE,control=list(maxit=iters)) metodo<-"optim SANN con hessiano" } #Resultados resultados<-list( optimum=ajuste$value, aic=2*(ajuste$value+2), coefficients=ajuste$par, hessian=ajuste$hessian, cov=solve(ajuste$hessian), se=sqrt(diag(solve(ajuste$hessian))), code=ajuste$convergence,#VER AYUDA DE nlm metodo=metodo ) return(resultados) } Inversa de la función de distribución (función cuantil) de la SQRT-ETmax qsqrtetmax<-function(p,k,alfa){ Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 11 Modelización estocástica de precipitaciones máximas source("psqrtetmax.R") x<-rep(0,length(p)) for (i in 1:length(p)){ while (psqrtetmax(x[i],k,alfa)<p[i]) x[i]<-x[i]+0.01 } x } Referencias [Wikipedia] http://en.wikipedia.org/wiki/Gumbel_distribution [Kotz and Nadarajah, 2000] Kotz, S. and Nadarajah, S. (2000) Extreme Value Distributions: Theory and Applications, London: Imperial College Press. [HydroToolBox] http://www.dartmouth.edu/~renshaw/hydrotoolbox/ [Zorraquino, 2004] Zorraquino Junquera, C. (2004) El modelo SQRTETmax: Revista de Obras Públicas: Organo profesional de los ingenieros de caminos, canales y puertos, Nº. 3447, 2004 , pags. 33-37. [Etoh et al, 1986] Etoh T, Murota A, Nakanishi M (1986) SQRT—Exponential type distribution of maximum. In: Proceedings of international symposium on flood frequency and risk analysis. Louisiana, pp 235–265. [Ferrer y Ardiles, 1994] Ferrer, F. J., y Ardiles, L. (1994): “Análisis estadístico de las series anuales de máximas lluvias diarias en España”. Ingeniería Civil/95, pp 87-100. [R Development Team] R Development Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria, 2008. http://www.R-project.org. Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén 12