Skip to content

AntoniCesar/EXAMEN_PARCIAL

Repository files navigation

RESOLUCION

Grupo_05 27/7/2021

INTEGRANTES DEL GRUPO 05

BACA QUIÑONEZ, Pedro (17160038)

COSIOS LEONA, Jose (17160182)

ESQUIVEL GUILLERMO, Antoni (17160183)

GARRO DOROTEO, Jamir (17160185)

RIVERA REAÑO, Ricardo (17160037)

IMPORTANTE: Cargar las librerias

library(tidyverse)
library(hydroGOF)
library(pacman)

PARTE 1

1) Se tiene una variable x (no necesariamente temperatura) que depende de la elevación. Se sabe que entre los 1000 y 3000 metros, esta variable se ve reducido en 2 unidades cada 500 metros. Entre los 3000 y 4000metros, varía en 0.5 unidades, y a una altitud mayor, su valor es constante. Cree una función que permitaobtener el valor de esta variable, ́unicamente con el dato de la elevación

El valor de la variable x a 1000 metros es de 81.4 unidades

#Donde i es la altura
i <- 2000
y <- ((-0.004*i) + 85.4)
z <- ((-0.001*i) + 72.9)
m <- 72.4
if (1000 <= i & i <= 3000) {
 cat("El valor de la variable x es", y)
} else if (3000 < i & i <= 4000) {
  cat("El valor de la variable x es", z)
} else {
   cat("El valor de la variable x es", m)
}
## El valor de la variable x es 77.4

2)Resolver el siguiente sistema de ecuaciones.

(matriz<- matrix(c(3,2,-2,2,-1,3,1,4,2), nrow = 3 , byrow = T))
##      [,1] [,2] [,3]
## [1,]    3    2   -2
## [2,]    2   -1    3
## [3,]    1    4    2
 sol_matriz <- c(0,9,-4)
(solve(matriz,sol_matriz))
## [1]  2 -2  1
respuestas <- solve(matriz,sol_matriz)
names(respuestas) <- c("x","y","z")
respuestas
##  x  y  z 
##  2 -2  1

PARTE 2

Primero que nada leeremos la data

parametros <- as_tibble(read.csv("mods_clima_uh.csv"))

a) Calcular la precipitación acumulada anual (Valores observados) para la cuenca asignada

(cuenca_tumbes_obs <- parametros %>%
    dplyr::filter(uh_name == "Cuenca Tumbes" & bh_esc == "Observado" ) %>%
    group_by(uh_name) %>% 
    summarize( pp_acumulada = sum(bh_pc)))
## # A tibble: 1 x 2
##   uh_name       pp_acumulada
##   <chr>                <dbl>
## 1 Cuenca Tumbes         852.

b) Calcular el porcentaje de sesgo (%, PBIAS) de los escenarios climáticos (ACCESS, HADGEM2, MPI) respecto a los datos observados para cada mes (enero - diciembre) de cada variable, para la cuenca asignada

Primero filtramos los datos y seleccionamos el parametro con el que trabajaremos, el cual es la precipitación mensual (bh_pc)

ppobs <- dplyr::filter(parametros, bh_esc == "Observado" & 
                         uh_name == "Cuenca Tumbes") 
mod_Aces <- dplyr::filter(parametros, bh_esc == "ACCESS 1.0" &
                          uh_name == "Cuenca Tumbes") 
mod_Had <- dplyr::filter(parametros, bh_esc == "HadGEM2-ES" & 
                           uh_name == "Cuenca Tumbes") 
         
mod_MPI<- dplyr::filter(parametros, bh_esc == "MPI-ESM-LR" & 
                          uh_name == "Cuenca Tumbes") 

Ahora aplicamos la función “pbias” el cual esta el la libreria “hydroGOF” para tener los valores de sesgo y por ultimo unimos para que no se repitan los valores

Aplicamos sesgo para la precipitacion

(sesgo_pp <- parametros %>% 
  transmute(bias_Aces = pbias(mod_Aces$bh_pc, ppobs$bh_pc),
            bias_Had = pbias(mod_Had$bh_pc, ppobs$bh_pc),
            bias_MPI = pbias(mod_MPI$bh_pc, ppobs$bh_pc)) %>% unique())
## # A tibble: 1 x 3
##   bias_Aces bias_Had bias_MPI
##       <dbl>    <dbl>    <dbl>
## 1      25.9     13.8     -1.5

Aplicamos sesgo para la evapotranspiracion real

(sesgo_evap <- parametros %>% 
  transmute(bias_Aces = pbias(mod_Aces$bh_er, ppobs$bh_er),
            bias_Had = pbias(mod_Had$bh_er, ppobs$bh_er),
            bias_MPI = pbias(mod_MPI$bh_er, ppobs$bh_er)) %>% unique())
## # A tibble: 1 x 3
##   bias_Aces bias_Had bias_MPI
##       <dbl>    <dbl>    <dbl>
## 1       8.2      7.3        1

Aplicamos sesgo para el rendimiento hídrico

(sesgo_rhidrico <- parametros %>% 
  transmute(bias_Aces = pbias(mod_Aces$bh_rh, ppobs$bh_rh),
            bias_Had = pbias(mod_Had$bh_rh, ppobs$bh_rh),
            bias_MPI = pbias(mod_MPI$bh_rh, ppobs$bh_rh)) %>% unique())
## # A tibble: 1 x 3
##   bias_Aces bias_Had bias_MPI
##       <dbl>    <dbl>    <dbl>
## 1      35.9     17.4     -2.9

Aplicamos sesgo para el caudal

(sesgo_caudal <- parametros %>% 
  transmute(bias_Aces = pbias(mod_Aces$bh_qd, ppobs$bh_qd),
            bias_Had = pbias(mod_Had$bh_qd, ppobs$bh_qd),
            bias_MPI = pbias(mod_MPI$bh_qd, ppobs$bh_qd)) %>% unique())
## # A tibble: 1 x 3
##   bias_Aces bias_Had bias_MPI
##       <dbl>    <dbl>    <dbl>
## 1      40.9     21.3     -3.1

c) De la pregunta anterior, ¿Cual es el escenario climático más preciso? Fundamente su respuesta.

tipos_sesgo <- c("Sesgo_Caudal", "sesgo_evap", "sesgo_rhidrico", "sesgo_pp")
sesgo_general <- rbind(sesgo_caudal, sesgo_evap, sesgo_rhidrico, sesgo_pp) %>% 
  cbind(tipos_sesgo)
ggplot(sesgo_general, aes(x=tipos_sesgo)) +
  geom_point(aes(y=bias_Aces, color = "Access"))+
  geom_point(aes(y=bias_Had, color = "HADGEM2"))+
  geom_point(aes(y=bias_MPI, color = "MPI"))+
  labs(x = "Tipos_Sesgo",
       y = "sesgo")+
  scale_colour_manual("",
                      breaks = c("Access","HADGEM2","MPI"),
                      values = c("red","green","orange"))+
  theme(axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"))

los valores que se acercan más al cero son los que tienen menos sesgo ya que se apegan más a lo valores originales, por tanto en este caso el scenario MPI, es el escenario climatico más precesio mientras Acces tiene una sobreestimación respecto a los valores reales

d) Graficar, con ggplot2, la precipitaci´on (enero a diciembre) observada y modelos climaticos.

(observado <- parametros %>% 
    dplyr::filter( uh_name == "Cuenca Tumbes" & bh_esc == "Observado") %>% 
  mutate( meses = as.Date(sprintf("2000-%s-01", bh_month)))%>% 
    dplyr::select(bh_pc,meses) %>% rename(ppobsr = bh_pc))
## # A tibble: 12 x 2
##     ppobsr meses     
##      <dbl> <date>    
##  1 108.    2000-01-01
##  2 182.    2000-02-01
##  3 228.    2000-03-01
##  4 199.    2000-04-01
##  5  39.0   2000-05-01
##  6   8.39  2000-06-01
##  7   1.11  2000-07-01
##  8   0.621 2000-08-01
##  9   2.07  2000-09-01
## 10  13.4   2000-10-01
## 11  28.1   2000-11-01
## 12  42.5   2000-12-01
(ACCESS <- parametros %>%
  dplyr::filter( uh_name == "Cuenca Tumbes" & bh_esc == "ACCESS 1.0" ) %>%
  dplyr::select(bh_pc) %>% rename(ppacces = bh_pc))
## # A tibble: 12 x 1
##    ppacces
##      <dbl>
##  1 189.   
##  2 225.   
##  3 293.   
##  4 218.   
##  5  32.2  
##  6   7.58 
##  7   2.68 
##  8   0.473
##  9   2.05 
## 10  24.0  
## 11  28.3  
## 12  49.9
(MPI <- parametros %>% 
  dplyr::filter( uh_name == "Cuenca Tumbes" & bh_esc == "MPI-ESM-LR" ) %>%
  dplyr::select(bh_pc) %>% rename(ppmpi = bh_pc))
## # A tibble: 12 x 1
##      ppmpi
##      <dbl>
##  1  88.2  
##  2 233.   
##  3 230.   
##  4 148.   
##  5  33.1  
##  6   4.08 
##  7   0.843
##  8   0.463
##  9   1.59 
## 10  19.3  
## 11  37.2  
## 12  43.4
(HadGEM2 <- parametros %>% 
  dplyr::filter( uh_name == "Cuenca Tumbes" & bh_esc == "HadGEM2-ES" ) %>%
  dplyr::select(bh_pc) %>% rename(pphad = bh_pc))
## # A tibble: 12 x 1
##      pphad
##      <dbl>
##  1 106.   
##  2 221.   
##  3 244.   
##  4 227.   
##  5  66.5  
##  6  11.8  
##  7   3.53 
##  8   0.834
##  9   1.82 
## 10  13.0  
## 11  26.8  
## 12  47.2
(observ_modelos <- data.frame(ACCESS, MPI ,HadGEM2,observado) %>% as_tibble())
## # A tibble: 12 x 5
##    ppacces   ppmpi   pphad  ppobsr meses     
##      <dbl>   <dbl>   <dbl>   <dbl> <date>    
##  1 189.     88.2   106.    108.    2000-01-01
##  2 225.    233.    221.    182.    2000-02-01
##  3 293.    230.    244.    228.    2000-03-01
##  4 218.    148.    227.    199.    2000-04-01
##  5  32.2    33.1    66.5    39.0   2000-05-01
##  6   7.58    4.08   11.8     8.39  2000-06-01
##  7   2.68    0.843   3.53    1.11  2000-07-01
##  8   0.473   0.463   0.834   0.621 2000-08-01
##  9   2.05    1.59    1.82    2.07  2000-09-01
## 10  24.0    19.3    13.0    13.4   2000-10-01
## 11  28.3    37.2    26.8    28.1   2000-11-01
## 12  49.9    43.4    47.2    42.5   2000-12-01
ggplot(observ_modelos, aes(x=meses)) +
  geom_line(aes(y=ppobsr, color = "Observado"))+
  geom_point(aes(y=ppobsr, color = "Observado"))+
  geom_line(aes(y=ppacces, color = "Access"))+
  geom_point(aes(y=ppacces, color = "Access"))+
  geom_line(aes(y=pphad, color = "HADGEM2"))+
  geom_point(aes(y=pphad, color = "HADGEM2"))+
  geom_line(aes(y=ppmpi, color = "MPI"))+
  geom_point(aes(y=ppmpi, color = "MPI"))+
  labs(x = "Meses",
       y = "Pp")+
  scale_colour_manual("",
                      breaks = c("Access","HADGEM2","MPI","Observado"),
                      values = c("red","green","orange","blue"))+
  theme(axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"))

PARTE 3

Previamente se realizó la conversión de los valores de -99.9 a N.A

head(datos_temperatura <- read_csv("temperatureDataset.csv") %>%
    dplyr::select(DATE,qc00000804) %>%
    mutate(DATE = as.Date (DATE,format = "%d/%m/%Y")) %>%
    rename(Temperaturas =qc00000804) %>%
    arrange(DATE) %>%
    mutate(Temperaturas = ifelse(Temperaturas == -99.9, NA, Temperaturas))) 
## # A tibble: 6 x 2
##   DATE       Temperaturas
##   <date>            <dbl>
## 1 1928-11-02           NA
## 2 1928-11-03           NA
## 3 1928-11-04           NA
## 4 1928-11-05           NA
## 5 1928-11-06           NA
## 6 1928-11-07           NA

Luego se verificó que el rango de datos esté completo

seq(as.Date("1928-11-02"), as.Date("2015-10-31"), by = "day") %>%
  length()
## [1] 31775
tail(datos_temperatura)
## # A tibble: 6 x 2
##   DATE       Temperaturas
##   <date>            <dbl>
## 1 2015-10-26           NA
## 2 2015-10-27           NA
## 3 2015-10-28           NA
## 4 2015-10-29           NA
## 5 2015-10-30           NA
## 6 2015-10-31           NA

a). Determine la cantidad de missing values para los años hidrológicos Sep1983-Agos1984 y Sep1997-Agos1998.

(missing_values1 <- 
   sum(is.na(dplyr::filter(datos_temperatura, DATE >= "1983-09-01" &
                             DATE <= "1984-08-31" )$Temperaturas)))
## [1] 0
(missing_value2 <- 
   sum(is.na(dplyr::filter(datos_temperatura, DATE >= "1997-09-01" &
                             DATE <= "1998-08-31" )$Temperaturas)))
## [1] 3

b). Calcule la serie de tiempo de temperatura mensual (si el de días con missing values, en un mes, supera el 5%, la temperatura mensual será considerado como un NA). Además, identifique visualmente, posibles valores atípicos y describa una posible causa

(Temperatura_mensual <- 
  datos_temperatura %>%
  group_by(DATE = str_sub(DATE,1 , 7)) %>%
  mutate(
    missval = sum(is.na(Temperaturas))*100/n()
  ) %>%
  summarise(
    Temperaturas = mean(Temperaturas, na.rm = T),
    missval = unique(missval))  %>%
  mutate(
    Temperaturas = ifelse(missval >= 5, NA, Temperaturas),
    DATE = as.Date(sprintf("%1$s-01",DATE)),
    month=str_sub(DATE,6,7)))
## # A tibble: 1,044 x 4
##    DATE       Temperaturas missval month
##    <date>            <dbl>   <dbl> <chr>
##  1 1928-11-01           NA     100 11   
##  2 1928-12-01           NA     100 12   
##  3 1929-01-01           NA     100 01   
##  4 1929-02-01           NA     100 02   
##  5 1929-03-01           NA     100 03   
##  6 1929-04-01           NA     100 04   
##  7 1929-05-01           NA     100 05   
##  8 1929-06-01           NA     100 06   
##  9 1929-07-01           NA     100 07   
## 10 1929-08-01           NA     100 08   
## # ... with 1,034 more rows

c). Determine la cantidad de missing values de la serie de tiempo a paso mensual para los años 2005 y 2010.

(NA_mensual1<- 
   sum(is.na(dplyr::filter(Temperatura_mensual, DATE >= "2005-01-01" & 
                             DATE <= "2005-12-01") $Temperaturas)))
## [1] 0
(NA_mensual2<- 
   sum(is.na(dplyr::filter(Temperatura_mensual, DATE >= "2006-01-01" & 
                             DATE <= "2006-12-01") $Temperaturas)))
## [1] 0

d).Crea una funcion que calcule, a partir de los datos de temperatura mensual, la climatologia(Ene-Dic). Obtener la climatologia para los periodos 1980-1995 y 1996-2010. Plotear los resultados en una sola grafica para describir sus diferencias y/o similitudes (entre climatologias).

Definimos la funcion consulta_t

consulta_t <- function(x, y) {
  x <- as.character(x)
  y <- as.character(y)
  
Temperatura_mensual %>%
  filter(DATE >= x & DATE < y) %>%
  group_by(DATE = str_sub(DATE, 6, 7)) %>%
  summarise( 
    Temperaturas_prom = mean(Temperaturas, na.rm = T), 
  ) %>%
    mutate(periodo = sprintf("%1$s-%2$s", x = str_sub(x, 1, 4), y = str_sub(y, 1, 4)))
}

Hallamos la climatologia para los peridos requeridos y nombramos los tibbles

consulta1 <- consulta_t("1980-01-01", "1995-12-31")
consulta2 <- consulta_t("1996-01-01", "2010-12-31")

Agrupamos las variables

periodo_total <- rbind(consulta1,consulta2)

Ploteamos

ggplot(periodo_total) +
  geom_bar(stat = "identity", fill = "#048ABF", aes(x = DATE, y = Temperaturas_prom)) +
  labs(y = "Temperatura", x = "meses") +
  facet_wrap(~periodo, nrow = 2) +
  scale_x_discrete(
    labels = month.abb)

Otra forma de ploteo para mejor visualizacion

periodo_total %>%
  filter(periodo %in% c("1980-1995", "1996-2010")) %>%
  ggplot(aes(x=DATE, y=Temperaturas_prom, color=periodo))+
  geom_point()+
  theme_bw() +
  scale_x_discrete(
    labels = month.abb)+
  labs(y = "Temperatura promedio (°C)", x = "Tiempo (Meses)"
  )+
  ggtitle("Climatologia (Ene-Dic) para los periodos de 1980-1995 y 1996-2010")+
  theme(plot.title = element_text(vjust =2, hjust = 0.5))

e).Plotear (boxplot) la variabilidad de los valores mensuales (Ene-Dic) para el perıodo 1980-2013 y describirlo correctamente

Filtramos para el periodo 1980-2013

consulta3 <- Temperatura_mensual %>%
  rename(Temperatura_prom = Temperaturas) %>%
  dplyr::filter(DATE >= "1980-01-01" & DATE < "2013-12-31") 

Ploteamos

ggplot(consulta3, aes(month, Temperatura_prom)) +
  geom_boxplot(fill = "#048ABF") +
  theme_bw() +
  scale_x_discrete(
    labels = month.abb
  ) +
  ggtitle("Variabilidad de la temperatura mensual - periodo 1980-2013")+
  theme(plot.title = element_text(vjust =2, hjust = 0.5))+
  labs(y="Temperatura (°C)", x="tiempo (meses)") +
  theme(axis.title.y = element_text(vjust = 2.5))

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5