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 incluyen Arcilloso, Arenoso, Grava y Limoso. Las variables categóricas presentes son “Rio” y “Tipo_Sedimento”, mientras que las numéricas incluyen “Tamaño_Grano_mm”, “Velocidad_Flujo_m_s” y “Carga_Sedimentaria_mg_L”.
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
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.
numericas <- c("Tamaño_Grano_mm", "Velocidad_Flujo_m_s", "Carga_Sedimentaria_mg_L")
categoricas <- c("Rio", "Tipo_Sedimento")
datos <- datos %>% mutate(across(all_of(numericas), as.numeric))
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 | ▇▅▅▅▆ |
library(dplyr)
library(readr)
library(tidyr)
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.
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))
) %>%
mutate(across(where(is.character), as.factor))
numericas <- c("Tamaño_Grano_mm", "Velocidad_Flujo_m_s", "Carga_Sedimentaria_mg_L")
categoricas <- c("Rio", "Tipo_Sedimento")
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, ...].
resumen_categoricas <- lapply(categoricas, function(var) {
tabla <- datos %>%
count(!!sym(var)) %>%
mutate(Proporcion = n / sum(n)) %>%
mutate(Variable = var)
return(tabla)
}) %>% bind_rows()
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_O\)) establece que el tamaño medio de grano es menor a 2.0 mm (1o 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 (1o 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.
valores <- datos$Tamaño_Grano_mm
valores <- valores[!is.na(valores)]
media <- mean(valores)
desviacion <- sd(valores)
n <- length(valores)
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
(Hipótesis nula y alternativa: μ < 2.0 vs μ ≥ 2.0)
mu0 <- 2.0
x_bar <- media
s <- desviacion
n <- n
alpha <- 0.05
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
gl <- n - 1
cat("Grados de libertad:", gl, "\n")
## Grados de libertad: 99
t_critico <- qt(1 - alpha, df = gl)
cat("Valor crítico t:", t_critico, "\n")
## Valor crítico t: 1.660391
p_valor <- 1 - pt(t_calculado, df = gl)
cat("Valor p:", p_valor, "\n")
## Valor p: 0
library(ggplot2)
x <- seq(-4, 8, length = 200)
y <- dt(x, df = gl)
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()
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₀.
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₀.
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.
Debido a que la media de tamaño es mayor a los 2mm con un 95% de certeza, se puede afirmar que la poblacion entera tiende a ser grava.
##Proporción
En otro muestreo diferente, se desea verificar si la proporción de sedimentos de tipo grava es diferente actualmente al 20% del total de sedimentos analizados. Ya que hay una tendendencia histórica a que 1 de cada 5 sedimentos sea grava.
Hipótesis: - H₀: p = 0.20 - H₁: p ≠ 0.20
Datos: - Nivel de significancia: α = 0.05 - Tamaño de muestra: n = 100 - Número de sedimentos grava: x = 24 - Proporción observada: p = 0.24
n <- 100
x <- 24
p_observado <- 0.24
p_hipotetico <- 0.20
alpha <- 0.05
cat("Proporción observada (p):", p_observado, "\n")
## Proporción observada (p): 0.24
cat("Proporción hipotética (p₀):", p_hipotetico, "\n")
## Proporción hipotética (p₀): 0.2
cat("Tamaño de muestra (n):", n, "\n")
## Tamaño de muestra (n): 100
(Hipótesis nula y alternativa: p = 0.20 vs p ≠ 0.20)
# Estadístico Z
z_calculado <- (p_observado - p_hipotetico) / sqrt(p_hipotetico * (1 - p_hipotetico) / n)
cat("Estadístico de prueba Z calculado:", z_calculado, "\n")
## Estadístico de prueba Z calculado: 1
# Valor crítico para prueba bilateral
z_critico <- qnorm(1 - alpha/2)
cat("Valor crítico Z:", z_critico, "\n")
## Valor crítico Z: 1.959964
# p-valor bilateral
p_valor <- 2 * (1 - pnorm(abs(z_calculado)))
cat("Valor p:", p_valor, "\n")
## Valor p: 0.3173105
# Parámetros
alpha <- 0.05
z_calculado <- 1.00 # Estadístico Z que calculaste
z_critico <- qnorm(1 - alpha/2)
# Librerías
library(ggplot2)
# Crear datos
x_seq <- seq(-4, 4, length = 1000)
y_seq <- dnorm(x_seq)
df <- data.frame(x = x_seq, y = y_seq)
# Regiones
df$region <- "Centro"
df$region[df$x < -z_critico] <- "Cola Izquierda"
df$region[df$x > z_critico] <- "Cola Derecha"
# Graficar
ggplot(df, aes(x = x, y = y)) +
geom_line(color = "blue") +
geom_area(data = subset(df, region != "Centro"),
aes(fill = region), alpha = 0.5) +
geom_vline(xintercept = z_calculado, linetype = "dashed", color = "black") +
scale_fill_manual(values = c("Cola Izquierda" = "red", "Cola Derecha" = "red")) +
labs(
title = "Distribución Normal Estándar con Regiones Críticas (Bilateral)",
x = "Z", y = "Densidad"
) +
theme_minimal()
if (abs(z_calculado) > z_critico) {
cat("Decisión: Se rechaza H₀.\n")
} else {
cat("Decisión: No se rechaza H₀.\n")
}
## Decisión: No se rechaza H₀.
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: No se rechaza H₀.
if (abs(z_calculado) > z_critico & p_valor < alpha) {
cat("Conclusión Final: Hay suficiente evidencia para afirmar que la proporción de grava es diferente del 20%.\n")
} else {
cat("Conclusión Final: No hay suficiente evidencia para afirmar que la proporción de grava sea diferente del 20%.\n")
}
## Conclusión Final: No hay suficiente evidencia para afirmar que la proporción de grava sea diferente del 20%.
Con base en los resultados de la prueba de hipótesis, no hay suficiente evidencia estadística para afirmar que la proporción de sedimentos de tipo grava sea diferente del 20% históricamente observado. Aunque la proporción observada en la muestra fue del 24%, esta diferencia no es significativa. Por lo tanto, no se puede rechazar que la proporción actual se diferente a la histórica del 20%.
Se desea verificar si la varianza de la velocidad del flujo en los ríos tropicales ha cambiado respecto al valor histórico, que es σ²₀ = 1.5 (m/s)². Se tiene una muestra de 30 observaciones con varianza muestral s² = 0.95 (m/s)².
Hipótesis: - H₀: σ² = 1.5 - H₁: σ² ≠ 1.5
Datos: - Nivel de significancia: α = 0.05 - Tamaño de muestra: n = 30 - Varianza muestral: s² = 0.95 - Varianza hipotética: σ²₀ = 1.5
n <- 30
s2_muestra <- 0.95
s2_hipotetica <- 1.5
alpha <- 0.05
cat("Varianza muestral (s²):", s2_muestra, "\n")
## Varianza muestral (s²): 0.95
cat("Varianza hipotética (σ²₀):", s2_hipotetica, "\n")
## Varianza hipotética (σ²₀): 1.5
cat("Tamaño de muestra (n):", n, "\n")
## Tamaño de muestra (n): 30
(Hipótesis nula y alternativa: σ² = 1.5 vs σ² ≠ 1.5)
# Estadístico Chi-cuadrado
chi2_calculado <- (n - 1) * s2_muestra / s2_hipotetica
cat("Estadístico de prueba Chi² calculado:", chi2_calculado, "\n")
## Estadístico de prueba Chi² calculado: 18.36667
# Valores críticos
chi2_critico_inf <- qchisq(alpha / 2, df = n - 1)
chi2_critico_sup <- qchisq(1 - alpha / 2, df = n - 1)
cat("Valor crítico inferior:", chi2_critico_inf, "\n")
## Valor crítico inferior: 16.04707
cat("Valor crítico superior:", chi2_critico_sup, "\n")
## Valor crítico superior: 45.72229
# p-valor
p_valor <- 2 * min(
pchisq(chi2_calculado, df = n - 1),
1 - pchisq(chi2_calculado, df = n - 1)
)
cat("Valor p:", p_valor, "\n")
## Valor p: 0.1270894
# Librerías
library(ggplot2)
# Crear datos
x_vals <- seq(0, 60, length.out = 1000)
dens_vals <- dchisq(x_vals, df = n - 1)
df_plot <- data.frame(x = x_vals, y = dens_vals)
# Regiones
df_plot$region <- "Centro"
df_plot$region[df_plot$x < chi2_critico_inf] <- "Cola Izquierda"
df_plot$region[df_plot$x > chi2_critico_sup] <- "Cola Derecha"
# Graficar
ggplot(df_plot, aes(x = x, y = y)) +
geom_line(color = "blue") +
geom_area(data = subset(df_plot, region != "Centro"),
aes(fill = region), alpha = 0.5) +
geom_vline(xintercept = chi2_calculado, linetype = "dashed", color = "black") +
scale_fill_manual(values = c("Cola Izquierda" = "red", "Cola Derecha" = "red")) +
labs(
title = "Distribución Chi-cuadrado con Regiones Críticas (Bilateral)",
x = "Chi²", y = "Densidad"
) +
theme_minimal()
if (chi2_calculado < chi2_critico_inf || chi2_calculado > chi2_critico_sup) {
cat("Decisión: Se rechaza H₀.\n")
} else {
cat("Decisión: No se rechaza H₀.\n")
}
## Decisión: No se rechaza H₀.
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: No se rechaza H₀.
if (chi2_calculado > chi2_critico_inf & chi2_calculado < chi2_critico_sup & p_valor > alpha) {
cat("Conclusión Final: No hay suficiente evidencia para afirmar que la varianza del flujo ha cambiado respecto al valor histórico.\n")
} else {
cat("Conclusión Final: Hay evidencia suficiente para afirmar que la varianza del flujo ha cambiado respecto al valor histórico.\n")
}
## Conclusión Final: No hay suficiente evidencia para afirmar que la varianza del flujo ha cambiado respecto al valor histórico.
##Conclusion Dado que el valor del estadístico (18.37) está entre los valores críticos (16.05 y 45.72), y el p-valor (0.127) es mayor que el nivel de significancia (0.05), no se rechaza la hipótesis nula. La varianza del flujo en los ríos tropicales no ha cambiado significativamente respecto al valor histórico.