Ejercicio 02: Introducción a las probabilidades

logo

1. Enunciado

1.1 Instale el paquete “gtools” con la sentencia: install.packages(′gtools′), incluya la librería “gtools” (library(gtools)).

#install.packages("gtools")
library("gtools")

1.2 Explique brevemente la diferencia entre permutación y combinación.

Las permutaciones son las posibles organizaciones de un conjunto de elementos en que el orden de disposición es relevante. En cambio, las combinaciones no consideran el orden de los elementos.

1.3 Busque en la ayuda de R las funciones combinations y permutations y explique brevemente cómo funcionan.

?combinations #Ayuda
?permutations #Ayuda

Con relación a las funciones de la biblioteca gtools,

  • La instrucción combinations(n,r,v,set=T,repeats.allowed=F) enumera todas las posibles combinaciones para un conjunto vectorial de elementos.
  • La instrucción permutations(n,r,v,set=T,repeats.allowed=F) enumera todas las posibles permutaciones para un conjunto vectorial de elementos.

Los parámetros requeridos son:

  • n. Cardinalidad del conjunto.
  • r. Cardinalidad del vector objetivo.
  • v. Nomenclatura de los vectores (1:n)
  • set. Es una bandera que indica si los valores duplicados de v deben ser excluidos.
  • repeats.allowed: Indica si el o los vectores construídos pueden incluir valores duplicados.

2. Resolución de problemas

2.1 Permutaciones y combinaciones

2.1.1 La cantidad de permutaciones posibles con n = 14 y r = 4 con y sin repetición.

permutaciones = permutations(14,4,repeats=T) #Con repeticiones
respuesta_a = nrow(permutaciones)
permutaciones = permutations(14,4,repeats=F) #Sin repeticiones
respuesta_b = nrow(permutaciones)
# Usted puede imprimir una variable en el texto apoyándose en el siguiente ejemplo:
# - El número de **permutaciones** posibles n = 14 y r = 4 **SIN** repeticiones es **`r respuesta_b`**

Respuesta:

  • El número de permutaciones posibles n = 14 y r = 4 CON repeticiones es 38416.
  • El número de permutaciones posibles n = 14 y r = 4 SIN repeticiones es 24024.

2.1.2 Las combinaciones de largo tres con las letras a, b y c con y sin repetición.

respuesta_a = combinations(3,3,letters[1:3],repeats=T) #Con repeticiones
respuesta_b = combinations(3,3,letters[1:3],repeats=F) #Sin repeticiones

Respuesta:

  • Existe 10 combinaciones de largo 3 para 3 letras CON repeticiones. Estas son:
knitr::kable(respuesta_a)
a a a
a a b
a a c
a b b
a b c
a c c
b b b
b b c
b c c
c c c

Respuesta:

  • Existen 1 combinación de largo 3 para 3 letras SIN repeticiones. Estas es:
knitr::kable(respuesta_b)
a b c

2.1.3 La cantidad de permutaciones y combinaciones con n = 30 y r = 2 sin repetición.

respuesta_a = permutations(30,2,repeats=F) #Permutaciones
respuesta_b = combinations(30,2,repeats=F) #Combinaciones

Respuesta:

  • Existen 870 permutaciones para N=30 y r = 2 SIN repeticiones.

  • Existen 435 combinaciones para N=30 y r = 2 SIN repeticiones.

2.2 Conjunto de datos Titanic

El conjunto de datos Titanic de la biblioteca Datasets es un arreglo tabular de 2201 observaciones con 4 variables: Class (1st,2nd,3er,Crew), Sex (Male, Female), Age (Child,Adult), Survived (No,Yes). Su representación gráfica es la siguiente:

#Bibliotecas
library("ggplot2")
library("ggalluvial")


#Gráfico tipo Alluvial
datos = as.data.frame(Titanic)
datos$Age = factor(datos$Age , levels=c("Adult", "Child"))
datos$Class = factor(datos$Class , levels=c("Crew", "3rd","2nd","1st"))


ggplot(datos,
       aes(y = Freq,
           axis1 = Survived, axis2 = Age,axis3 = Sex,axis4 = Class)) +
  geom_alluvium(aes(fill = Class),
                width = 0, knot.pos = 0, reverse = FALSE) +
  guides(fill = FALSE) +
  geom_stratum(width = 1/8, reverse = FALSE) +
  geom_text(stat = "stratum", infer.label = TRUE, reverse = FALSE) +
  scale_x_continuous(breaks = 1:3, labels = c("Survived", "Sex", "Class")) +
  coord_flip() + theme_classic() +
  ggtitle("Sobrevivientes del Titanic según clase, sexo y edad")

2.2.1 Cree una función que calcule la probabilidad de A dado B, vea la Ecuación 1.

\[P(A|B) = \frac{(B|A)P(A)}{P(B)}\]

Respuesta:

#===================================
#Funcion: TeoremaBayes(pA=1, pB=1, pBA=1)
#===================================
#Entrada:
#  P(B|A) = pBA
#  P(A)=pA
#  P(B)=pB
TeoremaBayes = function(pA=1, pB=1, pBA=1) {
  pAB = (pA * pBA) / pB
  return(pAB)
}

#Prueba: https://www.statology.org/bayes-theorem-in-r/
plluvia = 0.2
pnublado = 0.4
pnubladolluvia=0.85
resultado = TeoremaBayes(plluvia,pnublado,pnubladolluvia)
  • El resultado de la aplicación de la función creada con los parámetros propuestos es 0.425.

2.2.2 Responda las siguientes preguntas:

2.2.2.1 ¿Cuál es el porcentaje de supervivencia de los pasajeros y de la tripulación?¿Cuál es mayor?

Podemos utilizar la función apply para resolver este problema con una estructura de datos tipo table. Esto es:

#Pasajeros
porc_pasajeros = sum(apply(Titanic, c(1,4), sum)[5:7])/sum(apply(Titanic, 1, sum)[1:3])*100
#Tripulación
porc_tripulacion = apply(Titanic, c(1,4), sum)[8]/apply(Titanic, 1, sum)[4]*100
  • El porcentaje de sobrevivencia de los pasajeros fue de 37.918%.
  • El porcentaje de sobrevivencia de la tripulación fue de 23.955%.

Por lo tanto, el porcentaje de sobrevencia fue mayor en la tripulación.

Alternativamente es posible utilizar una estructura tipo data.frame.

datos=as.data.frame(Titanic)
knitr::kable(head(datos))
Class Sex Age Survived Freq
1st Male Child No 0
2nd Male Child No 0
3rd Male Child No 35
Crew Male Child No 0
1st Female Child No 0
2nd Female Child No 0

Esto es:

#Pasajeros
tmp1=which(datos$Class!="Crew" & datos$Survived=="Yes")
tmp2=which(datos$Class!="Crew")
porc_pasajeros=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])*100

#Tripulación
tmp1=which(datos$Class=="Crew" & datos$Survived=="Yes")
tmp2=which(datos$Class=="Crew")
porc_tripulacion=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])*100
  • El porcentaje de sobrevivencia de los pasajeros fue de 37.92%.
  • El porcentaje de sobrevivencia de la tripulación fue de 23.95%.
2.2.2.2 ¿Cuál es la probabilidad de que una mujer de la tripulación sobreviva?

Podemos utilizar la función apply para resolver este problema con una estructura de datos tipo table. Esto es:

#P(Female survived|female was Crew)
prob_mujeres=Titanic[length(Titanic)]/apply(Titanic,c(1,2),sum)[8]

Resultado:

  • La probabilidad de sobrevivencia de personas de sexo femenino según los datos fue de 0.87.

Alternativamente es posible utilizar una estructura tipo data.frame.

#P(Female survived|female was Crew)
tmp1=which(datos$Sex=="Female" & datos$Survived=="Yes" & datos$Class=="Crew")
tmp2=which(datos$Sex=="Female" & datos$Class=="Crew")
prob_mujeres=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

Resultado:

  • La probabilidad de sobrevivencia de personas de sexo femenino según los datos fue de 0.87.
2.2.2.3 ¿Cuál es la probabilidad de que un(a) menor de edad sobreviva en tercera clase?

Podemos utilizar la función apply para resolver este problema con una estructura de datos tipo table. Esto es:

#P(Child survived|child was in 3rd)
prob_menor=(Titanic[19]+Titanic[23])/apply(Titanic,c(1,3),sum)[3]

Resultado:

  • La probabilidad de sobrevivencia de un o una menor de edad que proviene de tercera clase es 0.34.
#P(Child survived|child was in 3rd)
tmp1=which(datos$Age=="Child" & datos$Survived=="Yes" & datos$Class=="3rd") #Total de niños sobrevivientes en 3 clase
tmp2=which(datos$Class=="3rd" & datos$Age=="Child") #Total de niños sobrevivientes en tercera clase
prob_menor=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

Resultado:

  • La probabilidad de sobrevivencia de un o una menor de edad que proviene de tercera clase es 0.34.
2.2.2.4 ¿En general se cumple el código “mujeres y niños(as) primero”?

Nuevamente podemos utilizar la función apply para resolver este problema con una estructura de datos tipo table. Sin embargo, se optará por resolver con la estructura tipo data.frame.

Si evaluamos todas las clases:

tmp1=which((datos$Age=="Child" | datos$Sex=="Female") & datos$Survived=="Yes") #Mujeres o niños sobrevivientes
tmp2=which(datos$Age=="Child" | datos$Sex=="Female") #Total de sobrevivientes
prob_mujeres_ninos=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

tmp1=which((datos$Age=="Adult" & datos$Sex=="Male") & datos$Survived=="Yes") #Hombres adultos sobrevivientes
tmp2=which(datos$Age=="Adult" & datos$Sex=="Male") #Total de sobrevivientes
prob_hombres_adultos=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

Resultado:

  • Nos queda efectivamente que mujeres y (O) niños (0.7.) sobrevivieron más que los hombres adultos (0.2).

Si evaluamos la primera clase:

tmp1=which((datos$Age=="Child" | datos$Sex=="Female") & datos$Survived=="Yes" & datos$Class=="1st") 
tmp2=which((datos$Age=="Child" | datos$Sex=="Female") &  datos$Class=="1st") 
prob_mujeres_ninos=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

tmp1=which((datos$Age=="Adult" & datos$Sex=="Male") & datos$Survived=="Yes" & datos$Class=="1st") 
tmp2=which(datos$Age=="Adult" & datos$Sex=="Male" & datos$Class=="1st") 
prob_hombres_adultos=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

Resultado:

  • Nos queda efectivamente que mujeres y (O) niños (0.97) sobrevivieron más que los hombres adultos (0.33).

Si evaluamos la segunda clase:

tmp1=which((datos$Age=="Child" | datos$Sex=="Female") & datos$Survived=="Yes" & datos$Class=="2nd") 
tmp2=which((datos$Age=="Child" | datos$Sex=="Female") &  datos$Class=="2nd") 
prob_mujeres_ninos=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

tmp1=which((datos$Age=="Adult" & datos$Sex=="Male") & datos$Survived=="Yes" & datos$Class=="2nd") 
tmp2=which(datos$Age=="Adult" & datos$Sex=="Male" & datos$Class=="2nd") 
prob_hombres_adultos=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

Resultado:

  • Nos queda efectivamente que mujeres y (O) niños (0.89) sobrevivieron más que los hombres adultos (0.08).

Si evaluamos la tercera clase:

tmp1=which((datos$Age=="Child" | datos$Sex=="Female") & datos$Survived=="Yes" & datos$Class=="3rd") 
tmp2=which((datos$Age=="Child" | datos$Sex=="Female") &  datos$Class=="3rd") 
prob_mujeres_ninos=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

tmp1=which((datos$Age=="Adult" & datos$Sex=="Male") & datos$Survived=="Yes" & datos$Class=="3rd") 
tmp2=which(datos$Age=="Adult" & datos$Sex=="Male" & datos$Class=="3rd") 
prob_hombres_adultos=sum(datos$Freq[tmp1])/sum(datos$Freq[tmp2])

Resultado:

  • Nos queda efectivamente que mujeres y (O) niños (0.42) sobrevivieron más que los hombres adultos (0.16).