INFORME 4: ANÁLISIS DESCRIPTIVO, ESTIMACIONES ESTADÍSTICAS EN R Y TABLA ANOVA

Integrantes

  • Santiago José Rodríguez Serrano
  • Raquel Sofía Padilla Caballero
  • Enrique De Jesús Pedrosa De La Hoz

Fecha

5 de Junio 2025

Introducción

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.

Carga de Datos en R

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)
Data summary
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 ▆▇▆▁▁

Identificación de Variables

# 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"

Parte 1: Análisis Descriptivo (25%)

Tablas Descriptivas

Resumen estadístico de las variables numéricas

skim(datos)
Data summary
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 ▆▇▆▁▁

Frecuencia de categorías para variables categóricas

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

Gráficos Descriptivos

Histogramas: Para analizar la distribución de las variables numéricas

Distribución del tamaño de grano
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)

  1. Distribución del Tamaño de Grano por Río
    (Interpretación sobre la distribución de los tamaños de grano en los diferentes ríos.)

-> 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.

Distribución de la velocidad del flujo
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.

Distribución de la carga sedimentaria
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.

Frecuencia de tipo de sedimento

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.

Frecuencia de cada río

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()

  1. Frecuencia de Cada Río
    (Interpretación sobre la cantidad de observaciones en cada río y su posible impacto en el análisis.)

-> 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.

Boxplots: Para visualizar la dispersión y valores atípicos

Tamaño de grano
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.

Velocidad del flujo
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()

  1. Boxplot de la Velocidad del Flujo por Río
    En el gráfico de cajas sobre la velocidad de flujo por río, el Yangtsé destaca por tener la mayor mediana, cercana a 2.5 m/s, y una amplia dispersión que supera los 3 m/s, indicando velocidades de corriente elevadas y variables. Su distribución se muestra ligeramente sesgada hacia arriba, ya que el bigote superior es más corto, lo que indica una mayor concentración de velocidades altas. El Amazonas presenta una mediana de aproximadamente 2 m/s y una dispersión menor, con una distribución bastante simétrica, lo que sugiere una distribución equilibrada de los datos. En contraste, el Misisipi tiene la menor velocidad, con una mediana inferior a 1.5 m/s y un rango más estrecho; su distribución está ligeramente sesgada hacia abajo, ya que su bigote inferior es más largo, indicando presencia de velocidades más bajas. El Nilo, con una mediana intermedia, muestra una distribución moderadamente simétrica, mientras que el Danubio presenta una dispersión amplia y una distribución ligeramente sesgada hacia abajo, con valores más concentrados en el extremo superior del rango. Estas diferencias reflejan contrastes en la energía fluvial y las condiciones hidrológicas de cada sistema, siendo el Yangtsé y el Amazonas los de mayor energía y capacidad de transporte.
Carga sedimentaria
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()

  1. Boxplot de la Carga Sedimentaria por Río
    En el gráfico de cajas de la carga sedimentaria por río, todos los ríos presentan medianas elevadas, oscilando entre aproximadamente 2.5 × 10⁹ y 3.5 × 10⁹ mg/L, siendo el Misisipi y el Nilo los que muestran las medianas más altas, mientras que el Yangtsé presenta la más baja. La variabilidad es notable en todos los casos, reflejada en los amplios rangos intercuartílicos y bigotes extendidos, lo que sugiere fluctuaciones significativas en la cantidad de sedimentos transportados, probablemente influenciadas por factores climáticos, estacionales y geográficos. En cuanto a la distribución, el Yangtsé presenta una distribución ligeramente sesgada hacia abajo, con un bigote inferior más largo y valores más concentrados hacia el extremo superior. El Amazonas muestra una distribución simétrica, con una dispersión relativamente equilibrada. El Misisipi tiene una distribución ligeramente sesgada hacia arriba, con una mayor concentración de valores altos. El Danubio y el Nilo muestran distribuciones más asimétricas, especialmente el Danubio, que tiene varios valores atípicos por encima del rango superior, lo que sugiere eventos de alta carga sedimentaria. Además, en los ríos Danubio, Misisipi, Nilo y Yangtsé se observan valores atípicos marcados, posiblemente asociados a episodios extraordinarios como crecientes o procesos erosivos intensos.

Parte 2: Estimaciones Estadísticas (25%)

1. Estimación de la Media con Intervalo de Confianza del 95%

Cargar paquetes necesarios

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.

2. Estimación de una Proporción con Intervalo de Confianza

# 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.

3. Estimación de la Varianza con Intervalo de Confianza

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.

4. Diferencia de Medias entre dos grupos (Amazonas vs Nilo)

# 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.

5. Diferencia de Proporciones entre dos grupos (Ejemplo: Arenoso vs Arcilloso)

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.

HIPÓTESIS ESTADÍSTICAS (50%)

Planteamiento de Problemas

Media

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.

1. Identificación de Datos

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

2. Hipótesis

Las hipótesis planteadas son:

  • Hipótesis nula: \(H_0: \mu < 2.0\) mm (el sedimento no es grava)
  • Hipótesis alternativa: \(H_1: \mu \geq 2.0\) mm (el sedimento sí es grava)

3. Resolución de Elementos

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

4. Verificaciones

a) Gráfica de la distribución t

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()

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.

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.

Proporción

Planteamiento

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

1. Identificación de Datos

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

2. Hipótesis

(Hipótesis nula y alternativa: p = 0.20 vs p ≠ 0.20)

3. Resolución de Elementos

# 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

4. Verificaciones

a) Gráfica de la distribución normal

# 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()

b) Regla de Decisión

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₀.

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: No se rechaza H₀.

5. 📚 Conclusiones e Interpretación

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%.

Varianza

Planteamiento

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

1. Identificación de Datos

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

2. Hipótesis

(Hipótesis nula y alternativa: σ² = 1.5 vs σ² ≠ 1.5)

3. Resolución de Elementos

# 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

4. Verificaciones

a) Gráfica de la distribución Chi-cuadrado

# 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()

b) Regla de Decisión

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₀.

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: No se rechaza H₀.

5. Conclusiones e Interpretación

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.

Parte 4: Tabla ANOVA

Planteamiento

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.

Muestras

# 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.

Tabla de datos estadisticos

# 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

Tabla ANOVA

# 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

Interpretación

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.