29 Abril 2025
La base de datos Sedimentología fue seleccionada de entre las bases de datos recomendadas por la profesora y proviene del Repositorio de Datos en GitHub: Datos Geología. Contiene información detallada sobre muestras de sedimentos recolectadas en distintos ríos, registrando variables como “Tamaño_Grano_mm”, “Velocidad_Flujo_m_s” y “Carga_Sedimentaria_mg_L”, entre otras.
Los ríos incluidos en la base de datos son: Amazonas, Danubio, Misisipi, Nilo y Yangtsé. Los tipos de sedimentos analizados en el estudio incluyen Arcilloso, Arenoso, Grava y Limoso. Las variables categóricas presentes en la base de datos son “Rio” y “Tipo_Sedimento”, mientras que las variables numéricas incluyen “Tamaño_Grano_mm”, “Velocidad_Flujo_m_s” y “Carga_Sedimentaria_mg_L”. Estas variables permiten analizar las características sedimentológicas y la dinámica fluvial en diferentes ubicaciones. En este informe, se realizará un análisis descriptivo de la base de datos y se aplicarán estimaciones estadísticas para comprender su estructura y comportamiento.
Importar la base de datos y verificar su estructura:
library(readr)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(skimr)
## Warning: package 'skimr' was built under R version 4.4.3
# Cargar datos
datos <- read_csv2("Base_Datos_Sedimentologia.csv")
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 100 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (2): Rio, Tipo_Sedimento
## dbl (4): ID_Muestra, Tamaño_Grano_mm, Velocidad_Flujo_m_s, Carga_Sedimentari...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Variables
numericas <- c("Tamaño_Grano_mm", "Velocidad_Flujo_m_s", "Carga_Sedimentaria_mg_L")
categoricas <- c("Rio", "Tipo_Sedimento")
# Conversión adecuada
datos <- datos %>% mutate(across(all_of(numericas), as.numeric))
# Ver estructura
skim(datos)
| Name | datos |
| Number of rows | 100 |
| Number of columns | 6 |
| _______________________ | |
| Column type frequency: | |
| character | 2 |
| numeric | 4 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Rio | 0 | 1 | 4 | 8 | 0 | 5 | 0 |
| Tipo_Sedimento | 0 | 1 | 5 | 9 | 0 | 4 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| ID_Muestra | 0 | 1 | 50.50 | 29.01 | 1.00 | 25.75 | 50.50 | 75.25 | 100.00 | ▇▇▇▇▇ |
| Tamaño_Grano_mm | 0 | 1 | 4.96 | 2.76 | 0.14 | 2.59 | 4.86 | 7.01 | 9.99 | ▆▆▇▇▆ |
| Velocidad_Flujo_m_s | 0 | 1 | 1.85 | 1.01 | 0.15 | 1.02 | 1.85 | 2.68 | 3.48 | ▇▇▆▇▇ |
| Carga_Sedimentaria_mg_L | 0 | 1 | 242.45 | 155.22 | 12.06 | 100.23 | 248.88 | 378.81 | 497.45 | ▇▅▅▅▆ |
##Estimaciones Estadísticas, Cálculos Previos #### Estracción de Datos Relevantes
# Cargar paquetes
library(dplyr)
library(readr)
library(tidyr)
# Cargar los datos
datos <- read_delim("Base_Datos_Sedimentologia.csv", delim = ";")
## Rows: 100 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (4): Rio, Tipo_Sedimento, Tamaño_Grano_mm, Velocidad_Flujo_m_s
## dbl (1): ID_Muestra
## num (1): Carga_Sedimentaria_mg_L
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Corregir formato de variables numéricas (cambiar comas por puntos)
datos <- datos %>%
mutate(
Tamaño_Grano_mm = as.numeric(gsub(",", ".", Tamaño_Grano_mm)),
Velocidad_Flujo_m_s = as.numeric(gsub(",", ".", Velocidad_Flujo_m_s)),
Carga_Sedimentaria_mg_L = as.numeric(gsub(",", ".", Carga_Sedimentaria_mg_L))
)
# Asegurar que las categóricas sean factores
datos <- datos %>%
mutate(across(where(is.character), as.factor))
# Definir variables
numericas <- c("Tamaño_Grano_mm", "Velocidad_Flujo_m_s", "Carga_Sedimentaria_mg_L")
categoricas <- c("Rio", "Tipo_Sedimento")
# -----------------------
# Crear tabla resumen para numéricas
resumen_numericas <- datos %>%
select(all_of(numericas)) %>%
summarise(across(
everything(),
list(
Media = ~mean(., na.rm = TRUE),
Mediana = ~median(., na.rm = TRUE),
Desviacion = ~sd(., na.rm = TRUE),
Varianza = ~var(., na.rm = TRUE),
Minimo = ~min(., na.rm = TRUE),
Maximo = ~max(., na.rm = TRUE),
n = ~sum(!is.na(.))
),
.names = "{.col}_{.fn}"
)) %>%
pivot_longer(cols = everything(),
names_to = c("Variable", ".value"),
names_sep = "_")
## Warning: Expected 2 pieces. Additional pieces discarded in 21 rows [1, 2, 3, 4, 5, 6, 7,
## 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...].
# -----------------------
# Crear tabla de proporciones para categóricas
resumen_categoricas <- lapply(categoricas, function(var) {
tabla <- datos %>%
count(!!sym(var)) %>%
mutate(Proporcion = n / sum(n)) %>%
mutate(Variable = var)
return(tabla)
}) %>% bind_rows()
# -----------------------
# Mostrar tablas
print("Resumen de Variables Numéricas:")
## [1] "Resumen de Variables Numéricas:"
print(resumen_numericas)
## # A tibble: 21 × 4
## Variable Grano Flujo Sedimentaria
## <chr> <dbl> <dbl> <dbl>
## 1 Tamaño 4.96 NA NA
## 2 Tamaño 4.86 NA NA
## 3 Tamaño 2.76 NA NA
## 4 Tamaño 7.64 NA NA
## 5 Tamaño 0.136 NA NA
## 6 Tamaño 9.99 NA NA
## 7 Tamaño 100 NA NA
## 8 Velocidad NA 1.85 NA
## 9 Velocidad NA 1.85 NA
## 10 Velocidad NA 1.01 NA
## # ℹ 11 more rows
print("Resumen de Variables Categóricas (Frecuencias y Proporciones):")
## [1] "Resumen de Variables Categóricas (Frecuencias y Proporciones):"
print(resumen_categoricas)
## # A tibble: 9 × 5
## Rio n Proporcion Variable Tipo_Sedimento
## <fct> <int> <dbl> <chr> <fct>
## 1 Amazonas 25 0.25 Rio <NA>
## 2 Danubio 15 0.15 Rio <NA>
## 3 Misisipi 16 0.16 Rio <NA>
## 4 Nilo 17 0.17 Rio <NA>
## 5 Yangtsé 27 0.27 Rio <NA>
## 6 <NA> 24 0.24 Tipo_Sedimento Arcilloso
## 7 <NA> 24 0.24 Tipo_Sedimento Arenoso
## 8 <NA> 24 0.24 Tipo_Sedimento Grava
## 9 <NA> 28 0.28 Tipo_Sedimento Limoso
El objetivo de este análisis es determinar si un sedimento puede clasificarse como grava, basándonos en el tamaño medio de grano como criterio. Según la clasificación granulométrica, si el tamaño medio de grano es mayor o igual a 2.0 mm, el sedimento se considera grava. En caso contrario, si el tamaño medio de grano es menor a 2.0 mm, no se considera grava. Para llevar a cabo esta clasificación, se obtuvo una muestra aleatoria de sedimento de tamaño \(n = 100\), con una media del tamaño de grano de \(\bar{x} = 4.9626\) mm y una desviación estándar muestral de \(s = 2.7632\) mm. Se utilizó un nivel de confianza del 95%, lo que implica un nivel de significancia de \(\alpha = 0.05\). Las hipótesis planteadas son: la hipótesis nula (\(H_0\)) establece que el tamaño medio de grano es menor a 2.0 mm (lo que indicaría que el sedimento no es grava), mientras que la hipótesis alternativa (\(H_1\)) establece que el tamaño medio de grano es mayor o igual a 2.0 mm (lo que indicaría que el sedimento sí es grava). Este es un caso de prueba de una cola (cola derecha), ya que nos interesa verificar si la media es mayor o igual a 2.0 mm.
# Extraer y limpiar los datos de la columna 'Tamaño_Grano_mm'
valores <- datos$Tamaño_Grano_mm
# Eliminar valores NA
valores <- valores[!is.na(valores)]
# Calcular estadísticos
media <- mean(valores)
desviacion <- sd(valores)
n <- length(valores)
# Mostrar resultados
cat("Estadísticos de la columna 'Tamaño_Grano_mm':\n")
## Estadísticos de la columna 'Tamaño_Grano_mm':
cat("Media:", media, "\n")
## Media: 4.962555
cat("Desviación estándar:", desviacion, "\n")
## Desviación estándar: 2.763216
cat("Tamaño de muestra:", n, "\n")
## Tamaño de muestra: 100
El objetivo es verificar si el sedimento puede clasificarse como grava. Para esto, planteamos las siguientes hipótesis:
μ < 2.0 mm. El
sedimento no es grava.μ ≥ 2.0
mm. El sedimento sí es grava.Este es un caso de prueba de una cola (cola derecha), ya que estamos interesados en verificar si la media del tamaño de grano es mayor o igual a 2.0 mm.
# Definir parámetros conocidos
mu0 <- 2.0 # Media bajo hipótesis nula
x_bar <- media # Media muestral
s <- desviacion # Desviación estándar muestral
n <- n # Tamaño de la muestra
alpha <- 0.05 # Nivel de significancia
# Calcular el estadístico de prueba t
t_calculado <- (x_bar - mu0) / (s / sqrt(n))
cat("Estadístico de prueba t calculado:", t_calculado, "\n")
## Estadístico de prueba t calculado: 10.7214
# Grados de libertad
gl <- n - 1
cat("Grados de libertad:", gl, "\n")
## Grados de libertad: 99
# Valor crítico para cola derecha
t_critico <- qt(1 - alpha, df = gl)
cat("Valor crítico t para alfa=0.05:", t_critico, "\n")
## Valor crítico t para alfa=0.05: 1.660391
# Cálculo del valor p
p_valor <- 1 - pt(t_calculado, df = gl)
cat("Valor p:", p_valor, "\n")
## Valor p: 0
##4. Verificaciones ###a) 📈 Gráfica de la distribución t
# Gráfica de la distribución t
library(ggplot2)
# Secuencia de valores para la curva
x <- seq(-4, 8, length = 200)
y <- dt(x, df = gl)
# Crear el gráfico
ggplot(data.frame(x, y), aes(x, y)) +
geom_line(color = "blue") +
geom_area(data = subset(data.frame(x, y), x > t_critico), aes(x=x, y=y), fill="red", alpha=0.5) +
geom_vline(xintercept = t_calculado, color="black", linetype="dashed") +
labs(title = "Distribución t Student con Región Crítica (cola derecha)",
x = "t", y = "Densidad") +
theme_minimal()
###b) 📏 Regla de Decisión
if (t_calculado > t_critico) {
cat("Decisión: Se rechaza H₀.\n")
} else {
cat("Decisión: No se rechaza H₀.\n")
}
## Decisión: Se rechaza H₀.
###c) 🧮 P-Value
if (p_valor < alpha) {
cat("Decisión basada en p-valor: Se rechaza H₀.\n")
} else {
cat("Decisión basada en p-valor: No se rechaza H₀.\n")
}
## Decisión basada en p-valor: Se rechaza H₀.
###5. 📚 Conclusiones e Interpretación
if (t_calculado > t_critico & p_valor < alpha) {
cat("Conclusión Final: Hay suficiente evidencia para afirmar que el sedimento puede clasificarse como grava.\n")
} else {
cat("Conclusión Final: No hay suficiente evidencia para afirmar que el sedimento pueda clasificarse como grava.\n")
}
## Conclusión Final: Hay suficiente evidencia para afirmar que el sedimento puede clasificarse como grava.