#contexto Este estudio utiliza un archivo NetCDF para analizar y visualizar diversas variables oceanográficas y climáticas, incluyendo la temperatura del agua, la salinidad, y otras variables relacionadas con el clima. A partir de estos datos, se realizaron varias visualizaciones para comprender mejor las características del entorno marino.”
# Cargar los paquetes necesarios
library(ncdf4)
library(ggplot2)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(viridis)
## Cargando paquete requerido: viridisLite
library(Amelia)
## Cargando paquete requerido: Rcpp
## ##
## ## Amelia II: Multiple Imputation
## ## (Version 1.8.2, built: 2024-04-10)
## ## Copyright (C) 2005-2024 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
library(RNetCDF)
# Configurar la codificación regional a UTF-8
Sys.setlocale("LC_ALL", "es_ES.UTF-8")
## [1] "LC_COLLATE=es_ES.UTF-8;LC_CTYPE=es_ES.UTF-8;LC_MONETARY=es_ES.UTF-8;LC_NUMERIC=C;LC_TIME=es_ES.UTF-8"
nc_data <- nc_open(“P4_ARMOR_parcial.nc”)
print(nc_data$var)
if (“so” %in% names(nc_data$var)) { so <- ncvar_get(nc_data, “so”) latitude <- ncvar_get(nc_data, “latitude”) longitude <- ncvar_get(nc_data, “longitude”) } else { stop(“La variable ‘so’ no se encuentra en el archivo NetCDF.”) } # Cerrar el archivo nc_close(nc_data)
library(ncdf4)
# Abre el archivo NetCDF
nc_data <- nc_open("P4_ARMOR_parcial.nc")
# Extraer las variables de salinidad y dimensiones
so <- ncvar_get(nc_data, "so")
latitude <- ncvar_get(nc_data, "latitude")
longitude <- ncvar_get(nc_data, "longitude")
# Crear un data frame para la salinidad "so"
# Si so es una matriz 3D, selecciona una capa temporal. Por ejemplo, la primera capa:
so_layer <- so[,,1]
df_so <- data.frame(
longitude = rep(longitude, each = length(latitude)),
latitude = rep(latitude, times = length(longitude)),
salinity = as.vector(t(so_layer)) # Transponer si necesario
)
# Extraer las variables de temperatura y dimensiones
to <- ncvar_get(nc_data, "to")
# Crear un data frame para la temperatura "to"
# Si to es una matriz 3D, selecciona una capa temporal. Por ejemplo, la primera capa:
to_layer <- to[,,1]
df_to <- data.frame(
longitude = rep(longitude, each = length(latitude)),
latitude = rep(latitude, times = length(longitude)),
temperature = as.vector(t(to_layer)) # Transponer si necesario
)
# Cerrar el archivo NetCDF
nc_close(nc_data)
# Verificar las primeras filas de los data frames creados
head(df_so)
## longitude latitude salinity
## 1 274.875 7.875 32.637
## 2 274.875 8.125 32.754
## 3 274.875 8.375 32.845
## 4 274.875 8.625 32.894
## 5 274.875 8.875 32.993
## 6 274.875 9.125 33.158
head(df_to)
## longitude latitude temperature
## 1 274.875 7.875 27.826
## 2 274.875 8.125 27.912
## 3 274.875 8.375 28.011
## 4 274.875 8.625 28.170
## 5 274.875 8.875 28.341
## 6 274.875 9.125 28.266
library(ncdf4)
library(ggplot2)
library(viridis)
# Abre el archivo NetCDF
nc_data <- nc_open("P4_ARMOR_parcial.nc")
# Extraer las variables de temperatura y dimensiones
to <- ncvar_get(nc_data, "to")
latitude <- ncvar_get(nc_data, "latitude")
longitude <- ncvar_get(nc_data, "longitude")
# Cerrar el archivo
nc_close(nc_data)
# Crear un data frame para la temperatura
df_to <- data.frame(
longitude = rep(longitude, each = length(latitude)),
latitude = rep(latitude, times = length(longitude)),
temperature = as.vector(to)
)
# Crear la gráfica de distribución de la temperatura
ggplot(df_to, aes(x = longitude, y = latitude, fill = temperature)) +
geom_raster() +
scale_fill_viridis_c() +
labs(title = "Distribución de la Temperatura del Agua de Mar",
x = "Longitud", y = "Latitud", fill = "Temperatura (°C)") +
theme_minimal()
head(df_to) # Muestra las primeras filas del data frame que contiene la información utilizada en el gráfico
## longitude latitude temperature
## 1 274.875 7.875 27.826
## 2 274.875 8.125 27.846
## 3 274.875 8.375 27.866
## 4 274.875 8.625 27.890
## 5 274.875 8.875 27.977
## 6 274.875 9.125 28.204
#El gráfico muestra cómo varía la temperatura del agua de mar a lo largo de diferentes latitudes en una longitud fija de 274.875. A medida que se incrementa la latitud desde 7.875 hasta 9.125, la temperatura del agua aumenta consistentemente, comenzando en 27.826°C y alcanzando hasta 28.204°C. Esta tendencia sugiere que, en esta longitud específica, el agua se vuelve más cálida a medida que se desplaza hacia latitudes mayores.
library(ncdf4)
library(ggplot2)
library(viridis)
# Abre el archivo NetCDF
nc_data <- nc_open("P4_ARMOR_parcial.nc")
# Extraer las variables de salinidad y dimensiones
so <- ncvar_get(nc_data, "so")
latitude <- ncvar_get(nc_data, "latitude")
longitude <- ncvar_get(nc_data, "longitude")
# Cerrar el archivo
nc_close(nc_data)
# Crear un data frame para la salinidad
df_so <- data.frame(
longitude = rep(longitude, each = length(latitude)),
latitude = rep(latitude, times = length(longitude)),
salinity = as.vector(so)
)
# Crear la gráfica de distribución de la salinidad
ggplot(df_so, aes(x = longitude, y = latitude, fill = salinity)) +
geom_raster() +
scale_fill_viridis_c() +
labs(title = "Distribución de la Salinidad del Agua de Mar",
x = "Longitud", y = "Latitud", fill = "Salinidad (PSU)") +
theme_minimal()
head(df_so) # Muestra las primeras filas del data frame que contiene la información utilizada en el gráfico
## longitude latitude salinity
## 1 274.875 7.875 32.637
## 2 274.875 8.125 32.623
## 3 274.875 8.375 32.627
## 4 274.875 8.625 32.560
## 5 274.875 8.875 32.521
## 6 274.875 9.125 32.434
#El gráfico ilustra la distribución de la salinidad en función de la longitud y la latitud, mostrando cómo varía la salinidad a lo largo de diferentes latitudes en una longitud fija de 274.875. Cada punto en el gráfico representa un valor de salinidad específico para una combinación dada de longitud y latitud. Los datos revelan que la salinidad disminuye ligeramente a medida que aumenta la latitud, comenzando en 32.637 PSU en la latitud más baja (7.875) y descendiendo a 32.434 PSU en la latitud más alta (9.125). Este gráfico ayuda a visualizar las variaciones espaciales en la salinidad, permitiendo identificar patrones o anomalías en la región estudiada.
library(ncdf4)
library(ggplot2)
library(dplyr)
library(tidyr)
# Abre el archivo NetCDF
nc_data <- nc_open("P4_ARMOR_parcial.nc")
# Extraer las variables de salinidad y dimensiones
so <- ncvar_get(nc_data, "so")
latitude <- ncvar_get(nc_data, "latitude")
longitude <- ncvar_get(nc_data, "longitude")
# Cerrar el archivo
nc_close(nc_data)
# Crear un data frame para la salinidad "so"
df_so <- data.frame(
longitude = rep(longitude, each = length(latitude)),
latitude = rep(latitude, times = length(longitude)),
salinity = as.vector(so)
)
# Definir el umbral de salinidad
threshold <- quantile(df_so$salinity, 0.95, na.rm = TRUE) # Umbral en el percentil 95
# Filtrar los datos para valores de salinidad iguales o mayores que el umbral
df_filtered <- df_so %>%
filter(salinity >= threshold)
# Contar ocurrencias por longitud
df_summary <- df_filtered %>%
count(longitude)
# Seleccionar los primeros 3 valores para el gráfico
df_summary <- df_summary %>%
top_n(3, n) %>%
arrange(desc(n))
# Crear el gráfico de pastel
ggplot(df_summary, aes(x = "", y = n, fill = factor(longitude))) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
labs(title = "Distribución de Salinidad Alta por Longitud",
fill = "Longitud") +
theme_minimal() +
theme(axis.text.x = element_blank()) # Eliminar etiquetas del eje x
print(df_summary)
## longitude n
## 1 299.875 448
## 2 299.375 434
## 3 298.875 295
#El gráfico circular ilustra cómo se distribuyen las observaciones de salinidad alta en diferentes longitudes. Muestra que la longitud 299.875 concentra la mayor cantidad de datos, con 448 observaciones, seguida por la longitud 299.375 con 434 observaciones, y finalmente la longitud 298.875 con 295 observaciones. Esto indica que las observaciones están predominantemente agrupadas en la longitud 299.875, disminuyendo hacia las longitudes 299.375 y 298.875, lo que refleja una mayor densidad de datos de salinidad alta en la primera longitud comparada con las otras.
library(ncdf4)
library(Amelia)
# Abre el archivo NetCDF
nc_data <- nc_open("P4_ARMOR_parcial.nc")
# Extraer las variables necesarias
so <- ncvar_get(nc_data, "so") # Salinidad
zo <- ncvar_get(nc_data, "zo") # Altura geopotencial
ugo <- ncvar_get(nc_data, "ugo") # Velocidad geostrófica zonal
vgo <- ncvar_get(nc_data, "vgo") # Velocidad geostrófica meridional
# Extraer las dimensiones
longitude <- ncvar_get(nc_data, "longitude")
latitude <- ncvar_get(nc_data, "latitude")
# Cerrar el archivo
nc_close(nc_data)
# Crear un data frame combinando las variables
df_combined <- data.frame(
longitude = rep(longitude, each = length(latitude)),
latitude = rep(latitude, times = length(longitude)),
salinity = as.vector(so),
geopotential_height = as.vector(zo),
zonal_velocity = as.vector(ugo),
meridional_velocity = as.vector(vgo)
)
# Usar Amelia para crear un mapa de valores perdidos
missmap(df_combined, main = "Mapa de Valores Perdidos",
col = c("yellow", "black"), legend = TRUE)
# Ver las primeras filas del data frame combinado
head(df_combined)
## longitude latitude salinity geopotential_height zonal_velocity
## 1 274.875 7.875 32.637 0.767 0.339
## 2 274.875 8.125 32.623 0.766 0.328
## 3 274.875 8.375 32.627 0.762 0.308
## 4 274.875 8.625 32.560 0.755 0.294
## 5 274.875 8.875 32.521 0.745 0.287
## 6 274.875 9.125 32.434 0.735 0.265
## meridional_velocity
## 1 0.095
## 2 0.069
## 3 0.045
## 4 0.016
## 5 -0.007
## 6 -0.019
# El Mapa de Valores Perdidos muestra la distribución de datos faltantes en un conjunto de datos oceanográficos que incluye variables como salinidad, altura geopotencial, y velocidades zonal y meridional, junto con coordenadas de longitud y latitud. En el gráfico, las áreas amarillas indican la presencia de valores faltantes, mientras que las áreas negras representan datos completos. Esta visualización es crucial para identificar regiones con datos incompletos, facilitando así la planificación de métodos para manejar y estimar los valores faltantes, y garantizando la calidad y precisión del análisis de los datos.
# Un ejemplo de un dato perdido en el Mapa de Valores Perdidos podría ser un caso en el que en una celda específica del gráfico, como en las coordenadas de longitud 274.875 y latitud 8.875, no hay información disponible para la variable de salinidad. En este punto, la celda del mapa correspondiente a estas coordenadas se mostraría en amarillo, indicando que el dato está ausente o no ha sido registrado. Esto destaca la necesidad de abordar estos vacíos para asegurar un análisis completo y preciso.
# Crear un data frame con los datos proporcionados
df_avg_year <- data.frame(
year = c(2018.041, 2018.125, 2018.203, 2018.286, 2018.370, 2018.453,
2018.537, 2018.621, 2018.705, 2018.789, 2018.872, 2018.956,
2019.039, 2019.124, 2019.201, 2019.285, 2019.368, 2019.452,
2019.535, 2019.619, 2019.704, 2019.786, 2019.871, 2019.953,
2020.038, 2020.123, 2020.203, 2020.287, 2020.370, 2020.454,
2020.537, 2020.621, 2020.706, 2020.789, 2020.873, 2020.956),
mean_temperature = c(27.12764, 26.56165, 26.74855, 27.25447, 27.74126,
28.04722, 28.22055, 28.41446, 28.90279, 28.78679,
28.36612, 27.54044, 26.87686, 26.63973, 26.68575,
27.15211, 27.80049, 28.38108, 28.48427, 28.99939,
29.40690, 29.43507, 28.95813, 28.33777, 27.56467,
27.10998, 27.05929, 27.66196, 28.25509, 28.64293,
28.88012, 29.31286, 29.75032, 29.52880, 28.78118,
28.25698)
)
# Convertir el año a formato de fecha
df_avg_year$year <- as.factor(round(df_avg_year$year))
# Graficar los datos
plot(df_avg_year$year, df_avg_year$mean_temperature, type = "b",
main = enc2utf8("Temperatura Promedio Anual"),
xlab = "Año", ylab = "Temperatura Promedio (°C)",
col = "forestgreen", pch = 19, lty = 1)
# Añadir líneas de referencia
abline(h = mean(df_avg_year$mean_temperature), col = "red", lty = 2)
# Mostrar los datos utilizados en el gráfico
print(df_avg_year)
## year mean_temperature
## 1 2018 27.12764
## 2 2018 26.56165
## 3 2018 26.74855
## 4 2018 27.25447
## 5 2018 27.74126
## 6 2018 28.04722
## 7 2019 28.22055
## 8 2019 28.41446
## 9 2019 28.90279
## 10 2019 28.78679
## 11 2019 28.36612
## 12 2019 27.54044
## 13 2019 26.87686
## 14 2019 26.63973
## 15 2019 26.68575
## 16 2019 27.15211
## 17 2019 27.80049
## 18 2019 28.38108
## 19 2020 28.48427
## 20 2020 28.99939
## 21 2020 29.40690
## 22 2020 29.43507
## 23 2020 28.95813
## 24 2020 28.33777
## 25 2020 27.56467
## 26 2020 27.10998
## 27 2020 27.05929
## 28 2020 27.66196
## 29 2020 28.25509
## 30 2020 28.64293
## 31 2021 28.88012
## 32 2021 29.31286
## 33 2021 29.75032
## 34 2021 29.52880
## 35 2021 28.78118
## 36 2021 28.25698
#El gráfico muestra cómo cambia la temperatura promedio anual desde 2018 hasta 2020. En el eje horizontal se encuentran los años, mientras que el eje vertical indica la temperatura promedio en grados Celsius. Cada punto en el gráfico representa la temperatura promedio para un año específico, y estos puntos están conectados por una línea para mostrar la tendencia. La línea horizontal roja indica la temperatura promedio general durante todo el período. La gráfica revela si la temperatura promedio ha aumentado, disminuido o se ha mantenido estable a lo largo de los años analizados.
library(ggplot2)
# Crear un data frame con los datos proporcionados
df_salinity <- data.frame(
longitude = rep(274.875, 6),
latitude = c(7.875, 8.125, 8.375, 8.625, 8.875, 9.125),
salinity = c(32.637, 32.623, 32.627, 32.560, 32.521, 32.434)
)
# Crear el gráfico de barras
ggplot(df_salinity, aes(x = factor(latitude), y = salinity, fill = salinity)) +
geom_bar(stat = "identity") +
scale_fill_viridis_c() +
labs(title = "Distribución de la Salinidad por Latitud",
x = "Latitud", y = "Salinidad (PSU)", fill = "Salinidad (PSU)") +
theme_minimal()
# Mostrar los datos utilizados en el gráfico
print(df_salinity)
## longitude latitude salinity
## 1 274.875 7.875 32.637
## 2 274.875 8.125 32.623
## 3 274.875 8.375 32.627
## 4 274.875 8.625 32.560
## 5 274.875 8.875 32.521
## 6 274.875 9.125 32.434
#El gráfico de barras muestra la variación de la salinidad en función de la latitud para una longitud fija de 274.875. Los datos indican que, a medida que la latitud aumenta de 7.875 a 9.125 grados, la salinidad disminuye ligeramente. Específicamente, la salinidad es más alta en la latitud de 7.875 (32.637 PSU) y disminuye a 32.434 PSU en la latitud de 9.125. Esta tendencia sugiere que, en esta región, la salinidad tiende a reducirse conforme se avanza hacia latitudes más altas, posiblemente debido a cambios en las condiciones ambientales como la temperatura del agua o las corrientes marinas.