1. Instrucciones

Este documento contiene las instrucciones y enunciados asociados a la Prueba Especial Programada 1 (PEP1) del curso de Estadística Computacional modalidad diurna. Con respecto a ello:

  • La prueba tiene un total de 60 puntos, lo que sumado al puntaje base permitirá calcular directamente su nota final sumando un máximo de 70 puntos.
  • Se dispone de todo el bloque de clases para realizar la evaluación. Esta deberá ser desarrollada en R.
  • Las respuestas escritas empleando RMarkdown deberán ser enviadas al profesor por correo electrónico al finalizar el tiempo de evaluación.
  • Puede usar apuntes y material disponible en Moodle como apoyo.
  • Cualquier sospecha de falta ética será castigada directamente con nota 1.0 en la evaluación.
  • En cada caso, no responda sólo numéricamente, sino que contextualice su respuesta para el problema. Esto puede ser al final de cada pregunta.

2. Preguntas

Pregunta 1 - (20 puntos)

El semestre pasado, las calificaciones de las tres Pruebas de Evaluación Parcial (PEP) de este curso se distribuyeron de la siguiente manera:

PEP1 PEP2 PEP3
Promedio 3.7 4.2 6.0
Desviación Estándar 1.1 0.9 0.9

Suponiendo que las calificaciones siguen una distribución normal y que se utilizarán estas probabilidades como base para este año.

  1. ¿Cuál es la probabilidad de que un/una estudiante aprueba con nota azul en todas las PEPs? (7 puntos).
  2. ¿Cuál es la probabilidad de que un/una estudiante apruebe este semestre? (7 puntos).
  3. Grafique las tres distribuciones normales asociadas a cada PEP (6 puntos).

Respuesta

a) ¿Cuál es la probabilidad de que un/una estudiante apruebe con nota azul en todas las PEPs?

Para calcular la probabilidad de que un/una estudiante apruebe con nota azul en todas las Pruebas de Evaluación Parcial (PEPs), consideramos la probabilidad de obtener una nota igual o superior a 4.0 en cada PEP por separado. Esto se traduce en \(p(PEP_1>=4.0) \times p(PEP_2>=4.0) \times p(PEP_3>=4.0)\). Esto se puede calcular como:

p_PEP1 = 1-pnorm(4,3.7,1.1)   #Probabilidad de aprobar PEP1
p_PEP2 = 1-pnorm(4,4.2,0.9)   #Probabilidad de aprobar PEP2
p_PEP3 = 1-pnorm(4,6.0,0.9)   #Probabilidad de aprobar PEP3

prob_a = p_PEP1 * p_PEP2 * p_PEP3

La probabilidad de que un/una estudiante apruebe con nota azul en todas las PEPs es 0.2277.

b) ¿Cuál es la probabilidad de que un/una estudiante apruebe este semestre?

Para responder, debemos normalizar las calificaciones del estudiante para que estén en una escala común, con una media de 0 y una desviación estándar de 1. Calculamos \(z\)-scores para cada PEP, indicando cuántas desviaciones estándar están las calificaciones por encima o por debajo de la media. El promedio de estos \(z\)-scores refleja el rendimiento general del estudiante. Finalmente, utilizamos la probabilidad acumulativa en la distribución normal estándar para determinar la probabilidad de aprobar el semestre. La salida muestra la probabilidad redondeada de que el estudiante apruebe el curso.

# Definición de las notas y desviaciones estándar
notas = c(3.7, 4.2, 6.0)   # Notas en las PEPs
desviaciones = c(1.1, 0.9, 0.9)   # Desviaciones estándar de las PEPs

# Calcula los z-scores para cada PEP
z_scores = (4 - notas) / desviaciones

# Calcula el promedio de los z-scores
prom_z = mean(z_scores)

# Calcula la probabilidad de aprobar el semestre
p_aprobar = 1 - pnorm(prom_z)

La probabilidad de que un/una estudiante apruebe el curso es 0.7654.

c) Grafique las tres distribuciones normales asociadas a cada PEP.

Este código grafica las distribuciones normales asociadas a cada PEP.

# Cargar librerías
library("ggplot2")
library("gridExtra")

# Función para graficar la distribución normal de una PEP
graficar_normal = function(nota, desviacion, titulo) {
  # Generar secuencia de x
  x = seq(0, 7, by = 0.1)
  
  # Calcular la densidad de probabilidad para cada x
  y = dnorm(x, nota, desviacion)
  z = y
  z[which(x < 4)] = 0  # Para resaltar el área bajo la curva después de 4
  
  # Crear un dataframe con los datos
  datos = data.frame(x, y, z)
  
  # Crear el gráfico utilizando ggplot2
  p = ggplot(data.frame(x = x, y = y)) + aes(x = x, y = y)
  p = p + geom_line(color = "darkblue") + labs(x = "Notas", y = "Densidad de probabilidad")
  p = p + theme_classic() + ggtitle(titulo)
  p = p + geom_area(data = datos, aes(x = x, y = z), fill = "lightblue", alpha = 0.4)
  p = p + scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7)) + ylim(0, 0.5)
  return(p)
}

# Graficar las distribuciones normales para cada PEP
g1 = graficar_normal(notas[1], desviaciones[1], "PEP1")
g2 = graficar_normal(notas[2], desviaciones[2], "PEP2")
g3 = graficar_normal(notas[3], desviaciones[3], "PEP3")

# Organizar los gráficos en una matriz y mostrarlos
grid.arrange(g1, g2, g3, ncol = 3)

Pregunta 2 - (20 puntos)

Durante la pandemia, se llevó a cabo un estudio en Wuhan, China, que abarcó desde el 24 de enero de 2020 hasta el 16 de abril de 2020. Según los datos recopilados durante estos 84 días, se encontró que el promedio diario de pacientes de COVID-19 fue de 25,732 personas por día en Wuhan (Alawiyah, Johar, and Ruchjana 2021). La coma representa miles y no cifras decimales.

Suponiendo que aún nos encontrásemos dentro del periodo de estudio durante la pandemia.

  1. Calcule la probabilidad de que no haya nuevos infectados en Wuhan en la próxima hora (6 puntos).
  2. Calcule la probabilidad de que como máximo haya 100,000 nuevos infectados en Wuhan esta semana (6 puntos).
  3. Grafique la distribución de probabilidad relacionada con este escenario (8 puntos).

Respuesta

a. Calcule la probabilidad de que no haya nuevos infectados en Wuhan en la próxima hora.

Para abordar este problemas, utilizaremos la distribución de Poisson, considerando que tratamos con eventos discretos (nuevos infectados) que ocurren de manera independiente en un intervalo de tiempo fijo. Si consideramos eventos continuos también podría ser resuelto con una distribución exponencial. Esto puede ser calculado como:

#Datos
promedio_diario = 25732
dias_del_periodo = 84
horas_por_dia = 24

# Tasa de incidencia promedio por hora
lambda_hora = promedio_diario / horas_por_dia

#Probabilidad de que no haya nuevos infectados en la próxima hora
prob_no_nuevos_infectados = dpois(0, lambda_hora)

La probabilidad de que hayan nuevas personas infectadas en la próxima hora es 0. Esto tiene sentido, ya que la media de personas infectadas por hora es 1072.

b. Calcule la probabilidad de que como máximo haya 100,000 nuevos infectados en Wuhan esta semana.

Repetiremos el mismo proceso, esta vez considerando la media semanal.

# Cálculo de la tasa de incidencia promedio semanal
lambda_semana = promedio_diario * 7

# Cálculo de la probabilidad de que como máximo haya 100,000 nuevos infectados en 
# Wuhan esta semana
prob_max_100000_semana = ppois(100000, lambda_semana)

La probabilidad de que hayan como máximo 100,000 personas infectadas en esta semana es 0. Esto tiene sentido ya que la media de personas infectadas por semana es 180,124.

c. Grafique la distribución de probabilidad relacionada con este escenario

Los gráficos asociados a ambos escenarios son los siguientes:

# Definir una secuencia de números de nuevos infectados/as por hora
infectados_hora = seq(900, 1200, by = 10)

# Calcular la distribución de probabilidad de Poisson para nuevos infectados/as por hora
distribucion_hora = dpois(infectados_hora, lambda_hora)

# Crear un dataframe con los datos de la distribución por hora
datos_hora = data.frame(infectados_hora, distribucion_hora)

# Crear el primer gráfico para la distribución de probabilidad por hora
g1 = ggplot(data = datos_hora, aes(x = infectados_hora, y = distribucion_hora))
g1 = g1 + geom_bar(stat = "identity", fill = "lightblue", color = "darkblue", linewidth = 0.1)
g1 = g1 + theme_bw() + ggtitle("D. de probabilidades x hora")
g1 = g1 + xlab("Número de infectados/as por hora") + ylab("Probabilidad")

# Definir una secuencia de números de nuevos infectados/as por semana
infectados_semana = seq(178000, 182000, by = 100)

# Calcular la distribución de probabilidad de Poisson para nuevos infectados/as por semana
distribucion_semana = dpois(infectados_semana, lambda_semana)

# Crear un dataframe con los datos de la distribución por semana
datos_semana = data.frame(infectados_semana, distribucion_semana)

# Crear el segundo gráfico para la distribución de probabilidad por semana
g2 = ggplot(data = datos_semana, aes(x = infectados_semana, y = distribucion_semana))
g2 = g2 + geom_bar(stat = "identity", fill = "lightblue", color = "darkblue", linewidth = 0.1)
g2 = g2 + theme_bw() + ggtitle("D. de probabilidades x semana")
g2 = g2 + xlab("Número de infectados/as por semana") + ylab("Probabilidad")

# Organizar los dos gráficos en una matriz y mostrarlos
grid.arrange(g1, g2, ncol = 2)

Pregunta 3 - (20 puntos)

Un estudiante de Ingeniería en Ejecución en Computación e Informática ha desarrollado un algoritmo genético para resolver un problema NP-hard. El rendimiento de este algoritmo depende de tres hyperparámetros específicos: la tasa de mutación, la tasa de entrecruzamiento y el operador de perturbación.

El investigador ha decidido explorar tasas de mutación y entrecruzamiento que varían de 0 a 1, con incrementos de 0.0001. Además, tiene a su disposición 10 operadores de perturbación y 10 instancias diferentes para evaluar el modelo. En este contexto, se plantean las siguientes preguntas:

Preguntas

  1. ¿Cuántos modelos distintos deberá evaluar el investigador para considerar todas las posibles combinaciones de parámetros? (5 puntos).
  2. Suponiendo que cada modelo tarda 1 minuto en ser evaluado en el computador del investigador y que cada modelo debe ser ejecutado 31 veces para obtener resultados robustos, ¿cuántas horas de cómputo necesitará el investigador para evaluar todos los modelos? Asuma que utilizará el mismo equipo en todas las evaluaciones (5 puntos).
  3. Si se descubre que la probabilidad de que la tasa de mutación sigue una distribución normal con media 0.5 y desviación estándar 0.1, ¿qué sugeriría al investigador para abordar la estimación de parámetros? Proporcione un argumento basado en el análisis de datos cuantitativos (10 puntos).

Respuestas

a. ¿Cuántos modelos distintos deberá evaluar el investigador para considerar todas las posibles combinaciones de parámetros?

Para calcular el número de modelos distintos, debemos considerar las combinaciones de tasas de mutación, tasas de entrecruzamiento y operadores de perturbación. Se tendrá \(1,0001\) valores de mutación y entrecruzamiento, \(10\) operadores de perturbación y \(10\) instancias diferentes. Por lo que el número de combinaciones es \(combinaciones = n_{mutacion} \times n_{cruzamiento} \times n_{perturbacion} \times n_{instancias}\). Esto es:

# Calcular el número total de combinaciones de modelos
combinaciones = 10001 * 10001 * 10 * 10

Esto da 1.0002^{10} combinaciones de modelos con sus diferentes parámetros.

b. Suponiendo que cada modelo tarda 1 minuto en ser evaluado en el computador del investigador y que cada modelo debe ser

ejecutado 31 veces para obtener resultados robustos, ¿cuántas horas de cómputo necesitará el investigador para evaluar todos los modelos? Asuma que utilizará el mismo equipo en todas las evaluaciones.

Esto se puede calcular como:

# Calcular el número total de combinaciones de modelos x 31
combinaciones_hora = combinaciones*31

# Calcular el tiempo total en horas necesario para evaluar todos los modelos
horas_computo = combinaciones_hora/60
anos_computo = (horas_computo/24)/365

Se requerirán 5.1677001^{9} horas de cómputo para ejecutar todos los modelos o 5.899201^{5} años.

c. Si se descubre que la probabilidad de que la tasa de mutación sigue una distribución normal con media 0.5 y desviación

estándar 0.1, ¿qué sugeriría al investigador para abordar la estimación de parámetros? Proporcione un argumento basado en el análisis de datos cuantitativos.

A pesar de la variabilidad realista propuesta por la distribución normal para la tasa de mutación, el proyectado tiempo de ejecución de aproximadamente 59 años, incluso bajo la hipótesis de desviación estándar cero, es impracticable. Se recomienda priorizar una optimización exhaustiva del código y la paralelización de la evaluación de modelos. Además, explorar técnicas heurísticas, considerando muestreo estratégico y análisis de sensibilidad, podría ofrecer una solución eficiente para explorar el espacio de búsqueda de parámetros sin comprometer la calidad de los resultados.

# Calcular el número total de combinaciones de modelos x 31
combinaciones = 1 * 10001 * 10 * 10
combinaciones_hora = combinaciones*31

# Calcular el tiempo total en horas necesario para evaluar todos los modelos
horas_computo = combinaciones_hora/60
anos_computo = (horas_computo/24)/365
print(anos_computo)
## [1] 58.98611

Referencias

Alawiyah, M, D A Johar, and B N Ruchjana. 2021. “Homogeneous Poisson Process in Daily Case of Covid-19.” Journal of Physics: Conference Series 1722 (1): 012078. https://doi.org/10.1088/1742-6596/1722/1/012078.