# ==================================================================
# 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!