Introducción

Este 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).

1. Cargar y explorar el dataset

# 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  
##                 
##                 
## 

2. Visualización exploratoria

# 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.

3. Análisis de Varianza (ANOVA)

# 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.

4. Verificación de supuestos

# 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.

5. Análisis Post-Hoc: Tukey HSD

# 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.

6. Conclusión y visualización final

# 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.