if (!require("readxl")) install.packages("readxl")
## Loading required package: readxl
library(readxl)


datos <- read_excel("Base_Datos_Mineralogia.xlsx")

Contexto La base de datos Base_Datos_Mineralogia.xlsx recopila información geológica de 100 muestras de rocas recolectadas en una zona con actividad tectónica activa.

Cada muestra fue clasificada según su tipo de roca (ígnea, sedimentaria o metamórfica), e identificada por su mineral principal.

AdemƔs, se obsevaron tres propiedades fƭsico-quƭmicas clave:

Dureza Mohs: Escala que mide la resistencia del mineral al rayado, útil para su identificación.

Contenido de Sílice (%): Porcentaje de dióxido de silicio presente en la muestra, relevante en la clasificación de rocas y su origen.

Color: Atributo cualitativo que puede relacionarse con la composición química o procesos de alteración.

Esta información permite realizar anÔlisis estadísticos como pruebas de hipótesis para conocer si ciertas propiedades (como dureza, proporción de colores o variabilidad en la sílice) se ajustan a parÔmetros esperados o teóricos.

Así, se puede evaluar la homogeneidad mineralógica de las muestras y detectar patrones geológicos relevantes.

head(datos)
# Cargar librerĆ­as necesarias
library(readxl)
library(ggplot2)

# Leer los datos
datos <- read_excel("Base_Datos_Mineralogia.xlsx")

# Hipótesis:
# H0: mu = 5
# H1: mu ≠ 5

# Prueba t para la media
resultado_t <- t.test(datos$Dureza_Mohs, mu = 5, alternative = "two.sided", conf.level = 0.95)

# Crear el texto del resultado
texto_resultado <- if (resultado_t$p.value < 0.05) {
  paste0("Resultado: Se RECHAZA H0\n",
         "p-valor = ", round(resultado_t$p.value, 4), "\n",
         "La media es distinta de 5.")
} else {
  paste0("Resultado: NO se rechaza H0\n",
         "p-valor = ", round(resultado_t$p.value, 4), "\n",
         "No hay evidencia suficiente para afirmar que la media es distinta de 5.")
}

# Mostrar resultado en consola tambiƩn
print(resultado_t)
## 
##  One Sample t-test
## 
## data:  datos$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
cat("\n", texto_resultado, "\n")
## 
##  Resultado: Se RECHAZA H0
## p-valor = 0.044
## La media es distinta de 5.
# GrÔfico: Curva de densidad + recuadro de interpretación
ggplot(datos, aes(x = Dureza_Mohs)) +
  geom_density(fill = "skyblue", alpha = 0.5) +
  geom_vline(xintercept = 5, color = "red", linetype = "dashed", size = 1.2) +
  annotate("text", x = Inf, y = Inf, label = texto_resultado, 
           hjust = 1.1, vjust = 1.1, size = 4, color = "black", 
           fontface = "bold", 
           inherit.aes = FALSE) +
  labs(title = "Curva de Densidad de Dureza Mohs",
       subtitle = "Lƭnea roja: Media hipotƩtica = 5",
       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.
## Warning in annotate("text", x = Inf, y = Inf, label = texto_resultado, hjust =
## 1.1, : Ignoring unknown parameters: `inherit.aes`

# Cargar librerĆ­as necesarias
library(readxl)
library(ggplot2)

# Leer los datos
datos <- read_excel("Base_Datos_Mineralogia.xlsx")

# Crear variable binaria: 1 si es Negro, 0 si no
datos$es_negro <- ifelse(datos$Color == "Negro", 1, 0)

# ParƔmetros
x <- sum(datos$es_negro)      # número de éxitos
n <- nrow(datos)              # tamaƱo de muestra
p0 <- 0.30                    # proporción bajo H0
phat <- x / n                 # proporción muestral
se <- sqrt(p0 * (1 - p0) / n) # error estƔndar
z <- (phat - p0) / se         # estadĆ­stico Z
p_value <- 2 * (1 - pnorm(abs(z)))  # p-valor

# Texto para el recuadro de interpretación
texto_resultado <- if (p_value < 0.05) {
  paste0("Resultado: Se RECHAZA H0\n",
         "p-valor = ", round(p_value, 4), "\n",
         "La proporción es distinta de 30%.")
} else {
  paste0("Resultado: NO se rechaza H0\n",
         "p-valor = ", round(p_value, 4), "\n",
         "No hay evidencia suficiente para afirmar que la proporción es distinta de 30%.")
}

# Mostrar resultado tambiƩn en consola
cat("Proporción muestral =", round(phat, 4), "\n")
## Proporción muestral = 0.2
cat("Z =", round(z, 4), "\n")
## Z = -2.1822
cat("p-valor =", round(p_value, 4), "\n")
## p-valor = 0.0291
cat(texto_resultado, "\n")
## Resultado: Se RECHAZA H0
## p-valor = 0.0291
## La proporción es distinta de 30%.
# Crear curva de distribución normal
x_vals <- seq(-4, 4, length.out = 500)
y_vals <- dnorm(x_vals)
df_plot <- data.frame(Z = x_vals, Densidad = y_vals)

# GrÔfico con curva de Gauss, líneas críticas, z observado e interpretación
ggplot(df_plot, aes(x = Z, y = Densidad)) +
  geom_line(color = "blue", size = 1) +
  geom_vline(xintercept = z, color = "black", linetype = "dotted", size = 1.2) +
  geom_vline(xintercept = qnorm(0.975), color = "red", linetype = "dashed") +
  geom_vline(xintercept = -qnorm(0.975), color = "red", linetype = "dashed") +
  annotate("text", x = 3.5, y = 0.3, label = texto_resultado,
           hjust = 1, vjust = 1, size = 4, color = "black", fontface = "bold") +
  labs(title = "Distribución normal estÔndar para prueba de proporción",
       subtitle = paste0("Z = ", round(z, 2), 
                         ", líneas rojas = valores críticos ±1.96"),
       x = "Z", y = "Densidad") +
  theme_minimal()

# Cargar librerĆ­as necesarias
library(readxl)
library(ggplot2)

# Leer los datos
datos <- read_excel("Base_Datos_Mineralogia.xlsx")

# ParƔmetros
var_hipotetica <- 200  # H0: varianza = 200
n <- nrow(datos)
gl <- n - 1
var_muestral <- var(datos$`Contenido_Silice_%`)  # ”Aquí estÔ corregido!

# EstadĆ­stico chi-cuadrado
chi2_stat <- (gl * var_muestral) / var_hipotetica

# Valores crĆ­ticos
alpha <- 0.05
chi2_izq <- qchisq(alpha / 2, df = gl)
chi2_der <- qchisq(1 - alpha / 2, df = gl)

# p-value bilateral
if (chi2_stat < var_hipotetica) {
  p_value <- 2 * pchisq(chi2_stat, df = gl)
} else {
  p_value <- 2 * (1 - pchisq(chi2_stat, df = gl))
}

# Interpretación en texto
texto_resultado <- if (p_value < alpha) {
  paste0("Resultado: Se RECHAZA H0\n",
         "p-valor = ", round(p_value, 4), "\n",
         "La varianza es distinta de 200.")
} else {
  paste0("Resultado: NO se rechaza H0\n",
         "p-valor = ", round(p_value, 4), "\n",
         "No hay evidencia suficiente para afirmar que la varianza es distinta de 200.")
}

# Mostrar resultados en consola
cat("Varianza muestral =", round(var_muestral, 4), "\n")
## Varianza muestral = 191.2639
cat("Chi² =", round(chi2_stat, 4), "\n")
## Chi² = 94.6756
cat("p-valor =", round(p_value, 4), "\n")
## p-valor = 0.7915
cat(texto_resultado, "\n")
## Resultado: NO se rechaza H0
## p-valor = 0.7915
## No hay evidencia suficiente para afirmar que la varianza es distinta de 200.
# Curva chi-cuadrado
x_vals <- seq(0, max(chi2_der * 1.5, chi2_stat + 10), length.out = 500)
y_vals <- dchisq(x_vals, df = gl)
df_plot <- data.frame(x = x_vals, y = y_vals)

# GrÔfico con interpretación
ggplot(df_plot, aes(x = x, y = y)) +
  geom_line(color = "blue", size = 1) +
  geom_vline(xintercept = chi2_izq, color = "red", linetype = "dashed") +
  geom_vline(xintercept = chi2_der, color = "red", linetype = "dashed") +
  geom_vline(xintercept = chi2_stat, color = "black", linetype = "dotted", size = 1.2) +
  annotate("text", x = max(x_vals) * 0.95, y = max(y_vals) * 0.9,
           label = texto_resultado, hjust = 1, vjust = 1,
           size = 4, color = "black", fontface = "bold") +
  labs(title = "Distribución Chi-cuadrado para prueba de varianza",
       subtitle = paste0("Chi² observado = ", round(chi2_stat, 2),
                         ", lĆ­neas rojas = valores crĆ­ticos"),
       x = expression(chi^2), y = "Densidad") +
  theme_minimal()