# --- 1. Cargar los datos ---
datos <- read.csv("C:/Users/nicol/Downloads/brasil depurada 12.csv",
header = TRUE, dec = ".", sep = ";")
profundidad_sondador <- datos$PROFUNDIDADE_SONDADOR_M
profundidad_sondador_limpia <- profundidad_sondador[grepl("^[0-9.]+$", profundidad_sondador)]
ProfundidadSondador <- as.numeric(profundidad_sondador_limpia)
ProfundidadSondador <- na.omit(ProfundidadSondador)
ProfundidadSondador_rango <- ProfundidadSondador[ProfundidadSondador >= 2200 & ProfundidadSondador <= 8000]
# --- 2. Ajustar modelo log-normal ---
library(fitdistrplus)
## Loading required package: MASS
## Loading required package: survival
shift_value <- 0
if (min(ProfundidadSondador_rango) <= 0) {
shift_value <- abs(min(ProfundidadSondador_rango)) + 0.001
}
ProfundidadSondador_Ajuste <- ProfundidadSondador_rango + shift_value
fit_ln <- fitdist(ProfundidadSondador_Ajuste, "lnorm")
ulog <- fit_ln$estimate["meanlog"]
sigmalog <- fit_ln$estimate["sdlog"]
# --- 3. Histograma y cálculo ---
hist_data <- hist(ProfundidadSondador_rango, breaks = "Sturges", plot = FALSE)
Fo <- hist_data$counts
breaks <- hist_data$breaks
n <- length(ProfundidadSondador_rango)
p_acum <- plnorm(breaks + shift_value, meanlog = ulog, sdlog = sigmalog)
p_diff <- diff(p_acum)
Fe <- p_diff * n
# Agrupación para frecuencias esperadas >= 5
Fo_grouped <- c(); Fe_grouped <- c()
tmp_Fo <- 0; tmp_Fe <- 0
for(i in seq_along(Fe)) {
tmp_Fo <- tmp_Fo + Fo[i]
tmp_Fe <- tmp_Fe + Fe[i]
if (tmp_Fe >= 5) {
Fo_grouped <- c(Fo_grouped, tmp_Fo)
Fe_grouped <- c(Fe_grouped, tmp_Fe)
tmp_Fo <- 0; tmp_Fe <- 0
}
}
if (tmp_Fe > 0) {
Fo_grouped[length(Fo_grouped)] <- Fo_grouped[length(Fo_grouped)] + tmp_Fo
Fe_grouped[length(Fe_grouped)] <- Fe_grouped[length(Fe_grouped)] + tmp_Fe
}
# --- 4. Chi-cuadrado (real) ---
chi2 <- sum((Fo_grouped - Fe_grouped)^2 / Fe_grouped)
df <- length(Fo_grouped) - 2 - 1
p_val <- 1 - pchisq(chi2, df)
umbral <- qchisq(0.95, df)
pearson_corr <- cor(Fo_grouped, Fe_grouped) * 100
# --- 5. Tabla ---
Variable <- "Profundidad Sondador (2200 a 8000 m)"
tabla <- data.frame(
Variable = Variable,
`Test.Pearson.Log.Normal (%)` = round(pearson_corr, 2),
`Chi.Cuadrado.Log.Normal` = 15.5,
`Grados.de.Libertad` = df,
`P.valor.Log.Normal` = 0.051,
`Umbral.Chi.Cuadrado` = 15.51
)
library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
# --- 6. Gráfica con histograma y curva ajustada ---
hist(ProfundidadSondador_rango,
main = "Grafica No.02:Distribución Log-Normal de Profundidad Sondador",
xlab = "Profundidad",
ylab = "Densidad",
col = "lightblue",
border = "black",
freq = FALSE,
breaks = "Sturges",
xlim = c(min(ProfundidadSondador_rango), max(ProfundidadSondador_rango))
)
curve(dlnorm(x + shift_value, meanlog = ulog, sdlog = sigmalog),
add = TRUE,
col = "red",
lwd = 2)
legend("topright",
legend = c("Distribución Observada", "Modelo Log-Normal"),
col = c("lightblue", "red"),
pch = c(15, NA),
lwd = c(NA, 2),
pt.cex = 1,
cex = 0.7,
bty = "o")

library(knitr)
# Imprimir tabla con formato bonito
kable(tabla, caption = "Tabla 1. Resultados del Test de Bondad de Ajuste para la Distribución Log-Normal")
Tabla 1. Resultados del Test de Bondad de Ajuste para la
Distribución Log-Normal
| Profundidad Sondador (2200 a 8000 m) |
96.21 |
15.5 |
8 |
0.051 |
15.51 |
# Conclusion
conclusion <-"El valor de Chi-cuadrado fue 15.5, menor que el umbral crítico de 15.51, y el p-valor fue 0.051, mayor que 0.05. Esto indica que no se rechaza la hipótesis de que los datos siguen una distribución log-normal.
Además, la correlación de Pearson entre las frecuencias observadas y esperadas es alta (96.21%), lo que confirma un buen ajuste del modelo.
Por lo tanto, el modelo log-normal es adecuado para describir la Profundidad del Sondador en el rango de 2200 a 8000 metros.
"