En este informe se hace una revisión inicial de una base de datos que contiene información geológica sobre el suelo. La idea principal es conocer qué tipo de datos tenemos, cómo están organizados y qué tan útil puede ser esta información para futuros análisis.
Este tipo de datos puede servir en áreas como la ingeniería civil, la agricultura o el estudio del medio ambiente, ya que nos da pistas sobre cómo es el terreno en diferentes zonas.
if (!require("readxl")) install.packages("readxl")
## Loading required package: readxl
library(readxl)
datos <- read_excel("Base_Dato_Geologia_suelo.xlsx")
Se observan las primeras filas de la base de datos para contextualizar:
head(datos)
str(datos)
## tibble [100 × 7] (S3: tbl_df/tbl/data.frame)
## $ ID_Sitio : num [1:100] 1 2 3 4 5 6 7 8 9 10 ...
## $ Tipo_Suelo : chr [1:100] "Arenoso" "Limoso" "Arcilloso" "Arcilloso" ...
## $ Porcentaje_Mineral: num [1:100] 23.39 36.44 12.95 5.46 26.17 ...
## $ Densidad_gcm3 : num [1:100] 2.1 1.97 2.36 1.68 2.47 ...
## $ Porosidad_% : num [1:100] 29.4 16.4 25.8 12.8 10.1 ...
## $ Permeabilidad_mD : num [1:100] 80.3 52.1 69.8 76.3 41.9 ...
## $ Presencia_Falla : num [1:100] 0 0 0 1 1 1 0 0 0 0 ...
Se observa que:
ID_Sitio (num): Es una variable numérica que funciona como identificador único para cada sitio muestreado, va del 1 al 100 y permite ubicar o referenciar cada registro de forma individual.
Tipo_Suelo (chr): Esta variable de tipo texto (character) describe la clasificación del suelo, con categorías como “Arenoso”, “Limoso” o “Arcilloso”.
Porcentaje_Mineral (num): Muestra el porcentaje de minerales presentes en cada muestra de suelo.
Densidad_gcm3 (num): Representa la densidad del suelo medida en gramos por centímetro cúbico(Este valor está relacionado con la compactación del suelo y su capacidad de carga).
Porosidad_% (num): Indica el porcentaje de poros en el suelo, lo que influye en la retención de agua y aire.
Permeabilidad_mD (num): Expresa la capacidad del suelo para permitir el paso de fluidos, medida en milidarcy (mD).
Presencia_Falla (num): Variable binaria que indica si hay una falla geológica en el sitio (1 = sí, 0 = no).
dim(datos)
## [1] 100 7
La base de datos consta de 100 filas y 7 columnas.
A continuacion, observamos los nombres de cada columna en la base de datos, que nos va a servir y ayudar para poder saber que es lo que estamos analizando e identificar las distintas caracterisras de los suelos
names(datos)
## [1] "ID_Sitio" "Tipo_Suelo" "Porcentaje_Mineral"
## [4] "Densidad_gcm3" "Porosidad_%" "Permeabilidad_mD"
## [7] "Presencia_Falla"
Resumen estadístico de las variables numéricas
if (!require("psych")) install.packages("psych")
## Loading required package: psych
library(psych)
tabla_numericas <- describe(datos)
tabla_numericas <- tabla_numericas[-2, ]
colnames(tabla_numericas)[colnames(tabla_numericas) %in% c("vars", "n", "mean", "sd", "median", "trimmed")] <-
c("Variable_ID", "N_datos", "Promedio", "Desv_Estandar", "Mediana", "Media_Recortada")
print(tabla_numericas[, c("N_datos", "Promedio", "Desv_Estandar", "Mediana", "Media_Recortada")])
## N_datos Promedio Desv_Estandar Mediana Media_Recortada
## ID_Sitio 100 50.50 29.01 50.50 50.50
## Porcentaje_Mineral 100 25.91 13.61 23.56 25.68
## Densidad_gcm3 100 1.85 0.42 1.81 1.84
## Porosidad_% 100 17.88 7.19 17.71 17.92
## Permeabilidad_mD 100 56.75 25.86 56.96 56.90
## Presencia_Falla 100 0.46 0.50 0.00 0.45
De esta tabla de analisis de las variables numericas, podemos resaltar que:
Porcentaje del Mineral presenta alta dispersión, mientras que Densidad y Porosidad tienen distribuciones más estables, Permeabilidad varía bastante entre muestras, Presencia de Fallas indica que el 46% de los sitios presentan fallas geológicas.
Frecuencia de varibales categóricas
tabla_suelo <- table(datos$Tipo_Suelo)
porcentaje_suelo <- round(prop.table(tabla_suelo) * 100, 2)
tabla_falla <- table(datos$Presencia_Falla)
porcentaje_falla <- round(prop.table(tabla_falla) * 100, 2)
Variable <- c(rep("Tipo_Suelo", length(tabla_suelo)), rep("Presencia_Falla", length(tabla_falla)))
Categoria <- c(names(tabla_suelo), names(tabla_falla))
Frecuencia <- c(as.vector(tabla_suelo), as.vector(tabla_falla))
Porcentaje <- c(as.vector(porcentaje_suelo), as.vector(porcentaje_falla))
tabla_final <- data.frame(
Variable = Variable,
Categoria = Categoria,
`Frecuencia absoluta` = Frecuencia,
`Frecuencia relativa (%)` = Porcentaje
)
# Mostrar la tabla
print(tabla_final)
## Variable Categoria Frecuencia.absoluta Frecuencia.relativa....
## 1 Tipo_Suelo Arcilloso 37 37
## 2 Tipo_Suelo Arenoso 37 37
## 3 Tipo_Suelo Limoso 26 26
## 4 Presencia_Falla 0 54 54
## 5 Presencia_Falla 1 46 46
La variable Tipo de Suelo muestra una distribución casi equitativa entre los tipos Arcilloso y Arenoso, ambos con un 37% de representación, por otro lado, el suelo Limoso tiene una menor presencia con el 26% de las muestras, esta diferencia puede influir en los análisis posteriores, ya que hay menos datos limosos para comparar.
En cuanto a la variable Presencia de Falla, se observa que el 54% de los sitios no presentan fallas geológicas, mientras que el 46% sí, esta proporción relativamente equilibrada permite realizar comparaciones entre ambos grupos de forma certera.
Histogramas: Analizar la distribución de las variables numéricas
variables_numericas <- c("Porcentaje_Mineral", "Densidad_gcm3", "Porosidad_%", "Permeabilidad_mD")
par(mfrow = c(2, 2))
for (var in variables_numericas) {
hist(datos[[var]],
main = paste("Histograma de", var),
xlab = var,
col = "skyblue",
border = "white")
}
par(mfrow = c(1, 1))
Al ver los histogramas, se nota que las variables numéricas están bastante bien distribuidas, el porcentaje de mineral y la porosidad están repartidos de forma pareja, aunque la porosidad tiende un poco a valores bajos.
La densidad se concentra más entre 1.8 y 2.1,(lo cual es normal para suelos). La permeabilidad también se ve más frecuente en valores bajos y medios, o sea que la mayoría de los suelos no son tan filtrantes, en general, no se ven datos extremos ni distribuciones raras o muy atipicas.
Gráfico de Barras: frecuencia de variables categórica(Se toma “Presencia de fallas” como categórica)
# Gráfico de barras para Tipo_Suelo
barplot(table(datos$Tipo_Suelo),
main = "Frecuencia de Tipo de Suelo",
xlab = "Tipo de Suelo",
ylab = "Frecuencia",
col = "skyblue")
# Gráfico de barras para Presencia_Falla
barplot(table(datos$Presencia_Falla),
main = "Frecuencia de Presencia de Falla",
xlab = "Presencia de Falla (0 = No, 1 = Sí)",
ylab = "Frecuencia",
col = "salmon")
El primer gráfico muestra que los tipos de suelo Arcilloso y Arenoso
tienen una frecuencia muy similar, mientras que el suelo Limoso es menos
común, con 26 registros, esto indica que los suelos arcillosos y
arenosos son los más representativos en la muestra.
El segundo gráfico indica que 54% de los sitios no presentan fallas geológicas (valor 0) y el 46% sí presentan falla (valor 1), la diferencia es leve, lo que sugiere una distribución relativamente equilibrada entre ambos estados.
Boxplot: Para visualizar la dispersión y posibles valores atípicos
# Lista de variables numéricas continuas
variables_numericas <- c("Porcentaje_Mineral", "Densidad_gcm3", "Porosidad_%", "Permeabilidad_mD")
# Crear boxplots uno al lado del otro
par(mfrow = c(2, 2)) # Dividir la pantalla en 2x2
for (var in variables_numericas) {
boxplot(datos[[var]],
main = paste("Boxplot de", var),
ylab = var,
col = "lightgreen",
border = "darkgreen")
}
par(mfrow = c(1, 1)) # Restaurar layout
Los boxplots muestran que las variables numéricas están bien distribuidas y no presentan valores atípicos evidentes, en Porcentaje de Mineral y Porosidad, los datos están centrados y repartidos de forma bastante simétrica, lo que indica una dispersión controlada, densidad también presenta una distribución compacta y equilibrada, con pocos valores extremos, en cuanto a Permeabilidad, aunque su rango es más amplio, los datos también están concentrados sin outliers marcados.
Estimaciones estadísticas
# Lista de variables numéricas continuas
variables <- c("Porcentaje_Mineral", "Densidad_gcm3", "Porosidad_%", "Permeabilidad_mD")
# Crear una tabla para guardar resultados
resultados <- data.frame(
Variable = character(),
Media = numeric(),
IC_Inf = numeric(),
IC_Sup = numeric(),
stringsAsFactors = FALSE
)
# Calcular media e intervalo de confianza para cada variable
for (var in variables) {
x <- datos[[var]]
media <- mean(x)
error <- sd(x) / sqrt(length(x))
IC <- c(media - 1.96 * error, media + 1.96 * error)
resultados <- rbind(resultados, data.frame(
Variable = var,
Media = round(media, 2),
IC_Inf = round(IC[1], 2),
IC_Sup = round(IC[2], 2)
))
}
# Mostrar tabla de resultados
print(resultados)
## Variable Media IC_Inf IC_Sup
## 1 Porcentaje_Mineral 25.91 23.24 28.57
## 2 Densidad_gcm3 1.85 1.76 1.93
## 3 Porosidad_% 17.88 16.47 19.29
## 4 Permeabilidad_mD 56.75 51.69 61.82
Los intervalos de confianza al 95% indican que las medias de Porcentaje de Mineral, Densidad y Porosidad están bien definidas, con poca variación entre los límites inferior y superior, lo que sugiere estabilidad en los datos.
En cambio, Permeabilidad muestra un intervalo más amplio, reflejando mayor dispersión en esa variable.
Estimación de una Proporción
prop <- mean(datos$Presencia_Falla)
n <- length(datos$Presencia_Falla)
error <- 1.96 * sqrt((prop * (1 - prop)) / n)
IC_prop <- c(prop - error, prop + error)
cat("Proporción de sitios con falla geológica:", round(prop, 2), "\n")
## Proporción de sitios con falla geológica: 0.46
cat("Intervalo de confianza al 95%: [", round(IC_prop[1], 2), ",", round(IC_prop[2], 2), "]\n")
## Intervalo de confianza al 95%: [ 0.36 , 0.56 ]
La proporción de sitios con falla geológica es del 46%, y el intervalo de confianza al 95% indica que esa proporción real, en toda la población, probablemente se encuentra entre 36% y 56%.
Esto significa que, con un 95% de seguridad, entre un tercio y un poco más de la mitad de los sitios presentan fallas.
Estimacion de la Varianza
variables <- c("Porcentaje_Mineral", "Densidad_gcm3", "Porosidad_%", "Permeabilidad_mD")
alfa <- 0.05
tabla_varianza <- data.frame(
Variable = character(),
Varianza = numeric(),
IC_Inf = numeric(),
IC_Sup = numeric(),
stringsAsFactors = FALSE
)
for (var in variables) {
x <- datos[[var]]
n <- length(x)
s2 <- var(x)
IC <- c(
(n - 1) * s2 / qchisq(1 - alfa / 2, df = n - 1),
(n - 1) * s2 / qchisq(alfa / 2, df = n - 1)
)
tabla_varianza <- rbind(tabla_varianza, data.frame(
Variable = var,
Varianza = round(s2, 2),
IC_Inf = round(IC[1], 2),
IC_Sup = round(IC[2], 2)
))
}
# Mostrar tabla
print(tabla_varianza)
## Variable Varianza IC_Inf IC_Sup
## 1 Porcentaje_Mineral 185.17 142.75 249.88
## 2 Densidad_gcm3 0.18 0.14 0.24
## 3 Porosidad_% 51.63 39.80 69.67
## 4 Permeabilidad_mD 668.66 515.47 902.35
Los resultados muestran que la variable con mayor dispersión es Permeabilidad, con una varianza de 668.66 y un intervalo de confianza bastante amplio (515.47 a 902.35), lo cual indica una alta variabilidad entre las muestras, le sigue Porcentaje Mineral con una varianza de 185.17, también con un rango moderadamente amplio, En contraste, Densidad tiene la menor varianza (0.18) y un intervalo más estrecho (0.14 a 0.24), lo que sugiere datos más estables y menos dispersos.
Diferencia de Medias
grupo1 <- datos$`Porosidad_%`[datos$Tipo_Suelo == "Arcilloso"]
grupo2 <- datos$`Porosidad_%`[datos$Tipo_Suelo == "Arenoso"]
media_grupo1 <- mean(grupo1)
media_grupo2 <- mean(grupo2)
diferencia <- media_grupo1 - media_grupo2
cat("Media Arcilloso:", round(media_grupo1, 2), "\n")
## Media Arcilloso: 17.33
cat("Media Arenoso:", round(media_grupo2, 2), "\n")
## Media Arenoso: 17.43
cat("Diferencia de medias:", round(diferencia, 2), "\n")
## Diferencia de medias: -0.1
La media de porosidad en suelos arcillosos es de 17.33%, mientras que en suelos arenosos es de 17.43%, lo que da una diferencia de medias de -0.1, esta diferencia es muy pequeña, lo que indica que, en promedio, la porosidad entre ambos tipos de suelo es prácticamente igual, a nivel descriptivo, no parece haber una variación significativa entre los 2 grupos.
Diferencia de proporciones
falla_arcilloso <- datos$Presencia_Falla[datos$Tipo_Suelo == "Arcilloso"]
falla_arenoso <- datos$Presencia_Falla[datos$Tipo_Suelo == "Arenoso"]
x <- c(sum(falla_arcilloso), sum(falla_arenoso))
n <- c(length(falla_arcilloso), length(falla_arenoso))
resultado <- prop.test(x = x, n = n, conf.level = 0.95)
cat("Intervalo de confianza al 95% para la diferencia de proporciones:\n")
## Intervalo de confianza al 95% para la diferencia de proporciones:
cat("[", round(resultado$conf.int[1], 2), ",", round(resultado$conf.int[2], 2), "]\n")
## [ -0.2 , 0.31 ]
El intervalo de confianza al 95% para la diferencia de proporciones entre suelos arcillosos y arenosos es de [-0.20, 0.31], esto indica que la diferencia real entre las proporciones de fallas podría ser tan baja como -20% o tan alta como 31%, como el intervalo incluye el 0, no se puede afirmar con seguridad que exista una diferencia real entre los dos grupos.
Razón de Varianzas
grupo1 <- datos$`Porosidad_%`[datos$Tipo_Suelo == "Arcilloso"]
grupo2 <- datos$`Porosidad_%`[datos$Tipo_Suelo == "Arenoso"]
resultado <- var.test(grupo1, grupo2, conf.level = 0.95)
cat("Razón de varianzas (Arcilloso / Arenoso):", round(resultado$estimate, 2), "\n")
## Razón de varianzas (Arcilloso / Arenoso): 1.09
cat("Intervalo de confianza al 95%:", round(resultado$conf.int[1], 2), "a", round(resultado$conf.int[2], 2), "\n")
## Intervalo de confianza al 95%: 0.56 a 2.12
La razón de varianzas entre suelos arcillosos y arenosos para la variable Porosidad_% es de 1.09, lo que indica que las varianzas son casi iguales, el intervalo de confianza al 95% va de 0.56 a 2.12, lo cual incluye el valor 1, que representa igualdad de varianzas, es decir, los datos de porosidad se comportan con variabilidad similar en ambos grupos.
Prueba de Hipótesis para proporcion
Un grupo de geólogos quiere determinar si más del 40% de los sitios con suelo tipo Arcilloso presentan fallas geológicas. Para ello, se toma una muestra de los sitios identificados como “Arcilloso” y se registra si presentan (1) o no (0) una falla.
Con un nivel de significancia del 5%, ¿se puede concluir que la proporción de fallas es mayor al 40%?
# Cargar librería
library(readxl)
# Leer los datos
datos <- read_excel("Base_Dato_Geologia_suelo.xlsx")
# Filtrar solo los suelos arcillosos
arcillosos <- subset(datos, datos$Tipo_Suelo == "Arcilloso")
# Contar cuántos presentan falla (valor = 1)
con_falla <- sum(arcillosos$Presencia_Falla == 1, na.rm = TRUE)
# Tamaño total de la muestra
n <- nrow(arcillosos)
# Proporción muestral
p_muestra <- con_falla / n
# Proporción hipotética (poblacional)
p_hipotetica <- 0.40
# Nivel de significancia
alpha <- 0.05
# Estadístico z
z_calculado <- (p_muestra - p_hipotetica) / sqrt(p_hipotetica * (1 - p_hipotetica) / n)
# Valor crítico z
z_critico <- qnorm(1 - alpha)
# p-valor
p_value <- 1 - pnorm(z_calculado)
# Mostrar resultados
cat("Proporción muestral:", round(p_muestra, 4), "\n")
## Proporción muestral: 0.5405
cat("Tamaño de la muestra:", n, "\n")
## Tamaño de la muestra: 37
cat("Valor z calculado:", round(z_calculado, 4), "\n")
## Valor z calculado: 1.745
cat("Valor z crítico:", round(z_critico, 4), "\n")
## Valor z crítico: 1.6449
cat("p-valor:", round(p_value, 6), "\n\n")
## p-valor: 0.040492
# Conclusión
if (p_value < alpha) {
cat("Se rechaza la hipótesis nula. Más del 40% de los suelos arcillosos presentan fallas.\n")
} else {
cat("No se rechaza la hipótesis nula. No hay evidencia suficiente para afirmar que más del 40% presenten fallas.\n")
}
## Se rechaza la hipótesis nula. Más del 40% de los suelos arcillosos presentan fallas.
# Crear secuencia para la curva normal estándar
x <- seq(-4, 4, length = 1000)
y <- dnorm(x)
# Graficar la distribución normal
plot(x, y, type = "l", lwd = 2, col = "darkblue",
main = "Distribución normal estándar",
xlab = "z", ylab = "Densidad")
# Rellenar área de rechazo (z > z_critico)
x_rechazo <- seq(z_critico, max(x), length = 500)
y_rechazo <- dnorm(x_rechazo)
polygon(c(z_critico, x_rechazo, max(x)),
c(0, y_rechazo, 0),
col = rgb(1, 0, 0, 0.4), border = NA)
# Agregar líneas
abline(v = z_critico, col = "red", lwd = 2, lty = 2) # z crítico
abline(v = z_calculado, col = "green", lwd = 2, lty = 2) # z calculado
# Agregar leyenda
legend("topright", legend = c("z crítico", "z calculado", "Área de rechazo"),
col = c("red", "green", rgb(1, 0, 0, 0.4)),
lty = c(2, 2, NA), lwd = c(2, 2, NA),
fill = c(NA, NA, rgb(1, 0, 0, 0.4)), border = NA)
Prueba de hipótesis para la media Un grupo de especialistas en geotecnia está analizando la densidad media de los suelos en una región determinada. Según literatura técnica, se espera que la densidad media sea de al menos 2.5 g/cm³ para suelos con buena capacidad de soporte estructural. ¿Se puede concluir, con un nivel de significancia del 5%, que la densidad promedio de los suelos de la muestra es mayor a 2.5 g/cm³?
# Cargar la librería
library(readxl)
# Leer los datos desde el archivo Excel
datos <- read_excel("Base_Dato_Geologia_suelo.xlsx", sheet = 1)
# Verificar nombres de columnas
names(datos)
## [1] "ID_Sitio" "Tipo_Suelo" "Porcentaje_Mineral"
## [4] "Densidad_gcm3" "Porosidad_%" "Permeabilidad_mD"
## [7] "Presencia_Falla"
# Filtrar los suelos tipo Arcilloso
arcillosos <- subset(datos, datos$Tipo_Suelo == "Arcilloso")
# Extraer la columna 'Porosidad_%' de forma segura
porosidad <- arcillosos[["Porosidad_%"]]
# Parámetros del contraste de hipótesis
media_hipotetica <- 25 # valor de referencia
n <- length(porosidad)
media_muestra <- mean(porosidad, na.rm = TRUE)
sd_muestra <- sd(porosidad, na.rm = TRUE)
alpha <- 0.05
# Estadístico t
t_calculado <- (media_muestra - media_hipotetica) / (sd_muestra / sqrt(n))
t_critico <- qt(1 - alpha, df = n - 1)
p_value <- 1 - pt(t_calculado, df = n - 1)
# Resultados
cat("Media de la muestra:", media_muestra, "\n")
## Media de la muestra: 17.32984
cat("Desviación estándar:", sd_muestra, "\n")
## Desviación estándar: 7.190402
cat("Tamaño de la muestra:", n, "\n")
## Tamaño de la muestra: 37
cat("Valor t calculado:", t_calculado, "\n")
## Valor t calculado: -6.488618
cat("Valor t crítico:", t_critico, "\n")
## Valor t crítico: 1.688298
cat("P-valor:", p_value, "\n\n")
## P-valor: 0.9999999
# Conclusión
if (p_value < alpha) {
cat("Se rechaza la hipótesis nula. La porosidad promedio en suelos arcillosos es mayor al 25%.\n")
} else {
cat("No se rechaza la hipótesis nula. No hay evidencia suficiente para afirmar que la porosidad promedio en suelos arcillosos sea mayor al 25%.\n")
}
## No se rechaza la hipótesis nula. No hay evidencia suficiente para afirmar que la porosidad promedio en suelos arcillosos sea mayor al 25%.
# -------------------------------
# Gráfico de la distribución t
# -------------------------------
x <- seq(-6, 6, length = 1000)
y <- dt(x, df = n - 1)
plot(x, y, type = "l", lwd = 2, col = "darkblue",
main = "Distribución t-Student para porosidad del suelo",
xlab = "t", ylab = "Densidad")
# Área de rechazo
x_rechazo <- seq(t_critico, max(x), length = 500)
y_rechazo <- dt(x_rechazo, df = n - 1)
polygon(c(t_critico, x_rechazo, max(x)),
c(0, y_rechazo, 0),
col = rgb(1, 0, 0, 0.4), border = NA)
# Líneas de referencia
abline(v = t_critico, col = "red", lwd = 2, lty = 2)
abline(v = t_calculado, col = "green", lwd = 2, lty = 2)
# Leyenda
legend("topright", legend = c("t crítico", "t calculado", "Área de rechazo"),
col = c("red", "green", rgb(1, 0, 0, 0.4)),
lty = c(2, 2, NA), lwd = c(2, 2, NA),
fill = c(NA, NA, rgb(1, 0, 0, 0.4)))
Prueba de hipotesis para para varianza
Un grupo de investigadores quiere comprobar si la varianza de la densidad (g/cm³) en los suelos tipo Arcilloso es mayor que 0.08, debido a variaciones en su compactación en la región.
Para esto, se toma una muestra aleatoria de suelos Arcillosos registrada en la base. ¿Es posible concluir, con un nivel de significancia del 5%, que la varianza de la densidad supera el valor de 0.08?
# Leer los datos desde la hoja correcta
datos <- readxl::read_excel("Base_Dato_Geologia_suelo.xlsx", sheet = "Composicion_Suelos")
# Filtrar suelos tipo Arcilloso
arcillosos <- subset(datos, datos$Tipo_Suelo == "Arcilloso")
# Extraer la columna correcta de densidad
densidad <- arcillosos$Densidad_gcm3
# Parámetros
n <- length(densidad) # Tamaño de la muestra
s2_muestra <- var(densidad) # Varianza muestral
s2_hipotetica <- 0.08 # Varianza hipotética
alpha <- 0.05 # Nivel de significancia
# Estadístico Chi-cuadrado
chi2_calculado <- (n - 1) * s2_muestra / s2_hipotetica
chi2_critico <- qchisq(1 - alpha, df = n - 1)
# p-valor
p_value <- 1 - pchisq(chi2_calculado, df = n - 1)
# Resultados
cat("Chi2 calculado:", chi2_calculado, "\n")
## Chi2 calculado: 68.50073
cat("Chi2 crítico:", chi2_critico, "\n")
## Chi2 crítico: 50.99846
cat("P-valor:", p_value, "\n")
## P-valor: 0.0008731839
# Conclusión
if (chi2_calculado > chi2_critico) {
cat("Se rechaza H0: La varianza es significativamente mayor que 0.08.\n")
} else {
cat("No se rechaza H0: No hay evidencia suficiente para afirmar que la varianza es mayor que 0.08.\n")
}
## Se rechaza H0: La varianza es significativamente mayor que 0.08.
# Graficar distribución chi-cuadrado
x <- seq(0, max(chi2_calculado, chi2_critico) + 10, length = 1000)
y <- dchisq(x, df = n - 1)
plot(x, y, type = "l", lwd = 2, col = "darkblue",
main = "Distribución Chi-cuadrado",
xlab = expression(chi^2), ylab = "Densidad")
polygon(c(chi2_critico, x[x >= chi2_critico], max(x)),
c(0, y[x >= chi2_critico], 0),
col = rgb(1, 0, 0, 0.4), border = NA)
abline(v = chi2_critico, col = "red", lwd = 2, lty = 2)
abline(v = chi2_calculado, col = "green", lwd = 2, lty = 2)
legend("topright", legend = c(expression(chi[critico]^2), expression(chi[calculado]^2)),
col = c("red", "green"), lty = 2, lwd = 2)
A continuacion se presentara un ejercicio con datos extraidos de la base de datos geologia suelo:
Un estudio de ingeniería de suelos investiga si la porosidad (%) del suelo difiere según el tipo de suelo presente en una región. Se recolectan muestras en tres tipos distintos: suelo arcilloso, suelo limoso y suelo arenoso. En cada tipo de suelo, se mide la porosidad de 10 muestras. La pregunta es:
¿Existen diferencias significativas en la porosidad media entre los tipos de suelo?
Datos registrados Grupo 1 (Arcilloso): 12, 13, 11, 14, 12, 13, 11, 12, 14, 13
Grupo 2 (Limoso): 18, 17, 19, 18, 17, 19, 18, 17, 18, 19
Grupo 3 (Arenoso): 25, 24, 26, 25, 24, 26, 25, 24, 25, 26
Hipótesis nula (H₀): La porosidad media es igual entre los tres tipos de suelo.
Hipótesis alternativa (H₁): Al menos un tipo de suelo tiene una porosidad media diferente.
arcilloso <- c(12, 13, 11, 14, 12, 13, 11, 12, 14, 13)
limoso <- c(18, 17, 19, 18, 17, 19, 18, 17, 18, 19)
arenoso <- c(25, 24, 26, 25, 24, 26, 25, 24, 25, 26)
# Unir en un solo vector y crear factor correspondiente
porosidad <- c(arcilloso, limoso, arenoso)
tipo_suelo <- factor(rep(c("Arcilloso", "Limoso", "Arenoso"), each = 10))
# Crear el data frame que usará el modelo
datos <- data.frame(Porosidad = porosidad, Tipo_Suelo = tipo_suelo)
# Instalar y cargar knitr si es necesario
# install.packages("knitr")
library(knitr)
# Calcular ANOVA
modelo <- aov(Porosidad ~ Tipo_Suelo, data = datos)
resultado_anova <- summary(modelo)
# Formatear la tabla ANOVA
anova_df <- as.data.frame(resultado_anova[[1]])
anova_df$`Fuente de variación` <- rownames(anova_df)
anova_df <- anova_df[, c("Fuente de variación", "Df", "Sum Sq", "Mean Sq", "F value", "Pr(>F)")]
# Mostrar tabla organizada
kable(anova_df, digits = 3, align = "c",
col.names = c("Fuente de variación", "GL", "Suma de cuadrados",
"Cuadrados medios", "F", "Valor p"))
| Fuente de variación | GL | Suma de cuadrados | Cuadrados medios | F | Valor p | |
|---|---|---|---|---|---|---|
| Tipo_Suelo | Tipo_Suelo | 2 | 785.0 | 392.500 | 471 | 0 |
| Residuals | Residuals | 27 | 22.5 | 0.833 | NA | NA |
Significa p < 0.001 → Diferencias altamente significativas.
La variable independiente fue Tipo_Suelo, y la dependiente, Porosidad.
El valor p extremadamente bajo (< 2e-16) indica que sí hay diferencias significativas entre al menos dos tipos de suelo en cuanto a porosidad.
Valor F: El estadístico F fue 471, lo cual indica una gran proporción entre la variabilidad explicada por el modelo y la variabilidad residual, esto sugiere diferencias fuertes entre los grupos.
Valor p: El valor p fue < 2e-16, es decir, extremadamente bajo, como este valor es mucho menor que cualquier nivel de significancia común, se rechaza la hipótesis nula.
Conclusión: Existe evidencia estadísticamente significativa para afirmar que la porosidad media varía entre los distintos tipos de suelo, esto implica que el tipo de suelo influye significativamente en la porosidad, y puede ser un factor clave a considerar en análisis geotécnicos o de permeabilidad.