Este informe sigue la base de datos de mineralogía con la que se ha estado trabajando previamente, esta vez, con la adición del análisis de varianza (ANOVA)
#Primero, instalamos los paquetes necesarios y cargamos los datos
install.packages("readxl")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
install.packages("dplyr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
install.packages("ggplot2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(readxl)
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(ggplot2)
datos <- read_excel("Base_Datos_Mineralogia (1).xlsx", sheet = "Mineralogia")
datos$Tipo_Roca <- as.factor(datos$Tipo_Roca)
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 ...
## $ Tipo_Roca : Factor w/ 3 levels "Ígnea","Metamórfica",..: 3 1 3 3 3 3 1 3 3 1 ...
## $ Mineral_Principal : chr [1:100] "Mica" "Calcita" "Cuarzo" "Feldespato" ...
## $ Dureza_Mohs : num [1:100] 2.77 2.85 8.34 4.1 5.93 ...
## $ Contenido_Silice_%: num [1:100] 60.9 57.1 45.3 33.1 51.9 ...
## $ Color : chr [1:100] "Negro" "Verde" "Blanco" "Blanco" ...
colnames(datos)[colnames(datos) == "Contenido_Silice_%"] <- "Silice"
# Convertir a factor
datos$Tipo_Roca <- as.factor(datos$Tipo_Roca)
#Revisamos la estructura
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 ...
## $ Tipo_Roca : Factor w/ 3 levels "Ígnea","Metamórfica",..: 3 1 3 3 3 3 1 3 3 1 ...
## $ Mineral_Principal: chr [1:100] "Mica" "Calcita" "Cuarzo" "Feldespato" ...
## $ Dureza_Mohs : num [1:100] 2.77 2.85 8.34 4.1 5.93 ...
## $ Silice : num [1:100] 60.9 57.1 45.3 33.1 51.9 ...
## $ Color : chr [1:100] "Negro" "Verde" "Blanco" "Blanco" ...
#Ahora obtenemos las estadísticas descriptivas por grupo
resumen <- datos %>%
group_by(Tipo_Roca) %>%
summarise(
Media_Silice = mean(Silice, na.rm = TRUE),
SD_Silice = sd(Silice, na.rm = TRUE),
Media_Dureza = mean(Dureza_Mohs, na.rm = TRUE),
SD_Dureza = sd(Dureza_Mohs, na.rm = TRUE),
n = n()
)
resumen
## # A tibble: 3 × 6
## Tipo_Roca Media_Silice SD_Silice Media_Dureza SD_Dureza n
## <fct> <dbl> <dbl> <dbl> <dbl> <int>
## 1 Ígnea 56.3 12.0 5.17 1.75 44
## 2 Metamórfica 56.4 15.4 6.08 1.81 22
## 3 Sedimentaria 55.9 15.4 5.27 2.31 34
#Elegimos gráficos de barras con error estándar
# Silice
ggplot(resumen, aes(x = Tipo_Roca, y = Media_Silice)) +
geom_bar(stat = "identity", fill = "skyblue") +
geom_errorbar(aes(ymin = Media_Silice - SD_Silice, ymax = Media_Silice + SD_Silice), width = 0.2) +
labs(title = "Contenido de Sílice por Tipo de Roca", y = "Media ± SD", x = "Tipo de Roca") +
theme_minimal()
# Dureza
ggplot(resumen, aes(x = Tipo_Roca, y = Media_Dureza)) +
geom_bar(stat = "identity", fill = "salmon") +
geom_errorbar(aes(ymin = Media_Dureza - SD_Dureza, ymax = Media_Dureza + SD_Dureza), width = 0.2) +
labs(title = "Dureza Mohs por Tipo de Roca", y = "Media ± SD", x = "Tipo de Roca") +
theme_minimal()
#Y, ahora, el ANOVA y la prueba de Tukey para el sílice
modelo_silice <- aov(Silice ~ Tipo_Roca, data = datos)
resumen_silice <- summary(modelo_silice)
resumen_silice
## Df Sum Sq Mean Sq F value Pr(>F)
## Tipo_Roca 2 4 2.05 0.01 0.99
## Residuals 97 18931 195.17
tukey_silice <- TukeyHSD(modelo_silice)
plot(tukey_silice, las = 1, col = "blue")
#Y el ANOVA y prueba de Tukey para la dureza de Mohs
modelo_dureza <- aov(Dureza_Mohs ~ Tipo_Roca, data = datos)
resumen_dureza <- summary(modelo_dureza)
resumen_dureza
## Df Sum Sq Mean Sq F value Pr(>F)
## Tipo_Roca 2 13.2 6.583 1.698 0.188
## Residuals 97 376.1 3.877
tukey_dureza <- TukeyHSD(modelo_dureza)
plot(tukey_dureza, las = 1, col = "darkred")
cat(" Conclusiones\n\n")
## Conclusiones
# Para Silice
p_silice <- resumen_silice[[1]]$`Pr(>F)`[1]
cat("Contenido de Sílice (%):\n")
## Contenido de Sílice (%):
if (p_silice < 0.05) {
cat("- El ANOVA detecta diferencias significativas entre tipos de roca (p =", round(p_silice, 4), ").\n")
diferencias <- TukeyHSD(modelo_silice)$Tipo_Roca
sig <- rownames(diferencias)[diferencias[, "p adj"] < 0.05]
if (length(sig) > 0) {
cat("- Tukey encontró diferencias entre:\n")
for (c in sig) cat(" •", c, "\n")
} else {
cat("- Tukey no encontró diferencias significativas entre pares específicos.\n")
}
} else {
cat("- No se detectaron diferencias significativas en el contenido de sílice (p =", round(p_silice, 4), ").\n")
}
## - No se detectaron diferencias significativas en el contenido de sílice (p = 0.9896 ).
cat("\nDureza Mohs:\n")
##
## Dureza Mohs:
p_dureza <- resumen_dureza[[1]]$`Pr(>F)`[1]
if (p_dureza < 0.05) {
cat("- El ANOVA detecta diferencias significativas entre tipos de roca (p =", round(p_dureza, 4), ").\n")
diferencias <- TukeyHSD(modelo_dureza)$Tipo_Roca
sig <- rownames(diferencias)[diferencias[, "p adj"] < 0.05]
if (length(sig) > 0) {
cat("- Tukey encontró diferencias entre:\n")
for (c in sig) cat(" •", c, "\n")
} else {
cat("- Tukey no encontró diferencias significativas entre pares específicos.\n")
}
} else {
cat("- No se detectaron diferencias significativas en la dureza (p =", round(p_dureza, 4), ").\n")
}
## - No se detectaron diferencias significativas en la dureza (p = 0.1885 ).