##### 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")
##2.Extraer la variable continua 
Relative_Humidity <- Datos$Relative_Humidity
Relative_Humidity <- as.numeric(Relative_Humidity)
Relative_Humidity <- na.omit(Relative_Humidity)

##3. Cálculo de intervalos (sturges)
R <- max(Relative_Humidity) - min(Relative_Humidity)
k <- floor(1 + (3.3 * log10(length(Relative_Humidity))))
A <- R / k

liminf <- seq(from = min(Relative_Humidity), 
              by = A, 
              length.out = k)

limsup <- liminf + A
limsup[k] <- max(Relative_Humidity)

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(Relative_Humidity >= liminf[i] & Relative_Humidity <= limsup[i])
  } else {
    ni[i] <- sum(Relative_Humidity >= liminf[i] & Relative_Humidity < limsup[i])
  }
}

#4.2 Frecuencias relativas y acumuladas
hi <- (ni / length(Relative_Humidity)) * 100
Niasc <- cumsum(ni)
Nidsc <- rev(cumsum(rev(ni)))
Hiasc <- cumsum(hi)
Hidsc <- rev(cumsum(rev(hi)))

#4.3 Tabla de frecuencias
tabla_Relative_Humidity <- 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_Relative_Humidity %>%
  gt() %>%
  tab_header(
    title = md("**Tabla 1: Distribución de Frecuencias de Relative_Humidity**"),
    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 Relative_Humidity
Antisana | Método Sturges
L. Inferior L. Superior Marca Clase ni hi % Ni Asc. Ni Desc. Hi Asc. % Hi Desc. %
0.56 0.61 0.58 2 0.55% 2 366 0.55% 100.00%
0.61 0.66 0.63 15 4.10% 17 364 4.64% 99.45%
0.66 0.70 0.68 18 4.92% 35 349 9.56% 95.36%
0.70 0.75 0.73 21 5.74% 56 331 15.30% 90.44%
0.75 0.80 0.78 16 4.37% 72 310 19.67% 84.70%
0.80 0.85 0.82 20 5.46% 92 294 25.14% 80.33%
0.85 0.89 0.87 35 9.56% 127 274 34.70% 74.86%
0.89 0.94 0.92 60 16.39% 187 239 51.09% 65.30%
0.94 0.99 0.97 179 48.91% 366 179 100.00% 48.91%
Antisana
##5. Gráficos
#5.1 Histograma
hist(Relative_Humidity,
     main = "Gráfica No.1: Distribución de Relative_Humidity",
     breaks = seq(min(Relative_Humidity), max(Relative_Humidity) + A, by = A),
     xlab = "Relative_Humidity (% Humedad en el aire )",
     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 Relative_Humidity",
     xlab = "Relative_Humidity (% Humedad en el aire)",
     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(Relative_Humidity, 
        horizontal = TRUE, 
        col = "steelblue",
        main = "Gráfica No.3: Distribución de Relative_Humidity",
        xlab = "Relative_Humidity (% Humendad en el aire)",
        xaxt = "n")

axis(1, at = pretty(Relative_Humidity), 
     labels = format(pretty(Relative_Humidity), scientific = FALSE))

# Outliers

outliers <- boxplot.stats(Relative_Humidity)$out
cat("\nNúmero de outliers:", length(outliers), "\n")
## 
## Número de outliers: 5
if(length(outliers) > 0) {
  cat("Outliers:", round(outliers, 2), "\n")
}
## Outliers: 0.56 0.62 0.62 0.58 0.62
##6. Indicadores estadísticos 
get_mode_interval <- function() {
  idx <- which.max(ni)
  return(paste0("[", round(liminf[idx], 2), ", ", round(limsup[idx], 2), "]"))
}

media <- mean(Relative_Humidity)
mediana <- median(Relative_Humidity)
moda_intervalo <- get_mode_interval()
desv <- sd(Relative_Humidity)
varianza <- var(Relative_Humidity)
cv <- (desv / media) * 100
asim <- skewness(Relative_Humidity)
curt <- kurtosis(Relative_Humidity)     

# 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(Relative_Humidity), 2), round(max(Relative_Humidity), 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 Relative_Humidity**")
  ) %>%
  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 Relative_Humidity
Indicador Valor
Mínimo 0.56
Máximo 0.99
Media 0.9
Mediana 0.94
Moda (intervalo) [0.94, 0.99]
Desviación Estándar 0.11
Varianza 0.01
Coef. Variación (%) 12.14
Asimetría -1.18
Curtosis 0.2
N° Outliers 5
Antisana
##7. Conclusión 
#La variable Relative_Humidity fluctúa entre 0.56  y 0.99  y sus valores están en torno a los 0.94  (media = 0.9 ), con una desviación estándar de 0.11 siendo un conjunto de valores extremadamente homogénea  (CV = 12.14%) cuyos valores se concentran en el intervalo modal [0.94, 0.99]  y con distribución leptocúrtica (K = 0.2) y un sesgo pronunciado hacia la izquierda (As = -1.18) a exepción de los 5 valores atípicos identificados, por lo tanto el comportamiento de la variable indica un proceso estable con mediciones consistentes en el rango principal, aunque con presencia significativa de lecturas extremas que requieren análisis particular.