# Cargar librerías necesarias
library(readxl)
library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(stats)
ruta_archivo <- df <- read_excel("Base_Datos_Mineralogia.xlsx", sheet = "Mineralogia")

Ver la estructura de los datos

head(df)
## # A tibble: 6 × 6
##   ID_Muestra Tipo_Roca  Mineral_Principal Dureza_Mohs `Contenido_Silice_%` Color
##        <dbl> <chr>      <chr>                   <dbl>                <dbl> <chr>
## 1          1 Sedimenta… Mica                     2.77                 60.9 Negro
## 2          2 Ígnea      Calcita                  2.85                 57.1 Verde
## 3          3 Sedimenta… Cuarzo                   8.34                 45.3 Blan…
## 4          4 Sedimenta… Feldespato               4.10                 33.1 Blan…
## 5          5 Sedimenta… Pirita                   5.93                 51.9 Tran…
## 6          6 Sedimenta… Pirita                   2.82                 52.2 Marr…

Primero, se cargó la base de datos “Base_Datos_Mineralogia.xlsx” desde la hoja denominada “Mineralogia”, utilizando la función read_excel() de la librería readxl. A continuación, se verificó la estructura de los datos con str() y se generó un resumen estadístico general con summary().

Análisis descriptivo

summary(df)
##    ID_Muestra      Tipo_Roca         Mineral_Principal   Dureza_Mohs   
##  Min.   :  1.00   Length:100         Length:100         Min.   :2.081  
##  1st Qu.: 25.75   Class :character   Class :character   1st Qu.:3.830  
##  Median : 50.50   Mode  :character   Mode  :character   Median :5.090  
##  Mean   : 50.50                                         Mean   :5.404  
##  3rd Qu.: 75.25                                         3rd Qu.:7.057  
##  Max.   :100.00                                         Max.   :8.905  
##  Contenido_Silice_%    Color          
##  Min.   :31.06      Length:100        
##  1st Qu.:44.29      Class :character  
##  Median :56.70      Mode  :character  
##  Mean   :56.19                        
##  3rd Qu.:68.69                        
##  Max.   :79.82

Frecuencia de variables categóricas

table(df$Tipo_Roca)
## 
##        Ígnea  Metamórfica Sedimentaria 
##           44           22           34
table(df$Mineral_Principal)
## 
##    Calcita     Cuarzo Feldespato       Mica     Pirita 
##         24         23         19         13         21

1. Tablas Descriptivas

Variables numéricas: Se analizó la variable Dureza_Mohs, obteniendo estadísticos como la media, mediana, mínimo, máximo y los cuartiles.

Variables categóricas:

Tipo_Roca: Se contabilizó cuántas rocas pertenecen a cada tipo (ígnea, sedimentaria, metamórfica, etc.).

Mineral_Principal: Se calcularon las frecuencias de los principales minerales presentes en la muestra.

Gráficos descriptivos

2. Gráficos Descriptivos

Histograma: Representa la distribución de la variable Dureza_Mohs. Se visualizó cómo se distribuyen los valores de dureza en intervalos.

Gráfico de barras: Muestra la frecuencia de cada tipo de roca en la base de datos.

Boxplot: Comparó la dispersión y posibles valores atípicos de la dureza según el tipo de roca. Esto permite observar si ciertos tipos de roca presentan una mayor variabilidad o valores extremos.

Histograma

ggplot(df, aes(x = Dureza_Mohs)) + geom_histogram(binwidth = 1, fill = "blue", color = "black") + theme_minimal()

Gráfico de barras

ggplot(df, aes(x = Tipo_Roca)) + geom_bar(fill = "green") + theme_minimal()

Boxplot

ggplot(df, aes(x = Tipo_Roca, y = Dureza_Mohs)) + geom_boxplot(fill = "orange") + theme_minimal()

Estimaciones estadísticas

Parte 2: Estimaciones Estadísticas (50%)

Se realizaron varios cálculos de intervalos de confianza (IC al 95%), lo cual permite estimar parámetros poblacionales a partir de los datos muestrales.

1. Intervalo de Confianza para la Media

Se estimó el intervalo de confianza para la media de la dureza (Dureza_Mohs) utilizando la prueba t de Student:

Intervalo de confianza para la media

mean_ci <- t.test(df$Dureza_Mohs, conf.level = 0.95)$conf.int
mean_ci
## [1] 5.011010 5.797904
## attr(,"conf.level")
## [1] 0.95

Intervalo de confianza para una proporción

Intervalo de Confianza para una Proporción

Se calculó la proporción de rocas sedimentarias respecto al total, con su respectivo intervalo de confianza al 95%:

prop_ci <- prop.test(sum(df$Tipo_Roca == "Sedimentaria"), nrow(df), conf.level = 0.95)$conf.int
prop_ci
## [1] 0.2501177 0.4423445
## attr(,"conf.level")
## [1] 0.95

Intervalo de confianza para la varianza

Intervalo de Confianza para la Varianza

Utilizando la distribución chi-cuadrado se estimó el intervalo de confianza para la varianza de la dureza:

# Intervalo de confianza para la varianza
n <- length(df$Dureza_Mohs)
var_est <- var(df$Dureza_Mohs)
var_ci <- c(
  (n - 1) * var_est / qchisq(0.975, df = n - 1),
  (n - 1) * var_est / qchisq(0.025, df = n - 1)
)
var_ci
## [1] 3.03103 5.30596

1. Distribución de la variable Dureza_Mohs con la media hipotética (mu = 5)

Diferencia de medias entre dos grupos

Si la variable Tipo_Roca tiene exactamente dos categorías, se realizó una prueba t para comparar la media de Dureza_Mohs entre ambos grupos. Si hay más de dos tipos de roca, este análisis no se ejecuta:

if (length(unique(df$Tipo_Roca)) == 2) {
  t_test_result <- t.test(Dureza_Mohs ~ Tipo_Roca, data = df, conf.level = 0.95)
} else {
  t_test_result <- "No se puede calcular la diferencia de medias, más de dos grupos en Tipo_Roca"
}

Diferencia de proporciones

Diferencia de Proporciones

Si hay solo dos tipos de roca, se comparó la proporción entre ellas, obteniendo su intervalo de confianza:

prop_diff_ci <- prop.test(table(df$Tipo_Roca)[1:2], conf.level = 0.95)$conf.int

Diferencia de medias entre dos grupos

if (length(unique(df$Tipo_Roca)) == 2) {
  var_ratio_ci <- var.test(Dureza_Mohs ~ Tipo_Roca, data = df, conf.level = 0.95)$conf.int
} else {
  var_ratio_ci <- "No se puede calcular la razón de varianzas, más de dos grupos en Tipo_Roca"
}

Razon de varianza

if (length(unique(df$Tipo_Roca)) == 2) {
  var_ratio_ci <- var.test(Dureza_Mohs ~ Tipo_Roca, data = df, conf.level = 0.95)$conf.int
} else {
  var_ratio_ci <- "No se puede calcular la razón de varianzas, más de dos grupos en Tipo_Roca"
}

Mostrar Resultados

list(
  mean_ci = mean_ci,
  prop_ci = prop_ci,
  var_ci = var_ci,
  t_test_result = t_test_result,
  prop_diff_ci = prop_diff_ci,
  var_ratio_ci = var_ratio_ci
)
## $mean_ci
## [1] 5.011010 5.797904
## attr(,"conf.level")
## [1] 0.95
## 
## $prop_ci
## [1] 0.2501177 0.4423445
## attr(,"conf.level")
## [1] 0.95
## 
## $var_ci
## [1] 3.03103 5.30596
## 
## $t_test_result
## [1] "No se puede calcular la diferencia de medias, más de dos grupos en Tipo_Roca"
## 
## $prop_diff_ci
## [1] 0.5388277 0.7749881
## attr(,"conf.level")
## [1] 0.95
## 
## $var_ratio_ci
## [1] "No se puede calcular la razón de varianzas, más de dos grupos en Tipo_Roca"

Estimación por Pruebas de Hipótesis

Hipótesis para la Media (H₀: μ = 5)

hipotesis_media <- t.test(df$Dureza_Mohs, mu = 5, conf.level = 0.95)
hipotesis_media
## 
##  One Sample t-test
## 
## data:  df$Dureza_Mohs
## t = 2.0397, df = 99, p-value = 0.04404
## alternative hypothesis: true mean is not equal to 5
## 95 percent confidence interval:
##  5.011010 5.797904
## sample estimates:
## mean of x 
##  5.404457

#Hipótesis para una Proporción (Sedimentaria, H₀: p = 0.3)

Se quiere saber si la proporción de rocas sedimentarias es igual al 30%. Se plantea:

H₀: p = 0.3

H₁: p ≠ 0.3

sedimentarias <- sum(df$Tipo_Roca == "Sedimentaria")
n_total <- nrow(df)
hipotesis_prop <- prop.test(sedimentarias, n_total, p = 0.3, alternative = "two.sided", conf.level = 0.95)
hipotesis_prop
## 
##  1-sample proportions test with continuity correction
## 
## data:  sedimentarias out of n_total, null probability 0.3
## X-squared = 0.58333, df = 1, p-value = 0.445
## alternative hypothesis: true p is not equal to 0.3
## 95 percent confidence interval:
##  0.2501177 0.4423445
## sample estimates:
##    p 
## 0.34

Si hay solo dos tipos de roca, se realiza una prueba t para comparar medias de dureza:

H₀: μ₁ = μ₂

H₁: μ₁ ≠ μ₂

if (length(unique(df$Tipo_Roca)) == 2) {
  hipotesis_dif_medias <- t.test(Dureza_Mohs ~ Tipo_Roca, data = df, conf.level = 0.95)
} else {
  hipotesis_dif_medias <- "Más de dos grupos: no se realiza prueba t de dos muestras"
}
hipotesis_dif_medias
## [1] "Más de dos grupos: no se realiza prueba t de dos muestras"

Hipótesis para la Varianza

También se verifica si las varianzas de Dureza_Mohs entre los tipos de roca (si hay solo dos grupos) son iguales:

H₀: σ₁² = σ₂²

H₁: σ₁² ≠ σ₂²

Hipótesis para Diferencia de Medias

if (length(unique(df$Tipo_Roca)) == 2) {
  hipotesis_varianza <- var.test(Dureza_Mohs ~ Tipo_Roca, data = df)
} else {
  hipotesis_varianza <- "Más de dos grupos: no se realiza prueba F"
}
hipotesis_varianza
## [1] "Más de dos grupos: no se realiza prueba F"

Gráfico de Densidad con Media

ggplot(df, aes(x = Dureza_Mohs)) +
  geom_density(fill = "skyblue", color = "darkblue", alpha = 0.5) +
  geom_vline(xintercept = mean(df$Dureza_Mohs), color = "red", linetype = "dashed", size = 1) +
  labs(title = "Distribución de Dureza (Curva de Densidad)",
       x = "Dureza Mohs", y = "Densidad") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Visualización Adicional: Distribución y Curva de Prueba t

library(ggplot2)

# Parámetros
mu_hipotesis <- 5
media_muestral <- mean(df$Dureza_Mohs)
s <- sd(df$Dureza_Mohs)
n <- length(df$Dureza_Mohs)
gl <- n - 1

# Crear secuencia para x (valores posibles de t)
t_vals <- seq(-4, 4, length.out = 1000)
densidades <- dt(t_vals, df = gl)

# Valor t observado
t_obs <- (media_muestral - mu_hipotesis) / (s / sqrt(n))

# Graficar la curva t
ggplot(data = data.frame(t_vals, densidades), aes(x = t_vals, y = densidades)) +
  geom_line(color = "blue", size = 1) +
  geom_vline(xintercept = t_obs, color = "red", linetype = "dashed") +
  geom_vline(xintercept = -t_obs, color = "red", linetype = "dashed") +
  labs(
    title = "Distribución normal estandar para la prueba de hipótesis",
    x = "Estadístico t",
    y = "Densidad"
  ) +
  theme_minimal()

Conclusión

Este análisis proporciona una visión completa y detallada del comportamiento de las variables en una muestra geológica. Se logró:

Comprender la distribución y comportamiento de la dureza según el tipo de roca.

Estimar parámetros estadísticos fundamentales con intervalos de confianza.

Comparar grupos mediante diferencia de medias, proporciones y varianzas.