# ==================================================================
# UNIVERSIDAD CENTRAL DEL ECUADOR
# ANÁLISIS DE LONGITUD - SEDIMENTOS MARINOS
# AUTOR: Grace Vega
# FECHA: 07/12/2025
# ==================================================================

# 1. Establecer directorio de trabajo con TU ruta exacta
setwd("C:/Users/Grace/Favorites/Restudio (Estadistica)")

# 2. Verificar que el archivo esté visible
cat("Archivos en la carpeta:\n")
## Archivos en la carpeta:
print(list.files())
## [1] "Field.html"                             
## [2] "Field.R"                                
## [3] "longi.R"                                
## [4] "longi.spin.R"                           
## [5] "longi.spin.Rmd"                         
## [6] "Sedimentos Marinos.csv"                 
## [7] "Tabla_Frecuencias_FIELD_NO_COMPLETA.csv"
# 3. Leer el archivo CSV
datos <- read.csv("Sedimentos Marinos.csv", 
                  header = TRUE, 
                  sep = ";", 
                  dec = ".", 
                  stringsAsFactors = FALSE)

# 4. Limpiar y convertir LONGITUDE a número
# (Elimina cualquier carácter raro como guiones, espacios, etc.)
datos$LONGITUDE <- as.numeric(gsub("[^0-9.-]", "", datos$LONGITUDE))
## Warning: NAs introducidos por coerción
# 5. Eliminar NA
longitud <- na.omit(datos$LONGITUDE)

# 6. Estadísticos básicos
min_long <- min(longitud)
max_long <- max(longitud)
rango <- max_long - min_long
n <- length(longitud)

cat("\n=== RESUMEN DE LONGITUD ===\n")
## 
## === RESUMEN DE LONGITUD ===
cat("Observaciones válidas:", n, "\n")
## Observaciones válidas: 2254
cat("Longitud mínima:", min_long, "\n")
## Longitud mínima: -939.165
cat("Longitud máxima:", max_long, "\n")
## Longitud máxima: 857.729
cat("Rango:", rango, "\n")
## Rango: 1796.894
# 7. Calcular ancho de clase (máx 15 clases, múltiplos de 5 o 10)
if (ceiling(rango/10) <= 15) {
  d <- 10
} else if (ceiling(rango/5) <= 15) {
  d <- 5
} else {
  d <- ceiling(rango/15 / 5) * 5
}

cat("Ancho de clase seleccionado (d):", d, "\n\n")
## Ancho de clase seleccionado (d): 120
# 8. Crear intervalos alineados
inicio <- floor(min_long / d) * d
fin    <- ceiling(max_long / d) * d
breaks <- seq(inicio, fin, by = d)

# 9. Tabla de frecuencias
clases <- cut(longitud, breaks = breaks, include.lowest = TRUE, right = FALSE, dig.lab = 10)
ni <- table(clases)
hi <- prop.table(ni)

Ni_asc  <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_asc  <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))

# 10. Tabla final
tabla <- data.frame(
  Clases = names(ni),
  ni = as.numeric(ni),
  hi = round(as.numeric(hi), 4),
  Ni_asc = Ni_asc,
  Ni_desc = Ni_desc,
  Hi_asc = round(Hi_asc, 4),
  Hi_desc = round(Hi_desc, 4)
)

# Agregar fila de totales
tabla <- rbind(tabla, c("Total", sum(ni), 1.0000, sum(ni), sum(ni), 1.0000, 1.0000))

# Mostrar y ver tabla
print(tabla)
##                  Clases   ni     hi Ni_asc Ni_desc Hi_asc Hi_desc
## [-960,-840) [-960,-840)  225 0.0998    225    2254 0.0998       1
## [-840,-720) [-840,-720)  575 0.2551    800    2029 0.3549  0.9002
## [-720,-600) [-720,-600)  761 0.3376   1561    1454 0.6925  0.6451
## [-600,-480) [-600,-480)    0      0   1561     693 0.6925  0.3075
## [-480,-360) [-480,-360)    6 0.0027   1567     693 0.6952  0.3075
## [-360,-240) [-360,-240)   13 0.0058   1580     687  0.701  0.3048
## [-240,-120) [-240,-120)   14 0.0062   1594     674 0.7072   0.299
## [-120,0)       [-120,0)  522 0.2316   2116     660 0.9388  0.2928
## [0,120)         [0,120)   16 0.0071   2132     138 0.9459  0.0612
## [120,240)     [120,240)    0      0   2132     122 0.9459  0.0541
## [240,360)     [240,360)    0      0   2132     122 0.9459  0.0541
## [360,480)     [360,480)   92 0.0408   2224     122 0.9867  0.0541
## [480,600)     [480,600)   10 0.0044   2234      30 0.9911  0.0133
## [600,720)     [600,720)    2  9e-04   2236      20  0.992  0.0089
## [720,840)     [720,840)   13 0.0058   2249      18 0.9978   0.008
## [840,960]     [840,960]    5 0.0022   2254       5      1  0.0022
## 17                Total 2254      1   2254    2254      1       1
View(tabla)

# ==================================================================
# GRÁFICOS
# ==================================================================

# 1. Diagrama de barras
barplot(ni, 
        las = 2, 
        col = "steelblue",
        main = "Distribución de Longitudes - Frecuencia Absoluta (ni)",
        xlab = "Intervalos de Longitud",
        ylab = "Frecuencia Absoluta (ni)",
        cex.names = 0.8)

# 2. Ojiva Ascendente y Descendente (Absoluta)
lim_sup <- breaks[-1]  # límites superiores de los intervalos
plot(lim_sup, Ni_asc, 
     type = "o", col = "blue", pch = 16, lwd = 2,
     main = "Ojiva de Frecuencia Absoluta (Ni)",
     xlab = "Longitud", ylab = "Frecuencia Acumulada Absoluta",
     xlim = range(breaks))
lines(lim_sup, Ni_desc, type = "o", col = "red", pch = 16, lwd = 2)
legend("topleft", 
       legend = c("Ni Ascendente", "Ni Descendente"), 
       col = c("blue", "red"), pch = 16, lwd = 2, cex = 0.9)

# 3. Ojiva Relativa
plot(lim_sup, Hi_asc, 
     type = "o", col = "blue", pch = 16, lwd = 2,
     main = "Ojiva de Frecuencia Relativa (Hi)",
     xlab = "Longitud", ylab = "Frecuencia Acumulada Relativa",
     ylim = c(0, 1))
lines(lim_sup, Hi_desc, type = "o", col = "red", pch = 16, lwd = 2)
legend("bottomright", 
       legend = c("Hi Ascendente", "Hi Descendente"), 
       col = c("blue", "red"), pch = 16, lwd = 2, cex = 0.9)

cat("\n¡Análisis de LONGITUD completado con éxito!\n")
## 
## ¡Análisis de LONGITUD completado con éxito!