# Estadística Descriptiva: Variable Cuantitativa Continua
#Autor: "Grupo 1"
# Fecha: 03/12/2025
# Carga de librerías
library(knitr)
library(kableExtra)
library(readxl)

1. Carga de datos

getwd()
## [1] "C:/Users/Kevin Moreira/Documents/CAMILA/Estadística/Tareas"
# Establecer directorio y cargar datos
setwd("~/CAMILA/Estadística/Tareas")
datos <- read_excel(
  "weatherdataANTISANA.xlsx"
)
write.csv(datos,"weatherdataANTISANA.csv")

datos <- read.csv("weatherdataANTISANA.csv",
                  header = TRUE,
                  sep = ",",
                  dec = ".",
                  fileEncoding = "UTF-8")

2. Extracción de la variable

Temperatura_Max <- datos$Max.Temperature

3. Tabla de distribución de frecuencia

#Manualmente
min <- min(Temperatura_Max)
max <- max(Temperatura_Max)
R <- max - min
K <- floor(1 + 3.33 * log10(length(Temperatura_Max)))
A <- R / K
Li <- round(seq(from = min, to = max - A, by = A), 4)
Ls <- round(seq(from = min + A, to = max, by = A), 4)
Mc<-round((Li+Ls)/2,2)
ni <- numeric(length(Li))
for (i in 1:K) {
  if (i < K) {
    ni[i] <- sum(Temperatura_Max >= Li[i] & Temperatura_Max < Ls[i])
  } else {
    ni[i] <- sum(Temperatura_Max >= Li[i] & Temperatura_Max <= Ls[i])
  }
}
sum(ni)
## [1] 366
hi <-ni/sum(ni)*100
Ni_asc<-cumsum(ni)
Hi_asc<-cumsum(hi)
Ni_desc<-rev(cumsum(rev(ni)))
Hi_desc<-rev(cumsum(rev(hi)))

TDF_Temperatura_Max <- data.frame(
  Li, Ls, Mc, ni, round(hi, 2), Ni_asc, Ni_desc, round(Hi_asc, 2), round(Hi_desc, 2)
)

colnames(TDF_Temperatura_Max) <- c("Li","Ls","Mc","ni","hi","Ni_asc","Ni_desc","Hi_asc(%)","Hi_desc(%)")

#Crear fila de totales

totales<-c(
  Li="TOTAL",
  Ls="-",
  Mc="-",
  ni=sum(ni),
  hi=sum(hi),
  Ni_asc="-",
  Ni_desc="-",
  Hi_asc="-",
  Hi_desc="-")

TDF_Temperatura_Max <-rbind(TDF_Temperatura_Max,totales)

library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gt)

tabla_Temperatura_Max <- TDF_Temperatura_Max %>%
  gt() %>%
  tab_header(
    title = md("*Tabla N°1*"),
    subtitle = md("**Tabla de distribución de la Temperatura Máxima en el volcán Antisana**")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    row.striping.include_table_body = TRUE,
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  )

tabla_Temperatura_Max
Tabla N°1
Tabla de distribución de la Temperatura Máxima en el volcán Antisana
Li Ls Mc ni hi Ni_asc Ni_desc Hi_asc(%) Hi_desc(%)
10.32 11.8167 11.07 26 7.1 26 366 7.1 100
11.8167 13.3133 12.57 60 16.39 86 340 23.5 92.9
13.3133 14.81 14.06 71 19.4 157 280 42.9 76.5
14.81 16.3067 15.56 60 16.39 217 209 59.29 57.1
16.3067 17.8033 17.06 62 16.94 279 149 76.23 40.71
17.8033 19.3 18.55 44 12.02 323 87 88.25 23.77
19.3 20.7967 20.05 23 6.28 346 43 94.54 11.75
20.7967 22.2933 21.55 14 3.83 360 20 98.36 5.46
22.2933 23.79 23.04 6 1.64 366 6 100 1.64
TOTAL - - 366 100 - - - -
Autor: Grupo 1

4. Gráficas

4.1 Histograma

histoP<-hist(
  Temperatura_Max,
  main= "Grafica Nº1:Distribución de Temperatura
  Máxima en el volcán Antisana",
  xlab= "Temperatura_Máxima (°C)",
  ylab= "Cantidad", col="blue",
)

#Tabla simplificada en base al histograma
Hist_Temperatura_Max<-hist(Temperatura_Max,breaks = 8,plot = F)
k<-length(Hist_Temperatura_Max$breaks)
Li<-Hist_Temperatura_Max$breaks[1:(length(Hist_Temperatura_Max$breaks)-1)]
Ls<-Hist_Temperatura_Max$breaks[2:length(Hist_Temperatura_Max$breaks)]
ni<-Hist_Temperatura_Max$counts
sum(ni)
## [1] 366
hi <- round(ni/sum(ni)*100, 3)
sum(hi)
## [1] 100
Mc<-Hist_Temperatura_Max$mids
hi<-(ni/sum(ni))
sum(hi)
## [1] 1
Ni_asc<-cumsum(ni)
Hi_asc<-cumsum(hi)
Ni_desc<-rev(cumsum(rev(ni)))
Hi_desc<-rev(cumsum(rev(hi)))
TDF_Temperatura_Max<-data.frame(Li=round(Li,2),
                        Ls=round(Ls,2),
                        Mc=round(Mc,2),
                        ni=ni,
                        hi=round(hi*100,2),
                        Ni_asc=Ni_asc,
                        Ni_desc=Ni_desc,
                        Hi_asc=round(Hi_asc*100,2),
                        Hi_desc=round(Hi_desc*100,2))
colnames(TDF_Temperatura_Max)<-c("Lim inf","Lim sup","MC","ni","hi(%)","Ni asc","Ni desc","Hi asc(%)","Hi desc(%)")

totales <- c(
  Li = "TOTAL",
  Ls = "-",
  Mc = "-",
  ni = sum(as.numeric(TDF_Temperatura_Max$ni)),
  # Forzamos el 100% en vez de sumar los redondeos
  hi = 100,
  Ni_asc = "-",
  Ni_desc = "-",
  Hi_asc = "-",
  Hi_desc = "-"
)
TDF_Temperatura_Max<-rbind(TDF_Temperatura_Max,totales)


library(dplyr)
library(gt)

TDF_Temperatura_Max %>%
  gt() %>%
  tab_header(
    title = md("*Tabla N°2*"),
    subtitle = md("*Tabla Simplificada de distribución de la Temperatura máxima en el volcán Antisana*")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    row.striping.include_table_body = TRUE,
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  )
Tabla N°2
Tabla Simplificada de distribución de la Temperatura máxima en el volcán Antisana
Lim inf Lim sup MC ni hi(%) Ni asc Ni desc Hi asc(%) Hi desc(%)
10 12 11 30 8.2 30 366 8.2 100
12 14 13 94 25.68 124 336 33.88 91.8
14 16 15 78 21.31 202 242 55.19 66.12
16 18 17 82 22.4 284 164 77.6 44.81
18 20 19 50 13.66 334 82 91.26 22.4
20 22 21 25 6.83 359 32 98.09 8.74
22 24 23 7 1.91 366 7 100 1.91
TOTAL - - 366 100 - - - -
Autor: Grupo 1
hist(Temperatura_Max, breaks = 9,
     main = "Gráfica N°2 Distribución para la Temperatura Máxima en el volcán Antisana",
     xlab = "Temperatura Máxima (°C)",
     ylab = "Cantidad",
     ylim = c(0,max(ni)),
     col = "yellow",
     cex.main = 0.9,
     cex.lab = 1,
     cex.axis = 0.9,
     xaxt = "n")

axis(1, at = Hist_Temperatura_Max$breaks,
     labels = Hist_Temperatura_Max$breaks, las = 1,
     cex.axis = 0.9)

hist(Temperatura_Max, breaks = 10,
     main = "Gráfica N°3: Distribución de la Temperatura Máxima en el volcán Antisana",
     xlab = "Temperatura Máxima (°C)",
     ylab = "Cantidad",
     ylim = c(0, length(Temperatura_Max)),
     col = "green",
     cex.main = 0.9,
     cex.lab = 1,
     cex.axis = 0.9,
     xaxt = "n")
axis(1, at = Hist_Temperatura_Max$breaks,
     labels = Hist_Temperatura_Max$breaks, las = 1,
     cex.axis = 0.9)

4.4 Histogrma Porcentual

TDF_Temperatura_Max$hi <- as.numeric(TDF_Temperatura_Max$hi)
datos_grafico <- subset(TDF_Temperatura_Max, !(MC %in% c("-", "TOTAL")))

barplot(datos_grafico$hi,
        space = 0,
        col = "blue",
        main = "Gráfica N°4: Distribución porcentual de la Temperatura Máxima en el volcán Antisana",
        xlab = "Temperatuta Máxima (°C)",
        ylab = "Porcentaje",
        names.arg = datos_grafico$MC,
        ylim = c(0, 30))

barplot(datos_grafico$hi,
        space = 0,
        col = "skyblue",
        main = "Gráfica N°5: Distribución porcentual de la Temperatura Máxima en el volcán Antisana",
        xlab = "Temperatura Máxima (°C)",
        ylab = "Porcentaje",
        names.arg = datos_grafico$MC,
        ylim = c(0, 100))

5. Diagrama de caja

# Diagrama de Caja
boxplot(Temperatura_Max,
        horizontal = TRUE,
        main = "Gráfica N°6 Distribución para la Temperatura Máxima en el volcán Antisana",
        xlab = "Temperatura Máxima (°C)",
        col = "brown",
        outline = TRUE,
        pch = 1)

summary(Temperatura_Max)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.32   13.42   15.51   15.74   17.66   23.79

6. Ojivas

6.1 Diagrama de Ojiva Ascendente y Descendente (ni)

plot(Li ,Ni_desc,
     main = "Gráfica N°7: Distribución Ascendente y Descendente 
      para la Temperatura Máxima en el volcán Antisana",
     xlab = "Temperatura Máxima (°C)",
     ylab = "Cantidad",
     xlim = c(min(Li), max(Ls)),
     col = "red",
     cex.axis=0.8,
     type = "o",
     lwd = 3,
     las=1,
     xaxt="n")

lines(Ls,Ni_asc,
      col = "orange",
      type = "o",
      lwd = 3)

axis(1, at = Li, las=1)

6.2 Diagrama de Ojiva Ascendente y Descendente (hi)

plot(Li, Hi_desc * 100,
     main = "Gráfica N°8: Distribución Ascendente y Descendente porcentual
      para la Temperatura Máxima en el volcán Antisana",
     xlab = "Temperatura Máxima (°C)",
     ylab = "Porcentaje",
     xlim = c(min(Li), max(Ls)),
     col = "red",
     type = "o",
     lwd = 2,
     xaxt="n")

lines(Ls, Hi_asc * 100,
      col = "orange",
      type = "o",
      lwd = 3)
axis(1, at = Li, las=1)

7. Indicadores Estadísticos

7.1 Indicadores de Tendencia Central

# Media aritmética
media <- round(mean(Temperatura_Max), 2)
media
## [1] 15.74
# Moda
max_frecuencia <- max(TDF_Temperatura_Max$ni)
moda <- TDF_Temperatura_Max$MC[TDF_Temperatura_Max$ni == max_frecuencia]
moda
## [1] "13"
# Mediana
mediana <- median(Temperatura_Max)
mediana
## [1] 15.51

7.2 Indicadores de Dispersión

# Varianza
varianza <- var(Temperatura_Max)
varianza
## [1] 8.222732
# Desviación Estándar
sd <- sd(Temperatura_Max)
sd
## [1] 2.867531
# Coeficiente de Variación
cv <- round((sd / media) * 100, 2)
cv
## [1] 18.22

7.3 Indicadores de Forma

# Coeficiente deAsimetría
library("e1071")
asimetria <- skewness(Temperatura_Max, type = 2)
asimetria
## [1] 0.3905542
#Curtosis
curtosis <- kurtosis(Temperatura_Max)
curtosis
## [1] -0.5581832

8. Tabla resumen

tabla_indicadores <- data.frame(
  "Variable" = c("Temperatura Máxima"),
  "Rango" = c(paste0("[", min(Temperatura_Max), " ; ", max(Temperatura_Max), "]")),
  "X" = c(round(media, 0)),
  "Me" = c(round(mediana, 0)),
  "Mo" = c(paste(moda, collapse = ", ")),
  "V" = c(round(varianza, 2)),
  "Sd" = c(round(sd, 0)),
  "Cv" = c(cv),
  "As" = c(round(asimetria, 2)),
  "K" = c(round(curtosis, 2)),
  "Valores Atípicos" = ""
)

library(gt)

tabla_indicadores_gt <- tabla_indicadores %>% 
  gt() %>% 
  tab_header(
    title = md("Tabla N°3"),
    subtitle = md("*Indicadores estadísticos de la variable Temperatura Máxima*")
  ) %>% 
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>% 
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black",
    row.striping.include_table_body = TRUE,
    heading.border.bottom.color = "black"
  ) %>% 
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = Variable == "Temperatura Máxima"
    )
  )

tabla_indicadores_gt
Tabla N°3
Indicadores estadísticos de la variable Temperatura Máxima
Variable Rango X Me Mo V Sd Cv As K Valores.Atípicos
Temperatura Máxima [10.32 ; 23.79] 16 16 13 8.22 3 18.22 0.39 -0.56
Autor: Grupo 1