R Markdown

# Establecer directorio de trabajo
setwd("C:/OSCAR/RESPALDO CESAR/OSCAR/CURSOS/R DGTIC OCT 2025/a4")
getwd()
## [1] "C:/OSCAR/RESPALDO CESAR/OSCAR/CURSOS/R DGTIC OCT 2025/a4"
# Paquetes a utilizar

library("tidyverse")
## ── 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
library("stringr")
library("dplyr")
library("forcats")
library("janitor")
## 
## Adjuntando el paquete: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library("lubridate")
library("graphics")
library("ggplot2")

# Se utilizará el archivo a4_iris.csv para el análisis
# Para leer archivos externos, importacion de datos. Se usa clean_names para cambiar el punto por guión bajo en los nombres de las variables
data_iris <- read.csv("C:/OSCAR/RESPALDO CESAR/OSCAR/CURSOS/R DGTIC OCT 2025/a4/a4_iris.csv", header=TRUE, sep=",")
data_iris <- clean_names(data_iris)

Se hizo previamente el análisis EDA del archivo Iris y encontramos los siguientes resultados:

# Se hacen agrupaciones por especie (variety) para calcular los promedios
data_iris %>%
  group_by(variety) %>%
  summarise(
    sep_len_media = mean(sepal_length),
    sep_wid_media = mean(sepal_width),
    pet_len_media = mean(petal_length),
    pet_wid_media = mean(petal_width)
  ) %>%
  arrange(variety)
## # A tibble: 3 × 5
##   variety    sep_len_media sep_wid_media pet_len_media pet_wid_media
##   <chr>              <dbl>         <dbl>         <dbl>         <dbl>
## 1 Setosa              5.01          3.43          1.46         0.246
## 2 Versicolor          5.94          2.77          4.26         1.33 
## 3 Virginica           6.59          2.97          5.55         2.03
data_iris %>%
  group_by(variety) %>%
  summarise(
    sep_len_var = var(sepal_length),
    sep_wid_var = var(sepal_width),
    pet_len_var = var(petal_length),
    pet_wid_var = var(petal_width)
  ) %>%
  arrange(variety)
## # A tibble: 3 × 5
##   variety    sep_len_var sep_wid_var pet_len_var pet_wid_var
##   <chr>            <dbl>       <dbl>       <dbl>       <dbl>
## 1 Setosa           0.124      0.144       0.0302      0.0111
## 2 Versicolor       0.266      0.0985      0.221       0.0391
## 3 Virginica        0.404      0.104       0.305       0.0754
# Grafica de dispersion del sepalo
ggplot(data_iris, aes(x = sepal_length, y = sepal_width, color = variety)) +
  geom_point(alpha = 0.6, size = 3) +
  scale_color_manual(
    values=c("red","green","blue"))+
  labs(title = "Longitud vs Ancho",
       subtitle = "Sépalo",
       x = "Longitud",
       y = "Ancho",
       color = "Variedad") +
  theme_classic()

La variedad setosa está claramente identificada, pero versicolor y virginica no muestran una diversificación entre sus elementos. Procedemos a hacer una prueba de hipótesis sobre las medias del ancho del sepalo en estas dos variedades.

  1. Planteamiento de hipótesis

H0: Media Versicolor = Media Virginica

Ha: Media Versicolor <> Media Virginica (Prueba bilateral)

Significancia: alfa = 0.05

  1. Estadístico de Prueba

  2. Valores criticos para la región y regla de rechazo

# Prueba de hipotesis para la media de dos grupos independientes
# Promedios y varianzas de la variedad versicolor -> 1 y virginica -> 2
media_1 <- 2.77
media_1
## [1] 2.77
media_2 <- 2.974
media_2
## [1] 2.974
scuad_1 <- 0.0985
scuad_1
## [1] 0.0985
scuad_2 <- 0.104
scuad_2
## [1] 0.104
# Tamanio de las muestras
n1 <- 50
n2 <- 50

# Desviacion estándar ponderada
sp <- sqrt(((n1-1)*scuad_1 + (n2-1)*scuad_2)/(n1 + n2 - 2))

# Estadistico de prueba T
T <- (media_1 - media_2)/(sp*sqrt(1/n1 + 1/n2))
T
## [1] -3.205551
# Valor crítico de t bilateral
t_crit <- qt(0.975, df = 98)
t_crit
## [1] 1.984467
# P value bilateral
pvalor <- 2*pt(T,98)
pvalor
## [1] 0.001820301
## Decisión
if (T < -t_crit) {
  decision <- "Rechazamos H0"
} else {
  decision <- "No rechazamos H0"
}
decision
## [1] "Rechazamos H0"

Conclusión: Rechazamos la hipótesis nula H0 con una significancia del 0.05, podemos decir que existe evidencia estadística suficiente para decir que las medias del ancho del sepalo (sepal_width) son diferentes.