Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tarea No. 1
Simulación de la probabilidad
20-02-2018
Taller Simulación De La Probabilidad
Primer Punto
En este punto se presentan una situación en la cual hay 90 chips buenos y 10 son malos y se pide determinar la
probabilidad de extraer una muestra de 5 chips y que estos sean buenos. Para el desarrollo de este punto se utilizó
dos funciones: sample y dhyper.
La primera se utiliza con el fin de generar muestras aleatorias representativas de la población, este proceso se
lleva acabo a cabo mediante funciones del programa estadı́stico R; se logra observar que la cantidad de simulaciones
es crucial ya que a medida que se aumenta dicha cantidad la probabilidad es más exacta. La segunda función se uti-
liza ya que del enunciado se puede identificar que la variable X hace referencia a una distribución Hipergeométrica,
permitiendo calcular dicha probabilidad de una forma más rápida.
Finalmente se puede concluir que ambos métodos son efectivos, obteniendo en el primero una probabilidad del
58.47 % cuando la cantidad de simulaciones es igual a 10000 y en el segundo una probabilidad del 58.37 %.
Segundo Punto
En este punto como primera medida se pide determinar la probabilidad de que dos o más personas cumplan años
el mismo dı́a, partiendo del supuesto que hay 25 personas en un mismo cuarto. Para dar respuesta a esta pregunta
casosf avorables
se hizo uso de un ciclo con el fin de recorrer la cantidad de personas para ası́ utilizar la fórmula ,
casostotales
a través de la cual se logra determinar que la probabilidad de que dicho evento ocurra es aproximadamente 53.8 %.
A continuación, se presenta un gráfico el cual permite apreciar de una mejor forma la paradoja del cumpleaños.
En esta gráfica se puede observar que la probabilidad de emparejamiento existente entre dos o más personas que
cumplen años el mismo dı́a es directamente proporcional a la cantidad de personas presentes en el cuarto.
Por último, se pide la simulación del experimento mencionada anteriormente 100.000 veces, pero está vez teniendo
en cuenta que cada simulación hace referencia a un cuarto, con base en esto el procedimiento a seguir fue: tomar
100.000 muestras aleatorias de 25 dı́as del año y contar la cantidad de repetidos presentes en las muestras, para ası́
poder determinar cuantas de las personas cumplen años el mismo dı́a en los 100.000 cuartos y con estos valores se
cálculo la probabilidad que fue de aproximadamente 56.977 %(57 %).
Tercer Punto
En este punto además de hacer uso del concepto sample, se presenta uno nuevo choose. El cual tiene una notoria
relación con sample ya que ambos permiten determinar probabilidades, con la diferencia de que sample es más una
función operativa para generar muestras aleatorias y choose es una función que arroja un valor especifico.
Universidad Del Valle
Seguido de haber establecido la relación existente se calcula la probabilidad de que al extraer una muestra de
tamaño 5 la cantidad de buenos sea igual a 2 haciendo uso de las funciones dhyper y choose, las cuales muestran
que esta probabilidad es de aproximadamente 0.638 %.
Por último es importante decir que luego de comparar la función mean(bueno) con el literal d(ejecutar la ins-
trucción sum((0 : 5) ∗ dhyper(0 : 5, 90, 10, 5))) , se puede observar que presentan valores similares que giran en torno
a 4.5, lo cual indica que los dos procesos resultan efectivos.
Cuarto Punto
a) Primeramente se tiene que a es un vector donde hay unos números y donde se repiten algunos seguidamente
con Length(a) nos arroja la longitud de a la cual es 6, es decir que a tiene 6 numeros teniendo en cuenta los
repetidos y no repetidos, después con unique(a) eliminan los elementos repetidos de a y queda un nuevo vector al
cual con Length(unique(a)) se le calcula la longitud que vendrı́a representando la cantidad de numeros que hay
sin repeticiones, luego está la instrucción Length(a) − Length(unique(a)) la cual nos da como resultado cuantos
números son los que se repiten, seguidamente, mediante la instrucción duplicated(a) se obtiene un vector lógico que
indica con TRUE cuando un numero aparece repetido, con length(duplicated(a)) se calcula la longitud del vector
lógico duplicated(a) la cual seria 6 y finalmente, mediante sum(duplicated(a)) sabemos cuántos TRUE hay lo que
significa que esa instrucción nos arroja la cantidad de números repetidos que hay.
b) Debido a que se desconoce la funcionalidad afondo de unique se permitió hacer uso de ella, entonces al im-
plementar el nuevo método el cual presenta menos lı́neas de código, resulta que la probabilidad que se calcula con
las 100.000 simulaciones en el punto 2 da con este método aproximadamente 56, 855 %.
Quinto Punto
En este punto se presenta una situación de un juego de casino, el cual consiste en lanzar 3 dados y mirar cuantos 6
salen en el lanzamiento (se gana a mayor cantidad de 6), para poder desarrollar este enunciado se hace uso de las
funciones de R, dichas funciones permiten generar muestras aleatorias para representar los lanzamientos y de esta
forma poder contar la cantidad de 6 obtenidos en cada uno de ellos. Con el objetivo de apreciar de mejor forma el
enunciado se hace uso de un histograma, el cual se presentará en seguida.
De la gráfica se puede interpretar que es más probable que no salga ningún 6 en los lanzamientos. Luego nos piden
realizar el mismo procedimiento para n=10, n=100 y n=1000, con el propósito de identificar que tan cercanas son
las simulaciones a los datos esperados, para ello se utiliza una tabla.
Simulación Estadı́stica 3
Universidad Del Valle
Finalmente se puede concluir que la cantidad de simulaciones juega un papel importante, pues la probabilidad de
obtener 6 aumenta directamente proporcional a la cantidad de simulaciones; vale destacar que cuando n=1000 los
resultados están un poco más cercanos a los esperados.
Sexto Punto
•Binomial:Se observa que la diferencia existente entre las gráficas de distribución radica en que una presenta mayor
curvatura, esto se debe al valor de P; con respecto a la gráfica de la acumulada vemos que cuando n es mayor esta
tiende a ser más inclinada.
• Poisson:Aquı́ se observa que el valor de λ afecta a la gráfica de la distribución en la centralización, pues con un
valor de λ pequeño se ve un sesgo hacia la izquierda y cuando λ tiene un valor más grande tiende a la derecha la
gráfica; en la gráfica de la acumulada el valor de λ influye en la inclinación ya que a menor λ mayor inclinación.
•Hipergeométrica: Al apreciar las gráficas se pueden ver que a mayor N la curvatura es más pequeña en las gráficas
de distribución y también resulta importante decir que es menor la inclinación en las gráficas de la acumulada.
• Binomial negativa: Haciendo referencia a las gráficas de distribución estas son muy similares; con respecto a la
gráfica de la acumulada se puede ver que guardan equivalencias en la inclinación, pero al tener p un valor menor,
la gráfica se desplaza más cerca del cero.
Simulación Estadı́stica 4
Universidad Del Valle
• Normal: Con respecto a las gráficas de distribución se ve que cuanto mayor es el valor de σ menor es la curvatura
de la gráfica; al mirar las de la acumulada se ve que a menores valores de µ y σ más inclinada es la gráfica.
• Gamma: Se observa que en la gráfica de distribución el parámetro α es el que desplaza la gráfica hacia la
derecha,respecto al parámetro β es el encargado de dar la curvatura a la misma; al mirar la gráfica de la acumulada
se ve que entre más pequeños sean los parámetros más inclinada es esta.
• Weibull: Se aprecia claramente que a medida que los parámetros tienen mayor valor más sesgada a la derecha
es la gráfica de distribución; en la acumulada se ve mayor inclinación cuando los parámetros toman valores más
grandes.
Septimo Punto
En este punto se habla de un juego de póker el cual consiste en sacar 5 cartas de un mazo de 52, compuesto por 4
Aces y otras 48 cartas, el objetivo es calcular la probabilidad de no obtener ningún As a través del programa R.
Como primera medida se hizo uso de la función choose calculando un combinatorio simple, luego se utilizó la
función dhyper, la cual se usó luego de identificar el enunciado como una distribución hipergeométrica y por último
se realizó una simulación para aproximar la probabilidad. Se puede concluir que estás 3 metodologı́as resultaron
optimas ya que sus resultados a la probabilidad fueron respectivamente 65.88 %, 65.88 % y la última probabilidad
oscila entre el 65 % y 67 %.
Octavo Punto
Para este punto resulta importante hablar un poco del método de integración Monte Carlo, el cual hace referencia
a una serie de métodos de integración numérica basados en el uso de números pseudoaleatorios. Este método se
representa a través de la siguiente función:
n
b−a X
· ·f (ui · (b − a) + a) (1)
n i=1
En este caso a representa al lı́mite inferior en la integral, b representa el lı́mite superior, ui representa las variables
aleatorias generadas n veces asociadas a la distribución uniforme (esta distribución es utilizada para la generación
de números aleatorios) y finalmente al reemplazar los valores se obtiene que:
Z π
4 log(1 + tan2 (x)) dx ≈ 0.172784
0
Bibliografı́a
Es.wikipedia.org.(2018).Integración de Montecarlo.Recuperado el 19 de febrero del 2018. Disponible en linea:
https://es.wikipedia.org/wiki/Integración de Montecarlo.
Rdocumentation.org. (2018). sample function R Documentation. Recuperado el 19 de febrero del 2018. Disponi-
ble en: https://www.rdocumentation.org/packages/base/versions/3.4.3/topics/sample.
Simulación Estadı́stica 5
Universidad Del Valle
#Literal a
n<-10000 #Tama~
no de las simulaciones
if (matriz[i,j]=="Buenos"){
matriz2[i,j]<-1} #Codificación de los resultados de las muestras
if(matriz[i,j]=="Malos"){
matriz2[i,j]<-0}}}
suma <- apply(matriz2,1,sum) #Variable que realiza la suma por filas de la matriz
#Este ciclo junto al condicional permite contar aquellas filas de las muestras
#obtenidas en las n simulaciones donde aparecen 5 chips buenos
for (k in 1:n){
if (suma[k]==5){
contador=contador+1}
}
#P(X=5)
proba <- contador/n
proba
Simulación Estadı́stica 6
Universidad Del Valle
caja<-c(rep("buenos",90),rep("Malos",10))
c<-0
b<-0
if (muestra[i]=="buenos"){
c<-c+1 #este condicional permite identificar los chips buenos dentro
#de la muestra,estos casos son guardados en una variable contadora
}
}
if(c==5){ #este condicional permite identificar en cuales muestras se obtuvieron
b<-b+1 # 5 chips buenos y luego almacena los casos en otra variable contadora
}
c<-0 #Esta variable vuelve a cero con el fin de reiniciarse para cada simulacion
}
proba_alternativa<-b/n #(P(X=5))
proba_alternativa
#literal b
#Enunciado
total <- 1
n <- 25
data <- 0
proba1<-0
for(i in 1:25) {
total=total*((365-i+1)/365)##División entre casos favorables y casos totales
fila <- data.frame(i, 1-total)
data <- rbind(data, fila)
Simulación Estadı́stica 7
Universidad Del Valle
}
proba_enunciado <- data[25,2]
proba_enunciado
#literal a
total <- 1
n <- 100
data <- ""
proba<-numeric(length(n))
# liberal b
# Punto 2.
a<-100000 #a es el numero de simulaciones.
cuartos<-matrix(0,a,25) #Matriz que almacena cada muestra de 25 dias.
contmatriz<-matrix(0,a,25)#Matriz que almacena los numero que presentaron repiteron por muestra.
cont<-numeric(25) #Vector que almacena de forma temporal los numeros que presentaron
#repitición por muestra.
cantrep<-0 #Contador de la cantidad de numeros que presentaron repeticion.
contenedor<-numeric(a) #Vector que almacena la cantidad de repeticiones que se dieron en la muestra.
for(i in 1:a){ #Ciclo encargado de simular las 100.000.
cantrep<-0
contador<-0
cumple <- sample(1:365,25, replace = TRUE) #Muestra de 25 dias aletorios.
cuartos [i,]<- cumple
c1<-duplicated(cumple) #Vector logico que almacena cuando se dio una repeticion.
c2<-sum(c1) #Variable que contiene cuantas repeticiones hay en la muestra.
for (k in 1:25){ #Ciclo para comparar cada numero de la muestra con
n<-cumple[k] #los demas y asi ir contado cuantos son los numero que presentaron repeticion.
for (j in 1:25){ # tambien se almacenan y cuentan estos numeros y los que no presentan
#repeticion se cambian a cero.
p<-cumple[j] #en el vector muestra, ademas se van guardando cuantas
#repeticiones se dieron por muestra.
if (p!=0){
if (n==p){
if (k!=j){
cont[k]<- cumple[k]
cumple[j]<-0}
}
}
}
if (cont[k] != 0){
cantrep<-cantrep+1
}
Simulación Estadı́stica 8
Universidad Del Valle
}
contmatriz[i,]<-cont
casosf<-cantrep+c2
contenedor[i] <- casosf
cumple<-0
cont<-numeric(25)
}
casosf1<-0 #Contador para saber cuantas de las muestras presentaron repeticiones.
for (o in 1:a){
if (contenedor[o]>=1){ #Ciclo para hacer el conteo de las muestras que presentaron repeticiones.
casosf1<-casosf1 + 1
}
}
proba_literalb <- casosf1/a #Variable que almacena la probabilidad pedida en este punto del taller.
proba_literalb
#literal b
probabilidad_literalb<-choose(90,2)*choose(10,3)/choose(100,5)
probabilidad_literalb
#literal c
n<-100000 #Tama~
no de las simulaciones
Simulación Estadı́stica 9
Universidad Del Valle
if (matriz[i,j]=="Buenos"){
matriz2[i,j]<-1} #Codificación de los resultados de las muestras
if(matriz[i,j]=="Malos"){
matriz2[i,j]<-0}}}
suma <- apply(matriz2,1,sum) #Variable que realiza la suma por filas de la matriz
#Este ciclo junto al condicional permite contar aquellas filas de las muestras
#obtenidas en las n simulaciones donde aparecen 5 chips buenos
for (k in 1:n){
if (suma[k]==5){
contador=contador+1}
}
#P(X=5)
proba3 <- contador/n
proba3
mean(suma) #Permite calcular la media de una variable (en este caso suma)
var(suma) #permite calcular la varianza de una variable (en este caso suma)
# literal d
sum((0:5)*dhyper(0:5,90,10,5))
#Literal a
length(duplicated(a)) #tama~
no del vector a
Simulación Estadı́stica 10
Universidad Del Valle
#Literal b
for (j in 1:n){
if (suma2[j]==0){
contador_1<-contador_1+1
}
if(suma2[j]==1){
contador_2<-contador_2+1
}
if(suma2[j]==2){
Simulación Estadı́stica 11
Universidad Del Valle
contador_3<-contador_3+1
}
if(suma2[j]==3){
contador_4<-contador_4+1
}
}
probabilidades2<-c(probabilidad1,probabilidad2,probabilidad3,probabilidad4)
valores<-c(0,1,2,3)
contadores<-c(contador_1,contador_2,contador_3,contador_4)
x11()
plot( valores,contadores,type="h",col=c(1,2,3,4),
main = "Gráfico del lanzamiento de los dados",
xlab = "valores posibles",ylab = "Cantidad")
# En esta parte se puede apreciar que es el mismo código, pero con la diferencia
#de que la cantidad de simulaciones varia
#n=10
n<-10
cuent1<-matrix(nrow = n,ncol = 3)
contador4a<-0
for(i in 1:n){
for (j in 1:3){
dado1<-sample(1:6,1,replace = T)
if(dado1==6){
contador4a=contador4a+1
cuent1[i,j]<- 1
}
if(dado1<6){
cuent1[i,j]<-0
}
}
}
contador_1a<-0
contador_2a<-0
contador_3a<-0
contador_4a<-0
suma2a<-apply(cuent1,1,sum)
for (j in 1:n){
if (suma2a[j]==0){
contador_1a<-contador_1a+1
Simulación Estadı́stica 12
Universidad Del Valle
}
if(suma2a[j]==1){
contador_2a<-contador_2a+1
}
if(suma2a[j]==2){
contador_3a<-contador_3a+1
}
if(suma2a[j]==3){
contador_4a<-contador_4a+1
}
}
probabilidad1a<-contador_1a/n
probabilidad2a<-contador_2a/n
probabilidad3a<-contador_3a/n
probabilidad4a<-contador_4a/n
probabilidades1<-c(probabilidad1a,probabilidad2a,probabilidad3a,probabilidad4a)
#n=1000
n<-1000
cuent3<-matrix(nrow = n,ncol = 3)
contador6<-0
for(i in 1:n){
for (j in 1:3){
dado3<-sample(1:6,1,replace = T)
if(dado3==6){
contador6=contador6+1
cuent3[i,j]<- 1
}
if(dado3<6){
cuent3[i,j]<-0
}
}
}
contador_1b<-0
contador_2b<-0
contador_3b<-0
contador_4b<-0
suma2b<-apply(cuent3,1,sum)
for (j in 1:n){
if (suma2b[j]==0){
contador_1b<-contador_1b+1
}
if(suma2b[j]==1){
contador_2b<-contador_2b+1
}
if(suma2b[j]==2){
contador_3b<-contador_3b+1
}
if(suma2b[j]==3){
contador_4b<-contador_4b+1
}
}
probabilidad1b<-contador_1b/n
Simulación Estadı́stica 13
Universidad Del Valle
probabilidad2b<-contador_2b/n
probabilidad3b<-contador_3b/n
probabilidad4b<-contador_4b/n
probabilidades3<-c(probabilidad1b,probabilidad2b,probabilidad3b,probabilidad4b)
#Resultados
Matriz_resultados<-matrix(c(probabilidades1,probabilidades2,probabilidades3),
nrow=4,ncol=3)
colnames(Matriz_resultados)<-c("10","100","1000")
rownames(Matriz_resultados)<-c("0","1","2","3")
Matriz_resultados
x<-c(1:10000)
#a)Binomial
{X11()
par(mfrow=c(2,2))
Simulación Estadı́stica 14
Universidad Del Valle
par(mfrow=c(2,2))
#Simulacion de la distribucion hypergeometrica Hipergemoretrica(100,500,50)
Simulación Estadı́stica 15
Universidad Del Valle
X11()
par(mfrow=c(2,2))
#Literal a
#combinatorio
probabilidad<-choose(4,0)*choose(48,5)/choose(52,5)
probabilidad
#Hipergeometrica
dhyper(0,m,n,k) #P(X=0)
Simulación Estadı́stica 16
Universidad Del Valle
#literal b
#Este ciclo junto al condicional permite contar las muestras en las cuales
#no se obtiene ningun As
for (j in 1:n){
if (suma4[j]==0){
contador8<-contador8+1
}
}
prob_poker<-contador8/n #P(X=0)
prob_poker
############# Octavo Punto #############
Simulación Estadı́stica 17