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.
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.
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:
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
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.
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.
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:
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:
# 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
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 %
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%.
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 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 %
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 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 %
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 %
Un test diagnóstico tiene: prevalencia de la enfermedad 0,01, sensibilidad 0,98 y tasa de falsos positivos 0,05.
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.
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.
Dos campañas A y B convierten clientes con probabilidades 0,10 y 0,15 respectivamente. Se asume independencia.
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 %
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
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.
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 InocenteJuicio Culpable y Juicio InocenteAhora, se establecen las probabilidades a partir de los valores conocidos:
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:
# 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
p_juzgado_culpable = p_juzgado_culpable_dado_inocente * p_inocente + p_juzgado_culpable_dado_culpable * p_culpable
p_juzgado_culpable
## [1] 0.0545
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 %
Cargue la base mtcars.
# Carga de la base de datos
data(mtcars)
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)
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
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.
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
# 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(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.
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 %
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%