R Markdown

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.