PUNTO 1 - Problemas estadística descriptiva

Un investigador en salud pública desea estudiar los factores asociados a los niveles de glucosa en ayunas en adultos. Para ello, se recopilaron datos de 20 personas adultas, registrando:

  • Glucosa (mg/dL) – Variable dependiente
  • Edad (años)
  • IMC (kg/m²)
  • Ejercicio (minutos diarios de actividad física moderada o vigorosa

A partir de la información suministrada, realice lo siguiente en R:

a) Crear el data frame

  1. Carga de datos: Ingrese los datos como un data.frame en R
t_glucosa <- data.frame(
  ID = 1:20,
  Glucosa_mg_dL = c(98, 115, 102, 130, 92, 108, 120, 89, 99, 110,
                    85, 122, 105, 94, 101, 117, 109, 87, 96, 112),
  Edad_anos = c(34, 56, 45, 60, 29, 50, 53, 27, 38, 49,
                25, 58, 42, 30, 41, 54, 47, 26, 33, 51),
  IMC_kg_m2 = c(22.1, 29.4, 24.8, 31.0, 21.5, 26.2, 28.1, 20.0, 23.5, 26.9,
                19.5, 30.0, 25.3, 22.0, 24.5, 28.9, 26.1, 20.3, 22.7, 27.5),
  Ejercicio_min_dia = c(45, 20, 35, 15, 60, 30, 25, 70, 40, 30,
                        80, 20, 35, 55, 40, 25, 30, 75, 50, 28)
)

# Mostrar el data frame
t_glucosa

b) Crear gráfico de dispersión

  1. Gráfico de dispersión: Utilice la función pairs() para representar la matriz de diagramas de dispersión entre las cuatro variables.
# Eliminar columna ID
tabla_glucosa <- t_glucosa[, -1]
pairs(tabla_glucosa,
      pch = 19, # Pch symbol
      col = 4,  # Color
      main = "Diagrama de dispersión",    # Title
      gap = 0,           # Subplots distance
      row1attop = FALSE, # Diagonal direction
      labels = colnames(tabla_glucosa), # Labels
      cex.labels = 0.8,  # Size of diagonal texts
      font.labels = 1)  # color de los puntos

c) Vector de medias

  1. Vector de medias: Calcule el vector de medias muestrales para las cuatro variables
cat("Media de los datos de Glucosa_mg_dL: ", mean(tabla_glucosa$Glucosa_mg_dL), "\n")
## Media de los datos de Glucosa_mg_dL:  104.55
cat("Media de los datos de Edad_anos: ", mean(tabla_glucosa$Edad_anos), "\n")
## Media de los datos de Edad_anos:  42.4
cat("Media de los datos de IMC_kg_m2: ", mean(tabla_glucosa$IMC_kg_m2), "\n")
## Media de los datos de IMC_kg_m2:  25.015
cat("Media de los datos de Ejercicio_min_dia: ", mean(tabla_glucosa$Ejercicio_min_dia), "\n")
## Media de los datos de Ejercicio_min_dia:  40.4
vector_de_medias <- c(mean(tabla_glucosa$Glucosa_mg_dL),mean(tabla_glucosa$Edad_anos),mean(tabla_glucosa$IMC_kg_m2),mean(tabla_glucosa$Ejercicio_min_dia))
cat("vector de medias: ", vector_de_medias, "\n")
## vector de medias:  104.55 42.4 25.015 40.4

d) Matriz de covarianzas

  1. Matriz de covarianzas: Calcule la matriz de covarianzas muestral entre las variables.
matriz_cov <- cov(tabla_glucosa)
# Convertir la matriz en un data frame
df_cov <- as.data.frame(matriz_cov)
df_cov

e) Matriz correlaciones de Pearson

  1. Matriz de correlaciones de Pearson: Calcule la matriz de correlación de Pearson entre las variables.
matriz_cor <- cor(tabla_glucosa)
# Convertir la matriz en un data frame
df_cor <- as.data.frame(matriz_cor)
df_cor

f) Interpretación

  1. Interpretación: Interprete la relación entre glucosa y las tres variables independientes, según:
  1. El gráfico de dispersión
  2. La matriz de correlaciones

Glucosa y Edad:

Existe una correlación positiva muy alta (r = 0.97), lo que significa que a medida que aumenta la edad de las personas, también tienden a aumentar sus niveles de glucosa en sangre. Esto se refleja en el gráfico de dispersión como una clara tendencia ascendente, casi lineal.

Glucosa e IMC:

La relación entre glucosa e IMC también es muy fuerte y positiva (r = 0.98). Esto indica que las personas con mayor peso en relación a su altura (IMC alto) suelen presentar niveles más elevados de glucosa. En el gráfico, esta asociación aparece como una nube de puntos que sigue una pendiente positiva marcada.

Glucosa y Ejercicio:

La correlación entre glucosa y minutos diarios de ejercicio es fuerte y negativa (r = -0.94). Esto quiere decir que un mayor tiempo dedicado a la actividad física se asocia con niveles más bajos de glucosa. En el gráfico, esto se traduce en una pendiente descendente, es decir, mientras más ejercicio se realiza, menor es el nivel de glucosa.

Por lo tanto, promover la actividad física y el control del peso corporal en la población puede ser una estrategia eficaz para reducir riesgos asociados con niveles elevados de glucosa.

PUNTO 2 - Problemas de conteo

Supongamos que estás construyendo una red neuronal y quieres probar diferentes combinaciones de tres hiperparámetros: número de capas, número de neuronas por capa, función de activación y optimizador.

a) Combinaciones hiperparametros

¿Cuántas redes neuronales diferentes puedes construir con estas opciones?

total_combinaciones_hiper_parametros <- 3*3*3*3
cat("El total de redes nueronales diferentes que se pueden construir con estas opciones es: ", total_combinaciones_hiper_parametros)
## El total de redes nueronales diferentes que se pueden construir con estas opciones es:  81

Un investigador desea experimentar con cinco técnicas de regularización y mejora del entrenamiento en redes neuronales: Batch Normalization, Dropout, L2 Regularization, Data Augmentation, Early Stopping. El orden en que se aplican las técnicas afecta el desempeño del modelo.

b.1) Aplicar técnicas de regulación

¿De cuántas formas se pueden aplicar todas las técnicas?

permutaciones<-function(n,r){

factorial(n)/factorial(n-r)

}
cat("El total de técnicas de regulación que se pueden aplicar con las tecnicas son: ", permutaciones(5,5))
## El total de técnicas de regulación que se pueden aplicar con las tecnicas son:  120

b.2) Aplicar tecnicas de regulacion pero BN no puede ir despues de D

¿De cuántas formas diferentes se pueden aplicar las cinco técnicas si se aplican todas, pero con la restricción de que Batch Normalization no puede ir después de Dropout?

cat("El total de formas diferentes que se pueden aplicar las cinco técnicas con la restricción de que Batch Normalization no puede ir después de Dropout es:", choose(5, 2) * factorial(3))
## El total de formas diferentes que se pueden aplicar las cinco técnicas con la restricción de que Batch Normalization no puede ir después de Dropout es: 60

Un investigador tiene una variable dependiente Y y un conjunto de p=5 variables independientes: X1, X2, X3,X4, X5. Desea explorar todos los modelos posibles de regresión lineal, considerando todas las combinaciones posibles de las variables independientes, con el objetivo de calcular el AIC de cada modelo y seleccionar el mejor.

c.1) Variable dependeinte Y y conjunto 5 independientes

¿Cuántos modelos diferentes pueden construirse si se consideran todos los subconjuntos posibles de las variables independientes, desde el modelo con una sola variable hasta el modelo con las cinco variables?

cat("El número total de modelos que se puede construir si se consideran todos los subconjuntos posibles es: ", choose(5, 1)+ choose(5, 2)+ choose(5, 3)+ choose(5, 4)+ choose(5, 5)+ choose(5, 0))
## El número total de modelos que se puede construir si se consideran todos los subconjuntos posibles es:  32

C.2) Cuál es la formula del modelo?

¿Cuál es la fórmula general para el número de modelos posibles con p variables?

Si se desea evaluar todo los posibles modelos, incluyendo el modelo nulo entonces

\[ C\binom{5}{0} + C \binom{5}{1} +C\binom{5}{2} +C \binom{5}{3}+C\binom{5}{4}+C\binom{5}{5} = 1+5+10+10+5+1 = 32 \] \[TOTAL = 2^5 = 32\]

LA FORMULA GENERAL SERIA: \[2^P\]

Si se desea comparar modelos con almenos una variable predictora , no se cuenta el nulo , por lo tanto, la formula general sería:

FORMULA GENERAL = \[ 2^P - 1 \]

d) Clasificar imagenes de perros , gatos, aves y peces

Supón que tienes una red neuronal para clasificar imágenes en 4 clases: perros, gatos, aves y peces. En un lote de entrenamiento de 10 imágenes, se sabe que: 3 imágenes son de perros, 2 son de gatos, 4 son de aves y 1 es de peces ¿De cuántas maneras diferentes podrían distribuirse estas 10 imágenes entre las 4 clases, respetando esa cantidad exacta por clase?

maneras_diferentes= factorial(10) / (factorial(3) * factorial(2) * factorial(4) * factorial(1))
cat("Las maneas en que podrían distribuirse estas 10 imagenes entre las 4 clases es: ", maneras_diferentes)
## Las maneas en que podrían distribuirse estas 10 imagenes entre las 4 clases es:  12600

PUNTO 3 - Problemas de probabilidad

¿Cuál es la probabilidad de que una mano de póker de 5 cartas contenga exactamente tres reyes o cuatro ases?

a) En una mano de poker 3 reyes o 4 ases

espacio_muestral="Todas las posibles manos de 5 cartas que se pueden extraer de una baraja  de 52 cartas sin importar el orden."
evento_A = "La mano contiene exactamente tres Reyes"
evento_B = "La mano contiene exactamente cuatro Ases"

espacio_muestral = choose(52,5)
evento_A = choose(4,3)*choose(48,2)
evento_B= choose(4,4)*choose(48,1)

probabilidad_A_u_B = (evento_A+evento_B)/espacio_muestral
cat("La probabilidad de que una mano de 5 cartas contenga exactamente tres reyes o cuatro ases es aproximadamente: ", probabilidad_A_u_B, " o ", round(probabilidad_A_u_B*100, 4),"%")
## La probabilidad de que una mano de 5 cartas contenga exactamente tres reyes o cuatro ases es aproximadamente:  0.001754548  o  0.1755 %

b.1) En una mano de poker exactamente 3 reyes o 2 ases

espacio_muestral="Todas las posibles manos de 5 cartas que se pueden extraer de una baraja  de 52 cartas sin importar el orden."
evento_A = "La mano contiene exactamente tres Reyes"
evento_B = "La mano contiene exactamente dos Ases"
nota = "hay intersección ya que en el evento A es posible que tenga dos ases y en el evento b es posible que tenga 3 reyes"
espacio_muestral = choose(52,5)
evento_A = choose(4,3)*choose(48,2)
evento_B= choose(4,2)*choose(48,3)
probabilidad_A_y_B = choose(4,3)*choose(4,2)
cat("intersección AyB :", probabilidad_A_y_B, "\n")
## intersección AyB : 24
probabilidad_A_u_B = ((evento_A+evento_B)-probabilidad_A_y_B)/espacio_muestral
cat("probabilidad AuB :", probabilidad_A_u_B, "\n")
## probabilidad AuB : 0.04165666
probabilidad_A_y_B = choose(4,3)*choose(4,2)
probabilidad_A_y_B
## [1] 24

\[P(A \cap B) = 24\] \[P(A\cup B) = 0.0416659\]

b.2) En una mano de poker exactamente 3 reyes y 2 ases

espacio_muestral="Todas las posibles manos de 5 cartas que se pueden extraer de una baraja  de 52 cartas sin importar el orden."
evento_A = "La mano contiene  tres Reyes y dos Ases"
espacio_muestral = choose(52,5)
evento_A = choose(4,3)*choose(4,2)
probabilidad_A = (evento_A)/espacio_muestral
cat("Probabilidad A :", probabilidad_A, "\n")
## Probabilidad A : 9.234463e-06

c) 5 Cartas al azar de una baraja de poker , almenos una sea as

espacio_muestral="Todas las posibles manos de 5 cartas que se pueden extraer de una baraja  de 52 cartas sin importar el orden."
evento_A = "Al menos una carta As en la mano de 5 cartas"
evento_A_complemento = "Ninguna carta es As"
espacio_muestral = choose(52,5)
evento_A_complemento = choose(48,5)
probabilidad_A_complemento = (evento_A_complemento)/espacio_muestral
probabilidad_A = 1-probabilidad_A_complemento
cat("probabilidad A :", probabilidad_A, "\n")
## probabilidad A : 0.341158
#Creación de la función hipergeometríca

hipergeometrica = function(N,n,r,x){
  choose(r,x)*choose(N-r,n-x)/choose(N,n)
}
N=52 # tamano de la problacion
n=5 # tamano de la muestra
r=4 # numero de individus a prueba
x = 0 # valor que toma la variable
1-hipergeometrica(N,n,r,x)
## [1] 0.341158

d) Un dado no esta balanceado

probabilidad_cara_1="A"

probabilidad_cara_2="A"

probabilidad_cara_3="A"

probabilidad_cara_4="2A"

probabilidad_cara_5="2A"

probabilidad_cara_6="3A"

# como las sumas de las probabilidades deben ser igual a uno entonces

probabilidad_total = paste(  probabilidad_cara_1,  probabilidad_cara_2,  probabilidad_cara_3,  probabilidad_cara_4,  probabilidad_cara_5,  probabilidad_cara_6,
  sep = " + "
)

cat("Probabilidad total:  1 = ", probabilidad_total, "\n")
## Probabilidad total:  1 =  A + A + A + 2A + 2A + 3A
print("si se despeja A entonces: -> A=1/10 ")
## [1] "si se despeja A entonces: -> A=1/10 "
A=1/10

espacio_muestral="Del dado no balanceado las 6 caras del mismo"

evento_A="Obtener un numero par al tirar el dado"

probabilidad_A = A + 2*A + 3*A

cat("La probabilidad de que el dado tome un numro par es de:", probabilidad_A, "\n")
## La probabilidad de que el dado tome un numro par es de: 0.6

PUNTO 4 - Probabilidad total - bayes

Una nevera contiene 4 frascos con muestras saludables y 3 frascos con muestras contaminadas. Otra nevera contiene 3 frascos saludables y 5 contaminados. Un laboratorista toma al azar un frasco de la primera nevera y lo traslada sin inspeccionarloa la segunda nevera. Luego, selecciona al azar un frasco de la segunda nevera. ¿Cuál es la probabilidad de que el frasco seleccionado de la segunda nevera esté contaminado?

a) Neveras con frascos saludables y contaminados

espacio_muestral_nevera_1= 4+3
cat("probabilidad_frasco_saludable_nevera_1 : ",probabilidad_frasco_saludable_nevera_1= 4/7, "\n")
## probabilidad_frasco_saludable_nevera_1 :  0.5714286
cat("probabilidad_frasco_contaminado_nevera_1 : ",probabilidad_frasco_contaminado_nevera_1= 3/7, "\n")
## probabilidad_frasco_contaminado_nevera_1 :  0.4285714
print("despues del evento 1 en el cual se saca 1 frasco de la nevera 1 y se lleva a la nevera 2" )
## [1] "despues del evento 1 en el cual se saca 1 frasco de la nevera 1 y se lleva a la nevera 2"
espacio_muestral_nevera_2= (3+5) + 1
cat("probabilidad_frasco_saludable_nevera_2 : ",probabilidad_frasco_saludable_nevera_2= (3+1)/9, "\n")
## probabilidad_frasco_saludable_nevera_2 :  0.4444444
cat("probabilidad_frasco_contaminado_nevera_2 : ",probabilidad_frasco_contaminado_nevera_2= (5+1)/9, "\n")
## probabilidad_frasco_contaminado_nevera_2 :  0.6666667
# Diagrama de Bayes

cat("Diagrama de  Bayes - Problema de las neveras")
## Diagrama de  Bayes - Problema de las neveras
options(repos = c(CRAN = "https://cloud.r-project.org"))
install.packages("DiagrammeR")
## Installing package into 'C:/Users/Juan PC/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'DiagrammeR' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\Juan PC\AppData\Local\Temp\RtmpyG8kRG\downloaded_packages
library(DiagrammeR)
## Warning: package 'DiagrammeR' was built under R version 4.5.1
diagram_code <- '
digraph decision_tree {
  
  graph [layout = dot]

  node [shape=box, style=filled, fontname="Arial"]

  # Nodos de primer nivel
  A [label="Traslada frasco", fillcolor=lightgray]
  B1 [label="Saludable\\nP = 4/7", fillcolor=lightblue]
  B2 [label="Contaminado\\nP = 3/7", fillcolor=lightpink]

  # Nodos segundo nivel
  C1 [label="Selecciona frasco\\nContaminado\\nP = 5/9", fillcolor=lightyellow]
  C2 [label="Selecciona frasco\\nSaludable\\nP = 4/9", fillcolor=green]
  D1 [label="Selecciona frasco\\nContaminado\\nP = 6/9", fillcolor=lightyellow]
  D2 [label="Selecciona frasco\\nSaludable\\nP = 3/9", fillcolor=green]

  # Conexiones
  A -> B1
  A -> B2
  B1 -> C1
  B1 -> C2
  B2 -> D1
  B2 -> D2
}
'

grViz(diagram_code)
print("Probabilidad de que el frasco seleccionado de la nevera 2 esté contaminado, dado que se trasladó un frasco al azar desde la nevera 1 y se agregó a la nevera 2")
## [1] "Probabilidad de que el frasco seleccionado de la nevera 2 esté contaminado, dado que se trasladó un frasco al azar desde la nevera 1 y se agregó a la nevera 2"
cat("𝑃(frasco contaminado en nevera 2 ∣ frasco trasladado al azar desde nevera 1) =  ", ((4/7)*(5/9))+((3/7)*(6/9)), "\n")
## 𝑃(frasco contaminado en nevera 2 ∣ frasco trasladado al azar desde nevera 1) =   0.6031746

PUNTO 5 - Probabilidad total , bayes

Un sistema de clasificación de correos electrónicos evalúa si un correo es spam (S) o no es spam (no S). Inicialmente, la probabilidad de que un correo sea spam es P(S)=0.2. A medida que se evalúan las palabras del correo, el sistema ajusta esta probabilidad.

Primera palabra: el correo tiene la palabra ganar (G).

a) Correos SPAM

¿Cuál es la probabilidad de qué el correo sea spam después de considerar ambas palabras?

evento_A = "Evento A = El correo resulta ser spam, después de identificar que contiene las palabras ganar y oferta"
evento_A
## [1] "Evento A = El correo resulta ser spam, después de identificar que contiene las palabras ganar y oferta"
cat("identificamos que es un problema de bayes ","\n")
## identificamos que es un problema de bayes
cat("P(S/G∩O)= (P(S)*P(G∩O/S))/(P(G∩O))","\n")
## P(S/G∩O)= (P(S)*P(G∩O/S))/(P(G∩O))
cat("* P(S) = ", 0.2 ,"\n")
## * P(S) =  0.2
cat("P(G∩O/S) -> asumiendo independencia de los eventos ganar y oferta ","\n")
## P(G∩O/S) -> asumiendo independencia de los eventos ganar y oferta
cat("P(G∩O/S) = P(G/S)*P(O/S)","\n")
## P(G∩O/S) = P(G/S)*P(O/S)
cat("P(G/S) = ", 0.7 ,"\n")
## P(G/S) =  0.7
cat("P(O/S) = ", 0.6 ,"\n")
## P(O/S) =  0.6
cat("P(G∩O/S) = 0.6*0.7","\n")
## P(G∩O/S) = 0.6*0.7
cat("* P(G∩O/S) = ",0.6*0.7,"\n")
## * P(G∩O/S) =  0.42
cat("P(G∩O) -> Como se nos pide calcular la probabilidad de que ocurran ambos eventos donde el correo contenga las palabras ganar y oferta sin especificar si es spam o no (Ganar intersección oferta), debemos tener en cuenta tanto los correos spam como los no spam.Por ello, aplicamos el Teorema de la Probabilidad Total, considerando ambos escenarios." ,"\n")
## P(G∩O) -> Como se nos pide calcular la probabilidad de que ocurran ambos eventos donde el correo contenga las palabras ganar y oferta sin especificar si es spam o no (Ganar intersección oferta), debemos tener en cuenta tanto los correos spam como los no spam.Por ello, aplicamos el Teorema de la Probabilidad Total, considerando ambos escenarios.
cat("P(G∩O) = P(G∩O/SPAM)*P(SPAM)+P(G∩O/No SPAM)*P(No SPAM)", "\n")
## P(G∩O) = P(G∩O/SPAM)*P(SPAM)+P(G∩O/No SPAM)*P(No SPAM)
cat(" P(G∩O/SPAM) Y  P(G∩O/No SPAM) -> asumiendo independencia de los eventos ganar y oferta ","\n")
##  P(G∩O/SPAM) Y  P(G∩O/No SPAM) -> asumiendo independencia de los eventos ganar y oferta
cat("P(G∩O) = P(G/SPAM)*P(O/SPAM)*P(SPAM)+P(G/No SPAM)*P(O/No SPAM)*P(No SPAM)", "\n")
## P(G∩O) = P(G/SPAM)*P(O/SPAM)*P(SPAM)+P(G/No SPAM)*P(O/No SPAM)*P(No SPAM)
cat("P(G∩O) = 0.7*0.6*0.2+0.1*0.2*0.8", "\n")
## P(G∩O) = 0.7*0.6*0.2+0.1*0.2*0.8
cat("*P(G∩O) = ",0.7*0.6*0.2+0.1*0.2*0.8, "\n")
## *P(G∩O) =  0.1
cat("FINALMENTE","\n")
## FINALMENTE
cat("P(S/G∩O)= (P(S)*P(G∩O/S))/(P(G∩O))","\n")
## P(S/G∩O)= (P(S)*P(G∩O/S))/(P(G∩O))
cat("P(S/G∩O)= ", (0.2*0.42)/(0.1),"\n")
## P(S/G∩O)=  0.84

PROBAMOS AHORA USANDO EL METODO GRÁFICO

cat("Creación del diagrama de desición")
## Creación del diagrama de desición
grViz("
digraph tree {
  
  node [shape=box, style=filled, fillcolor=lightblue]

  # Nodos principales
  A [label='Inicio']
  B [label='SPAM (0.2)']
  C [label='NO SPAM (0.8)']

  # Rama SPAM → GANAR / NO GANAR
  D [label='GANAR (0.7)']
  E [label='NO GANAR (0.3)']

  # Rama GANAR → OFERTA / NO OFERTA
  F [label='OFERTA (0.6)\nP1 = 0.084']
  G [label='NO OFERTA (0.4)\nP2 = 0.056']

  # Rama NO GANAR → OFERTA / NO OFERTA
  H [label='OFERTA (0.6)\nP3 = 0.036']
  I [label='NO OFERTA (0.4)\nP4 = 0.024']

  # Rama NO SPAM → GANAR / NO GANAR
  J [label='GANAR (0.1)']
  K [label='NO GANAR (0.9)']

  # GANAR → OFERTA / NO OFERTA
  L [label='OFERTA (0.2)\nP5 = 0.016']
  M [label='NO OFERTA (0.8)\nP6 = 0.064']

  # NO GANAR → OFERTA / NO OFERTA
  N [label='OFERTA (0.2)\nP7 = 0.144']
  O [label='NO OFERTA (0.8)\nP8 = 0.576']

  # Conexiones
  A -> B
  A -> C

  B -> D
  B -> E

  D -> F
  D -> G

  E -> H
  E -> I

  C -> J
  C -> K

  J -> L
  J -> M

  K -> N
  K -> O
}
")
cat("Sumamos las probabilidades debe dar 1 -> 0.084+0.056+0.036+0.024+0.016+0.064+0.144+0.576 = ",0.084+0.056+0.036+0.024+0.016+0.064+0.144+0.576,"\n")
## Sumamos las probabilidades debe dar 1 -> 0.084+0.056+0.036+0.024+0.016+0.064+0.144+0.576 =  1
cat("P(S/G∩O)= (P(S)*P(G∩O/S))/(P(G∩O))","\n")
## P(S/G∩O)= (P(S)*P(G∩O/S))/(P(G∩O))
cat("P(S/G∩O)= (P1)/(P1+P5)","\n")
## P(S/G∩O)= (P1)/(P1+P5)
cat("P(S/G∩O) =", (0.084)/(0.084+0.016),"\n")
## P(S/G∩O) = 0.84