# 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")
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…
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
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
ggplot(df, aes(x = Dureza_Mohs)) + geom_histogram(binwidth = 1, fill = "blue", color = "black") + theme_minimal()
ggplot(df, aes(x = Tipo_Roca)) + geom_bar(fill = "green") + theme_minimal()
ggplot(df, aes(x = Tipo_Roca, y = Dureza_Mohs)) + geom_boxplot(fill = "orange") + theme_minimal()
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
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
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
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"
}
prop_diff_ci <- prop.test(table(df$Tipo_Roca)[1:2], conf.level = 0.95)$conf.int
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"
}
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"
}
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
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"
También se verifica si las varianzas de Dureza_Mohs entre los tipos de roca (si hay solo dos grupos) son iguales:
H₀: σ₁² = σ₂²
H₁: σ₁² ≠ σ₂²
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"
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.
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()