Taller: Estadística Descriptiva y Probabilidad para Métodos Estadísticos

Especialización en Estadística Aplicada - Fundación Universitaria Los Libertadores

30 de octubre de 2025

Nombre: Danuil Elias Dueñas Criado

Código: 202540002444

Instrucciones

  • Responda cada ejercicio mostrando el razonamiento matemático.

  • Implemente el análisis en R y entregue un script .R o un RMarkdown con resultados y gráficos.

  • Explique e interprete los resultados en el contexto de cada problema.

  • Puede realizar el taller en parejas y una de las dos personas carga la actividad especificando con quien trabajo.

  • La fecha de entrega es el miércoles 5 de noviembre antes de media noche.

Ejercicios

1. Portafolio de inversiones

Un portafolio contiene el 40% de activos de renta fija y el 60% de acciones. De las acciones, el 25% pertenece al sector tecnológico.

a) ¿Cuál es la probabilidad de seleccionar un activo tecnológico al azar del portafolio?

Dada la proporción en la cual se encuentra contenido el portafolio, es posible derivar que:

  • la probabilidad de seleccionar aleatoriamente un activo de renta fija es igual al \(40\%\), \(P(renta \; fija) = 0.4\),

  • la probabilidad de seleccionar aleatoriamente una acción es igual al \(60\%\), \(P(acción) = 0.6\),

  • Así mismo, la probabilidad de seleccionar aleatoriamente un activo tecnológico dado que se seleccione una acción, es del 25%, \(P(activo \; tecnológico \;|\; acción) = 0.25\)

Ahora, la probabilidad de seleccionar un activo tecnológico al azar corresponde a la probabilidad de seleccionar una acción y que esta corresponda a un activo tecnológico, es decir \(P(acción \cap activo \; tecnológico)\).

A partir de la definición de probabilidad condicional se tiene que:

\[P(acción \cap activo \; tecnológico) = P(activo \; tecnológico \;|\; acción) \times P(acción)\]

Remplazando los valores dados:

\[P(acción \cap activo \; tecnológico) = 0.6 \times 0.25 = 0.15 \]

Por tanto, la probabilidad de seleccionar un activo tecnológico al azar es del 15%.

Este ejercicio también se puede visualizar mediante el siguiente árbol de decisión:

b) Escriba el código en R que calcule la probabilidad y simule 10 000 selecciones para comparar la estimación empírica con el valor teórico.

  • Cálculo de la probabilidad de seleccionar un activo tecnológico al azar

Se definen las probabilidades conocidas:

# Probabilidad de seleccionar al azar un activo de renta fija
p_renta_fija <- 0.4

# Probabilidad de seleccionar al azar una accción
p_accion <- 0.6

# Probabilidad de seleccionar al azar un activo 
# tecnológico dado que se seleccionó una acción
p_tec_dado_accion <- 0.25

A continuación, se calcula la probabilidad de seleccionar un activo tecnológico al azar empleando la definición de probabilidad condicional: \[P(acción \cap activo \; tecnológico) = P(activo \; tecnológico \;|\; acción) \times P(acción)\]

p_tecn <- p_tec_dado_accion * p_accion 

cat("Probabilidad teórica:", p_tecn, "\n")
## Probabilidad teórica: 0.15
  • Simulación de 10000 selecciones

Se define una semilla aleatoria para asegurar reproducibilidad de los resultados y se almacena el número de selecciones, y se realiza la simulación:

# Semilla aleatoria
set.seed(123)

# 10 000 selecciones
n_selecciones <- 10000

# Simulación de selección renta_fija/acción
tipo_activo <- sample(c("renta_fija", "accion"), n_selecciones, replace = TRUE, prob = c(p_renta_fija, p_accion))

# Visualizar primeros 10 datos
tipo_activo[0:10]
##  [1] "accion"     "renta_fija" "accion"     "renta_fija" "renta_fija"
##  [6] "accion"     "accion"     "renta_fija" "accion"     "accion"

Como se observa, se obtuvieron 10000 selecciones entre renta fija y acción, definiendo para cada activo su probabilidad correspondiente. A continuación, para cada caso donde la selección corresponde al activo accion, se toma la salida de la simulación de 10000 selecciones entre activos tecnológicos y el resto; para este caso se define como True la selección de un activo tecnológico, y False en el caso contrario:

# Se valida si la primera selección es "accion", en cuyo caso se toma el resultado de la simulación de 10000 entre activo tecnológico (True) u otros (False)
es_tecnologica <- ifelse(tipo_activo == "accion",
                         sample(c(TRUE, FALSE), n_selecciones, replace = TRUE, prob = c(p_tec_dado_accion, 1 - p_tec_dado_accion)),
                         FALSE)

A continuación, se calcula la probabilidad de seleccionar un activo tecnológico empleando el enfoque clásico (Laplace), dado que los casos donde se selecciona este tipo de activo se definieron como True, donde su valor numérico es representado con el número 1, la media de las selecciones corresponderá a la probabilidad deseada:

# Probabilidad empírica
p_empirica <- mean(es_tecnologica)

# Se muestran ambas probabilidades
cat("Probabilidad teórica:", p_tecn, "\n")
## Probabilidad teórica: 0.15
cat("Probabilidad empírica:", p_empirica, "\n")
## Probabilidad empírica: 0.1543

A partir de los resultados es posible observar la proximidad entre la probabilidad teórica y aquella obtenida de manera empírica mediante la simulación de 10000 selecciones. Se esperaría que al aumentar el número de simulación, la diferencia entre las probabilidades se redujera convergiendo eventualmente al mismo valor teórico.


2. Control de calidad

En una línea de producción la probabilidad de que un producto esté defectuoso es 0,03 y la probabilidad de que sea rechazado por otra razón es 0,05.

a) Argumente si los eventos “defectuoso” y “rechazado por otra razón” son mutuamente excluyentes o no.

Los eventos pueden ser analizados en dos escenarios: primero, bajo la premisa que un producto solo puede ser rechazado por una razón, es decir porque es defectuoso o por otra causa, pero no por ambas, los eventos son mutuamente excluyentes, en cuyo caso no existe intersección. Este escenario es típico en control de calidad donde un producto defectuoso no se rechaza por otra razón. Este proceso se ilustra en el siguiente árbol de decisión:

En un segundo escenario hipotético, podrían existir casos donde un producto defectuoso también podría ser rechazado por otra razón, como mala presentación o etiqueta incorrecta, en cuyo caso los eventos no serían mutuamente excluyentes. Este caso, aunque posible, es menos común en la práctica, y se ilustra en el siguiente árbol de decisión:

b) Calcule P(defectuoso o rechazado) y presente el procedimiento en R.

Primero, se definen las probabilidades dadas:

\(P(defectuoso) = 0.03 = 3 \%\)

\(P(rechazado \;por \;otra \;razón) = 0.05 = 5\%\)

Se calcula la probabilidad que el producto sea defectuoso o rechazado como \(P(defectuoso \;\cup\; rechazado \; por \; otra \; razón )\), así:

\[P(defectuoso \;\cup\; rechazado \; por \; otra \; razón ) = P(defectuoso) + P(rechazado \; por \; otra \; razón) - P(defectuoso \;\cap\; rechazado \; por \; otra \; razón )\]

Ahora, considerando el escenario donde los eventos son mutuamente excluyentes, entonces

\[ P(defectuoso ;\ \cap \; rechazado \; por \; otra \; razón ) = 0 \]

Por tanto:

\[P(defectuoso \;\cup\; rechazado \; por \; otra \; razón ) = 0.03 + 0.05 = 0.08 = 8\%\]

A continuación, se presenta el procedimiento en R:

  • Definición de probabilidades:
# Probabilidad que el producto sea defectuoso  
p_defectuoso <- 0.03  

# Probabilidad que el producto sea rechazado por otra razón 
p_rechazado_otra_razon <- 0.05
  • Cálculo de probabilidad que el producto sea defectuoso o sea rechazado por otra razón:
p_defectuoso_O_rechazado_otra_razon <- p_defectuoso + p_rechazado_otra_razon

cat("La probabilidad de que el producto sea defectuoso o sea rechazado por otra razón es de", formatC(p_defectuoso_O_rechazado_otra_razon * 100, digits=1, format="f"), "%")
## La probabilidad de que el producto sea defectuoso o sea rechazado por otra razón es de 8.0 %

c) Suponga que, hipotéticamente, ambos eventos son independientes. Calcule P(ambos) bajo esa suposición y discuta si la independencia es realista en este contexto.

  • Considerando el escenario donde un producto puede ser rechazado por una única razón (ser defectuoso u otra causa), la suposición de independencia no es realista, dado que dos eventos con probabilidad diferente de cero, no pueden ser independientes y excluyentes a la vez. En este caso, si el producto es defectuoso, reduce a cero la probabilidad de que sea rechazado por otra razón. De este modo, la probabilidad P(ambos) es igual a cero.

  • Por otra parte, si se considera el escenario donde un producto defectuoso puede ser rechazado por otra razón, entonces los eventos no son mutuamente excluyentes.

    Incluso, en este caso la suposición de independencia no es realista, porque se esperaría que el hecho de que un producto sea defectuoso disminuyera la probabilidad de que sea rechazado por otra causa, por tanto en la realidad estos eventos sería dependientes.

Bajo este supuesto, la probabilidad de ocurrencia de ambos eventos se calcula mediante:

\[P(defectuoso \;\cap\; rechazado \; por \; otra \; razón) = P(defectuoso) \times P(rechazado \; por \; otra \; razón)\]

De este modo:

\[P(defectuoso \;\cap\; rechazado \; por \; otra \; razón) = 0.03 \times 0.05 = 0.0015 = 0.15\%\]

La probabilidad que ambos eventos sucedan bajo este escenario es de apenas 0.15%.


3. Atención al cliente

En una empresa, el 70% de los casos son soporte técnico y 30% consultas administrativas. El 90% de los casos técnicos se resuelven en la primera llamada; el 60% de los administrativos se resuelven en la primera llamada.

a) Calcule P(técnico | resuelto en primera llamada) usando el Teorema de la probabilidad total y Bayes. Implemente la solución en R.

A partir de la información suministrada respecto a los casos, es posible derivar que:

  • la probabilidad de que un caso corresponda a soporte técnico es igual al \(70\%\), \(P(soporte\; técnico) = 0.7\), por otra parte,

  • la probabilidad de que un caso corresponda a consultas administrativas es igual al \(30\%\), \(P(consulta\; administrativa) = 0.3\),

  • Así mismo, la probabilidad de que un caso se resuelva en la primera llamada dado que es un caso técnico, es del 90%, \(P(resuelto\; en\; 1°\; llamada\; |\; soporte\; técnico) = 0.9\), mientras que la probabilidad de que un caso se resuelva en la primera llamada dado que corresponde a una consulta administrativa, es igual al 60%, \(P(resuelto\; en\; 1°\; llamada\; |\; consulta\; administrativa) = 0.6\)

Ahora, la probabilidad de que un caso corresponda a un caso técnico dado que es resuelto en la primera llamada, \(P(técnico \;| \; resuelto\; en\; 1°)\) se calcula a partir del Teorema de Bayes, así:

\[P(técnico \;| \; resuelto\; en\; 1°) = \frac{P( resuelto\; en\; 1°\;|\;técnico) \times P(técnico)}{P(resuelto\; en\; 1°)}\]

Para el cálculo de la probabilidad total que el caso sea resuelto en la 1° llamada, se emplea el teorema de probabilidad total:

\[P(resuelto\; en\; 1°) = P(resuelto\; en\; 1° | técnico) \times P(técnico) + P(resuelto\; en\; 1° |consulta\; administrativa) \times P(consulta\; administrativa)\]

Remplazando los valores dados:

\[P(resuelto\; en\; 1°) = 0.9 \times 0.7 + 0.6 \times 0.3 = 0.81\]

El cálculo de esta probabilidad total puede visualizarse mediante el siguiente árbol de decisión:

Sumando las nodos terminales donde los casos son resueltos en primera llamada se obtiene el valor anterior de 81%.

Ahora, si remplazamos el valor de probabilidad total calculado y lo valores proporcionados, en la primera expresión, se tiene:

\[P(técnico \;| \; resuelto\; en\; 1°) = \frac{P( resuelto\; en\; 1°\;|\;técnico) \times P(técnico)}{P(resuelto\; en\; 1°)}\]

\[P(técnico \;| \; resuelto\; en\; 1°) = \frac{0.9 \times 0.7}{0.81} = 0.7778 = 77.78 \% \]

Por tanto, la probabilidad que un caso que es resuelto en la 1° llamada corresponda a un caso técnico es del 77.78%.

A continuación, se implementa la solución:

Se definen las probabilidades conocidas

# Probabilidad de que el caso sea de soporte técnico
p_tecnico <- 0.7

# Probabilidad de que el caso sea de consulta administrativa
p_admin <- 0.3

# Probabilidad de que el caso se resuelva en la primera llamada dado que es un caso técnico
p_primer_llamada_dado_tecnico <- 0.9

# Probabilidad de que el caso se resuelva en la primera llamada dado que es una consulta administrativa
p_primer_llamada_dado_admin <- 0.6

Se calcula la probabilidad total de que el caso sea resuelto en la primera llamada, mediante el teorema de probabilidad total:

# Probabilidad de que el caso sea resuelto en la primera llamada
p_primer_llamada <- p_primer_llamada_dado_tecnico * p_tecnico + p_primer_llamada_dado_admin * p_admin
p_primer_llamada
## [1] 0.81

Se calcula la probabilidad de que un caso resuelto en la primera llamada corresponda a un caso de soporte técnico mediante el teorema de Bayes:

p_tecnico_dado_primer_llamada <- (p_primer_llamada_dado_tecnico * p_tecnico) / p_primer_llamada
p_tecnico_dado_primer_llamada
## [1] 0.7777778
cat("La probabilidad que un caso que es resuelto en la 1° llamada corresponda a un caso técnico es de", formatC(p_tecnico_dado_primer_llamada * 100, digits = 2, format = "f"), "%")
## La probabilidad que un caso que es resuelto en la 1° llamada corresponda a un caso técnico es de 77.78 %

4. Producción con dos máquinas

La Máquina A produce el 40% de las piezas con una tasa de defectos del 2 %. La Máquina B produce el 60% con una tasa de defectos del 3 %.

a) Calcule la probabilidad total de que una pieza sea defectuosa.

A partir de la información suministrada respecto a los casos, es posible derivar que:

  • la probabilidad de que una pieza sea producida por la Máquina A es igual al \(40\%\), \(P(máquina \;A) = 0.4\), por otra parte,

  • la probabilidad de que una pieza sea producida por la Máquina B es igual al \(60\%\), \(P(máquina \;B) = 0.6\),

  • Así mismo, la probabilidad de que una pieza sea defectuosa si es elaborada por la Máquina A, es del 2%, \(P(defectuosa \;|\; máquina\; A) = 0.02\), mientras que la probabilidad de que una pieza sea defectuosa si es elaborada por la Máquina B, es igual al 3%, \(P(defectuosa \;|\; máquina \; B) = 0.03\)

Para el cálculo de la probabilidad total de que una pieza sea defectuosa, se emplea el teorema de probabilidad total, así:

\[P(defectuosa) = P(defectuosa \;|\; máquina \; A) \times P(máquina \; A) + P(defectuosa \;|\; máquina \; B) \times P(máquina \; B)\]

Sustituyendo por los valores proporcionados,

\[P(defectuosa) = 0.02 \times 0.4 + 0.03 \times 0.6 = 0.026 = 2.6 \%\]

El cálculo de esta probabilidad total puede visualizarse mediante el siguiente árbol de decisión:

Sumando las nodos terminales donde la pieza es defectuosa se obtiene el valor anterior de 2.6%.

A continuación, se presenta el código de solución del ejercicio:

Se definen las probabilidades conocidas:

# Probabilidad de que la pieza sea elaborada por la máquina A
p_MA <- 0.4
# Probabilidad de que la pieza sea defectuosa dado que fue elaborada por la máquina A
p_def_dado_MA <- 0.02


# Probabilidad de que la pieza sea elaborada por la máquina A
p_MB <- 0.6
# Probabilidad de que la pieza sea defectuosa dado que fue elaborada por la máquina B
p_def_dado_MB <- 0.03

Se calcula la probabilidad total de que la pieza sea defectuosa empleando el teorema de probabilidad total:

p_def <- p_def_dado_MA * p_MA + p_def_dado_MB * p_MB
p_def
## [1] 0.026
cat("La probabilidad total de que la pieza sea defectuosa es de", formatC(p_def * 100, digits = 2, format = "f"), "%")
## La probabilidad total de que la pieza sea defectuosa es de 2.60 %

b) ¿Cuál es la probabilidad de que una pieza defectuosa haya sido producida por la Máquina A? (aplique Bayes y resuelva en R).

La probabilidad de que una pieza defectuosa haya sido producida por la Máquina A, \(P(defectuosa \;| \; máquina \; A)\) se calcula a partir del Teorema de Bayes, así:

\[P(máquina\; A \;| \; defectuosa) = \frac{P(defectuosa\;|\;máquina\; A) \times P(máquina\;A)}{P(defectuosa)}\]

Ahora, si remplazamos el valor de probabilidad total calculado y lo valores proporcionados, se obtiene:

\[P(máquina\; A \;| \; defectuosa) = \frac{ 0.02 \times 0.4}{0.026} = 0.3077 = 30.77 \%\]

Por tanto, la probabilidad que una pieza defectuosa haya sido producida por la Máquina A es del 30.77%.

A continuación, se presenta la implementación de la solución en R:

p_MA_dado_def <- (p_def_dado_MA * p_MA) / p_def
p_MA_dado_def
## [1] 0.3076923
cat("La probabilidad que una pieza defectuosa haya sido producida por la Máquina A es del", formatC(p_MA_dado_def * 100, digits = 2, format = "f"), "%")
## La probabilidad que una pieza defectuosa haya sido producida por la Máquina A es del 30.77 %

5. Prueba diagnóstica

Un test diagnóstico tiene: prevalencia de la enfermedad 0,01, sensibilidad 0,98 y tasa de falsos positivos 0,05.

a) Calcule P(enfermo | positivo) y comente el resultado.

De acuerdo con la información suministrada, la prevalencia de la enfermedad es del 0.01, es decir que la proporción total de casos existentes de la enfermedad en la población es del 1%, se define entonces que \(P(enfermo) = 0.01%\).

En el caso de la sensibilidad, esta corresponde a la proporción de resultados positivos en pacientes con la enfermedad, cuyo valor es de 0.98 para el caso en estudio, es decir que \(P ( positivo \;|\; enfermo) = 0.98\).

Por su parte, la tasa de falsos positivos es de 0.05, esto significa la proporción de resultados positivos en pacientes sanos, es decir \(P ( positivo \;|\; sano) = 0.05\).

La probabilidad de que un paciente presente la enfermedad dado que la prueba arrojó un resultado positivo, \(P(enfermo \;| \; positivo)\) se calcula a partir del Teorema de Bayes, así:

\[P(enfermo \;| \; positivo) = \frac{P(positivo\;|\;enfermo) \times P(enfermo)}{P(positivo)}\]

Para el cálculo de la probabilidad total que una prueba sea positiva empleamos el teorema de probabilidad total:

\[P(positivo) = P(positivo \;|\; enfermo) \times P(enfermo) + P(positivo \;|\; sano) \times P(sano)\]

\[P(positivo) = P(positivo \;|\; enfermo) \times P(enfermo) + P(positivo \;|\; sano) \times (1 - P(enfermo))\]

Sustituyendo por los valores proporcionados,

\[P(positivo) = 0.98 \times 0.01 + 0.05 \times (1 - 0.01) = 0.0593 = 5.93\%\]

Reemplazamos el valor de probabilidad total calculado y lo valores proporcionados en la expresión inicial:

\[P(enfermo \;| \; positivo) = \frac{0.98 \times 0.01}{0.0593} = 0.1653 = 16.53%\]

Por tanto, la probabilidad de que un paciente presente la enfermedad dado que la prueba arrojó un resultado positivo es del 16.53%.

A continuación, se presenta la implementación de la solución:

Se definen las probabilidades conocidas:

# Probabilidad de que un individuo de la población presente la enfermedad
p_enfermo <- 0.01

# Probabilidad de que la prueba arroje un resultado positivo dado que el individuo está enfermo
p_positivo_dado_enfermo <- 0.98

# Probabilidad de que la prueba arroje un resultado positivo dado que el individuo está sano
p_positivo_dado_sano <- 0.05

Se calcula la probabilidad total de que una prueba sea positiva:

p_positivo <- p_positivo_dado_enfermo * p_enfermo + p_positivo_dado_sano * (1 - p_enfermo)

Finalmente, se calcula la probabilidad de que un individuo esté enfermo dado que el resultado de la prueba fue positivo:

p_enfermo_dado_positivo <- (p_positivo_dado_enfermo * p_enfermo) / p_positivo
p_enfermo_dado_positivo
## [1] 0.1652614
cat("La probabilidad de que un individuo esté enfermo dado que el resultado de la prueba fue positivo es del", formatC(p_enfermo_dado_positivo * 100, digits = 2, format = "f"), "%")
## La probabilidad de que un individuo esté enfermo dado que el resultado de la prueba fue positivo es del 16.53 %

Comentarios

Se observa que aunque la prueba reporta una alta sensibilidad (98%), el valor predictivo positivo (PPV), es decir la probabilidad de que una persona presente la enfermedad dado que el resultado fue positivo, es de solo 16.53%. Esto se debe a la baja prevalencia de la enfermedad y a la tasa de falsos positivos.

Considerando que a los individuos a quienes se les detecte la enfermedad mediante la prueba, probablemente sean sometidos a pruebas adicionales o tratamiento, la prueba en estudio provee un resultado favorable dado que es más conveniente que genere falsos positivos y que los individuos sean más examinados o tratados, a que genere falsos negativos que conlleven al no tratamiento o examinación de individuos con la enfermedad. Por tanto, es importante al estudiar este tipo de casos, obtener las diferentes métricas de desempeño para analizar la fiabilidad de las pruebas, principalmente en el contexto clínico.

b) Simule en R una población de 100 000 individuos y muestre la contingencia (tabla de confusión) resultante.

A continuación, se definen las probabilidades conocidas:

# Prevalencia de la enfermedad o probabilidad de que un individuo presente la enfermedad
prevalencia <- 0.01                

# Sensibilidad, o probabilidad de que la prueba arroje un resultado positivo dado que el individuo presenta la enfermedad
sensibilidad <- 0.98

# Tasa de falsos positivos o probabilidad de que la prueba arroje un resultado positivo dado que el individuo NO presenta la enfermedad
falsos_positivos  <- 0.05    

Ahora, se define una semilla aleatoria para garantizar reproducibilidad del análisis, posteriormente se establece el número de individuos a simular:

# Definición de semilla aleatoria
set.seed(42)

# Número de individuos a simular
N <- 100000

# Se simulan 100000 individuos, donde se define si presenta la enfermedad en función de la prevalencia de la enfermedad
enfermo <- sample(c(TRUE, FALSE), N, replace = TRUE, prob = c(prevalencia, 1 - prevalencia))

# Se crea una variable tipo lógico para almacenar el resultado de la prueba
positivo <- logical(N)

# Para los casos donde los individuos presentan la enfermedad, se determina el resultado de la prueba empleando la sensibilidad de la prueba
positivo[enfermo] <- sample(c(TRUE, FALSE), sum(enfermo), replace = TRUE, prob = c(sensibilidad, 1 - sensibilidad))

# Para los casos donde los individuos NO presentan la enfermedad, se determina el resultado de la prueba empleando la tasa de falsos positivos
positivo[!enfermo] <- sample(c(TRUE, FALSE), sum(!enfermo), replace = TRUE, prob = c(falsos_positivos, 1 - falsos_positivos))

Como resultado del bloque de código anterior, se obtuvieron dos variables:

  • enfermo: donde cada elemento identifica si el individuo presenta la enfermedad [True] o no la presenta [False]

  • positivo: donde cada elemento identifica el resultado de la prueba, positivo [True] o negativo [False].

A partir de estas variables se construye a continuación la tabla de contingencia o matriz de confusión para la prueba:

# Tabla de contingencia (Matriz de confusión)

matriz_confusion <- table(Enfermo = ifelse(enfermo, "Sí", "No"),
             Prueba = ifelse(positivo, "Positivo", "Negativo"))
matriz_confusion
##        Prueba
## Enfermo Negativo Positivo
##      No    93984     4985
##      Sí       20     1011

A partir de los resultados de la simulación, es posible calcular la probabilidad que un individuo presente la enfermedad dado que el resultado es positivo. Para esto calculamos la proporción que representan los verdaderos positivos, 1011 casos, sobre el total de resultados positivos, 5996 casos (4985 + 1011) entre falso positivos y verdaderos positivos, arrojando el siguiente cálculo:

p_enfermo_dado_positivo_empirica = matriz_confusion["Sí","Positivo"] / (matriz_confusion["Sí","Positivo"] + matriz_confusion["No", "Positivo"])

p_enfermo_dado_positivo_empirica
## [1] 0.1686124
# Se presentan ambas probabilidades
cat("Probabilidad teórica:", p_enfermo_dado_positivo, "\n")
## Probabilidad teórica: 0.1652614
cat("Probabilidad empírica:", p_enfermo_dado_positivo_empirica, "\n")
## Probabilidad empírica: 0.1686124

Al igual que en los casos anteriores, se observa que los valores de la probabilidad de que un individuo presente la enfermedad dado que la prueba arroja un resultado positivo, calculados de forma teórica y empírica son valores próximos, lo cual es esperado dado el número de simulaciones definidos. Así mismo, se esperaría que al aumentar el número de realizaciones, el valor empírico tienda a converger al valor teórico calculado.


6. Campañas de marketing

Dos campañas A y B convierten clientes con probabilidades 0,10 y 0,15 respectivamente. Se asume independencia.

a) Calcule la probabilidad de que al menos una convierta a un cliente.

A partir de la información suministrada, es posible definir que:

  • La probabilidad de que la campaña A convierta a un cliente es del 10%, \(P(campaña \;A) = 0.10\),

  • La probabilidad de que la campaña B convierta a un cliente es del 15%, \(P(campaña \;B) = 0.15\)

La probabilidad de que al menos una de las campañas convierta a un cliente corresponde a \(P(campaña \;A \cup campaña \;B)\)

Por lo tanto,

\[P(campaña \;A \cup campaña \;B) = P(campaña \; A) + P(campaña \; B) - P(campaña \;A \cap campaña \;B)\]

Si se asume independencia, \(P(campaña \;A \cap activo \; campaña \;B) = P(campaña \;A) \times P(campaña \;B)\)

De esta forma,

\[P(campaña \;A \cup campaña \;B) = P(campaña \; A) + P(campaña \; B) - P(campaña \;A) \times P(campaña \;B)\]

Sustituyendo los valores:

\[P(campaña \;A \cup campaña \;B) = 0.10 + 0.15 - 0.10 \times 0.15 = 0.235 = 23.5\%\]

La probabilidad de que al menos una campaña convierta a un cliente es del 23.5%.

A continuación, se presenta la implementación de la solución:

Se definen las probabilidades conocidas:

# Probabilidad de que un cliente sea convertido por la campaña A
p_conv_A = 0.10

# Probabilidad de que un cliente sea convertido por la campaña B
p_conv_B = 0.15

Se calcula la probabilidad de que ocurra uno u otro evento:

p_conv_A_O_conv_B = p_conv_A + p_conv_B - p_conv_A * p_conv_B
p_conv_A_O_conv_B
## [1] 0.235
cat("La probabilidad que al menos una campaña convierta a un cliente es del", formatC(p_conv_A_O_conv_B * 100, digits = 2, format = "f"), "%")
## La probabilidad que al menos una campaña convierta a un cliente es del 23.50 %

b) En R, simule 50 000 clientes y estime la probabilidad empírica de al menos una conversión.

Se simulan 50.000 clientes empleando la función sample(), con dos eventos: “cliente convertido por campaña A o B” y “cliente no convertido”, para el primer evento se emplea la probabilidad calculada previamente de 23.5%, mientras que para el segundo se utiliza la probabilidad del complemento por normalización.

# Semilla aleatoria
set.seed(123)

# 10 000 selecciones
n_selecciones <- 50000

# Simulación de selección renta_fija/acción
resultado_cliente <- sample(c("no_conv", "conv_A_o_B"), n_selecciones, replace = TRUE, prob = c(1 - p_conv_A_O_conv_B, p_conv_A_O_conv_B))
# Se valida que casos son casos corresponden al evento de interes, convertido por campaña A o campaña B.
cliente_conv_A_o_B <- ifelse(resultado_cliente == "conv_A_o_B" , TRUE, FALSE)

Se calcula probabilidad empírica como la media de los casos verdaderos:

# Probabilidad empírica
p_empirica <- mean(cliente_conv_A_o_B)

# Se muestran ambas probabilidades
cat("Probabilidad teórica:", p_conv_A_O_conv_B, "\n")
## Probabilidad teórica: 0.235
cat("Probabilidad empírica:", p_empirica, "\n")
## Probabilidad empírica: 0.23258

c) Discuta posibles violaciones de la independencia en escenarios reales.

En escenarios reales se esperaría que la ocurrencia de la conversión de un cliente por cualquiera de las dos campañas influya sobre la probabilidad de una posterior conversión por la otra campaña.

Algunas de las dependencias podrían ser que una campaña puede fidelizar a un cliente, de tal forma que pueda ser más probable que otra posterior tenga éxito, aumentando así la probabilidad de conversión dado el resultado de la campaña anterior. Por otra parte, el efecto puede ser contrario, y reducir que tan propenso es un cliente a ser convertido dado el resultado previo.

En general, dado que las campañas son ofrecidas por la misma empresa, el éxito o fracaso de una de ellas impacta la percepción de los clientes hacia esta, influyendo positiva o negativamente en la probabilidad de que una nueva campaña tenga éxito.


7. El suero de la verdad

Un suero de la verdad tiene la propiedad de que 90% de los sospechosos que son culpables se juzgan de forma adecuada; mientras que 10% de los sospechosos que son culpables erróneamente son juzgados inocentes. Por otro lado, a los sospechosos que son inocentes se les juzga de manera errónea 1% de las veces. Si se selecciona de un grupo de sospechosos, de los cuales sólo 5% alguna vez han cometido un delito y el suero indica que es culpable, ¿cuál es la probabilidad de que sea inocente?

Inicialmente, se definen los eventos asociados al caso:

  • Sospechoso Culpable y Sospechoso Inocente
  • Juicio Culpable y Juicio Inocente

Ahora, se establecen las probabilidades a partir de los valores conocidos:

  • Dado que el sospechoso es culpable, se juzga correctamente en el 90% de los casos, es decir \(P(Juicio \;Culpable \;|\; Culpable) = 0.9\) y \(P( Juicio\;Inocente \;|\; Culpable) = 0.1\)
  • Dado que el sospechoso es inocente, se juzga incorrectamente en el 1% de los casos, es decir \(P(Juicio \;Culpable \;|\; Inocente) = 0.01\)
  • Del grupo de sospechosos, solo el 5% ha cometido un delito, es decir \(P(Culpable) = 0.05\) y \(P(Inocente) = 0.95\).

Para calcular la probabilidad de que un sospechoso sea inocente dado que el suero indica que es culpable empleamos el teorema de Bayes, así:

\[P(Inocente \;|\; Juicio \;Culpable) = \frac{P(Juicio\; Culpable \;|\; Inocente) \times P(Inocente)}{P(Juicio\;Culpable)}\]

La probabilidad total de que se juzque como culpable se calcula mediante el teorema de probabilidad total:

\[P(Juicio \; Culpable) = P(Juicio \; Culpable \;|\; Inocente) \times P(Inocente) + P(Juicio \; Culpable \;|\; Culpable) \times P(Culpable)\]

Reemplazando las probabilidades conocidas:

\[P(Juicio \; Culpable) = 0.01 \times 0.95 + 0.9 \times 0.05 = 0.0545 = 5.45\%\]

Sustituyendo en la expresión inicial, se obtiene:

\[P(Inocente \;|\; Juicio \;Culpable) = \frac{0.01 \times 0.95}{0.0545} = 0.1743 = 17.43\%\]

La probabilidad de que un sospechoso sea inocente dado que el suero indica que es culpable es del 17.43%.

A continuación, se presenta la implementación en R:

  • Definición de probabilidades conocidas
# Probabilidad de ser juzgado culpable dado que es culpable 
p_juzgado_culpable_dado_culpable = 0.9  

# Probabilidad de ser juzgado inocente si es culpable 
p_juzgado_inocente_dado_culpable = 0.1  

# Probabilidad de ser juzgado culpable dado que es inocente 
p_juzgado_culpable_dado_inocente = 0.01  

# Probabilidad de ser culpable 
p_culpable = 0.05  

# Probabilidad de ser Inocente 
p_inocente = 1 - p_culpable
  • Cálculo de la probabilidad total de ser juzgado culpable
p_juzgado_culpable = p_juzgado_culpable_dado_inocente * p_inocente + p_juzgado_culpable_dado_culpable * p_culpable 
p_juzgado_culpable
## [1] 0.0545
  • Cálculo de la probabilidad de ser juzgado culpable dado que es inocente
p_inocente_dado_juzgado_culpable = (p_juzgado_culpable_dado_inocente * p_inocente) / p_juzgado_culpable 
p_inocente_dado_juzgado_culpable
## [1] 0.1743119
cat("La probabilidad de que un sospechoso inocente sea juzgado culpable es del", formatC(p_inocente_dado_juzgado_culpable * 100, digits = 2, format = "f"), "%")
## La probabilidad de que un sospechoso inocente sea juzgado culpable es del 17.43 %

8. BDD mtcars

Cargue la base mtcars.

# Carga de la base de datos
data(mtcars)

a) Visualice las primeras observaciones y el resumen estadístico.

  • Visualización de primeras observaciones
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Se observa que la base de datos contiene la información de 11 variables para cada vehículo asociadas a características mecánicas y desempeño en términos de consumo (millas por galón)

  • Resumen Estadístico
summary(mtcars)
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000

b) Calcule media, mediana, moda, varianza, desviación estándar y coeficiente de variación del consumo (’mpg‘).

Inicialmente, se almacenan los valores de la columna mpg en la variable mpg:

mpg <- mtcars$mpg

Se calculan las medidas descriptivas y se almacenan para generar un dataframe resumen:

# Medidas descriptivas
media  <- mean(mpg)
mediana <- median(mpg)
moda <- (as.numeric(names(table(mpg)))[table(mpg)==max(table(mpg))])
varianza <- var(mpg)
desv_est <- sd(mpg)
coef_var <- (desv_est / media) * 100

Los valores calculados se presentan en la siguiente tabla

Medidas descriptivas del consumo (mpg)

Estadístico Valor
Media 20.091
Mediana 19.200
Moda 10.400
Varianza 36.324
Desviación Estándar 6.027
Coeficiente de Variación (%) 29.999
# Mostrar resultados
data.frame(media, mediana, moda[1], varianza, desv_est, coef_var)
##      media mediana moda.1. varianza desv_est coef_var
## 1 20.09062    19.2    10.4  36.3241 6.026948 29.99881

En el caso de la moda, se visualiza una de las modas calculadas, sin embargo, para los datos analizados existen varios para la moda, como se aprecia a continuación:

table(mpg)
## mpg
## 10.4 13.3 14.3 14.7   15 15.2 15.5 15.8 16.4 17.3 17.8 18.1 18.7 19.2 19.7   21 
##    2    1    1    1    1    2    1    1    1    1    1    1    1    2    1    2 
## 21.4 21.5 22.8 24.4   26 27.3 30.4 32.4 33.9 
##    2    1    2    1    1    1    2    1    1
moda
## [1] 10.4 15.2 19.2 21.0 21.4 22.8 30.4

Por tanto, es posible indicar que los datos exhiben un comportamiento multimodal.

c) Construya una tabla de frecuencias y porcentajes para la variable ’cyl‘.

Se construye la tabla de frecuencias para la variable cyl

# Tabla de frecuencias
tabla_cyl <- table(mtcars$cyl)
tabla_cyl
## 
##  4  6  8 
## 11  7 14

Esta tabla nos indica que existen 11 vehículos de 4 cilindros, 7 de 6 cilindros, y 14 de 8.

- Tabla en porcentajes

# Tabla de porcentajes
porcentajes_cyl <- prop.table(tabla_cyl) * 100
porcentajes_cyl
## 
##      4      6      8 
## 34.375 21.875 43.750

De este modo, se observa que los vehículos de 4 cilindros representan el 34.4% del total, los de 6 cilindros el 21.9% y finalmente, los de 8 cilindros representan la mayor proporción de vehículos en la base de datos con un 43.75%.

A continuación, se presenta en un dataframe las frecuencias y porcentajes para la variable cyl:

data.frame(
  Cilindros = names(tabla_cyl),
  Frecuencia = as.numeric(tabla_cyl),
  Porcentaje = round(porcentajes_cyl, 2)
)
##   Cilindros Frecuencia Porcentaje.Var1 Porcentaje.Freq
## 1         4         11               4           34.38
## 2         6          7               6           21.88
## 3         8         14               8           43.75

d) Genere un histograma del consumo (’mpg‘) y un boxplot comparando consumo según cilindros (’cyl‘).

  • Histograma
# Histograma
hist(mtcars$mpg,
     main = "Consumo (mpg)",
     xlab = "Millas por galón (mpg)",
     col = "skyblue", border = "white")

El histograma muestra distribución sesgada hacia valores medios (~15–20 mpg).

  • Boxplot
# Boxplot 
boxplot(mpg ~ cyl, data = mtcars,
        main = "Consumo según número de cilindros",
        xlab = "Número de cilindros", ylab = "Consumo (mpg)",
        col = c("lightgreen", "orange", "tomato"))

A partir del boxplot, se observa una correlación negativa entre la eficiencia de consumo (mpg) y el cilindraje de los autos. Esto es esperado dado que a mayor cilindraje, los motores tienen mayor potencia y un mayor consumo de combustible por milla recorrida.

e) Calcule la probabilidad de seleccionar un auto con más de 20 mpg y 4 cilindros.

Se calcula cuantos vehículos de 4 cilindros tienen un desempeño mayor de 20mpg

# Se suman los casos donde se cumplen ambas condiciones
n_evento <- sum(mtcars$mpg > 20 & mtcars$cyl == 4)
n_evento
## [1] 11

11 vehículos de 4 cilindros tienen un desempeño mayor de 20 mpg. Ahora, se calcula el número total de vehículos en la base de datos y se estima la probabilidad mediante el enfoque clásico de Laplace:

# Se calcula el número total de vehícilos
n_total <- nrow(mtcars)

# Cálculo de probabilidad
p_evento <- n_evento / n_total
p_evento
## [1] 0.34375
cat("La probabilidad de seleccionar al azar un auto con más de 20mpg y 4 cilindros es de", formatC(p_evento * 100, digits = 2,format = "f"), "%")
## La probabilidad de seleccionar al azar un auto con más de 20mpg y 4 cilindros es de 34.38 %

f) Calcule la media y desviación estándar de ’hp‘ para esos autos.

Se seleccionan los autos que cumplen con las condiciones anteriores y se almacenan en un subset:

# Autos que cumplen las condiciones de eficiencia y cilindraje
subset_autos <- subset(mtcars, mpg > 20 & cyl == 4)
subset_autos
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

Se calculan las medidas estadísticas sobre el subset:

media_hp <- mean(subset_autos$hp)
desv_hp <- sd(subset_autos$hp)

# Reporte en dataframe
data.frame(media_hp, desv_hp)
##   media_hp  desv_hp
## 1 82.63636 20.93453
sd(mtcars$hp)
## [1] 68.56287

Estadísticas de potencia (hp) para autos con mpg>20 y 4 cilindros

Estadístico Valor
Media HP 82.64
Desviación Estándar HP 20.93

Los autos de 4 cilindros y una eficiencia mayor a 20mpg exhiben una potencia promedio de 82.64 HP, con una desviación estándar de 20.93 HP. Si comparamos estas medidas con las de toda la población (media = 146.7 HP y std. dev = 68.56 HP), se observa que los vehículos de bajo cilindraje exhiben una potencia promedio menor, y una menor dispersión.


Criterios de evaluación:

Correctitud matemática: 40%

Implementación en R y reproducibilidad: 30%

Interpretación y discusión ética/contextual: 20%

Presentación y limpieza del reporte: 10%