En referencia a la base de datos del ultimo EDA, estudiar el siguente problema. Estamos interesados en estimar la media de la precisión (Accuracy) de los modelos de aprendizaje automático a través de diferentes algoritmos, marcos de trabajo y tipos de problemas utilizando un intervalo de confianza para la media. Vamos a:
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(readxl)
library(ggplot2)
df <- read_excel("Dataset_IA_corte_II.xlsx")
mean_accuracy <- mean(df$Accuracy, na.rm = TRUE)
sd_accuracy <- sd(df$Accuracy, na.rm = TRUE)
n <- sum(!is.na(df$Accuracy))
head(df)
error_margin <- qnorm(0.95) * (sd_accuracy / sqrt(n))
lower_bound <- mean_accuracy - error_margin
upper_bound <- mean_accuracy + error_margin
cat("Intervalo de Confianza del 90% para la Precisión:", lower_bound, "a", upper_bound)
## Intervalo de Confianza del 90% para la Precisión: 0.8098946 a 0.9458216
Ahora utilizando la función de R-STUDIO
library(BSDA)
## Loading required package: lattice
##
## Attaching package: 'BSDA'
## The following object is masked from 'package:datasets':
##
## Orange
z_test <- z.test(df$Accuracy, sigma.x = sd_accuracy, conf.level = 0.90)
cat("Intervalo de Confianza del 90% para la Precisión:", z_test$conf.int[1], "a", z_test$conf.int[2], "\n")
## Intervalo de Confianza del 90% para la Precisión: 0.8098946 a 0.9458216
error_margin <- qnorm(0.995) * (sd_accuracy / sqrt(n))
lower_bound <- mean_accuracy - error_margin
upper_bound <- mean_accuracy + error_margin
cat("Intervalo de Confianza del 99% para la Precisión:", lower_bound, "a", upper_bound)
## Intervalo de Confianza del 99% para la Precisión: 0.7714278 a 0.9842885
sigma <- 0.05
Z_95 <- 1.96
error_margin_1 <- 0.01
n_95 <- (Z_95 * sigma / error_margin_1)^2
cat("Tamaño de muestra necesario con un margen de error del 1% y nivel de confianza del 95%:", ceiling(n_95), "\n")
## Tamaño de muestra necesario con un margen de error del 1% y nivel de confianza del 95%: 97
Z_99 <- 2.576
error_margin_1 <- 0.01
n_99 <- (Z_99 * sigma / error_margin_1)^2
cat("Tamaño de muestra necesario con un margen de error del 1% y nivel de confianza del 99%:", ceiling(n_99), "\n")
## Tamaño de muestra necesario con un margen de error del 1% y nivel de confianza del 99%: 166
El tamaño de la muestra afecta directamente el ancho del intervalo de confianza. A medida que aumenta el tamaño de la muestra, el intervalo de confianza se vuelve más estrecho, lo que significa que nuestra estimación de la media es más precisa. Esto ocurre porque el error estándar (que es la desviación estándar dividida por la raíz cuadrada del tamaño de la muestra) disminuye al aumentar el tamaño de la muestra.
# IC con Tamaño de muestra original
sigma <- 0.05
n_original <- 100
Z_95 <- 1.96
error_standard_original <- sigma / sqrt(n_original)
error_margin_original <- Z_95 * error_standard_original
IC_original_lower <- 0 - error_margin_original
IC_original_upper <- 0 + error_margin_original
cat("Intervalo de confianza original:", IC_original_lower, "a", IC_original_upper, "\n")
## Intervalo de confianza original: -0.0098 a 0.0098
n_duplicado <- 2 * n_original
error_standard_duplicado <- sigma / sqrt(n_duplicado)
error_margin_duplicado <- Z_95 * error_standard_duplicado
IC_duplicado_lower <- 0 - error_margin_duplicado
IC_duplicado_upper <- 0 + error_margin_duplicado
cat("Intervalo de confianza con tamaño de muestra duplicado:", IC_duplicado_lower, "a", IC_duplicado_upper, "\n")
## Intervalo de confianza con tamaño de muestra duplicado: -0.006929646 a 0.006929646
iqr_accuracy <- IQR(df$Accuracy, na.rm = TRUE)
cat("El rango intercuartílico (IQR) de la precisión es:", iqr_accuracy)
## El rango intercuartílico (IQR) de la precisión es: 0.2587894
mean_accuracy <- mean(df$Accuracy, na.rm = TRUE)
sd_accuracy <- sd(df$Accuracy, na.rm = TRUE)
median_accuracy <- median(df$Accuracy, na.rm = TRUE)
iqr_accuracy <- IQR(df$Accuracy, na.rm = TRUE)
# Mostrar los resultados
cat("Media:", mean_accuracy, "\nDesviación Estándar:", sd_accuracy)
## Media: 0.8778581
## Desviación Estándar: 0.9431208
cat("\nMediana:", median_accuracy, "\nRango Intercuartílico (IQR):", iqr_accuracy)
##
## Mediana: 0.7578397
## Rango Intercuartílico (IQR): 0.2587894
Si la desviación estándar y el IQR son similares, la distribución podría ser relativamente simétrica. Si la desviación estándar es mucho mayor que el IQR, podría haber asimetría o valores extremos que afectan la media más que la mediana.
modelos_superan_80 <- sum(df$Accuracy > 0.80, na.rm = TRUE)
total_modelos <- sum(!is.na(df$Accuracy))
porcentaje_supera_80 <- (modelos_superan_80 / total_modelos) * 100
cat("El porcentaje de modelos que supera una precisión del 80% es:", porcentaje_supera_80, "%")
## El porcentaje de modelos que supera una precisión del 80% es: 42.22649 %
Hipótesis nula (\(H_0\)): Los datos de la precisión siguen una distribución normal.
\(H_0: \text{La precisión sigue una distribución normal}\)
Hipótesis alternativa (\(H_1\)): Los datos de la precisión no siguen una distribución normal.
\(H_1: \text{La precisión no sigue una distribución normal}\)
ggplot(df, aes(x = Accuracy)) +
geom_histogram(binwidth = 0.05, color = "black", fill = "blue") +
labs(title = "Histograma de la Precisión", x = "Precisión", y = "Frecuencia")
## Warning: Removed 39 rows containing non-finite outside the scale range
## (`stat_bin()`).
shapiro_test <- shapiro.test(df$Accuracy)
shapiro_test
##
## Shapiro-Wilk normality test
##
## data: df$Accuracy
## W = 0.22771, p-value < 2.2e-16