library(gtools)

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

Permutación

Una permutación busca ordenar una cantidad de cosas/objetos en forma que el orden si importa.

Combinación

Una combinación a diferencia de la permutación, busca seleccionar una cantidad de cosas/objetos donde en el orden no importa.

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

Función combinations

Combinations es una función que muestra todas las combinaciones dada la cantidad de elementos totales, la cantidad de los objetos seleccionados, un vector que representa el conjunto de elementos a seleccionar y flags que permiten filtrar los elementos repetidos en el conjunto de elementos o en las combinaciones generadas a partir de la función.

Función permutations

Funciona de igual manera que la función permutations, pero la gran diferencia es que esta función calcula todas las posibles permutaciones del conjunto de elementos a seleccionar.

Calcule:

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

Con repetición

nrow(permutations(14, 4, letters[1:14], repeats = TRUE))
## [1] 38416

Sin repetición

nrow(permutations(14, 4, letters[1:14], repeats = FALSE))
## [1] 24024

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

Con repetición

combinations(3, 3, letters[1:3], repeats = TRUE)
##       [,1] [,2] [,3]
##  [1,] "a"  "a"  "a" 
##  [2,] "a"  "a"  "b" 
##  [3,] "a"  "a"  "c" 
##  [4,] "a"  "b"  "b" 
##  [5,] "a"  "b"  "c" 
##  [6,] "a"  "c"  "c" 
##  [7,] "b"  "b"  "b" 
##  [8,] "b"  "b"  "c" 
##  [9,] "b"  "c"  "c" 
## [10,] "c"  "c"  "c"

Sin repetición

combinations(3, 3, letters[1:3], repeats = FALSE)
##      [,1] [,2] [,3]
## [1,] "a"  "b"  "c"

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

Permutaciones

set.seed(123)                     
lista = sample(1:30, 30, replace=FALSE)

nrow(permutations(30, 2, lista, repeats = FALSE))
## [1] 870

Combinaciones

nrow(combinations(30, 2, lista, repeats = FALSE))
## [1] 435

Utilizando el conjunto de datos Titanic:

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

bayes <- function(pa, pb, pb_a){
  return (pb_a*pa)/pb
}

b) Responda las siguientes preguntas:

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

data("Titanic")

# Utilizando apply(Titanic, c(1), sum)
total_crew = 885

# Utilizando apply(TItanic, c(1), sum)
total_pasajeros = 325 + 285 + 706

pasajeros_sobrevivientes = apply(Titanic, c(1, 4), sum)[5] + 
  apply(Titanic, c(1, 4), sum)[6] + apply(Titanic, c(1, 4), sum)[7]

tripulantes_sobrevivientes = apply(Titanic, c(1, 4), sum)[8]

porcentaje_pasajeros = (pasajeros_sobrevivientes*100)/total_pasajeros

porcentaje_tripulacion = (tripulantes_sobrevivientes*100)/total_crew

Porcentaje de supervivencia de pasajeros (%)

porcentaje_pasajeros
## [1] 37.91793

Porcentaje de supervivencia de tripulación (%)

porcentaje_tripulacion
## [1] 23.9548

Con esta información se puede concluir que los pasajeros tuvieron un porcentaje de supervivencia más alto que el de la tripulación

2) ¿Cuál es la probabilidad de que una mujer de la tripulación sobreviva?

total_crew_women = apply(Titanic, c(1, 2), sum)[8]

female_survived_crew =  apply(Titanic, c(1, 2, 4), sum)[16]

probability = round((female_survived_crew/total_crew_women) * 100, digits = 3)

La probabilidad aproximada de que una mujer de la tripulación sobreviva es (%)

probability
## [1] 86.957

3) ¿Cuál es la probabilidad de que un(a) menor de edad sobreviva en tercera clase?

# Utilizando apply(Titanic, c(1), sum)[3]
third_class_young = 79

young_third_survived = apply(Titanic, c(1, 3, 4), sum)[11]

probability_young = round((young_third_survived/third_class_young)* 100, digits = 3)

La probabilidad aproximada de que un(a) menor de edad sobreviva en tercera clase es (%)

probability_young
## [1] 34.177

4) ¿En general se cumple el código “mujeres y niños(as) primero”?

Para hacer una conclusión en base a esta pregunta, se requieren los porcentajes de supervivencia de ambos grupos.

El porcentaje de supervivencia de los niños(as) corresponde a lo siguiente: (%)

total_young = apply(Titanic, c(3, 4), sum)[3] + apply(Titanic, c(3, 4), sum)[1]

young_survived = apply(Titanic, c(3, 4), sum)[3]/total_young

survival_rate_young = young_survived*100

survival_rate_young
## [1] 52.29358

El porcentaje de supervivencia de las mujeres corresponde a lo siguiente: (%)

total_women = apply(Titanic, c(2, 4), sum)[2] + apply(Titanic, c(2, 4), sum)[4]

women_survived = apply(Titanic, c(2, 4), sum)[4]/total_women

survival_rate_women = women_survived*100

survival_rate_women
## [1] 73.19149

Entonces se puede observar que ambas tasas de supervivencia superan el 50%, por lo que se puede concluir que el código se cumplió en lo posible.

5) Seleccione una clase de forma aleatoria, puede utilizar la función sample. ¿En la clase seleccionada se cumple el código “mujeres y niños(as) primero”?

Para determinar si esto se cumple, consideraremos como condición para hacer cumplir este código teniendo un 50% de supervivencia en ambos grupos.

# Se define una función para calcular la tasa de supervivencia de mujeres en una clase
survivalrate_w <- function(clase){
  
  # Los totales usados en variables se definirán en base a la clase seleccionada
  
  if (clase == 1){
      mujeres_totales = apply(Titanic, c(1, 2), sum)[5]
      mujeres_clase_sobrevivientes = apply(Titanic, c(1, 2, 4), sum)[13]
      return (mujeres_clase_sobrevivientes/mujeres_totales)*100
  }
  if (clase == 2){
      mujeres_totales = apply(Titanic, c(1, 2), sum)[6]
      mujeres_clase_sobrevivientes = apply(Titanic, c(1, 2, 4), sum)[14]
      return (mujeres_clase_sobrevivientes/mujeres_totales)*100
  }
  if (clase == 3){
      mujeres_totales = apply(Titanic, c(1, 2), sum)[7]
      mujeres_clase_sobrevivientes = apply(Titanic, c(1, 2, 4), sum)[15]
      return (mujeres_clase_sobrevivientes/mujeres_totales)*100
  }
}

# Se define una función para calcular la tasa de supervivencia de niños(as) en una clase
survivalrate_c <- function(clase){
  
  # Los totales usados en variables se definirán en base a la clase seleccionada

  if (clase == 1){
    ninhos_totales = apply(Titanic, c(1, 3), sum)[1]
    ninhos_clase_sobrevivientes = apply(Titanic, c(3, 4), sum)[13]
    return (ninhos_clase_sobrevivientes/ninhos_totales)*100
  }
  if (clase == 2){
    ninhos_totales = apply(Titanic, c(1, 3), sum)[2]
    ninhos_clase_sobrevivientes = apply(Titanic, c(3, 4), sum)[14]
    return (ninhos_clase_sobrevivientes/ninhos_totales)*100
  }
  if (clase == 3){
    ninhos_totales = apply(Titanic, c(1, 3), sum)[3]
    ninhos_clase_sobrevivientes = apply(Titanic, c(3, 4), sum)[15]
    return (ninhos_clase_sobrevivientes/ninhos_totales)*100
  }
  
}

Una vez definiendo estas funciones, se tiene la siguiente función para determinar si una clase cumple con el código de niños y mujeres primero

cumple_codigo <- function(clase){
  
  survival_rate_w_clase = survivalrate_w(clase)

  survival_rate_c_clase = survivalrate_c(clase)

  if ((survival_rate_c_clase > 50) & (survival_rate_w_clase > 50)){
    return ("La clase seleccionada al azar cumple con el código de mujeres y niños primero respecto al criterio establecido")
  }
  else{
    return ("La clase seleccionada no cumple o cumple parcialmente el código de mujeres y niños primero respecto al criterio establecido")
  }
}

# Se selecciona una de las tres clases al azar
clase = sample(c(1, 2, 3), 1)
cumple_codigo(clase)
## [1] "La clase seleccionada no cumple o cumple parcialmente el código de mujeres y niños primero respecto al criterio establecido"