a.Crear una función sin entradas pero que simule el lanzamiento de dos dados legales y sume el resulado de ellos
sim_lanza = function(){
dado1=1:6
dado2=1:6
x= sample(dado1,1, replace=TRUE) + sample(dado2,1, replace = TRUE)
return(x)
}
for(i in 1:5){
print(sim_lanza())
}
## [1] 7
## [1] 9
## [1] 12
## [1] 8
## [1] 3
Interpretación: La función creada anteriormente retorna como resultado cinco valores diferentes correspondientes a la suma aleatoria de dos dados que fueron lanzados cinco veces.
b. Generalizar la función para que tenga como entrada el total de lanzamientos y cuente los resultados de una condición en particular (en este caso, que la suma sea igual a 8).
Nota:Para resolver este ejercicio se proponen dos opciones:
Opción 1: Se utiliza el ciclo “for” y un iterador “i” para definir una función con dos parámetros de entrada “nlanza” y “valor_condi”
simula_multiple_lanza=function(nlanza,valor_condi){
lanzamientos=array(NA,nlanza)
for (i in 1:nlanza){
lanzamientos[i]=sim_lanza()
}
return(sum(lanzamientos==valor_condi))
}
simula_multiple_lanza(nlanza=300,valor_condi=8)
## [1] 35
Opción 2.
sim_multi_lanza2=function(nlanza,valor_condi){
dado1=1:6
dado2=1:6
x= sample(dado1,size = nlanza, replace=TRUE)+ sample(dado2, size=nlanza, replace = TRUE)
return(sum(x==valor_condi))
}
sim_multi_lanza2(nlanza=300,valor_condi=8)
## [1] 38
Interpretación: Tanto en la opción 1 como en la 2, se generó una función con dos parámetros de entrada “nlanza” y “valor_condi” que permitiera simular en este caso el lanzamiento de dos dados 300 veces y obtener como resultado el número de veces que la suma de los dados lanzados aleatoriamente dió exactamente 8.
c. Con la función de b. compare los resultados de la simulación para 10.000 lanzamientos con los resultados esperados de acuerdo a la probabilidad calculada con el total de combinaciones
#Probabilidad Teórica
dado1=1:6
dado2=1:6
espacio=expand.grid(dado1,dado2)
y= apply(espacio,1,sum)
data.frame(espacio,y)
## Var1 Var2 y
## 1 1 1 2
## 2 2 1 3
## 3 3 1 4
## 4 4 1 5
## 5 5 1 6
## 6 6 1 7
## 7 1 2 3
## 8 2 2 4
## 9 3 2 5
## 10 4 2 6
## 11 5 2 7
## 12 6 2 8
## 13 1 3 4
## 14 2 3 5
## 15 3 3 6
## 16 4 3 7
## 17 5 3 8
## 18 6 3 9
## 19 1 4 5
## 20 2 4 6
## 21 3 4 7
## 22 4 4 8
## 23 5 4 9
## 24 6 4 10
## 25 1 5 6
## 26 2 5 7
## 27 3 5 8
## 28 4 5 9
## 29 5 5 10
## 30 6 5 11
## 31 1 6 7
## 32 2 6 8
## 33 3 6 9
## 34 4 6 10
## 35 5 6 11
## 36 6 6 12
Nota:En la tabla anterior se observa que el número de combinaciones totales de lanzar dos dados aleatoriamente es de 36.
##Resultado de probabilidad teórica de que la suma de los dos dados lanzados sea 2,3,4,5,6,7,8,9,10,11,12 respectivamente
prob_teorica=table(y)/36
prob_teorica
## y
## 2 3 4 5 6 7 8
## 0.02777778 0.05555556 0.08333333 0.11111111 0.13888889 0.16666667 0.13888889
## 9 10 11 12
## 0.11111111 0.08333333 0.05555556 0.02777778
plot(2:12, prob_teorica, type = "b", col="purple")
Interpretación: En el gráfico anterior se observa que existe mayor probabilidad teórica de lanzar dos dados y obtener como resultados d e la suma de los dados un 7 (probabilidad=0.1666667).
Simulación para saber cuál es el valor de la probabilidad cuando el número de lanzamientos es mayor
#Probabilidad práctica de lanzar 10.000 veces dos dados y obtener 7 como resultado de la suma de los dados
prob_practica_7=sim_multi_lanza2(nlanza=10000,valor_condi=7)/10000
prob_practica_7
## [1] 0.1696
#Probabilidad práctica de lanzar 10.000.000 de veces dos dados y obtener 7 como resultado de la suma de los dados
prob_practica_7a=sim_multi_lanza2(nlanza=10000000,valor_condi=7)/10000000
prob_practica_7a
## [1] 0.1667126
#Probabilidad práctica de lanzar 1.000.000 de veces dos dados y obtener 5 como resultado de la suma de los dados
prob_practica_5=sim_multi_lanza2(nlanza=1000000,valor_condi=5)/1000000
prob_practica_5
## [1] 0.110856
InterpretaciónA través de la simulación anterior de diferentes números de lanzamientos se puede comprobar que entre el número de lanzamientos tiende al infinito, la probabilidad práctica converge en mayor medida a la probabilidad real o teórica calculada. En el caso anterior, se evidencia que si aumentamos el número de lanzamientos , la probabilidad práctica tambien aumenta, y obtenemos como resultado una probabilidad más cercana a la probabilidad real de lanzar dos dados y obtener como resultado la suma de 7 (0.16666667) o de 5 (0.1111111).
a. Genere una población con una cantidad dada de 0 y 1
A continuación se genera una población total de 1000 valores, el 10% de esos valores corresponden a unos y el 90% restante a ceros:
# Población con 10% de unos
pob=c(rep(x=1,100), rep(x=0,900))
pob
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
## [112] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [149] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [186] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [223] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [260] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [297] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [334] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [371] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [408] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [445] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [482] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [519] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [556] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [593] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [630] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [667] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [704] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [741] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [778] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [815] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [852] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [889] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [926] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [963] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [1000] 0
b. Crear una función que obtenga una muestra de esa población de a. y calcule el porcentaje de 1.
muest_pob=function(pob,tam_muestra){
suma_unos=sum(sample(pob,size=tam_muestra ))/tam_muestra
return(suma_unos)
}
muest_pob(pob,200)
## [1] 0.13
Interpretación:El valor anterior representa el porcentaje de unos en una muestra de tamaño 200.
c.Repita este proceso una cantidad (mas de 1000 veces) y guarde los porcentajes de cada iteración
calc_por_uno=function(n_muestra){
pob=c(rep(x = 1,100),rep(x = 0,900))
return(sum(sample(pob,size = n_muestra))/n_muestra)
}
calc_por_uno(n_muestra = 200)
## [1] 0.12
#Porcentajes de cada iteración
porcentajes_muestra=sapply(rep(200,1000), calc_por_uno)
d. Grafique los resultados de estos porcentajes y calcule algunos indicadores descriptivos (compare los resultados con la población generada inicial).
#Indicadores descriptivos de los porcentajes de una muestra de 200
summary(porcentajes_muestra)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0450 0.0850 0.1000 0.1002 0.1150 0.1550
#Calculamos desviación estándar de la muestra y el coeficiente de variación
print(paste("desviacion estandar: " , toString(sd(porcentajes_muestra)) ))
## [1] "desviacion estandar: 0.0188604272410705"
print(paste("coef variacion: " , toString(sd(porcentajes_muestra)/mean(porcentajes_muestra)) ))
## [1] "coef variacion: 0.188227816777151"
#Graficamos los resultados de los porcentajes de la muestra
hist(porcentajes_muestra)
abline(v=0.1,col="purple",lwd=4)
Interpretación: De acuerdo a las estadísticas descriptivas calculadas anteriormente y al histograma presentado, se concluye que existe una distribución muestral insesgada, es decir, una distribución que está centrada cerca del valor real del párametro de la población. No obstante, destaca que los valores mínimos y máximos de la muestra estan relativamente más alejados del parámetro.
a. Genere una función que calcule indicadores y graficos descriptivos de una variable cuantitativa.
Edad=sample(18:45,1000,replace = TRUE)
Hijos=sample(1:5,1000,replace = TRUE)
datos_simulacion=data.frame(
"Edad" = Edad,
"Hijos"= Hijos
)
Graficar = function(datos, columna){
hist(datos[[columna]],xlab = columna, ylab="Cantidad", col="green", main=c("Histograma de la variable cuantitativa",columna))
edesc = data.frame(
Medida = c("Promedio", "Mediana", "Máximo", "Mínimo","DesvEstandar"),
Valor= c(mean(datos[[columna]]), median(datos[[columna]]), max(datos[[columna]]), min(datos[[columna]]),sd(datos[[columna]]))
)
return(edesc)
}
Graficar(datos_simulacion, "Edad")
## Medida Valor
## 1 Promedio 31.608000
## 2 Mediana 32.000000
## 3 Máximo 45.000000
## 4 Mínimo 18.000000
## 5 DesvEstandar 8.161798
b. Genere una función que calcule indicadores y graficos descriptivos de una variable cualitativa
nal= c("Colombiana","Mexicana","Española","Alemana")
Nacionalidad=sample(nal,1000,replace = TRUE)
datos_simulacion2 =data.frame(
"Nacionalidad" = Nacionalidad
)
GraficarCategoria = function(datos, columna){
barplot(table(datos[[columna]]),xlab = columna, ylab="Cantidad o Valor", col="purple", main=c("Gráfico de Barras de la variable ",columna))
tabla = data.frame(prop.table(table(datos[[columna]])))
tf = data.frame(table(datos[[columna]]))
tf$Porcentaje =tabla$Freq
colnames(tf) = c("Variable", "Cantidad", "Porcentaje")
return(tf)
}
GraficarCategoria(datos_simulacion2, "Nacionalidad")
## Variable Cantidad Porcentaje
## 1 Alemana 235 0.235
## 2 Colombiana 256 0.256
## 3 Española 266 0.266
## 4 Mexicana 243 0.243
c.Genere una función que de acuerdo al tipo de variable use la función de a. ó b. para generar resultados descriptivos.
ImportBase= function(ruta_archivo){
library(readxl)
datab= read_excel(ruta_archivo)
tipo_data= sapply(datab, class)
for(c in 1:ncol(datab)) {
print(tipo_data[c])
print(c)
colnames(datab)[c]
if(tipo_data[c] == "numeric")
print(Graficar(datab, colnames(datab)[c]))
else
print(GraficarCategoria(datab, colnames(datab)[c]))
}
return(1)
}
Tabla = function(datab){
tipo_data = sapply(datab, class)
for(c in 1:ncol(datab)) {
print(tipo_data[c])
print(c)
colnames(datab)[c]
if(tipo_data[c] == "numeric")
print(Graficar(datab, colnames(datab)[c]))
else
print(GraficarCategoria(datab, colnames(datab)[c]))
}
return(1)
}
Tabla(datos_simulacion)
## Edad
## "integer"
## [1] 1
## Variable Cantidad Porcentaje
## 1 18 31 0.031
## 2 19 36 0.036
## 3 20 40 0.040
## 4 21 39 0.039
## 5 22 35 0.035
## 6 23 34 0.034
## 7 24 37 0.037
## 8 25 35 0.035
## 9 26 40 0.040
## 10 27 31 0.031
## 11 28 32 0.032
## 12 29 33 0.033
## 13 30 37 0.037
## 14 31 32 0.032
## 15 32 37 0.037
## 16 33 36 0.036
## 17 34 44 0.044
## 18 35 31 0.031
## 19 36 30 0.030
## 20 37 37 0.037
## 21 38 34 0.034
## 22 39 31 0.031
## 23 40 31 0.031
## 24 41 37 0.037
## 25 42 47 0.047
## 26 43 40 0.040
## 27 44 39 0.039
## 28 45 34 0.034
## Hijos
## "integer"
## [1] 2
## Variable Cantidad Porcentaje
## 1 1 202 0.202
## 2 2 202 0.202
## 3 3 183 0.183
## 4 4 209 0.209
## 5 5 204 0.204
## [1] 1
Variable cualitativa
Tabla(datos_simulacion2)
## Nacionalidad
## "character"
## [1] 1
## Variable Cantidad Porcentaje
## 1 Alemana 235 0.235
## 2 Colombiana 256 0.256
## 3 Española 266 0.266
## 4 Mexicana 243 0.243
## [1] 1
Importamos y exploramos base de datos de “ROTACIÓN LABORAL EN UNA EMPRESA”
Se importa una base de datos en excel relacionada con la roteción laboral voluntaria en una empresa, para realizar gráficos y analisis descriptivos dependiendo si la variable es cuantitativa o cualitativa:
ImportBase("C:/Users/julie/OneDrive/Escritorio/YDRAY-Datos_Rotacion.xlsx")
## Rotación
## "character"
## [1] 1
## Variable Cantidad Porcentaje
## 1 No 1233 0.8387755
## 2 Si 237 0.1612245
## Edad
## "numeric"
## [1] 2
## Medida Valor
## 1 Promedio 36.923810
## 2 Mediana 36.000000
## 3 Máximo 60.000000
## 4 Mínimo 18.000000
## 5 DesvEstandar 9.135373
## Viaje de Negocios
## "character"
## [1] 3
## Variable Cantidad Porcentaje
## 1 Frecuentemente 277 0.1884354
## 2 No_Viaja 150 0.1020408
## 3 Raramente 1043 0.7095238
## Departamento
## "character"
## [1] 4
## Variable Cantidad Porcentaje
## 1 IyD 961 0.65374150
## 2 RH 63 0.04285714
## 3 Ventas 446 0.30340136
## Distancia_Casa
## "numeric"
## [1] 5
## Medida Valor
## 1 Promedio 9.192517
## 2 Mediana 7.000000
## 3 Máximo 29.000000
## 4 Mínimo 1.000000
## 5 DesvEstandar 8.106864
## Educación
## "numeric"
## [1] 6
## Medida Valor
## 1 Promedio 2.912925
## 2 Mediana 3.000000
## 3 Máximo 5.000000
## 4 Mínimo 1.000000
## 5 DesvEstandar 1.024165
## Campo_Educación
## "character"
## [1] 7
## Variable Cantidad Porcentaje
## 1 Ciencias 606 0.41224490
## 2 Humanidades 27 0.01836735
## 3 Mercadeo 159 0.10816327
## 4 Otra 82 0.05578231
## 5 Salud 464 0.31564626
## 6 Tecnicos 132 0.08979592
## Satisfacción_Ambiental
## "numeric"
## [1] 8
## Medida Valor
## 1 Promedio 2.721769
## 2 Mediana 3.000000
## 3 Máximo 4.000000
## 4 Mínimo 1.000000
## 5 DesvEstandar 1.093082
## Genero
## "character"
## [1] 9
## Variable Cantidad Porcentaje
## 1 F 588 0.4
## 2 M 882 0.6
## Cargo
## "character"
## [1] 10
## Variable Cantidad Porcentaje
## 1 Director_Investigación 80 0.05442177
## 2 Director_Manofactura 145 0.09863946
## 3 Ejecutivo_Ventas 326 0.22176871
## 4 Gerente 102 0.06938776
## 5 Investigador_Cientifico 292 0.19863946
## 6 Recursos_Humanos 52 0.03537415
## 7 Representante_Salud 131 0.08911565
## 8 Representante_Ventas 83 0.05646259
## 9 Tecnico_Laboratorio 259 0.17619048
## Satisfación_Laboral
## "numeric"
## [1] 11
## Medida Valor
## 1 Promedio 2.728571
## 2 Mediana 3.000000
## 3 Máximo 4.000000
## 4 Mínimo 1.000000
## 5 DesvEstandar 1.102846
## Estado_Civil
## "character"
## [1] 12
## Variable Cantidad Porcentaje
## 1 Casado 673 0.4578231
## 2 Divorciado 327 0.2224490
## 3 Soltero 470 0.3197279
## Ingreso_Mensual
## "numeric"
## [1] 13
## Medida Valor
## 1 Promedio 6502.931
## 2 Mediana 4919.000
## 3 Máximo 19999.000
## 4 Mínimo 1009.000
## 5 DesvEstandar 4707.957
## Trabajos_Anteriores
## "numeric"
## [1] 14
## Medida Valor
## 1 Promedio 2.693197
## 2 Mediana 2.000000
## 3 Máximo 9.000000
## 4 Mínimo 0.000000
## 5 DesvEstandar 2.498009
## Horas_Extra
## "character"
## [1] 15
## Variable Cantidad Porcentaje
## 1 No 1054 0.7170068
## 2 Si 416 0.2829932
## Porcentaje_aumento_salarial
## "numeric"
## [1] 16
## Medida Valor
## 1 Promedio 15.209524
## 2 Mediana 14.000000
## 3 Máximo 25.000000
## 4 Mínimo 11.000000
## 5 DesvEstandar 3.659938
## Rendimiento_Laboral
## "numeric"
## [1] 17
## Medida Valor
## 1 Promedio 3.1537415
## 2 Mediana 3.0000000
## 3 Máximo 4.0000000
## 4 Mínimo 3.0000000
## 5 DesvEstandar 0.3608235
## Años_Experiencia
## "numeric"
## [1] 18
## Medida Valor
## 1 Promedio 11.279592
## 2 Mediana 10.000000
## 3 Máximo 40.000000
## 4 Mínimo 0.000000
## 5 DesvEstandar 7.780782
## Capacitaciones
## "numeric"
## [1] 19
## Medida Valor
## 1 Promedio 2.799320
## 2 Mediana 3.000000
## 3 Máximo 6.000000
## 4 Mínimo 0.000000
## 5 DesvEstandar 1.289271
## Equilibrio_Trabajo_Vida
## "numeric"
## [1] 20
## Medida Valor
## 1 Promedio 2.7612245
## 2 Mediana 3.0000000
## 3 Máximo 4.0000000
## 4 Mínimo 1.0000000
## 5 DesvEstandar 0.7064758
## Antigüedad
## "numeric"
## [1] 21
## Medida Valor
## 1 Promedio 7.008163
## 2 Mediana 5.000000
## 3 Máximo 40.000000
## 4 Mínimo 0.000000
## 5 DesvEstandar 6.126525
## Antigüedad_Cargo
## "numeric"
## [1] 22
## Medida Valor
## 1 Promedio 4.229252
## 2 Mediana 3.000000
## 3 Máximo 18.000000
## 4 Mínimo 0.000000
## 5 DesvEstandar 3.623137
## Años_ultima_promoción
## "numeric"
## [1] 23
## Medida Valor
## 1 Promedio 2.187755
## 2 Mediana 1.000000
## 3 Máximo 15.000000
## 4 Mínimo 0.000000
## 5 DesvEstandar 3.222430
## Años_acargo_con_mismo_jefe
## "numeric"
## [1] 24
## Medida Valor
## 1 Promedio 4.123129
## 2 Mediana 3.000000
## 3 Máximo 17.000000
## 4 Mínimo 0.000000
## 5 DesvEstandar 3.568136
## [1] 1