##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: LEONARDO RUIZ ####
### CARRERA: INGENIERÍA EN PETROLEOS #####
##1. Carga de Datos
library(readxl)
Datos <- read_xlsx("C:/Users/LEO/Documents/Antisana/weatherdataANTISANA.csv.xlsx")
str(Datos)
## tibble [366 × 10] (S3: tbl_df/tbl/data.frame)
## $ Date : POSIXct[1:366], format: "2012-01-01" "2012-01-02" ...
## $ Longitude : num [1:366] -78.1 -78.1 -78.1 -78.1 -78.1 ...
## $ Latitude : num [1:366] -0.468 -0.468 -0.468 -0.468 -0.468 ...
## $ Elevation : num [1:366] 4048 4048 4048 4048 4048 ...
## $ Max_Temperature : num [1:366] 16.1 15.5 11.6 12 11.7 ...
## $ Min_Temperature : num [1:366] 6.91 9.23 8.69 9.53 7.9 ...
## $ Precipitation : num [1:366] 8.49 35.44 41.53 15.48 28.71 ...
## $ Wind : num [1:366] 1.76 1.86 1.74 1.48 1.49 1.51 1.81 1.68 1.23 1.61 ...
## $ Relative_Humidity: num [1:366] 0.93 0.96 0.98 0.99 0.98 0.97 0.98 0.99 0.99 0.98 ...
## $ Solar : num [1:366] 15.98 12.25 4.58 4.32 3.86 ...
##2.Extraer la variable continua
Max_Temperature <- Datos$Max_Temperature
Max_Temperature <- as.numeric(Max_Temperature)
Max_Temperature <- na.omit(Max_Temperature)
##3. Cálculo de intervalos (sturges)
R <- max(Max_Temperature) - min(Max_Temperature)
k <- floor(1 + (3.3 * log10(length(Max_Temperature))))
A <- R / k
liminf <- seq(from = min(Max_Temperature),
by = A,
length.out = k)
limsup <- liminf + A
limsup[k] <- max(Max_Temperature)
MC <- (liminf + limsup) / 2
##4.Tabla de distribución de frecuencias
#4.1 Frecuencia absoluta
ni <- numeric(k)
for (i in 1:k) {
if (i == k) {
ni[i] <- sum(Max_Temperature >= liminf[i] & Max_Temperature <= limsup[i])
} else {
ni[i] <- sum(Max_Temperature >= liminf[i] & Max_Temperature < limsup[i])
}
}
#4.2 Frecuencias relativas y acumuladas
hi <- (ni / length(Max_Temperature)) * 100
Niasc <- cumsum(ni)
Nidsc <- rev(cumsum(rev(ni)))
Hiasc <- cumsum(hi)
Hidsc <- rev(cumsum(rev(hi)))
#4.3 Tabla de frecuencias
tabla_Max_Temperature <- data.frame(
Límite_Inferior = round(liminf, 2),
Límite_Superior = round(limsup, 2),
Marca_Clase = round(MC, 2),
ni = ni,
hi_porc = round(hi, 2),
Ni_asc = Niasc,
Ni_dsc = Nidsc,
Hiasc_porc = round(Hiasc, 2),
Hidsc_porc = round(Hidsc, 2))
# TABLA 1 CON GT()
library(gt)
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(e1071)
tabla_Max_Temperature %>%
gt() %>%
tab_header(
title = md("**Tabla 1: Distribución de Frecuencias de Máxima Temperatura**"),
subtitle = md("Antisana | Método Sturges")
) %>%
tab_source_note(
source_note = md("**Antisana**")
) %>%
cols_label(
Límite_Inferior = "L. Inferior",
Límite_Superior = "L. Superior",
Marca_Clase = "Marca Clase",
hi_porc = "hi %",
Ni_asc = "Ni Asc.",
Ni_dsc = "Ni Desc.",
Hiasc_porc = "Hi Asc. %",
Hidsc_porc = "Hi Desc. %"
) %>%
fmt_number(
columns = c(Límite_Inferior, Límite_Superior, Marca_Clase),
decimals = 2
) %>%
fmt_number(
columns = c(hi_porc, Hiasc_porc, Hidsc_porc),
decimals = 2,
pattern = "{x}%"
)
| Tabla 1: Distribución de Frecuencias de Máxima Temperatura |
| Antisana | Método Sturges |
| L. Inferior |
L. Superior |
Marca Clase |
ni |
hi % |
Ni Asc. |
Ni Desc. |
Hi Asc. % |
Hi Desc. % |
| 10.32 |
11.82 |
11.07 |
26 |
7.10% |
26 |
366 |
7.10% |
100.00% |
| 11.82 |
13.31 |
12.56 |
60 |
16.39% |
86 |
340 |
23.50% |
92.90% |
| 13.31 |
14.81 |
14.06 |
71 |
19.40% |
157 |
280 |
42.90% |
76.50% |
| 14.81 |
16.31 |
15.56 |
60 |
16.39% |
217 |
209 |
59.29% |
57.10% |
| 16.31 |
17.80 |
17.06 |
62 |
16.94% |
279 |
149 |
76.23% |
40.71% |
| 17.80 |
19.30 |
18.55 |
44 |
12.02% |
323 |
87 |
88.25% |
23.77% |
| 19.30 |
20.80 |
20.05 |
23 |
6.28% |
346 |
43 |
94.54% |
11.75% |
| 20.80 |
22.29 |
21.55 |
14 |
3.83% |
360 |
20 |
98.36% |
5.46% |
| 22.29 |
23.79 |
23.04 |
6 |
1.64% |
366 |
6 |
100.00% |
1.64% |
| Antisana |
##5. Gráficos
#5.1 Histograma
hist(Max_Temperature,
main = "Gráfica No.1: Distribución de Máxima Temperatura",
breaks = seq(min(Max_Temperature), max(Max_Temperature) + A, by = A),
xlab = "Máxima Temperatura",
ylab = "Cantidad",
col = "lightblue",
border = "darkblue",
xaxt = "n")
# Eje X personalizado con MARCAS DE CLASE
axis(1, at = MC, # Posiciones: Marcas de Clase
labels = round(MC, 2), # Etiquetas: valores redondeados
las = 1) # Etiquetas horizontales

#5.2 Ojivas
x_asc <- c(min(liminf), limsup)
y_asc <- c(0, Niasc)
x_desc <- c(liminf, max(limsup))
y_desc <- c(Nidsc, 0)
x_range <- range(c(x_asc, x_desc))
y_range <- c(0, max(c(y_asc, y_desc)))
plot(x_asc, y_asc, type = "o", col = "skyblue",
main = "Gráfica No.2: Ojivas Ascendente y Descendente de Máxima Temperatura",
xlab = "Máxima Temperatura",
ylab = "Frecuencia acumulada",
xlim = x_range, ylim = y_range,
xaxt = "n", pch = 16, lwd = 2)
axis(1, at = pretty(x_range),
labels = format(pretty(x_range), scientific = FALSE))
axis(2, at = pretty(y_range))
lines(x_desc, y_desc, type = "o", col = "steelblue4", pch = 17, lwd = 2)
legend("right",
legend = c("Ojiva Ascendente", "Ojiva Descendente"),
col = c("skyblue", "steelblue4"),
pch = c(16, 17),
lty = 1,
lwd = 2,
cex = 0.8)

#5.3 Diagramas de cajas
boxplot(Max_Temperature,
horizontal = TRUE,
col = "steelblue",
main = "Gráfica No.3: Distribución de Máxima Temperatura",
xlab = "Máxima Temperatura",
xaxt = "n")
axis(1, at = pretty(Max_Temperature),
labels = format(pretty(Max_Temperature), scientific = FALSE))

# Outliers
outliers <- boxplot.stats(Max_Temperature)$out
cat("\nNúmero de outliers:", length(outliers), "\n")
##
## Número de outliers: 0
if(length(outliers) > 0) {
cat("Outliers:", round(outliers, 2), "\n")
}
##6. Indicadores estadísticos
get_mode_interval <- function() {
idx <- which.max(ni)
return(paste0("[", round(liminf[idx], 2), ", ", round(limsup[idx], 2), "]"))
}
media <- mean(Max_Temperature)
mediana <- median(Max_Temperature)
moda_intervalo <- get_mode_interval()
desv <- sd(Max_Temperature)
varianza <- var(Max_Temperature)
cv <- (desv / media) * 100
asim <- skewness(Max_Temperature)
curt <- kurtosis(Max_Temperature)
# CREAR DATA.FRAME DE INDICADORES
indicadores <- data.frame(
Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda (intervalo)",
"Desviación Estándar", "Varianza", "Coef. Variación (%)",
"Asimetría", "Curtosis", "N° Outliers"),
Valor = c(round(min(Max_Temperature), 2), round(max(Max_Temperature), 2),
round(media, 2), round(mediana, 2), moda_intervalo,
round(desv, 2), round(varianza, 2), round(cv, 2),
round(asim, 2), round(curt, 2), length(outliers))
)
# TABLA 2 CON GT()
indicadores %>%
gt() %>%
tab_header(
title = md("**Tabla 2: Indicadores Estadísticos de Máxima Temperatura**")
) %>%
tab_source_note(
source_note = md("**Antisana**")
) %>%
cols_label(
Indicador = "Indicador",
Valor = "Valor"
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(columns = Indicador)
)
| Tabla 2: Indicadores Estadísticos de Máxima Temperatura |
| Indicador |
Valor |
| Mínimo |
10.32 |
| Máximo |
23.79 |
| Media |
15.74 |
| Mediana |
15.51 |
| Moda (intervalo) |
[13.31, 14.81] |
| Desviación Estándar |
2.87 |
| Varianza |
8.22 |
| Coef. Variación (%) |
18.22 |
| Asimetría |
0.39 |
| Curtosis |
-0.56 |
| N° Outliers |
0 |
| Antisana |
##7. Conclusión
#La variable Máxima temperatura fluctúa entre 10.32 y 23.79 y sus valores están en torno a los 15.51 (media = 15.74 ), con una desviación estándar de 2.87 siendo un conjunto de valores extremadamente heterogéneos (CV = 18.22%) cuyos valores se concentran en el intervalo modal [13.31, 14.81] y con distribución leptocúrtica (K = -0.56) y sesgo pronunciado hacia la derecha (As = 0.39) y no tiene valores atípicos identificados, por lo tanto el comportamiento de la variable indica un proceso mayoritariamente inestable con mediciones consistentes en el rango principal, aunque con presencia significativa de lecturas extremas que requieren análisis particular.