30/04/25Este análisis utiliza el dataset iris incluido en R para
evaluar si existen diferencias significativas en la longitud del sépalo
entre especies de flores de Iris mediante un análisis de varianza
(ANOVA).
# Cargar el dataset
data(iris)
# Ver las primeras filas
print("Primeras filas del dataset:")
## [1] "Primeras filas del dataset:"
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
# Estructura del dataset
print("Estructura del dataset:")
## [1] "Estructura del dataset:"
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# Resumen estadístico
print("Resumen estadístico:")
## [1] "Resumen estadístico:"
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
# Boxplot
boxplot(Sepal.Length ~ Species, data = iris,
main = "Distribución de la Longitud del Sépalo por Especie de Iris",
xlab = "Especie",
ylab = "Longitud del Sépalo (cm)",
col = c("lightblue", "lightcoral", "lightgreen"))
Comentario: El gráfico sugiere posibles diferencias en la longitud del sépalo entre especies.
# Modelo ANOVA
modelo_anova <- aov(Sepal.Length ~ Species, data = iris)
# Resultados del ANOVA
print("Resultados del Análisis de Varianza (ANOVA):")
## [1] "Resultados del Análisis de Varianza (ANOVA):"
summary(modelo_anova)
## Df Sum Sq Mean Sq F value Pr(>F)
## Species 2 63.21 31.606 119.3 <2e-16 ***
## Residuals 147 38.96 0.265
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretación: Si el valor-p de
Species es menor a 0.05, se concluye que hay diferencias
significativas entre las medias.
# Residuos
residuos <- residuals(modelo_anova)
# Normalidad de los residuos
print("Prueba de Normalidad de Shapiro-Wilk:")
## [1] "Prueba de Normalidad de Shapiro-Wilk:"
shapiro.test(residuos)
##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.9879, p-value = 0.2189
# QQ Plot
qqnorm(residuos)
qqline(residuos, col = "red")
# Homogeneidad de varianzas: Bartlett
print("Prueba de Bartlett para homogeneidad de varianzas:")
## [1] "Prueba de Bartlett para homogeneidad de varianzas:"
bartlett.test(Sepal.Length ~ Species, data = iris)
##
## Bartlett test of homogeneity of variances
##
## data: Sepal.Length by Species
## Bartlett's K-squared = 16.006, df = 2, p-value = 0.0003345
# Gráficos de diagnóstico del modelo
par(mfrow = c(2, 2))
plot(modelo_anova)
par(mfrow = c(1, 1))
Interpretación: Si los valores-p de las pruebas son > 0.05 y los gráficos no muestran patrones evidentes, se cumplen los supuestos del ANOVA.
# Prueba Tukey
print("Prueba Post-Hoc de Tukey HSD:")
## [1] "Prueba Post-Hoc de Tukey HSD:"
tukey_resultados <- TukeyHSD(modelo_anova)
print(tukey_resultados)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Sepal.Length ~ Species, data = iris)
##
## $Species
## diff lwr upr p adj
## versicolor-setosa 0.930 0.6862273 1.1737727 0
## virginica-setosa 1.582 1.3382273 1.8257727 0
## virginica-versicolor 0.652 0.4082273 0.8957727 0
# Gráfico Tukey
plot(tukey_resultados)
Interpretación: Compara todas las especies por pares. Si el intervalo de confianza no incluye 0, hay diferencia significativa.
# Boxplot final
boxplot(Sepal.Length ~ Species, data = iris,
main = "Longitud del Sépalo por Especie (ANOVA Significativo)",
xlab = "Especie",
ylab = "Longitud del Sépalo (cm)",
col = c("lightblue", "lightcoral", "lightgreen"))
Conclusión: El ANOVA muestra diferencias significativas en la longitud del sépalo entre especies. Tukey confirma qué pares difieren significativamente.