library(gtools)
Una permutación busca ordenar una cantidad de cosas/objetos en forma que el orden si importa.
Una combinación a diferencia de la permutación, busca seleccionar una cantidad de cosas/objetos donde en el orden no importa.
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.
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.
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
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"
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
bayes <- function(pa, pb, pb_a){
return (pb_a*pa)/pb
}
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
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
# 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
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.
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"