Facultad de Ingeniería y Ciencias
UNIVERSIDAD ADOLFO IBÁÑEZ
Diplomado en Hidrología e
Impactos del Cambio Climático
Guía Ejercicios Quantile Mapping:
Esta guía de estudio tiene como objetivo aplicar el Quantile Mapping a proyecciones de
precipitaciones y temperaturas utilizando GCM del CMIP6, bajo los escenarios SSP 2-4.5 y
5-8.5, para la cuenca del Río Cauquenes. Resuelva lo siguiente:
1) Corrija el sesgo de las precipitaciones para cada uno de los 37 GCM del SSP5-8.5 en
Cauquenes, usando Quantile Mapping. Luego grafique las medias mensuales del
período histórico (1979-2014) de los GCM corregidos, junto a la media histórica
observadas.
2) Grafique las desviaciones estándar de precipitaciones mensuales del período histórico
(1979-2014) de los GCM, bajo SSP5-8.5, corregidos usando Quantile mapping, junto
a la desviación estándar histórica observadas. Guarde las series de precipitaciones de
los GCM, bajo SSP5-8.5 corregidas con Quantile Mapping en un archivo Excel.
3) Instale el Paquete de R ClimQMBC y repita el escalamiento de los 37 GCMs. Realice
algún comparativo para ver si dan lo mismo.
Encontrará más información sobre ClimQMBC en los siguientes links:
Paper Científico:
https://doi.org/10.1080/02626667.2023.2201450
https://www.tandfonline.com/doi/full/10.1080/02626667.2023.2201450
ResearchGate:
https://www.researchgate.net/publication/357094367_climQMBC_Coding_Package_of_se
veral_Quantile_Mapping_Bias_Corrections_QM_DQM_QDM_SDM_UQM_written_in_R
_Python_and_MATLAB
GitHub:
https://github.com/saedoquililongo/climQMBC
Ejercicios Adicionales (Opcionales):
4) Corrija el sesgo de las temperaturas para cada uno de los 37 GCM del SSP5-8.5 en
Cauquenes, usando Quantile Mapping. Luego grafique las medias mensuales de
temperatura del período histórico (1979-2014) de los GCM corregidos, junto a la
media histórica observadas.
5) Grafique las desviaciones estándar de temperaturas mensuales del período histórico
(1979-2014) de los GCM, bajo SSP5-8.5, corregidos usando Quantile mapping, junto
a la desviación estándar histórica observadas. Guarde las series de temperaturas de
los GCM, bajo SSP5-8.5 corregidas con Quantile Mapping en un archivo Excel.
6) Ejercicio Adicional, repetir los problemas 1) al 5), pero con el SSP2-4.5.
Nota: Para usar Quantile Mapping de precipitaciones asuma distribución Gamma de 2
parámetros, mientras que para los datos de temperatura use distribución Normal.
Resultados:
500
Prom. Precipitación [mm]
SSP5-8.5
Obs
300
100
0
2 4 6 8 10 12
Meses
Figura 1. Resultado del problema 1, promedios de precipitaciones mensuales de los GCM
del SSP5-8.5 corregidas con Quantile Mapping y los promedios observados en la cuenca de
Río Cauquenes para el período 1979-2014.
Desv. Est. Precipitación [mm]
500
SSP5-8.5
Obs
300
100
0
2 4 6 8 10 12
Meses
Figura 2. Resultado del problema 2, desviaciones estándar de precipitaciones mensuales de
los GCM del SSP5-8.5 corregidas con Quantile Mapping y las desviaciones estándar
observados en la cuenca del Río Cauquenes para el período 1979-2014.
Ejercicios Adicionales (Opcionales):
40
Prom. Temperatura [°C]
30
SSP5-8.5
Obs
20
10
0
2 4 6 8 10 12
Meses
Figura 3. Resultado del problema 3, promedios de temperaturas mensuales de los GCM del
SSP5-8.5 corregidas con Quantile Mapping y los promedios observados en la cuenca del Río
Cauquenes para el período 1979-2014.
Desv. Est. Temperatura [°C]
5
4
SSP5-8.5
3
Obs
2
1
0
2 4 6 8 10 12
Meses
Figura 4. Resultado del problema 4, desviaciones estándar de temperaturas mensuales de los
GCM del SSP5-8.5 corregidas con Quantile Mapping y las desviaciones estándar observados
en la cuenca del Río Cauquenes para el período 1979-2014.
Código:
El primer paso es iniciar el código, por lo general se recomienda borrar todo y cerrar gráficos
previos. Luego hay que importar valores de los GCM y observados.
# borrar todas las variables
rm(list=ls())
# cerrar todas las figuras
graphics.off()
# Fija el directorio en que estamos trabajando, hay que modificar esto
# a la carpeta en que usted esté trabajando
setwd("C:/Users/Cristian Chadwick/Desktop/B")
# para instalar el paquete en nuestro ordenador ejecute la siguiente
# línea, la cual está comentada.
# install.packages("openxlsx")
# este paquete es más amigable para abrir archivos xlsx
library(openxlsx)
# Importar datos de precipitacione, fijarse bien en la hoja que están
# importando, si tiene encabezado o no
name<-read.xlsx("Pr_CMIP6_SSP585.xlsx",sheet = 1,startRow = 1, colNames = FALSE, rowNames =
FALSE,detectDates = TRUE)
pp_obs<-read.xlsx("Pr_CR2MET.xlsx",sheet = 1,startRow = 1, colNames = TRUE, rowNames =
FALSE,detectDates = TRUE)
pp_SSP585<-read.xlsx("Pr_CMIP6_SSP585.xlsx",sheet = 1,startRow = 1, colNames = TRUE,
rowNames = FALSE,detectDates = TRUE)
Una vez que se ha importado los valores observados y se tiene guardados en variables, hay
que cortar para usar solo los datos deseados, lo cual es el período 1979-2014 para el histórico
tanto para el GCM como para el observado y por otro lado se tiene el período completo del
GCM 1979-2100. El motivo para tener el período histórico del GCM, es que con eso se
obtienen los parámetros a utilizar en las distribuciones del Quantile Mapping. Por otro lado,
se necesita el archivo con el período completo, dado que se corregirá la serie completa.
# Quantile Mapping Precipitación Mensual
# Se genera una nueva variable solo con los años a utilizar, para este
# problema serían los 36 años del período histórico del GCM
# (1979-2014) y otro que contiene el período completo tanto histórico
# como futuro (1979-2100).
# Se extraen datos observados, histórico y Futuros de los GCM
# el usar coordenadas -2:-1 traspasa todas las filas o columnas,
# excepto la 1 y 2.
N_Year<-2014-1979+1
N_pp_obs<-pp_obs[1:(N_Year*12),-1]
N_pp_hist<-pp_SSP585[129*12+(1:(N_Year*12)),-2:-1]
N_pp_SSP585<-pp_SSP585[(129*12+1):dim(pp_SSP585)[1],-2:-1]
# Acá extraemos en FUT_YEAR las columnas de años y meses para ser
# utilizada al final para guardar los datos. También se deja en name
# el encabezado original para guardar los resultados con encabezado
# que tenga los nombres de los GCM.
FUT_YEAR<-name[(129*12+2):dim(name)[1],2]
name<-name[1,]
Una vez que se han generado las variables con los valores del GCM y de los datos observados
para los períodos deseados, pasamos a estimar los parámetros de las distribuciones. Como
partimos trabajando con precipitaciones, usaremos la Distribución Gamma de 2 Parámetros.
En dicha distribución se estima los parámetros (A y B que aparecen más abajo) a partir de la
media y desviación estándar (recuerde que el estimar los parámetros A y B es buscar la mejor
distribución Gamma que se ajuste a los valores, es decir ajustar la distribución a los datos):
# Se calcula media y desviación estándar para ajustar distribución tanto
# del período de histórico del GCM, como el período histórico observado.
# Estas medias y desviaciones estándar se utilizan para calcular los
# parámetros de las distribuciones por el método de los momentos.
# Dichas distribuciones se utilizan posteriormente para el Bias Correction
AUX<-array(N_pp_obs,c(12,N_Year))
muxObs<-apply(AUX,1,mean)
sigmaxObs<-apply(AUX,1,sd)
AObs<-sigmaxObs^2/muxObs
BObs<-(muxObs/sigmaxObs)^2
Notar que, para el caso de los parámetros de los GCM, se tiene un parámetro por cada mes,
por cada GCM. Por este motivo se requiere de utilizar matrices para almacenar los valores
estimados y esto tienen que ser estimados dentro de un ciclo for:
# Para el caso de los GCM, hay que calcular los parámetros de las
# distribuciones para cada GCM y mes, por lo que hay que usar un
# ciclo for y matrices para almacenar los valores.
ACont<-array(0,c(12,dim(N_pp_hist)[2]))
BCont<-array(0,c(12,dim(N_pp_hist)[2]))
for (i in 1:dim(N_pp_hist)[2]){
AUX<-array(N_pp_hist[,i],c(12,N_Year))
muxCont<-apply(AUX,1,mean)
sigmaxCont<-apply(AUX,1,sd)
ACont[,i]<-sigmaxCont^2/muxCont
BCont[,i]<-(muxCont/sigmaxCont)^2
}
Teniendo los parámetros de las distribuciones Gamma 2 parámetros, para los datos
observados, como para los datos históricos de los GCM (período 1979-2014), se procede a
aplicar el Quantile Mapping. Dado que los parámetros cambian por mes y GCM, y además
se tienen los años, es que se utilizan 3 ciclos “for” y una matriz de 3 dimensiones para ir
almacenando los resultados. Dentro de cada ciclo for, se estima una variable AUX de
probabilidad con la función pgamma y los parámetros del GCM. Luego la probabilidad AUX
es evaluada en otra distribución qgamma con los parámetros de la distribución gamma que
se ajusta a los datos observados:
# Calculamos la dimensión 1 contiene meses
Mi<-12
# Calculamos la dimensión 2 contiene años
Mj<-dim(N_pp_SSP585)[1]/12
# Calculamos la dimensión 3, el número de GCMs
Mk<-dim(N_pp_hist)[2]
# Inicializamos la matriz BC_pp, esto es importante, en cualquier código
# de programación. Hay algunos códigos que no exigen inicializar variables,
# pero es computacionalmente muy ineficiente.
# Notar que esta matriz es 3D, luego dentro del ciclo for, se puede aplicar el
# quantile mapping bias correction para cada mes, para cada GCM, para cada
# año.
BC_pp<-array(0,dim=c(Mi,Mj,Mk))
for (k in 1:Mk){
# Se extraen los valores del GCM con el que se va a trabajar, con el
# subíndice k.
Dat_AUX<-array(N_pp_SSP585[,k],c(12,Mj))
for (i in 1:Mi){
for (j in 1:Mj){
# Se estima la probabilidad asociada a la distribución usando los parémetros
# de la distribución del período histórico de cada GCM
AUX=pgamma(Dat_AUX[i,j],BCont[i,k],scale= ACont[i,k])
# Con la probabilidad AUX estimada, pasamos a encontrar el valor de precipitación
BC_pp[i,j,k]=qgamma(AUX,BObs[i],scale= AObs[i])
}
}
}
Una vez que se tiene la se tiene la serie corregida, se pasa a graficar. Notar que hay que ser
cuidadoso de usar solo el período histórico (1979-20014), dado que la matriz con los datos
del GCM corregido contiene todos los años, incluyendo los futuros.
# Se hace un ciclo para graficar los valores de la media de precipitaciones
# del período histórico (1979-2014), para poder ver cómo quedan después del
# Quantile Mapping
month<-1:12
for(k in 1:Mk) {
AUX<-BC_pp[,1:N_Year,k]
AUX<-apply(AUX,1,mean)
if(k==1){
plot(month,AUX,type = "l", ylab = "Prom. Precipitación [mm]",xlab = "Meses",
col=rgb(.22,.35,.85) , ylim = range(0,500))
}else{
matplot(month,AUX,type = "l", add = TRUE, col=rgb(.22,.35,.85))
}
}
# Se estima la media observada y se grafica en rojo junto
# a la de los GCM.
AUX<-array(N_pp_obs,c(12,N_Year))
AUX<-apply(AUX,1,mean)
matplot(month,AUX,type = "c",lwd=4, add = TRUE, col=rgb(.8,.15,.25))
# Comando para leyenda
legend(1, 450, legend=c("SSP5-8.5", "Obs"),
col=c(rgb(.22,.35,.85), rgb(.8,.15,.25)), lty=c(1,3),lwd=c(1,4))
Al igual que la media, se pasa a graficar la desviación estándar:
# Parecido al gráfico anterior, pero este es para la desviación estándar
for(k in 1:Mk) {
AUX<-BC_pp[,1:N_Year,k]
AUX<-apply(AUX,1,sd)
if(k==1){
plot(month,AUX,type = "l", ylab = "Desv. Est. Precipitación [mm]",xlab = "Meses",
col=rgb(.22,.35,.85) , ylim = range(0,500))
}else{
matplot(month,AUX,type = "l", add = TRUE, col=rgb(.22,.35,.85))
}
}
# Se estima la desviación estándar observada y se grafica en rojo junto
# a la de los GCM.
AUX<-array(N_pp_obs,c(12,N_Year))
AUX<-apply(AUX,1,sd)
matplot(month,AUX,type = "c",lwd=4, add = TRUE, col=rgb(.8,.15,.25))
# Comando para leyenda
legend(1, 450, legend=c("SSP5-8.5", "Obs"),
col=c(rgb(.22,.35,.85), rgb(.8,.15,.25)), lty=c(1,3),lwd=c(1,4))
Finalmente, se pasa a guardar las series de los GCM:
# Se estima la desviación estándar observada y se grafica en rojo junto
# a la de los GCM.
AUX<-array(N_pp_obs,c(12,N_Year))
AUX<-apply(AUX,1,sd)
matplot(month,AUX,type = "c",lwd=4, add = TRUE, col=rgb(.8,.15,.25))
# Comando para leyenda
legend(1, 450, legend=c("SSP5-8.5", "Obs"),
col=c(rgb(.22,.35,.85), rgb(.8,.15,.25)), lty=c(1,3),lwd=c(1,4))
# Se combina las columnas con los años y meses, con la de los datos de
# precipitaciones que ya se le aplicó el Quantile Mapping. Luego se le asigna
# como encabezado el nombre de los GCM
Fut_pp<-array(BC_pp,c(Mi*Mj,Mk))
a<-cbind(FUT_YEAR,Fut_pp)
colnames(a) <- name[-1]
# Se guarda en un archivo Excel la precipitación la cual se le aplicó el
# quantile mapping a todos los GCM del SSP5-8.5
write.xlsx(as.data.frame(a),"PP_SSP585_FUT_QM.xlsx",sheetName = "SSP585_PP", colNames =
TRUE, rowNames = FALSE)
El siguiente paso es instalar el paquete ClimQMBC. Primero tiene que ingresar al
https://github.com/saedoquililongo/climQMBC
y descargar la versión para R. Una vez descargada tiene que usar el comendo
install.packages() (más abajo), habiendo agregado el directorio de donde tiene el archivo con
extensión “.gz”. Otra opción es buscar en la ventana “Packages”, “Install”, (Figura 5) e ir al
archivo de instalación del package en cuestión.
Notar que hay dos versiones de “climQMBC”, la más nueva es la climQMBC_1.0.0, la cual
tiene varias mejoras, entre lo que incluye la posibilidad de hacer el bias adjustment a nivel
diario.
Nota, previo a la instalación de ClimQMBC tiene que haber instalado “rtools” el cual
encontrará en:
https://cran.r-project.org/bin/windows/Rtools/rtools42/rtools.html
Además de “rtools”, es necesario que tengan instalado los siguientes packages:
• e1071
• fitdistrplus
• pracma
Los que se requieren para la correcta instalación del package ClimQMBC. Si usted no tiene
instalado “rtools” y los packages antes mencionados, no le será permitido instalar
ClimQMBC.
Figura 5. Pasos para instalar un package en R. Hay que ir a “Packages” (en rojo), luego
“Install” (en naranjo), seleccionar la opción de “Packages Archive File” (en verde),
finalmente “Browse…” (en azul).
install.packages("C:\\Users\\HP\\Dropbox\\CC\\0. CRISTIAN\\0
New\\UAI\\Diplomado\\Clases\\PPTs\\Chadwick\\climQMBC-
main\\R\\climQMBC_1.0.0.tar.gz",repos=NULL,type="source")
Una vez instalado el package “climQMBC”, este incorpora los correctores de sesgo como
el Quantiel Mapping, con el comando:
climQMBC::QM()
Los códigos para resolver el problema de escalamiento con el package “climQMBC” parte
por activar la librería.
library(climQMBC)
Luego, definir las dimensiones que tenemos
# Calculamos la dimensión 1 contiene meses
Mi<-12
# Calculamos la dimensión 2 contiene años
Mj<-dim(N_pp_SSP585)[1]/12
# Calculamos la dimensión 3, el número de GCMs
Mk<-dim(N_pp_hist)[2]
Se inicializa la variable:
# Inicializamos la matriz BC_pp2, esto es importante, en cualquier código
# de programación.
# En este caso solo necesitamos trabajar con matrices 2D, porque internamente
# climQMBC hace el resto, por lo que juntaremos las dimensiones de meses y años
BC_pp2<-array(0,dim=c(Mi*Mj,Mk))
Se genera un ciclo “for()” que recorre la matriz “N_pp_SSP585[,k]”, la cual tiene la
información de los GCM, cada columna “k” es un GCM. Esto se le entrega a “mod” en el
comando “QM” de “climQMBC”. A “obs” se le entregan los datos observados “N_pp_obs”.
Notar que los datos observados y de GCM son entregados en vectores tipo columna, por lo
que hay que transponerlos con “t()”. También es necesario definir si se trabaja con números
negativos o no en “allow_negatives” al indicar un “0” elige distribuciones estrictamente
positivas, lo que se recomienda para las precipitaciones. Por último, hay que definir la escala
temporal de trabajo frq='M', para datos mensuales.
for (k in 1:Mk){
BC_pp2[,k]<-climQMBC::QM(obs=t(N_pp_obs),
mod=t(N_pp_SSP585[,k]),allow_negatives=0,frq='M')
}
Al comparar los valores corregidos con climQMBC y como lo habíamos realizado antes, en
un gráfico 1:1, se obtiene que en general hacen lo mismo, excepto en algunos puntos
(Figura 6).
plot(BC_pp2,Fut_pp)
200 400 600 800
Fut_pp
0 200 400 600 800
BC_pp2
Figura 6. Comparativo punto a punto entre el escalamiento realizado con climQMBC y sin
el paquete.
Ejercicios Adicionales (Opcionales):
Se repite el mismo procedimiento para las temperaturas. Recordar que en el Quantile
Mapping con temperaturas se usa distribuciones normales en vez de la distribución Gamma
de 2 parámetros utilizada en las precipitaciones. Leemos los archivos Excel con los datos:
# Se repite exactamente el mismo procedimiento, pero para temperatura, en el
# cual el quantile mapping cambia la distribución (se usa normal, en vez de gamma)
# Importar datos de temperaturas
t_obs<-read.xlsx("Tas_CR2MET.xlsx",sheet = 1,startRow = 1, colNames = TRUE, rowNames =
FALSE,detectDates = TRUE)
t_SSP585<-read.xlsx("Tas_CMIP6_SSP585.xlsx",sheet = 1,startRow = 1, colNames = TRUE,
rowNames = FALSE,detectDates = TRUE)
Generamos las matrices y vectores con los datos de GCM y observados para los períodos
deseados:
# Quantile Mapping Temperatura Mensual
# Se genera una nueva variable solo con los años a utilizar, para este
# problema serían los 36 años del período histórico del GCM
# (1979-2014) y otro que contiene el período completo tanto histórico
# como futuro (1965-2100).
# Se extraen datos observados, histórico y Futuros de los GCM
# el usar coordenadas -2:-1 traspasa todas las filas o columnas,
# excepto la 1 y 2.
N_t_obs<-t_obs[1:(N_Year*12),-1]
N_t_hist<-t_SSP585[129*12+(1:(N_Year*12)),-2:-1]
N_t_SSP585<-t_SSP585[(129*12+1):dim(t_SSP585)[1],-2:-1]
Se estiman los parámetros de las distribuciones para la temperatura (los parámetros son la
media y la desviación estándar):
# Se calcula media y desviación estándar para ajustar distribución tanto
# del período de histórico del GCM, como el período histórico observado.
# Estas medias y desviaciones estándar se utilizan para calcular los
# parámetros de las distribuciones por el método de los momentos.
# Dichas distribuciones se utilizan posteriormente para el Bias Correction
AUX<-array(N_t_obs,c(12,N_Year))
muxObs<-apply(AUX,1,mean)
sigmaxObs<-apply(AUX,1,sd)
# Para el caso de los GCM, hay que calcular los parámetros de las
# distribuciones para cada GCM y mes, por lo que hay que usar un
# ciclo for y matrices para almacenar los valores.
muxCont<-array(0,c(12,dim(N_t_hist)[2]))
sigmaxCont<-array(0,c(12,dim(N_t_hist)[2]))
for (i in 1:dim(N_t_hist)[2]){
AUX<-array(N_t_hist[,i],c(12,N_Year))
muxCont[,i]<-apply(AUX,1,mean)
sigmaxCont[,i]<-apply(AUX,1,sd)
}
Una vez que se tienen los parámetros se procede a aplicar el Quantile Mapping a nivel
mensual para los datos de temperatura de cada GCM del SSP5-8.5:
# Calculamos la dimensión 1 contiene mese
Mi<-12
# Calculamos la dimensión 2 contiene años
Mj<-dim(N_t_SSP585)[1]/12
# Calculamos la dimensión 3, el número de GCMs
Mk<-dim(N_t_hist)[2]
# Inicializamos la matriz BC_t, esto es importante, en cualquier código
# de programación. Hay algunos códigos que no exigen inicializar variables,
# pero es computacionalmente muy ineficiente.
# Notar que esta matriz es 3D, luego dentro del ciclo for, se puede aplicar el
# quantile mapping bias correction para cada mes, para cada GCM, para cada
# año.
BC_t<-array(0,dim=c(Mi,Mj,Mk))
for (k in 1:Mk){
# Se extraen los valores del GCM con el que se va a trabajar, con el
# subíndice k.
Dat_AUX<-array(N_t_SSP585[,k],c(12,Mj))
for (i in 1:Mi){
for (j in 1:Mj){
# Se estima la probabilidad asociada a la distribución usando los parámetros
# de la distribución del período histórico de cada GCM
AUX=pnorm(Dat_AUX[i,j],muxCont[i,k],sigmaxCont[i,k])
# Este if se agrega para evita situaciones tan extremas que den probabilidad 1,
# lo cual lleva a un valor de Infinito al usar el comando "qnorm"
if(AUX==1){AUX<-1-10^(-8)}
# Con la probabilidad AUX estimada, pasamos a encontrar el valor de precipitación
BC_t[i,j,k]=qnorm(AUX,muxObs[i],sigmaxObs[i])
}
}
}
Con los datos de temperatura de los GCM corregidos se puede pasar a graficar sus promedios
mensuales del período histórico (1979-2014)
# Se hace un ciclo para graficar los valores de la media de precipitaciones
# del período histórico (1979-2014), para poder ver cómo quedan después del
# Quantile Mapping
month<-1:12
for(k in 1:Mk) {
AUX<-BC_t[,1:N_Year,k]
AUX<-apply(AUX,1,mean)
if(k==1){
plot(month,AUX,type = "l", ylab = "Prom. Temperatura [°C]",xlab = "Meses",
col=rgb(.22,.35,.85) , ylim = range(0,40))
}else{
matplot(month,AUX,type = "l", add = TRUE, col=rgb(.22,.35,.85))
}
}
# Se estima la media observada y se grafica en rojo junto
# a la de los GCM.
AUX<-array(N_t_obs,c(12,N_Year))
AUX<-apply(AUX,1,mean)
matplot(month,AUX,type = "c",lwd=4, add = TRUE, col=rgb(.8,.15,.25))
# Comando para leyenda
legend(4, 35, legend=c("SSP5-8.5", "Obs"),
col=c(rgb(.22,.35,.85), rgb(.8,.15,.25)), lty=c(1,3),lwd=c(1,4))
Se grafica la desviación estándar de las temperaturas de los GCM corregidos:
# Parecido al gráfico anterior, pero este es para la desviación estándar
for(k in 1:Mk) {
AUX<-BC_t[,1:N_Year,k]
AUX<-apply(AUX,1,sd)
if(k==1){
plot(month,AUX,type = "l", ylab = "Desv. Est. Temperatura [°C]",xlab = "Meses",
col=rgb(.22,.35,.85) , ylim = range(0,5))
}else{
matplot(month,AUX,type = "l", add = TRUE, col=rgb(.22,.35,.85))
}
}
# Se estima la desviación estándar observada y se grafica en rojo junto
# a la de los GCM.
AUX<-array(N_t_obs,c(12,N_Year))
AUX<-apply(AUX,1,sd)
matplot(month,AUX,type = "c",lwd=4, add = TRUE, col=rgb(.8,.15,.25))
# Comando para leyenda
legend(1, 4, legend=c("SSP5-8.5", "Obs"),
col=c(rgb(.22,.35,.85), rgb(.8,.15,.25)), lty=c(1,3),lwd=c(1,4))
Finalmente se pasa a guardar las series de temperatura de los GCM que están corregidas:
# Se combina las columnas con los años y meses, con la de los datos de
# precipitaciones que ya se le aplicó el Quantile Mapping. Luego se le asigna
# como encabezado el nombre de los GCM
Fut_t<-array(BC_t,c(Mi*Mj,Mk))
a<-cbind(FUT_YEAR,Fut_t)
colnames(a) <- name[-1]
# Se guarda en un archivo Excel la temperatura la cual se le aplicó el
# quantile a todos los GCM del SSP5-8.5
write.xlsx(as.data.frame(a),"T_SSP585_FUT_QM.xlsx",sheetName = "SSP585_T", colNames = TRUE,
rowNames = FALSE)