5 de Junio 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:
# Cargar la base de datos detectando automáticamente el delimitador
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.
# Ver estructura de los datos
str(datos)
## spc_tbl_ [100 × 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ID_Muestra : num [1:100] 1 2 3 4 5 6 7 8 9 10 ...
## $ Rio : chr [1:100] "Misisipi" "Misisipi" "Amazonas" "Yangtsé" ...
## $ Tipo_Sedimento : chr [1:100] "Limoso" "Grava" "Arenoso" "Arenoso" ...
## $ Tamaño_Grano_mm : chr [1:100] "6,723205249" "2,52663798" "3,456780418" "8,609936299" ...
## $ Velocidad_Flujo_m_s : chr [1:100] "2,171496912" "1,825200682" "0,857121939" "3,353125243" ...
## $ Carga_Sedimentaria_mg_L: num [1:100] 3.15e+09 5.15e+09 1.81e+09 7.50e+09 1.21e+09 ...
## - attr(*, "spec")=
## .. cols(
## .. ID_Muestra = col_double(),
## .. Rio = col_character(),
## .. Tipo_Sedimento = col_character(),
## .. Tamaño_Grano_mm = col_character(),
## .. Velocidad_Flujo_m_s = col_character(),
## .. Carga_Sedimentaria_mg_L = col_number()
## .. )
## - attr(*, "problems")=<externalptr>
skim(datos)
| Name | datos |
| Number of rows | 100 |
| Number of columns | 6 |
| _______________________ | |
| Column type frequency: | |
| character | 4 |
| numeric | 2 |
| ________________________ | |
| 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 |
| Tamaño_Grano_mm | 0 | 1 | 9 | 11 | 0 | 100 | 0 |
| Velocidad_Flujo_m_s | 0 | 1 | 9 | 11 | 0 | 100 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| ID_Muestra | 0 | 1 | 50.5 | 2.901000e+01 | 1 | 2.575000e+01 | 50.5 | 7.525000e+01 | 100 | ▇▇▇▇▇ |
| Carga_Sedimentaria_mg_L | 0 | 1 | 3293338826.7 | 1.973326e+09 | 33991018 | 1.886917e+09 | 3148371318.5 | 4.524924e+09 | 9833592572 | ▆▇▆▁▁ |
# Identificar variables numéricas y categóricas
datos <- datos %>% 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")
list("Variables Numéricas" = numericas, "Variables Categóricas" = categoricas)
## $`Variables Numéricas`
## [1] "Tamaño_Grano_mm" "Velocidad_Flujo_m_s"
## [3] "Carga_Sedimentaria_mg_L"
##
## $`Variables Categóricas`
## [1] "Rio" "Tipo_Sedimento"
skim(datos)
| Name | datos |
| Number of rows | 100 |
| Number of columns | 6 |
| _______________________ | |
| Column type frequency: | |
| factor | 4 |
| numeric | 2 |
| ________________________ | |
| Group variables | None |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| Rio | 0 | 1 | FALSE | 5 | Yan: 27, Ama: 25, Nil: 17, Mis: 16 |
| Tipo_Sedimento | 0 | 1 | FALSE | 4 | Lim: 28, Arc: 24, Are: 24, Gra: 24 |
| Tamaño_Grano_mm | 0 | 1 | FALSE | 100 | 0,1: 1, 0,3: 1, 0,4: 1, 0,4: 1 |
| Velocidad_Flujo_m_s | 0 | 1 | FALSE | 100 | 0,1: 1, 0,1: 1, 0,1: 1, 0,2: 1 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| ID_Muestra | 0 | 1 | 50.5 | 2.901000e+01 | 1 | 2.575000e+01 | 50.5 | 7.525000e+01 | 100 | ▇▇▇▇▇ |
| Carga_Sedimentaria_mg_L | 0 | 1 | 3293338826.7 | 1.973326e+09 | 33991018 | 1.886917e+09 | 3148371318.5 | 4.524924e+09 | 9833592572 | ▆▇▆▁▁ |
lapply(datos[categoricas], table)
## $Rio
##
## Amazonas Danubio Misisipi Nilo Yangtsé
## 25 15 16 17 27
##
## $Tipo_Sedimento
##
## Arcilloso Arenoso Grava Limoso
## 24 24 24 28
library(dplyr)
library(ggplot2)
library(stringr)
# Convertir los valores con coma a números
datos <- datos %>%
mutate(Tamaño_Grano_mm = as.numeric(str_replace(Tamaño_Grano_mm, ",", ".")))
# Histograma con colores tierra personalizados
datos %>%
ggplot(aes(x = Tamaño_Grano_mm, fill = Rio)) +
geom_histogram(bins = 10, alpha = 0.85, color = "black") +
scale_fill_manual(values = c("sandybrown", "wheat", "peru", "tan", "burlywood")) +
facet_wrap(~ Rio, scales = "free_y") +
theme_minimal() +
theme(
legend.position = "none",
strip.background = element_rect(fill = "burlywood", color = NA),
strip.text = element_text(face = "bold", color = "black"),
panel.grid.minor = element_blank(),
panel.grid.major = element_line(color = "gray85")
) +
labs(title = "Histogramas del Tamaño de Grano por Río",
x = "Tamaño de grano (mm)",
y = "Frecuencia")
## Histogramas (Distribución de Variables Numéricas)
-> La gráfica presenta la distribución del tamaño de grano (Milímetros) de sedimentos provenientes de cinco ríos: Amazonas, Danubio, Misisipi, Nilo y Yangtsé. Los tamaños de grano se distribuyen entre 0 y 10 mm, y cada barra muestra la frecuencia de ocurrencia en distintos intervalos, diferenciando los ríos mediante colores. Se observa una clara dominancia del Amazonas, representado por el azul brillante, en todos los intervalos, lo que indica que transporta una gran cantidad de sedimentos con una amplia variedad granulométrica. El Danubio ocupa el segundo lugar en frecuencia, especialmente entre 0 y 7.5 mm, con un pico entre 6 y 7.5 mm. Le sigue el Misisipi, con mayor contribución entre 2 y 4 mm, mientras que el Nilo muestra una presencia destacada entre 4 y 6 mm. El Yangtsé, aunque tiene menor frecuencia a nivel general, aparece de forma dispersa en casi todos los intervalos, lo que sugiere cierta diversidad en los tamaños de grano.
library(dplyr)
library(ggplot2)
library(stringr)
# Asegurarse de que los datos estén en el formato correcto
datos <- datos %>%
mutate(Velocidad_Flujo_m_s = as.numeric(str_replace(Velocidad_Flujo_m_s, ",", ".")))
# Gráfico separado por cada río
datos %>%
ggplot(aes(x = Velocidad_Flujo_m_s, fill = Rio)) +
geom_histogram(bins = 10, alpha = 0.8, color = "black") +
scale_fill_manual(values = c("cyan", "lightblue", "navy", "deepskyblue", "steelblue")) +
facet_wrap(~ Rio, scales = "free_y") +
theme_minimal() +
theme(legend.position = "none") + # Quita la leyenda porque ya se separan por facetas
labs(title = "Histogramas de Velocidad de Flujo por Río",
x = "Velocidad del flujo (m/s)",
y = "Frecuencia")
2. Distribución de la Velocidad del Flujo por Río
(Análisis de cómo varía la velocidad del flujo entre los ríos y si se
observan diferencias notables.)
-> La gráfica presenta la frecuencia de observaciones de velocidad de flujo del agua (m/s) para sedimentos de cinco ríos: Amazonas, Danubio, Misisipi, Nilo y Yangtsé. Las velocidades están distribuidas principalmente entre 0 y 3.5 m/s. Nuevamente, el Amazonas se destaca por dominar en casi todos los intervalos, encabezando la parte superior de cada barra del intervalo 1.5 a 3.5 m/s, lo que su capacidad para movilizar sedimentos en flujos moderados a flujos fuertes. El Yangtsé se encuentra presente en casi todos los intervalos, especialmente en los más altos (> 2 m/s), lo que sugiere que transporta sedimentos bajo condiciones de mayor energía fluvial. Por otro lado, el Misisipi predomina en todos los intervalos, con una frecuencia intermedia, lo que podría sugerir que también presenta cierta variabilidad para movilizar sedimentos de flujos > 0.5 m/s y > 3 m/s. Por sunn parte, el Danubio tiene mayor representación en velocidades bajas (< 2 m/s), lo que apunta a una dinámica fluvial más lenta y con menos energía. Por ultimo, el Nilo muestra una presencia más dispersa, lo que sugiere una menor frecuencia de flujos extremos.
library(dplyr)
library(ggplot2)
# Histograma de Carga Sedimentaria por Río con colores tierra
datos %>%
ggplot(aes(x = Carga_Sedimentaria_mg_L, fill = Rio)) +
geom_histogram(bins = 10, alpha = 0.85, color = "black") +
scale_fill_manual(values = c("sandybrown", "wheat", "peru", "tan", "burlywood")) +
facet_wrap(~ Rio, scales = "free_y") +
theme_minimal() +
theme(
legend.position = "none",
strip.background = element_rect(fill = "burlywood", color = NA),
strip.text = element_text(face = "bold", color = "black"),
panel.grid.minor = element_blank(),
panel.grid.major = element_line(color = "gray85")
) +
labs(title = "Histogramas de Carga Sedimentaria por Río",
x = "Carga sedimentaria (mg/L)",
y = "Frecuencia")
3. Distribución de la Carga Sedimentaria por Río
(Explicación sobre la dispersión y concentración de la carga
sedimentaria en los distintos ríos.)
-> La gráfica muestra la carga sedimentaria (mg/L) de cinco ríos: Amazonas, Danubio, Misisipi, Nilo y Yangtsé. La mayoría de las observaciones se concentran entre 0 y 5×10⁹ mg/L, lo que indica que este rango de carga es el más común entre todos los datos. El pico de frecuencia se encuentra alrededor de los 4.5×10⁹ mg/L, donde el Amazonas tiene una fuerte presencia, que sugiere que este río transporta grandes volúmenes de sedimento en suspensión. El Yangtsé también contribuye significativamente a lo largo de todo el rango, con una presencia especialmente marcada en los intervalos medios (2.5×10⁹ a 5×10⁹ mg/L). El Danubio y el Misisipi tienen participaciones más notables en los rangos bajos y medios, mientras que el Nilo presenta una contribución más moderada y dispersa. A medida que la carga sedimentaria aumenta hacia valores extremos (más allá de 7.5×10⁹ mg/L), la frecuencia disminuye considerablemente, pero aún se observan contribuciones esporádicas, principalmente del Yangtsé y el Amazonas.
datos %>%
ggplot(aes(x = Tipo_Sedimento, fill = Tipo_Sedimento)) +
geom_bar(alpha = 0.8, color = "black") +
scale_fill_manual(values = c("sandybrown", "wheat", "peru", "tan", "burlywood")) +
theme_minimal()
4. Frecuencia de Tipo de Sedimento
(Discusión sobre la distribución de los tipos de sedimentos y si algún
tipo es predominante.)
-> El grafico muestra la distribución de los tipos de sedimentos: Arcilloso, Arenoso, Grava, Limoso. Se puede observar que el tipo de sedimento dominante es el Limoso, el cual se ve presentado en la ultima barra de la grafica con una color beige claro. Asimismo, para las Arcillas, Arenas y Gravas se observa un frecuencia igual de aproximadamente 25.
datos %>%
ggplot(aes(x = Rio, fill = Rio)) +
geom_bar(alpha = 0.8, color = "black") +
scale_fill_manual(values = c("cyan", "lightblue", "navy", "deepskyblue", "steelblue")) +
theme_minimal()
-> La gráfica muestra que el Rio Yangtsé y el Amazonas son los ríos con mayor número de observaciones, superando mas de 20 cada uno, mientras que el Danubio, Misisipi y Nilo presentan observaciones entre 16 y 19. Esta desigualdad en la distribución de datos puede influir en el análisis y en la certeza de este, ya que los ríos con más observaciones tienden a tener una mayor proporción, lo que podría sesgar las conclusiones si no se considera esta diferencia. De manera que es importante tener en cuenta el número de registros al comparar los ríos, ya que una menor cantidad de datos podría limitar la representatividad del rio en ciertos casos.
datos %>%
ggplot(aes(x = factor(Rio), y = Tamaño_Grano_mm, fill = Rio))+
geom_boxplot() +
scale_fill_manual(values = c("cyan", "lightblue", "navy", "deepskyblue", "steelblue")) +
theme_minimal()
6. Boxplot del Tamaño de Grano por Río
En el gráfico de cajas del tamaño de grano por río, se observa que el
Yangtsé presenta los mayores tamaños de grano, con una mediana cercana a
6.5 mm y una alta dispersión, lo que indica gran heterogeneidad en los
sedimentos transportados. Su distribución parece estar ligeramente
sesgada hacia arriba, ya que el bigote superior es más corto, lo que
sugiere una mayor concentración de valores grandes. El Amazonas también
muestra tamaños considerables, con una mediana de aproximadamente 6 mm y
una distribución relativamente simétrica, indicando una dispersión
balanceada de los datos alrededor de la mediana. En contraste, el Nilo
tiene la mediana más baja, cercana a 4 mm, y una distribución claramente
sesgada hacia abajo, con un bigote inferior mucho más largo, lo que
sugiere la presencia de muchos tamaños pequeños. El Danubio muestra una
distribución ligeramente sesgada hacia abajo, con una mediana centrada
pero un bigote inferior más extenso. Por su parte, el Misisipi tiene una
mediana alrededor de 4.5 mm y presenta una distribución asimétrica,
también con una mayor dispersión hacia los valores bajos. Aunque no se
señalan outliers explícitos, la extensión de los bigotes en el Yangtsé y
el Nilo sugiere la posible presencia de valores extremos, donde los
tamaños de grano varían desde valores cercanos a 0 mm hasta
aproximadamente 10 mm.
datos %>%
ggplot(aes(x = factor(Rio), y = Velocidad_Flujo_m_s, fill = Rio))+
geom_boxplot() +
scale_fill_manual(values = c("cyan", "lightblue", "navy", "deepskyblue", "steelblue")) +
theme_minimal()
datos %>%
ggplot(aes(x = factor(Rio), y = Carga_Sedimentaria_mg_L, fill = Rio))+
geom_boxplot() +
scale_fill_manual(values = c("cyan", "lightblue", "navy", "deepskyblue", "steelblue")) +
theme_minimal()
library(dplyr)
library(stringr)
# Convertir variables numéricas correctamente
datos <- datos %>%
mutate(
Tamaño_Grano_mm = as.numeric(str_replace(Tamaño_Grano_mm, ",", ".")),
Velocidad_Flujo_m_s = as.numeric(str_replace(Velocidad_Flujo_m_s, ",", ".")),
Carga_Sedimentaria_mg_L = as.numeric(str_replace(Carga_Sedimentaria_mg_L, ",", "."))
)
# Verificar la conversión
str(datos)
## tibble [100 × 6] (S3: tbl_df/tbl/data.frame)
## $ ID_Muestra : num [1:100] 1 2 3 4 5 6 7 8 9 10 ...
## $ Rio : Factor w/ 5 levels "Amazonas","Danubio",..: 3 3 1 5 1 4 2 1 2 5 ...
## $ Tipo_Sedimento : Factor w/ 4 levels "Arcilloso","Arenoso",..: 4 3 2 2 2 2 3 4 3 3 ...
## $ Tamaño_Grano_mm : num [1:100] 6.72 2.53 3.46 8.61 8.14 ...
## $ Velocidad_Flujo_m_s : num [1:100] 2.171 1.825 0.857 3.353 1.457 ...
## $ Carga_Sedimentaria_mg_L: num [1:100] 3.15e+09 5.15e+09 1.81e+09 7.50e+09 1.21e+09 ...
summary(datos)
## ID_Muestra Rio Tipo_Sedimento Tamaño_Grano_mm
## Min. : 1.00 Amazonas:25 Arcilloso:24 Min. :0.1355
## 1st Qu.: 25.75 Danubio :15 Arenoso :24 1st Qu.:2.5946
## Median : 50.50 Misisipi:16 Grava :24 Median :4.8582
## Mean : 50.50 Nilo :17 Limoso :28 Mean :4.9626
## 3rd Qu.: 75.25 Yangtsé :27 3rd Qu.:7.0081
## Max. :100.00 Max. :9.9911
## Velocidad_Flujo_m_s Carga_Sedimentaria_mg_L
## Min. :0.1454 Min. :3.399e+07
## 1st Qu.:1.0152 1st Qu.:1.887e+09
## Median :1.8462 Median :3.148e+09
## Mean :1.8463 Mean :3.293e+09
## 3rd Qu.:2.6783 3rd Qu.:4.525e+09
## Max. :3.4814 Max. :9.834e+09
# Función para calcular IC de la media
calcular_IC_media <- function(variable) {
valores <- datos[[variable]]
valores <- valores[!is.na(valores)] # Eliminar NA
media <- mean(valores)
error_estandar <- sd(valores) / sqrt(length(valores))
ic <- qt(0.975, df = length(valores) - 1) * error_estandar
return(c("Límite Inferior" = media - ic, "Límite Superior" = media + ic))
}
# Calcular IC para cada variable numérica
IC_media_tamano <- calcular_IC_media("Tamaño_Grano_mm")
IC_media_velocidad <- calcular_IC_media("Velocidad_Flujo_m_s")
IC_media_carga <- calcular_IC_media("Carga_Sedimentaria_mg_L")
# Mostrar resultados
IC_media_tamano
## Límite Inferior Límite Superior
## 4.414273 5.510837
IC_media_velocidad
## Límite Inferior Límite Superior
## 1.644997 2.047664
IC_media_carga
## Límite Inferior Límite Superior
## 2901788052 3684889602
Los valores presentados corresponden a intervalos de confianza para la media, los cuales permiten estimar, con un 95% de confianza, el rango dentro del cual se encuentra la media poblacional de cada variable. El primer intervalo, indica que la media de la variable “tamaño de grano” muy probablemente se encuentra entre 4.414273 y 5.510837. Asimismo, el segundo intervalo, indica que la media de la velocidad de flujo se encuentra muy probablemente entre 1.644997 y 2.047664. Finalmente, el tercer intervalo indica qye la media de la carga sedimentaria se encuentra muy probablemente entre 2,901,788,052 y 3,684,889,602.
# Seleccionar una variable binaria (el sedimento es arenoso o no
datos$Es_Arenoso <- ifelse(datos$Tipo_Sedimento == "Arenoso", 1, 0)
# Calcular la proporción de sedimentos arenosos
proporcion_arenoso <- mean(datos$Es_Arenoso, na.rm = TRUE)
# Calcular el intervalo de confianza con prop.test
IC_proporcion_arenoso <- prop.test(sum(datos$Es_Arenoso, na.rm = TRUE),
length(na.omit(datos$Es_Arenoso)),
conf.level = 0.95)
# Mostrar resultados en el formato deseado
cat("Proporción de sedimentos arenosos:", round(proporcion_arenoso, 4), "\n")
## Proporción de sedimentos arenosos: 0.24
cat("Intervalo de confianza al 95%:\n")
## Intervalo de confianza al 95%:
cat(" Límite Inferior:", round(IC_proporcion_arenoso$conf.int[1], 6), "\n")
## Límite Inferior: 0.162666
cat(" Límite Superior:", round(IC_proporcion_arenoso$conf.int[2], 6), "\n")
## Límite Superior: 0.337691
La proporción de sedimentos arenosos fue de 0.24, lo que indica que el 24% de los sedimentos son de tipo arenoso. El intervalo de confianza al 95%, entre 0.162666 y 0.337691, sugiere que la proporción real en la población se encuentra entre aproximadamente 16.3% y 33.8%, lo que brinda una estimación razonablemente precisa.
calcular_IC_varianza <- function(variable) {
n <- sum(!is.na(datos[[variable]])) # Cantidad de datos no NA
varianza <- var(datos[[variable]], na.rm = TRUE) # Varianza muestral
chi_inf <- qchisq(0.975, df = n - 1) # Cuantil superior
chi_sup <- qchisq(0.025, df = n - 1) # Cuantil inferior
IC_inf <- ((n - 1) * varianza) / chi_inf
IC_sup <- ((n - 1) * varianza) / chi_sup
return(c(varianza, IC_inf, IC_sup))
}
# Cálculo para cada variable numérica
IC_varianza_tamano <- calcular_IC_varianza("Tamaño_Grano_mm")
IC_varianza_velocidad <- calcular_IC_varianza("Velocidad_Flujo_m_s")
IC_varianza_carga <- calcular_IC_varianza("Carga_Sedimentaria_mg_L")
# Mostrar resultados
cat("Varianza e Intervalo de Confianza al 95%:\n")
## Varianza e Intervalo de Confianza al 95%:
cat("\nTamaño de Grano (mm):\n")
##
## Tamaño de Grano (mm):
cat(" Varianza:", round(IC_varianza_tamano[1], 6), "\n")
## Varianza: 7.63536
cat(" Límite Inferior:", round(IC_varianza_tamano[2], 6), "\n")
## Límite Inferior: 5.886069
cat(" Límite Superior:", round(IC_varianza_tamano[3], 6), "\n")
## Límite Superior: 10.30384
cat("\nVelocidad del Flujo (m/s):\n")
##
## Velocidad del Flujo (m/s):
cat(" Varianza:", round(IC_varianza_velocidad[1], 6), "\n")
## Varianza: 1.029563
cat(" Límite Inferior:", round(IC_varianza_velocidad[2], 6), "\n")
## Límite Inferior: 0.793686
cat(" Límite Superior:", round(IC_varianza_velocidad[3], 6), "\n")
## Límite Superior: 1.389385
cat("\nCarga Sedimentaria (mg/L):\n")
##
## Carga Sedimentaria (mg/L):
cat(" Varianza:", round(IC_varianza_carga[1], 6), "\n")
## Varianza: 3.894017e+18
cat(" Límite Inferior:", round(IC_varianza_carga[2], 6), "\n")
## Límite Inferior: 3.001882e+18
cat(" Límite Superior:", round(IC_varianza_carga[3], 6), "\n")
## Límite Superior: 5.254935e+18
Las tres variables analizadas presentan niveles distintos de dispersión. El tamaño de grano muestra una varianza de 7.63 con un intervalo de confianza relativamente amplio (5.89 a 10.30), lo que indica una alta dispersión y poca estabilidad en los tamaños de sedimento. La velocidad del flujo, con una varianza de 1.03 y un intervalo más estrecho (0.79 a 1.39), presenta una dispersión moderada, lo que sugiere mayor estabilidad en comparación con las otras variables. Por otro lado, la carga sedimentaria presenta una varianza extremadamente alta (3.89 × 10¹⁸) y un intervalo bastante amplio, lo que evidencia una gran variabilidad en los datos y, por tanto, baja estabilidad en esta variable.
# Función para realizar la prueba t y mostrar resultados formateados
comparar_medias <- function(variable, grupo1, grupo2) {
prueba <- t.test(datos[[variable]] ~ datos$Rio, data = datos, subset = datos$Rio %in% c(grupo1, grupo2))
cat("\nComparación de medias para", variable, "entre", grupo1, "y", grupo2, ":\n")
cat(" Media de", grupo1, ":", round(prueba$estimate[1], 6), "\n")
cat(" Media de", grupo2, ":", round(prueba$estimate[2], 6), "\n")
cat(" Diferencia de medias:", round(prueba$estimate[1] - prueba$estimate[2], 6), "\n")
cat(" Intervalo de Confianza 95%:", round(prueba$conf.int[1], 6), "a", round(prueba$conf.int[2], 6), "\n")
cat(" Valor p:", format.pval(prueba$p.value, digits = 6), "\n")
}
# Comparación para cada variable numérica entre Amazonas y Nilo
comparar_medias("Tamaño_Grano_mm", "Amazonas", "Nilo")
##
## Comparación de medias para Tamaño_Grano_mm entre Amazonas y Nilo :
## Media de Amazonas : 5.340705
## Media de Nilo : 3.739316
## Diferencia de medias: 1.601389
## Intervalo de Confianza 95%: -0.098075 a 3.300853
## Valor p: 0.0640044
comparar_medias("Velocidad_Flujo_m_s", "Amazonas", "Nilo")
##
## Comparación de medias para Velocidad_Flujo_m_s entre Amazonas y Nilo :
## Media de Amazonas : 1.918679
## Media de Nilo : 1.74593
## Diferencia de medias: 0.172749
## Intervalo de Confianza 95%: -0.453464 a 0.798961
## Valor p: 0.579187
comparar_medias("Carga_Sedimentaria_mg_L", "Amazonas", "Nilo")
##
## Comparación de medias para Carga_Sedimentaria_mg_L entre Amazonas y Nilo :
## Media de Amazonas : 2975452472
## Media de Nilo : 3764912351
## Diferencia de medias: -789459879
## Intervalo de Confianza 95%: -2116530588 a 537610830
## Valor p: 0.234406
Al comparar las medias entre el Amazonas y el Nilo para las tres variables, no se observan diferencias estadísticamente significativas, ya que en todos los casos los intervalos de confianza incluyen el cero y los valores p son mayores a 0.05. En el caso del tamaño de grano, aunque la diferencia de medias (1.60 mm) es relativamente notable y el valor p (0.064) se acerca al umbral de significancia, no alcanza un nivel suficiente para considerarse estadísticamente significativa. Para la velocidad del flujo, la diferencia de medias es pequeña (0.17 m/s) y el intervalo de confianza es amplio, lo que junto a un valor p de 0.579 indica claramente que no hay diferencia significativa. Finalmente, en la carga sedimentaria, la diferencia de -789 millones mg/L favorece al Nilo, pero el intervalo de confianza es tan amplio y el valor p tan alto (0.234), que también se concluye que no existe evidencia suficiente para afirmar que las medias son distintas entre estos dos ríos.
calcular_IC_dif_proporciones <- function(var, grupo1, grupo2) {
x1 <- sum(datos[[var]] == grupo1, na.rm = TRUE)
x2 <- sum(datos[[var]] == grupo2, na.rm = TRUE)
n1 <- sum(!is.na(datos[[var]]) & datos[[var]] %in% c(grupo1, grupo2))
n2 <- sum(!is.na(datos[[var]]) & datos[[var]] %in% c(grupo1, grupo2))
# Verificar si se puede usar prop.test o se necesita Fisher
if (min(x1, x2) < 5) {
test <- fisher.test(matrix(c(x1, n1 - x1, x2, n2 - x2), nrow = 2))
conf.int <- test$conf.int
} else {
test <- prop.test(x = c(x1, x2), n = c(n1, n2), conf.level = 0.95, correct = TRUE)
conf.int <- test$conf.int
}
cat("Diferencia de Proporciones\n")
cat("Límite Inferior:", round(conf.int[1], 6), "\n")
cat("Límite Superior:", round(conf.int[2], 6), "\n")
}
# Aplicar la función con dos tipos de sedimentos (Ejemplo: "Arenoso" vs "Arcilloso")
calcular_IC_dif_proporciones("Tipo_Sedimento", "Arenoso", "Arcilloso")
## Diferencia de Proporciones
## Límite Inferior: -0.200038
## Límite Superior: 0.200038
La diferencia de proporciones entre los grupos arenoso y arcilloso tiene un intervalo de confianza al 95% que va de -0.200038 a 0, lo que indica que no existe una diferencia estadísticamente significativa entre ambas proporciones, ya que el intervalo incluye el valor cero. Esto significa que, con el nivel de confianza establecido, no se puede afirmar que haya una mayor proporción de sedimentos arenosos o arcillosos; es posible que ambas proporciones sean similares en la población o que la diferencia observada en la muestra se deba al azar.
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\).
Este es un caso de prueba de una cola (cola derecha), ya que nos interesa verificar si la media del tamaño de grano 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
Las hipótesis planteadas son:
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.
Con base en los resultados obtenidos, se puede concluir que sí existe suficiente evidencia para afirmar que el sedimento puede clasificarse como grava. Ya que considerando el nivel de significancia de 0.05, y la media muestral del tamaño de grano (4.9626mm), los resultados permiten rechazar la hipótesis nula y aceptar la hipótesis alternativa que plantea con un 95% de confianza, que el tamaño medio de grano del sedimento es mayor o igual a 2.0 mm.
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 obtenidos, se puede decir que no hay suficiente evidencia para afirmar que la proporción de sedimentos de tipo grava sea diferente al 20% del total de sedimentos analizados. La proporción observada en la muestra fue de 0.24, ligeramente superior al valor histórico de 0.20. Sin embargo, al aplicar la prueba de hipótesis para proporciones con un nivel de significancia de 0.05 y utilizando una muestra de tamaño 100, los resultados no permiten rechazar la hipótesis nula. Por lo tanto, se concluye que la diferencia observada no es estadísticamente significativa, y se mantiene la suposición de que la proporción de sedimentos de tipo grava es igual al 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 Con base en los resultados obtenidos, se deduce que no hay suficiente evidencia para afirmar que la varianza de la velocidad del flujo en los ríos tropicales ha cambiado respecto al valor histórico de 1.5 (m/s)². Aunque la varianza muestral observada fue de 0.95 (m/s)², al realizar la prueba de hipótesis para la varianza con un nivel de significancia de 0.05 y una muestra de 30 observaciones, los resultados no permiten rechazar la hipótesis nula. Por lo tanto, se concluye que la diferencia observada no es estadísticamente significativa, y se mantiene la suposición de que la varianza del flujo sigue siendo igual a la histórica.
Se desea determinar si existen diferencias significativas entre las velocidades de flujo promedio de cinco ríos diferentes. Para esto, se han tomado 15 muestras de velocidad de flujo en cada río. Aplicaremos un análisis de varianza (ANOVA) para comparar las medias.
# Verificar el número de muestras por río
table(datos$Rio)
##
## Amazonas Danubio Misisipi Nilo Yangtsé
## 25 15 16 17 27
# Determinar el tamaño mínimo de muestras por río
library(dplyr)
tamano_minimo <- datos %>%
group_by(Rio) %>%
summarise(n = n()) %>%
summarise(min(n)) %>%
pull()
# Realizar muestreo aleatorio con el mismo tamaño para cada río
set.seed(123) # Para reproducibilidad
datos_muestreados <- datos %>%
group_by(Rio) %>%
sample_n(tamano_minimo)
# Confirmar la distribución balanceada
table(datos_muestreados$Rio)
##
## Amazonas Danubio Misisipi Nilo Yangtsé
## 15 15 15 15 15
datos_muestreados
## # A tibble: 75 × 7
## # Groups: Rio [5]
## ID_Muestra Rio Tipo_Sedimento Tamaño_Grano_mm Velocidad_Flujo_m_s
## <dbl> <fct> <fct> <dbl> <dbl>
## 1 62 Amazonas Arenoso 4.65 2.13
## 2 76 Amazonas Limoso 2.55 1.32
## 3 61 Amazonas Arcilloso 6.13 1.82
## 4 8 Amazonas Limoso 9.65 2.40
## 5 35 Amazonas Arcilloso 8.19 3.31
## 6 73 Amazonas Arcilloso 0.903 0.201
## 7 38 Amazonas Arcilloso 8.89 3.24
## 8 17 Amazonas Limoso 4.18 2.95
## 9 90 Amazonas Grava 5.83 2.78
## 10 21 Amazonas Limoso 6.02 0.197
## # ℹ 65 more rows
## # ℹ 2 more variables: Carga_Sedimentaria_mg_L <dbl>, Es_Arenoso <dbl>
###Hipótesis
# H₀ (hipótesis nula): Las medias de velocidad de flujo en los diferentes ríos son iguales.
# H₁ (hipótesis alternativa): Al menos una de las medias de velocidad de flujo es diferente.
# Convertir a formato largo
datos_largos <- datos_muestreados %>%
select(Rio, Velocidad_Flujo_m_s) %>%
rename(Grupo = Rio, Valor = Velocidad_Flujo_m_s) %>%
filter(!is.na(Valor))
# Calcular resumen por grupo
resumen_grupo <- datos_largos %>%
group_by(Grupo) %>%
summarise(
N_i = n(),
T_i = sum(Valor),
Y_i = mean(Valor)
)
# Totales
N_total <- sum(resumen_grupo$N_i)
T_total <- sum(resumen_grupo$T_i)
Y_total <- T_total / N_total
# Mostrar resumen final
resumen_final <- resumen_grupo %>%
add_row(Grupo = "Total", N_i = N_total, T_i = T_total, Y_i = Y_total)
print(resumen_final)
## # A tibble: 6 × 4
## Grupo N_i T_i Y_i
## <chr> <int> <dbl> <dbl>
## 1 Amazonas 15 33.5 2.23
## 2 Danubio 15 24.2 1.61
## 3 Misisipi 15 21.6 1.44
## 4 Nilo 15 27.5 1.83
## 5 Yangtsé 15 30.5 2.03
## 6 Total 75 137. 1.83
# Cálculo de sumas de cuadrados
sst_parte1 <- sum((datos_largos$Valor)^2)
sst_parte2 <- (T_total^2) / N_total
SST <- sst_parte1 - sst_parte2
SSA <- sum((resumen_grupo$T_i^2) / resumen_grupo$N_i) - sst_parte2
SSE <- SST - SSA
# Grados de libertad y cuadrados medios
K <- nrow(resumen_grupo)
df_SSA <- K - 1
df_SSE <- N_total - K
df_SST <- N_total - 1
MSA <- SSA / df_SSA
MSE <- SSE / df_SSE
F_value <- MSA / MSE
p_value <- pf(F_value, df_SSA, df_SSE, lower.tail = FALSE)
# Tabla ANOVA
anova_tabla <- data.frame(
Fuente = c("Tratamiento (Entre grupos)", "Error (Dentro de grupos)", "Total"),
`Suma de Cuadrados` = c(SSA, SSE, SST),
`Grados de Libertad` = c(df_SSA, df_SSE, df_SST),
`Cuadrado Medio` = c(MSA, MSE, NA),
`F` = c(F_value, NA, NA),
`p-valor` = c(p_value, NA, NA)
)
print(anova_tabla)
## Fuente Suma.de.Cuadrados Grados.de.Libertad
## 1 Tratamiento (Entre grupos) 6.05577 4
## 2 Error (Dentro de grupos) 75.67258 70
## 3 Total 81.72835 74
## Cuadrado.Medio F p.valor
## 1 1.513943 1.400454 0.2428317
## 2 1.081037 NA NA
## 3 NA NA NA
Con base en los resultados obtenidos, donde el valor de F calculado (1.4005) es menor que el valor crítico de F (2.5027) al nivel de significancia de 0.05, se concluye que no hay evidencia suficiente para afirmar que existen diferencias significativas entre las velocidades de flujo promedio de los cinco ríos analizados. Por lo tanto, se mantiene la hipótesis nula, lo que indica que las medias podrían considerarse estadísticamente similares.
alpha <- 0.05
valor_critico_f <- qf(1 - alpha, df1 = df_SSA, df2 = df_SSE)
cat(sprintf("Estadístico F calculado: %.4f\n", F_value))
## Estadístico F calculado: 1.4005
cat(sprintf("Grados de libertad: (%d, %d)\n", df_SSA, df_SSE))
## Grados de libertad: (4, 70)
cat(sprintf("Valor crítico F (%.2f%%): %.4f\n", (1 - alpha) * 100, valor_critico_f))
## Valor crítico F (95.00%): 2.5027
cat(sprintf("Nivel de significancia: %.2f\n", alpha))
## Nivel de significancia: 0.05
if (F_value > valor_critico_f) {
cat("❌ Se rechaza la hipótesis nula: hay diferencias significativas entre al menos dos ríos.\n")
} else {
cat("✅ No se rechaza la hipótesis nula: no hay evidencia suficiente para afirmar que hay diferencias significativas.\n")
}
## ✅ No se rechaza la hipótesis nula: no hay evidencia suficiente para afirmar que hay diferencias significativas.