Problema 1



Estimación de la Probabilidad y la Media

Una empresa de servicio técnico recibe, en promedio, 5 solicitudes de reparación por hora. Suponiendo que el número de solicitudes sigue una distribución de Poisson, realiza las siguientes actividades:

Cálculo de probabilidad teórica:

Calcula la probabilidad de que en una hora lleguen exactamente 3 solicitudes usando la fórmula de la distribución de Poisson. Expresa el resultado como \(P(𝑋=3)\)

\[P(X=3) = \dfrac{5^{3}}{3!} \exp{\{-5 \}} = 0.1403739\]

5^3/factorial(3)*exp(-5)
[1] 0.1403739
f3 =dpois(3,5)



Simulación con una muestra:

Genera una muestra aleatoria de tamaño n = 1000 con rpois(n, lambda = 5). Calcula la frecuencia relativa para \(𝑋=3\) (\(f_n(𝑋=3)\)). Compara e interpreta el resultado frente a la probabilidad teórica.

# set.seed(1234)
n=1000
x = rpois(n,5) 
fn3 =sum(as.numeric(x==3))/n
cat("fn(3) =", fn3)
fn(3) = 0.135
f3 - fn3
[1] 0.005373896



Análisis de la variabilidad entre muestras:

  • Genera 100 muestras aleatorias de tamaño n = 1000.
  • Calcula la frecuencia relativa para \(𝑋=3\) en cada muestra.
  • Construye un gráfico de dispersión:
    • Eje X: Indexación por cada muestra 1 a 100.
    • Eje Y: Frecuencias relativas \(f_x(𝑋=3)\)
  • Dibuja una línea horizontal en \(𝑃(𝑋=3)\) y comenta si existe una tendencia.
# library(dplyr)
m =100 # numero de muestras
n = 1000 # tamaño de la muestra
y = rpois(m*n,5) 
y = as.numeric(y==3) %>%   # asigna 1 cuando es 3 y 0 en cualquier otro caso  
       matrix(ncol = n)
fx3 = apply(y, 1, sum)/n

plot(1:m, fx3, las =1, xlab = "número de la muestra")
abline(h=0.1403739 , col ="red")

mean(fx3)
[1] 0.14057
# library(ggplot2)
# library(dplyr)

# set.seed(123)  # Para reproducibilidad
m <- 100  # Número de muestras
n <- 1000  # Tamaño de la muestra

y <- rpois(m * n, 5)
y <- as.numeric(y == 3) %>% matrix(ncol = n)
fx3 <- apply(y, 1, mean)

# Crear un dataframe para ggplot
df <- data.frame(
  muestra = 1:m,
  proporcion = fx3
)

# Crear el gráfico
ggplot(df, aes(x = muestra, y = proporcion)) +
  geom_point(color = "blue", alpha = 0.6) +  # Puntos con transparencia
  geom_line(color = "blue", alpha = 0.4) +   # Línea que conecta los puntos
  geom_hline(yintercept = 0.1403739, color = "red", linetype = "dashed") +  # Línea de referencia
  labs(
    title = "Proporción de valores iguales a 3 en cada muestra",
    x = "Número de la muestra",
    y = "Proporción"
  ) +
  theme_minimal()  # Estilo limpio y moderno



Impacto del tamaño muestral:

Genera muestras aleatorias con tamaños: 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000.

Calcula la frecuencia relativa de \(𝑋=3\) para cada tamaño.

Construye un gráfico de dispersión: Eje X: Indexación (1 al 20) por cada tamaño muestral. Eje Y: Frecuencias relativas \(f_n(𝑋=3)\) Dibuja la línea en \(𝑃(𝑋=3)\) y describe si aparece una tendencia.

# Definir los tamaños de muestra
tam_muestras <- c(5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 
                  100, 200, 300, 400, 500, 600, 700, 800, 900, 1000)

# Generar la muestra completa
# set.seed(123)  # Para reproducibilidad
n <- 1000
z <- rpois(n, 5)

# Calcular las medias muestrales
medias_muestrales <- sapply(tam_muestras, function(t) mean(z[1:t]))

# Crear un dataframe para mejor visualización
df_medias <- data.frame(
  tamaño_muestra = tam_muestras,
  media_muestral = medias_muestrales
)

# Imprimir resultados
print(df_medias)
   tamaño_muestra media_muestral
1               5       4.400000
2              10       5.000000
3              20       4.600000
4              30       4.933333
5              40       4.775000
6              50       4.660000
7              60       4.766667
8              70       4.771429
9              80       4.837500
10             90       4.744444
11            100       4.770000
12            200       4.775000
13            300       4.853333
14            400       4.845000
15            500       4.870000
16            600       4.851667
17            700       4.902857
18            800       4.895000
19            900       4.940000
20           1000       4.928000
# Visualización con ggplot2
# library(ggplot2)

ggplot(df_medias, aes(x = tamaño_muestra, y = media_muestral)) +
  geom_point(color = "blue", size = 2) + 
  geom_line(color = "blue", alpha = 0.5) +
  geom_hline(yintercept = 5, color = "red", linetype = "dashed") + # Línea esperada para λ = 5
  labs(title = "Convergencia de la Media Muestral",
       x = "Tamaño de la muestra",
       y = "Media muestral") +
  theme_minimal()



Convergencia de la media muestral:

Genera 100 muestras de tamaño n = 1000. Calcula el promedio muestral de solicitudes en cada muestra. Construye un gráfico de dispersión: Eje X: Indexación por cada muestra (1 a 100). Eje Y: Promedios muestrales. Traza la línea horizontal en la media teórica (\(\lambda =5\)) y analiza la tendencia.

n =1000
m =100

s = rpois(n*m, 5) %>% 
      matrix(ncol = n)
ms = apply(s, 1, mean)

plot(1:100, ms, las=1)
abline(h=5, col= "red")



Impacto del tamaño muestral en la media:

Genera muestras aleatorias con tamaños: 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000. Calcula el promedio muestral para cada tamaño. Construye un gráfico de dispersión: Eje X: Indexación (1 al 20) por cada tamaño muestral. Eje Y: Promedios muestrales. Dibuja la línea horizontal en la media teórica (\(\lambda =5\)) y compara si el promedio se aproxima a medida que crece el tamaño.

m= 100
n= 1000

p = rpois(m*n,5) %>% 
       matrix(ncol = n)

m5 = p[,1:5] ; mx5 =apply(m5, 1, mean)
m10 = p[,1:10] ; mx10 =apply(m10, 1, mean)
m20 = p[,1:20] ; mx20 =apply(m20, 1, mean)

# Genera muestras aleatorias con tamaños: 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000.
library(dplyr)

# set.seed(1234)
n <- 1000
m <- 100

# Generar la matriz de Poisson
p <- matrix(rpois(n * m, 5), ncol = n)

# Vector con los tamaños de muestra
sample_sizes <- c(5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000)

# Aplicar mean sobre diferentes tamaños de muestra usando lapply y convertir a una lista nombrada
means_list <- lapply(sample_sizes, function(size) apply(p[, 1:size], 1, mean))

# Convertir la lista en un dataframe
means_df <- as.data.frame(means_list)
names(means_df) <- paste0(sample_sizes)
boxplot(means_df, las =1)
abline(h=5, col="red")

apply(means_df, 2, mean)
       5       10       20       30       40       50       60       70 
5.194000 5.066000 4.993500 5.016667 4.987500 5.002800 5.004333 5.014429 
      80       90      100      200      300      400      500      600 
5.016875 5.015222 5.008600 5.001750 5.011167 5.011100 5.007100 5.004417 
     700      800      900     1000 
5.008443 5.004663 5.001556 5.000870 
apply(means_df, 2, sd)
         5         10         20         30         40         50         60 
1.10333013 0.76014618 0.50435753 0.39566960 0.35411542 0.28014455 0.25395436 
        70         80         90        100        200        300        400 
0.22162510 0.22227144 0.20997482 0.21145012 0.15213527 0.12618762 0.10699955 
       500        600        700        800        900       1000 
0.09943207 0.08821473 0.07941164 0.07615314 0.06877566 0.06357127 




Condiciones de entrega La solución se debe presentar en un archivo HTML generado mediante RMarkdown (.Rmd).

Responde a los ejercicios en orden (de la a hasta la f).

Por cada ejercicio, incluye:

Código R: Con comentarios explicativos. Gráficos y cálculos: Según lo solicitado. Interpretación: Explicación clara de los resultados obtenidos. El archivo .Rmd y el HTML generado deben entregarse juntos.

Establece la semilla con tu código de estudiante: set.seed(codigo).

Asegúrate de que todos los códigos compilen correctamente antes de la entrega.