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:
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.
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.
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.
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)
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.
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.
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.
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)
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:
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:
Esto da 1.0002^{10} combinaciones de modelos con sus diferentes parámetros.
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.
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