Siguiendo con el análisis estadístico de las flores de Iris de Fisher busca responder a la pregunta: ¿Hay relación entre el largo y ancho del petalo de las flores Iris? Para ello haremos un análisis de regresión lineal con el largo del pétalo como variable explicativa y el ancho del pétalo como variable dependiente.
## [1] "C:/OSCAR/RESPALDO CESAR/OSCAR/CURSOS/R DGTIC OCT 2025/a5"
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.1 ✔ stringr 1.5.2
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
##
## Adjuntando el paquete: 'janitor'
##
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
## '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 ...
## $ variety : chr "Setosa" "Setosa" "Setosa" "Setosa" ...
## [1] "sepal_length" "sepal_width" "petal_length" "petal_width" "variety"
##
## Call:
## lm(formula = data_iris$petal_width ~ data_iris$petal_length)
##
## Coefficients:
## (Intercept) data_iris$petal_length
## -0.3631 0.4158
## `geom_smooth()` using formula = 'y ~ x'
Se puede observar de inmediato que los datos se ajustan muy bien a una recta, lo que vamos a confirmar con las estadísticas de la regresión.
##
## Call:
## lm(formula = data_iris$petal_width ~ data_iris$petal_length)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.56515 -0.12358 -0.01898 0.13288 0.64272
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.363076 0.039762 -9.131 4.7e-16 ***
## data_iris$petal_length 0.415755 0.009582 43.387 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2065 on 148 degrees of freedom
## Multiple R-squared: 0.9271, Adjusted R-squared: 0.9266
## F-statistic: 1882 on 1 and 148 DF, p-value: < 2.2e-16
## 2.5 % 97.5 %
## (Intercept) -0.4416501 -0.2845010
## data_iris$petal_length 0.3968193 0.4346915
Tenemos una R² de 0.9271 que es una proporción más que aceptable de varianza explicada, un evidente rechazo de la hipótesis nula para el caso del coeficiente beta con una estadística F de 1882 y un p value de prácticamente cero. Lo que confirma que tenemos un modelo de regresión que se ajusta muy bien a nuestros datos. Por lo tanto podemos afirmar que existe una relación lineal entre el largo y ancho del pétalo.
A continuación vamos a calcular los intervalos de confianza para el valor medio y el valor puntual de Y.
Aquí aclaro que hago un cambio de gráfica de dispersión porque supe cómo agregar las bandas de confianza usando ggplot.
## Warning in predict.lm(rectaPet, interval = "prediction", level = 0.95): predictions on current data refer to _future_ responses
Podemos observar que tanto las bandas de confianza para el valor medio y puntual de Y quedan muy pegados a la recta ajustada y esto provoca que muchos puntos queden fuera de estas bandas,esto es porque tenemos una relación muy fuerte entre ambas variables y con una R² tan grande, la contribución de los errores es muy pequeña, en este caso de un 7.29%.
La siguiente pregunta que nos hacemos es ¿Nuestro modelo sirve para clasificar la especie de iris en setosa, versicolor o virginíca? La respuesta es un contundente no. De hecho sólo puede representar la relación entre el largo y el ancho pero no clasificar la especie.
Una posible explicación viene dada porque nuestros datos contienen la clasificación por especie, y cada especie tiene sus propias rectas y coeficientes, por lo que el modelo global se apoya en estas características de cada especie y por ello tenemos un excelente modelo pero a nivel global.
## data_iris$variety: Setosa
##
## Call:
## lm(formula = petal_width ~ petal_length, data = subdata)
##
## Coefficients:
## (Intercept) petal_length
## -0.04822 0.20125
##
## ------------------------------------------------------------
## data_iris$variety: Versicolor
##
## Call:
## lm(formula = petal_width ~ petal_length, data = subdata)
##
## Coefficients:
## (Intercept) petal_length
## -0.08429 0.33105
##
## ------------------------------------------------------------
## data_iris$variety: Virginica
##
## Call:
## lm(formula = petal_width ~ petal_length, data = subdata)
##
## Coefficients:
## (Intercept) petal_length
## 1.1360 0.1603
En conclusión, para poder hacer un modelo que nos prediga la clasificación de las especies se debe recurrir a un modelo diferente, ya sea de tipo logístico, análisis discriminante, etc.
Ello será motivo del siguiente análisis del informe final.