En este documento, exploraremos el diseño completamente al azar, el cual es el diseño experimental más simple y proporciona el máximo número de grados de libertad para el error.
Instalaremos tidyverse debido a recientes actualizaciones en el paquete ggplot2.
# install.packages("tidyverse")
library(tidyverse)
Un ingeniero de desarrollo está interesado en la resistencia a la tensión de una nueva fibra sintética para camisas de caballero. Se sabe que la calidad de la tela se afecta por la composición de algodón, variando entre 10% y 40%. Se decide probar cinco niveles de algodón (15%, 20%, 25%, 30% y 35%) con 5 replicaciones por nivel.
A continuación, elaboramos la tabla de datos directamente en R.
# Datos de resistencia por porcentaje de algodón
Resistencia <- c(7, 7, 15, 11, 9, 12, 17, 12, 18, 18, 14, 18, 18, 19, 19, 19, 25, 22, 19, 23, 7, 10, 11, 15, 11)
# Asignación de porcentajes como factor
Porcentaje <- factor(rep(c("15%", "20%", "25%", "30%", "35%"), each = 5))
# Creación del data frame
Datos <- data.frame(Porcentaje, Resistencia)
Guardamos los datos en formato CSV para su uso externo.
write.csv(Datos, "exp_algodon.csv", row.names = FALSE)
Limpiamos el entorno y cargamos el archivo generado previamente.
rm(list = ls())
library(readr)
library(tidyverse)
Datos <- read_csv("exp_algodon.csv")
## Rows: 25 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Porcentaje
## dbl (1): Resistencia
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Generamos una tabla con promedios, desviación estándar, error estándar y límites de confianza.
# Calculamos estadísticas descriptivas por porcentaje
estadisticas <- Datos %>%
group_by(Porcentaje) %>%
summarise(
Promedio = mean(Resistencia, na.rm = TRUE),
DE = sd(Resistencia, na.rm = TRUE),
n = n(),
Error = DE/sqrt(n),
Li = Promedio - Error,
Ls = Promedio + Error
)
# Mostramos la tabla de estadísticas
estadisticas
## # A tibble: 5 × 7
## Porcentaje Promedio DE n Error Li Ls
## <chr> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 15% 9.8 3.35 5 1.50 8.30 11.3
## 2 20% 15.4 3.13 5 1.4 14 16.8
## 3 25% 17.6 2.07 5 0.927 16.7 18.5
## 4 30% 21.6 2.61 5 1.17 20.4 22.8
## 5 35% 10.8 2.86 5 1.28 9.52 12.1
Usamos gráficos de base para visualizar la variabilidad entre los tratamientos.
estadisticas %>%
ggplot(aes(x = Porcentaje, y = Promedio, col = Porcentaje)) +
geom_point(size = 3, shape = 21, fill = "black") +
geom_errorbar(aes(ymin = Li, ymax = Ls), width = 0.2) +
theme_minimal() +
labs(x = "Porcentaje de Algodón", y = "Resistencia", title = "Error Estándar de la Resistencia")
ggplot(Datos, aes(x = Porcentaje, y = Resistencia, fill = Porcentaje)) +
geom_violin(trim = FALSE) +
geom_boxplot(width = 0.1, fill = "white") +
theme_minimal() +
labs(title = "Gráfico de Violín de Resistencia por Porcentaje de Algodón")
ggplot(Datos, aes(x = Resistencia)) +
geom_histogram(aes(y = ..density..), bins = 10, fill = "skyblue", color = "black") +
geom_density(color = "red", size = 1) +
theme_minimal() +
labs(title = "Histograma y Curva de Densidad de Resistencia")
## 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: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Realizamos un ANOVA para evaluar los efectos del porcentaje de algodón en la resistencia.
library(agricolae)
#data(package = "agricolae")
#data("corn")
#?corn
# convertir factor los tratamientos
Datos$Porcentaje <- as.factor(Datos$Porcentaje)
anova_telas <- aov(Resistencia ~ Porcentaje, data = Datos)
summary(anova_telas)
## Df Sum Sq Mean Sq F value Pr(>F)
## Porcentaje 4 475.8 118.94 14.76 9.13e-06 ***
## Residuals 20 161.2 8.06
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
qf(0.05, df1 = 4, df2 = 20, lower.tail = F)
## [1] 2.866081
# Ft = 2.866081
# Fc = 14.76
Aplicamos la prueba de Duncan para comparar las medias de los grupos.
compara_duncan <- duncan.test(anova_telas, "Porcentaje")
compara_duncan$groups
## Resistencia groups
## 30% 21.6 a
## 25% 17.6 b
## 20% 15.4 b
## 35% 10.8 c
## 15% 9.8 c
bar.group(compara_duncan$groups, ylim = c(0, max(compara_duncan$groups$Resistencia) * 1.4))
grupos_duncan <- compara_duncan$groups
grupos_duncan$Porcentaje <- rownames(grupos_duncan)
rownames(grupos_duncan) <- NULL
ggplot(grupos_duncan, aes(x = Porcentaje, y = Resistencia)) +
geom_col(fill = "lightblue", col = "black") +
geom_text(aes(label = groups), vjust = -0.5, size = 5, fontface = "bold") +
theme_minimal() +
labs(title = "Comparación de Medias - Prueba de Duncan",
x = "Porcentaje de Algodón", y = "Resistencia") +
ylim(0, max(grupos_duncan$Resistencia) * 1.2)