_________________________________________________________________________________________________________________________
# Precipitación en el Valle Central de Catamarca.
PP_77_22 <- read_excel("PP_77_22.xlsx")
# Mandarinas Criolla y Clementina del Campo Experimental de la FCA.
MANDARINAS <- read_excel("MANDARINAS_2024.xlsx")
# Encuesta a estudiantes del Taller de R.
ALUMNOS_2024 <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vTwVt48G81FHfD_K9jcVmhjN3otTkR0-5Y8mC23oaEOTmhiG4So0kjw6I0b2tkU5ilpehvlhqBjId9i/pub?output=csv", show_col_types = FALSE)## [1] "Marca temporal" "Genero" "Edad"
## [4] "Nivel.dificultad.R" "Asig.rend.aprob.2024"
## Frequencies
## ALUMNOS_2024$Genero
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## --------------------------- ------ --------- -------------- --------- --------------
## Femenino 11 45.83 45.83 45.83 45.83
## Masculino 12 50.00 95.83 50.00 95.83
## Prefiero no responder 1 4.17 100.00 4.17 100.00
## <NA> 0 0.00 100.00
## Total 24 100.00 100.00 100.00 100.00
# modifica el idioma de salida a español en las tablas y medidas obtenidas con "summarytools"
st_options(lang = "es") # Agregamos argumentos a la función freq()
freq(ALUMNOS_2024$Genero,
justify = "center", #Controla la alineación del texto centrada en la tabla.
report.nas = FALSE, # no se incluiran los valores faltantes (NA) en la tabla.
headings = FALSE, # no se muestran los encabezados o títulos de la tabla.
cumul = FALSE) #indica que no se mostrarán los porcentajes acumulados en la tabla.##
## Frec. %
## --------------------------- ------- --------
## Femenino 11 45.83
## Masculino 12 50.00
## Prefiero no responder 1 4.17
## Total 24 100.00
## Frecuencias
## MANDARINAS$NIVEL_DE_DAÑO
## Tipo: Numérico
##
## Frec. % Válido % Válido acu. % Total % Total acu.
## ----------- ------- ---------- --------------- --------- --------------
## 0 35 8.35 8.35 8.35 8.35
## 1 237 56.56 64.92 56.56 64.92
## 2 96 22.91 87.83 22.91 87.83
## 3 51 12.17 100.00 12.17 100.00
## <NA> 0 0.00 100.00
## Total 419 100.00 100.00 100.00 100.00
freq(MANDARINAS$NIVEL_DE_DAÑO,
report.nas = FALSE, # eliminación de valores faltantes
justify = "center") # alineación centrada## Frecuencias
## MANDARINAS$NIVEL_DE_DAÑO
## Tipo: Numérico
##
## Frec. % % Acu.
## ----------- ------- -------- --------
## 0 35 8.35 8.35
## 1 237 56.56 64.92
## 2 96 22.91 87.83
## 3 51 12.17 100.00
## Total 419 100.00 100.00
# Trabajamos con la base de datos "ALUMNOS_2024"
freq(ALUMNOS_2024$Asig.rend.aprob.2024,
report.nas = FALSE,
justify = "center")## Frecuencias
## ALUMNOS_2024$Asig.rend.aprob.2024
## Tipo: Numérico
##
## Frec. % % Acu.
## ----------- ------- -------- --------
## 0 2 8.33 8.33
## 1 2 8.33 16.67
## 2 6 25.00 41.67
## 3 6 25.00 66.67
## 4 4 16.67 83.33
## 6 1 4.17 87.50
## 7 1 4.17 91.67
## 8 2 8.33 100.00
## Total 24 100.00 100.00
# Trabajamos con la base de datos "MANDARINAS"
# Paso 1: Crear intervalos de clase
TF_PESO_MANDARINAS<- cut(MANDARINAS$PESO,
breaks = seq(min(MANDARINAS$PESO), max(MANDARINAS$PESO), by = 30), # Ajustar el rango de los intervalos
right = FALSE, # Definir si el intervalo incluye el límite superior
include.lowest = TRUE)
# Paso 2: Crear la tabla de frecuencias con los intervalos de clase
freq(TF_PESO_MANDARINAS,
report.nas = FALSE,
justify = "center" )## Frecuencias
## TF_PESO_MANDARINAS
## Tipo: Factor
##
## Frec. % % Acu.
## --------------- ------- -------- --------
## [37,67) 10 2.40 2.40
## [67,97) 37 8.87 11.27
## [97,127) 90 21.58 32.85
## [127,157) 150 35.97 68.82
## [157,187) 87 20.86 89.69
## [187,217) 39 9.35 99.04
## [217,247] 4 0.96 100.00
## Total 417 100.00 100.00
Como lo hicimos…
cut() toma una variable numérica (en este caso,
MANDARINAS$PESO) y la divide en categorías o intervalos de
clase. El resultado se almacena en el objeto
TF_PESO_MANDARINAS, que será un vector categórico con los
intervalos definidos.
breaks define los límites de los intervalos. En este
caso, seq() genera una secuencia de valores que comienzan
desde el valor mínimo (min(MANDARINAS$PESO)) hasta el valor
máximo (max(MANDARINAS$PESO)), con un paso de 30 unidades
(by = 30). Esto significa que cada intervalo de clase
tendrá una amplitud de 30 unidades.
right = FALSE indica que el límite superior no está
incluido en el intervalo, mientras que el límite inferior sí lo está.
Por ejemplo, si se crea un intervalo [10, 40), incluirá 10 pero no
40.
include.lowest = TRUE esta opción asegura que el
valor más bajo de MANDARINAS$PESO se incluya en el primer
intervalo. Si no se especifica , podría ser excluido si el valor mínimo
coincide con un límite.
R base## [1] 439.2239
## [1] 666.4 553.2 675.7 532.4 528.7 410.9 569.2 484.0 610.2 379.3 449.4 299.9
## [13] 421.0 402.6 430.0 629.4 362.1 340.2 175.3 359.2 288.8 444.6 657.1 547.7
## [25] 463.0 552.2 239.0 338.0 278.9 263.1 301.4 481.0 339.3 248.3 359.0 251.3
## [37] 455.2 554.4 598.3 440.2 511.9 441.6 561.6 401.0 414.9 493.4
# Medidas de resumen
MIN <- min(PRECIPITACION)
Q1 <- quantile(PRECIPITACION, probs = 0.25)
MEDIA <- mean(PRECIPITACION)
MEDIANA <- median(PRECIPITACION)
Q3 <- quantile(PRECIPITACION, probs = 0.75)
MAX <- max(PRECIPITACION)
RANGO <- range(PRECIPITACION)
SD <- sd(PRECIPITACION)
CV <- (SD / MEDIA) * 100
# Imprimimos los objetos
MIN## [1] 175.3
## 25%
## 344.9
## [1] 439.2239
## [1] 440.9
## 75%
## 543.875
## [1] 675.7
## [1] 175.3 675.7
## [1] 125.9872
## [1] 28.68405
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 175.3 344.9 440.9 439.2 543.9 675.7
tidyverseResumen_tidy <- PP_77_22 %>%
summarise(Media = mean(PP),
Mediana = median(PP),
Rango = paste(range(PP), collapse = " - "),
Std = sd(PP))
Resumen_tidy## # A tibble: 1 × 4
## Media Mediana Rango Std
## <dbl> <dbl> <chr> <dbl>
## 1 439. 441. 175.3 - 675.7 126.
Resumen_mandarinas <- MANDARINAS %>%
filter(GRUPO==1 | GRUPO == 3) %>%
group_by(VARIEDAD) %>%
summarise(MINIMUM = min(PESO),
MEAN = mean(PESO),
MEDIAN = median(PESO),
MAXIMUM = max(PESO))
Resumen_mandarinas## # A tibble: 2 × 5
## VARIEDAD MINIMUM MEAN MEDIAN MAXIMUM
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Clementina 37 149. 145 231
## 2 Criolla 52 133. 137 203
summarytools## Estadísticas descriptivas
## PRECIPITACION
## N: 46
##
## PRECIPITACION
## ------------------ ---------------
## Media 439.22
## Dev.std. 125.99
## Min 175.30
## Q1 340.20
## Mediana 440.90
## Q3 547.70
## Max 675.70
## DAP 149.96
## RI 198.98
## CV 0.29
## Asimetría 0.00
## ES-Asimetría 0.35
## Curtosis -0.88
## Num.Válido 46.00
## Pct.Válido 100.00
descr(MANDARINAS$PESO,
na.rm = TRUE, # elimina los valores faltantes de la tabla
headings = FALSE) # elimina el encabezado de la tabla##
## PESO
## ------------------ --------
## Media 141.72
## Dev.std. 36.62
## Min 37.00
## Q1 117.00
## Mediana 143.00
## Q3 164.00
## Max 273.00
## DAP 34.10
## RI 47.00
## CV 0.26
## Asimetría 0.07
## ES-Asimetría 0.12
## Curtosis 0.22
## Num.Válido 419.00
## Pct.Válido 100.00
## Estadísticas descriptivas
## PESO por VARIEDAD
## Data frame: MANDARINAS
## N: 30
##
## Clementina Criolla
## ------------------ ------------ ---------
## Media 146.47 135.27
## Dev.std. 34.57 26.95
## Min 37.00 85.00
## Q1 135.00 109.00
## Mediana 142.00 138.00
## Q3 158.00 155.00
## Max 231.00 182.00
## DAP 15.57 25.95
## RI 21.25 41.00
## CV 0.24 0.20
## Asimetría -0.26 -0.34
## ES-Asimetría 0.43 0.43
## Curtosis 2.36 -0.98
## Num.Válido 30.00 30.00
## Pct.Válido 100.00 100.00
R base ofrece simplicidad,tidyverse optimiza el flujo de trabajo en proyectos más
complejos,summarytools proporciona rapidamente medidas
descriptivas detalladas.El paquete gganimate es una extensión de ggplot2 diseñada para crear visualizaciones animadas en R. Este paquete permite añadir un componente temporal a los gráficos, lo que facilita ilustrar cambios dinámicos en los datos a lo largo del tiempo o de otra variable de interés. Utilizando una sintaxis similar a la de ggplot2, gganimate incorpora “transiciones” y “vistas” para definir cómo los elementos del gráfico evolucionan entre estados. Esto lo hace ideal para presentar tendencias, patrones o procesos de manera intuitiva y atractiva. Entre sus aplicaciones destacan los gráficos de series temporales, simulaciones y estudios de fenómenos dinámicos en áreas como climatología, biología, entre otros.
# Paso 1:reamos el gráfico base con líneas, puntos, y una línea de referencia roja
p <- ggplot(PP_77_22, aes(ANIO, PP)) + # Creamos el objeto p (gráfico base)
geom_line(color = "blue", linewidth = 1) + # Línea azul
geom_point(color = "red", size = 2) + # Puntos rojos
geom_hline(yintercept = 439, color = "red", linetype = "dashed", linewidth = 1) + # Línea de referencia roja con valor promedio de pp
labs(title = "Evolución de la precipitación en el periodo 1977 - 2022",
x = "Año",
y = "Precipitación (mm)") +
theme_minimal()
# Paso 2: Agregar la animación
anim <- p +
transition_reveal(ANIO) # función que permite animar gráficos mostrando progresivamente los datos.
# Paso 3: Mostrar la animación
animate(anim, #función que produce la animación del objeto "anim".
nframes = 200, # número de fotogramas de la animación. Un mayor número de fotogramas produce una animación más fluida, pero aumentar el tiempo de renderización y el tamaño del archivo.
fps = 10) # Controla la velocidad de la animación.