Este documento tiene como objetivo analizar el número de reactivos defectuosos provenientes de dos fabricantes. Se definirá la distribución de las variables \(X\) y \(Y\), se generarán muestras simuladas y se estimarán probabilidades relevantes.
\(X\) es el número de unidades defectuosas del primer fabricante, que sigue una distribución binomial con parámetros \(n = 100\) y \(p = 0.03\).
\[ X \sim \text{Binomial}(n = 100, p = 0.03) \]
\(Y\) es el número de unidades defectuosas del segundo fabricante, que sigue una distribución binomial con parámetros \(n = 100\) y \(p = 0.05\).
\[ Y \sim \text{Binomial}(n = 100, p = 0.05) \]
Generamos 1000 muestras simuladas para \(X\) y \(Y\).
# Parámetros
n <- 100
p1 <- 0.03
p2 <- 0.05
n_simulaciones <- 1000
# Simulación de muestras
set.seed(123) # Para reproducibilidad
X <- rbinom(n_simulaciones, size = n, prob = p1)
Y <- rbinom(n_simulaciones, size = n, prob = p2)
# C. Probabilidad de que el total de unidades defectuosas sea menor a 10
total_defectuosos <- X + Y
prob_menor_10 <- mean(total_defectuosos < 10)
prob_menor_10
## [1] 0.75
# D. Probabilidad de que el primer fabricante tenga más defectuosos que el segundo
prob_mas_defectuosos_fab1 <- mean(X > Y)
prob_mas_defectuosos_fab1
## [1] 0.186
# Gráfica de probabilidad normal
library(ggplot2)
# Gráfica
ggplot(data.frame(total_defectuosos), aes(sample = total_defectuosos)) +
stat_qq() +
stat_qq_line() +
labs(title = "Gráfica de Probabilidad Normal",
x = "Cuantiles Teóricos",
y = "Cuantiles Muestrales")
# Cargar la librería necesaria
library(ggplot2)
# Gráfica de Probabilidad Normal (QQ Plot)
qqnorm(total_defectuosos, main = "Gráfica QQ para Total de Defectuosos")
qqline(total_defectuosos, col = "red")
# Prueba de Shapiro-Wilk
shapiro_test <- shapiro.test(total_defectuosos)
shapiro_test # Mostrar resultado de la prueba
##
## Shapiro-Wilk normality test
##
## data: total_defectuosos
## W = 0.97353, p-value = 1.568e-12
# Evaluar y presentar conclusiones
if (shapiro_test$p.value < 0.05) {
conclusion <- paste("Los datos no siguen una distribución normal (p < 0.05).",
"Esto se debe a que en la gráfica QQ, aunque los puntos comienzan alineados,",
"se alejan de la línea de referencia en los extremos, lo que indica que los datos pueden tener colas más pesadas",
"o ligeras que no son características de una distribución normal.")
} else {
conclusion <- paste("Los datos siguen una distribución normal (p >= 0.05).",
"Esto se refleja en la gráfica QQ, donde los puntos se alinean estrechamente con la línea de referencia,",
"sugiriendo que la distribución de los defectuosos es compatible con una distribución normal.")
}
# Imprimir conclusión
print(conclusion)
## [1] "Los datos no siguen una distribución normal (p < 0.05). Esto se debe a que en la gráfica QQ, aunque los puntos comienzan alineados, se alejan de la línea de referencia en los extremos, lo que indica que los datos pueden tener colas más pesadas o ligeras que no son características de una distribución normal."
Estimación del valor de 𝜋 . LA siguiente figura sugiere como estimar el valor de 𝜋 con una simulación. En la figura, un círculo con área igual a 𝜋/4, está inscrito en un cuadrado cuya área es igual a 1. Se elige de forma aleatoria 100 puntos dentro del cuadrado . La probabilidad de que un punto esté dentro del círculo es igual a la fracción del área del cuadrado que abarca a este, la cual es 𝜋/4. Por tanto, se puede estimar el valor de 𝜋/4 al contar el número de puntos dentro del círculo, que es 79 para obtener la estimación de 𝜋/4≈0.76 . De este último resultado se concluye que 𝜋≈4(0.79)=3.14 . Este ejercicio presenta un experimento de simulación que fue diseñado para estimar el valor de 𝜋 al generar 1000 puntos en el cuadrado.
A. Genere 1000 coordenadas 𝑥: 𝑋1, . . . , 𝑋1000. Utilice la distribución uniforme con valor mínimo de 0 y valor máximo de 1. La distribución uniforme genera variables aleatorias que tienen la misma probabilidad de venir de cualquier parte del intervalo (0,1).
set.seed(123) # Para asegurar la reproducibilidad
n <- 1000 # Número de puntos
# Generar 1000 coordenadas x
x <- runif(n, min = 0, max = 1)
# Imprimir los primeros 10 valores de x
print("Primeros 10 valores de x:")
## [1] "Primeros 10 valores de x:"
print(head(x, 10))
## [1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055
## [8] 0.8924190 0.5514350 0.4566147
B. Genere 1000 coordenadas 𝑦 : 𝑌1,…,𝑌1000, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.
y <- runif(n, min = 0, max = 1)
# Imprimir los primeros 10 valores de y
print("Primeros 10 valores de y:")
## [1] "Primeros 10 valores de y:"
print(head(y, 10))
## [1] 0.27362273 0.59386693 0.16018481 0.85343024 0.84773916 0.47788681
## [7] 0.77369212 0.29540008 0.06562811 0.44053312
C. Cada punto (𝑋𝑖,𝑌𝑖) se encuentra dentro del círculo si su distancia desde el centro (0.5,0.5) es menor a 0.5. Para cada par (𝑋𝑖,𝑌𝑖) determine si la distancia desde el centro es menor a 0.5. Esto último se puede realizar al calcular el valor (𝑋𝑖−0.5)2+(𝑌𝑖−0.5)2, que es el cuadrado de la distancia, y al determinar si es menor que 0.25.
inside_circle <- (x - 0.5)^2 + (y - 0.5)^2 < 0.25
# Imprimir los primeros 10 resultados de inside_circle
print("¿Los primeros 10 puntos están dentro del círculo?")
## [1] "¿Los primeros 10 puntos están dentro del círculo?"
for (i in 1:10) {
print(paste("Punto", i, ":", inside_circle[i]))
}
## [1] "Punto 1 : TRUE"
## [1] "Punto 2 : TRUE"
## [1] "Punto 3 : TRUE"
## [1] "Punto 4 : FALSE"
## [1] "Punto 5 : FALSE"
## [1] "Punto 6 : TRUE"
## [1] "Punto 7 : TRUE"
## [1] "Punto 8 : TRUE"
## [1] "Punto 9 : TRUE"
## [1] "Punto 10 : TRUE"
# Calcular cuántos puntos están dentro del círculo
cantidad_dentro <- sum(inside_circle)
D. ¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de 𝜋? (Nota: Con sólo 1000 puntos, es probable que su estimación sea inferior por 0.05 o más. Una simulación con 10000 y 100000 puntos tiene mayores probabilidades de dar como resultado una estimación muy cercana al valor verdadero
pi_estimado <- 4 * (cantidad_dentro / n)
# Imprimir los resultados
print(paste("Cantidad de puntos dentro del círculo:", cantidad_dentro))
## [1] "Cantidad de puntos dentro del círculo: 800"
print(paste("Estimación de π:", pi_estimado))
## [1] "Estimación de π: 3.2"
# Graficar los puntos
library(ggplot2)
library(ggforce) # Asegúrate de tener el paquete ggforce para geom_circle
# Crear un data frame para ggplot
data <- data.frame(x = x, y = y, inside = inside_circle)
# Graficar los puntos en el cuadrado
ggplot(data, aes(x = x, y = y, color = inside)) +
geom_point(alpha = 0.5, size = 2) + # Tamaño de los puntos
geom_circle(aes(x0 = 0.5, y0 = 0.5, r = 0.5), color = "blue", linetype = "dashed", linewidth = 1) + # Cambiado de size a linewidth
scale_color_manual(values = c("red", "green"), labels = c("Fuera del círculo", "Dentro del círculo")) +
labs(title = "Estimación de π con Puntos Aleatorios",
x = "Coordenada X",
y = "Coordenada Y",
color = "Estado") +
xlim(0, 1) + # Ajustar límites de los ejes
ylim(0, 1) +
theme_minimal() +
theme(legend.position = "right") # Ubicación de la leyenda