# PASO 1: LECTURA Y PREPARACI??N

tablap <- read.csv("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio/tablap.csv",
                   header=TRUE,
                   sep=";",
                   dec=".")

# Define los niveles de complejidad (0 al 7) para el orden
Niveles_Complejidad <- c(0, 1, 2, 3, 4, 5, 6, 7)

# Crea la variable factor ordenado
Complejidad_Factor <- factor(
  tablap$Complexity.of.the.casing.structure,
  levels = Niveles_Complejidad,
  ordered = TRUE
)


# =================================================================
# PASO 2: C??LCULO DE FRECUENCIAS (ni y hi porcentual)
# =================================================================

# C??lculo de Frecuencia Absoluta (ni)
ni <- table(Complejidad_Factor)
total_ni <- sum(ni)

# C??lculo de Frecuencia Porcentual (guardada en hi)
hi <- (ni / total_ni) * 100

# Definici??n del total de frecuencia porcentual
total_hi <- 100 

# =================================================================
# PASO 3: CREACI??N DE LA TDF SIMPLE CON TOTALES (CON NUMERO DE FILA)
# =================================================================

# 1. Extrae los niveles de complejidad y crea la TDF base
Nivel <- names(ni)
TDF_Complejidad <- data.frame(
  Nivel = Nivel,
  ni = as.numeric(ni),
  hi = as.numeric(hi)
)

# 2. A??ADIR LA COLUMNA DE ??NDICE (Nro)
# La secuencia va desde 1 hasta el n??mero de filas de la TDF
TDF_Complejidad$Nro <- 1:nrow(TDF_Complejidad)


# 3. CREACI??N DE LA FILA DE TOTALES
Fila_Total_Simple <- data.frame(
  Nivel = "Total",
  ni = total_ni,
  hi = total_hi
)
# Agregamos el ??ndice de fila al Total (un n??mero m??s que las filas de datos)
Fila_Total_Simple$Nro <- nrow(TDF_Complejidad) + 1 


# 4. Combina la tabla de frecuencias con la fila de totales
TDF_Complejidad_FINAL <- rbind(TDF_Complejidad, Fila_Total_Simple)
# Reordenar columnas para que Nro sea la primera
TDF_Complejidad_FINAL <- TDF_Complejidad_FINAL[, c("Nro", "Nivel", "ni", "hi")] 


# Muestra la TDF final con los totales y el Nro de fila
print(TDF_Complejidad_FINAL)
##   Nro Nivel    ni           hi
## 1   1     0  2476  19.71180638
## 2   2     1    33   0.26271794
## 3   3     2  5383  42.85486824
## 4   4     3  4138  32.94323700
## 5   5     4   503   4.00445824
## 6   6     5    25   0.19902874
## 7   7     6     2   0.01592230
## 8   8     7     1   0.00796115
## 9   9 Total 12561 100.00000000
# =================================================================
# PASO 4: APLICAR FORMATO GT A LA TDF SIMPLE (AJUSTADO PARA Nro)
# =================================================================

library(gt) 

tabla_Complejidad_Simple <- TDF_Complejidad_FINAL %>% 
  gt() %>% 
  
  # RENOMBRAR COLUMNAS (Incluyendo la columna Nro)
  cols_label(
    Nro = md("**Nro.**"), 
    Nivel = md("**Nivel**"),
    ni = md("$$n_i$$"),
    hi = md("$$h_i$$")
  ) %>%
  
  # DAR FORMATO NUM??RICO
  fmt_number(
    columns = hi, 
    decimals = 5
  ) %>%
  
  # OCULTAR EL Nro DE FILA EN EL TOTAL (Usando la funci??n moderna sub_missing)
  sub_missing(
    columns = Nro,
    rows = Nivel == "Total",
    missing_text = ""
  ) %>%
  
  # A??ADIR ENCABEZADOS Y SUBT??TULO
  tab_header(
    title = md("**Tabla Nro. 1**"),
    subtitle = md("**Tabla de distribuci??n de Frecuencias simples** de la Complejidad de la Estructura de Revestimiento")
  ) %>% 
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%
  
  # APLICAR ESTILO DE TEXTO (NEGRITA) A LA FILA TOTAL
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = Nivel == "Total"
    )
  ) %>%
  
  # APLICAR ESTILOS GENERALES (BORDES, ETC.)
  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_Complejidad_Simple
Tabla Nro. 1
Tabla de distribuci??n de Frecuencias simples de la Complejidad de la Estructura de Revestimiento
Nro. Nivel nin_i hih_i
1 0 2476 19.71181
2 1 33 0.26272
3 2 5383 42.85487
4 3 4138 32.94324
5 4 503 4.00446
6 5 25 0.19903
7 6 2 0.01592
8 7 1 0.00796
9 Total 12561 100.00000
Autor: Grupo 1
#------------------------------------------------------------

# =================================================================
# GR??FICO 1: DIAGRAMA DE BARRAS LOCAL (ni)
# =================================================================

# Usamos la paleta de grises que definimos anteriormente
Colores_Gris <- gray.colors(n = nrow(TDF_Complejidad), start = 0.3, end = 0.9)

barplot(
  TDF_Complejidad$ni,
  main = "Gr??fica 1: Diagrama de Barras Local de Frecuencia Absoluta (ni)",
  xlab = "Nivel de Complejidad", 
  ylab = "Frecuencia Absoluta (ni)", 
  names.arg = TDF_Complejidad$Nivel, 
  las = 1, 
  col = Colores_Gris
)

#---------------------------------------------------------------
# =================================================================
# GR??FICO 2: DIAGRAMA DE BARRAS GLOBAL (ni)
# =================================================================

barplot(
  TDF_Complejidad$ni,
  main = "Gr??fica 2: Diagrama de Barras Global de Frecuencia Absoluta (ni)",
  xlab = "Nivel de Complejidad", 
  ylab = "Frecuencia Absoluta (ni)", 
  names.arg = TDF_Complejidad$Nivel, 
  las = 1, 
  col = Colores_Gris,
  # El par??metro 'ylim' fuerza el l??mite superior del eje Y al total de la muestra.
  ylim = c(0, total_ni) 
)

#----------------------------------------------------------------------
# =================================================================
# GR??FICO 3: DIAGRAMA DE BARRAS LOCAL (hi)
# =================================================================

barplot(
  TDF_Complejidad$hi,
  main = "Gr??fica 3: Diagrama de Barras Local de Frecuencia Porcentual (hi)",
  xlab = "Nivel de Complejidad", 
  ylab = "Frecuencia Porcentual (%)", 
  names.arg = TDF_Complejidad$Nivel, 
  las = 1, 
  col = Colores_Gris
)

#----------------------------------------------------------------
# =================================================================
# GR??FICO 4: DIAGRAMA DE BARRAS GLOBAL (hi)
# =================================================================

barplot(
  TDF_Complejidad$hi,
  main = "Gr??fica 4: Diagrama de Barras Global de Frecuencia Porcentual (hi)",
  xlab = "Nivel de Complejidad", 
  ylab = "Frecuencia Porcentual (%)", 
  names.arg = TDF_Complejidad$Nivel, 
  las = 1, 
  col = Colores_Gris,
  # El par??metro 'ylim' fuerza el l??mite superior del eje Y a 100%.
  ylim = c(0, 100) 
)

#------------------------------------------------------------------
# =================================================================
# GR??FICA 6: DIAGRAMA CIRCULAR (hi) - ESCALA DE GRISES
# =================================================================

# 1. Crear una paleta de escala de grises
# Usamos gray.colors para generar un tono distinto de gris para cada nivel
colores_grises <- gray.colors(
  n = length(TDF_Complejidad$hi),
  start = 0.8, # Gris claro
  end = 0.2    # Gris oscuro
)

# 2. Generar etiquetas con porcentaje
# Usamos TDF_Complejidad$hi (la frecuencia porcentual) y redondeamos a 2 decimales
etiquetas <- paste(round(TDF_Complejidad$hi, 2), "%", sep="")

# 3. Dibujar el gr??fico circular (con radius = 1.0 para maximizar el tama??o)
pie(TDF_Complejidad$hi,
    radius = 1.0, # <--- ??Aumentado el tama??o del diagrama!
    col = blues9,
    main = "Gr??fica 6: Distribuci??n Porcentual de la Complejidad de la Estructura de Revestimiento (en Porcentaje)",
    labels = etiquetas,
    cex.main = 1.2 # Aumentar el tama??o del t??tulo principal si es necesario
)

# 4. Leyenda
legend("bottomright",
       legend = paste("Nivel", TDF_Complejidad$Nivel),
       cex = 0.8,
       fill = colores_grises, # Usamos la paleta de grises
       title = "Nivel")