Vous êtes sur la page 1sur 6

Elementos de Probabilidad y Estad stica Pr acticas de R www.r-project.

org

Generaci on de variables aleatorias con R: Introducci on a la simulaci on

1. La funci on sample 2. Problemas de probabilidad utilizando 2.1. El problema de los abrigos . . . . 2.1.1. Bucles for . . . . . . . . 2.2. EL problema del caballero de M er e 2.2.1. Expresiones condicionales . simulaci on . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1 2 2 3 4 5 6

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

3. Simulando datos con distinta probabilidad

R es capaz de trabajar con cada una de las variables aleatorias que estamos viendo en este curso. Adem as de permitirnos calcular la funci on de distribuci on o de masa de probabilidad de una variable tambi en nos permite simular valores de la variable. La simulaci on estad stica se usa para dar evidencia num erica a determinados resultados probabilistas. Por ejemplo, sabemos que la probabilidad de obtener un 5 al lanzar un dado es 1/6. Podemos simular esta situaci on tan simple con R. Es decir, podemos simular el lanzamiento de un dado miles de veces con un u nico comando. Si dividimos el n umero de veces que obtenemos el resultado deseado entre el n umero total de lanzamientos observaremos que, a medida que el n umero de lanzamientos aumenta, nos aproximamos cada vez m as a la soluci on te orica.

1 La funci on sample
La funci on sample genera una muestra del tama no especicado a partir de un conjunto de elementos dado, tanto con reemplazamiento como sin reeemplazamiento. En su uso m as sencillo, la funci on sample genera una permutaci on de un vector. Las siguientes l neas de c odigo son equivalentes. > sample(1:6) # Permutaci on de los enteros del 1 al 6

[1] 4 2 3 1 5 6 > sample(6) # Permutaci on de los enteros del 1 al 6

[1] 6 3 4 1 5 2

De forma m as general, la funci on sample se utiliza con tres argumentos. El primer argumento es un vector con los elementos que se van a sortear. El segundo argumento es el n umero de elementos a generar. Por defecto, la muestra se genera sin reemplazamiento. Si queremos que el proceso se realice con reemplazamiento, necesitaremos utilizar el tercer argumento replace = TRUE. > sample(1:6, size = 1) [1] 4 > sample(1:6, size = 4) [1] 6 4 2 5 > sample(1:6, size = 4, replace = TRUE) [1] 6 3 2 4 Cuando utilizamos la funci on sample sin reemplazamiento, el tama no muestral no puede exceder el tama no del vector a partir del que se generan los elementos. Supongamos ahora que queremos simular el lanzamiento de un dado 10 veces. Utilizamos la funci on sample con el argumento replace = TRUE. > sample(6, 10, replace = TRUE) [1] 3 4 3 6 4 3 1 2 6 6 Tambi en podemos simular el lanzamiento de una moneda. Observa que el vector con los elementos a sortear puede ser un vector de caracteres. > sample(c("C", "+"), 5, replace = TRUE) [1] "C" "+" "C" "C" "C" Ejercicio 1: Simula el lanzamiento de un dado 10000 veces. Almacena los resultados y calcula la frecuencia relativa de los valores obtenidos. Ejercicio 2: Simula el lanzamiento de un dado 10000 veces. Cu al es la frecuencia relativa de los resultados impares? # Lanza una moneda 5 veces # Lanzamiento de un dado 10 veces # con reemplazamiento # 4 n umeros en {1,...,6} sin reemplazamiento # N umero aleatorio en {1,...,6}

2 Problemas de probabilidad utilizando simulaci on


En esta secci on describiremos como llevar a cabo simulaciones que nos permitan obtener soluciones aproximadas a problemas de probabilidad. Consideraremos problemas cl asicos de probabilidad para los cuales podemos calcular la soluci on exacta pero es dif cil de obtener. 2

2.1 El problema de los abrigos


Tres amigos entran en un bar donde beben m as de la cuenta. Al ir a recoger sus abrigos para salir a la calle no est an en demasiado buenas condiciones y cada uno coge el azar uno de los tres abrigos sin preocuparse de si es el suyo o no. Calcula la probabilidad de que ninguno lleve puesto su abrigo. Soluci on usando simulaci on: El problema de los abrigos se puede abordar utilizando simulaci on. Podr amos simular muchas veces la situaci on descrita (recoger 3 abrigos al azar). Entonces, si dividimos el n umero de veces que ocurre el resultado deseado (ning un amigo se lleva su abrigo) entre el n umero total de intentos, obtendr amos un valor aproximado a la soluci on anal tica del problema. El siguiente c odigo simula la acci on de recoger 3 abrigos al azar. > coats <- sample(1:3) > coats [1] 2 3 1 En esta ocasi on en particular, el primer amigo se lleva el abrigo 2, el segundo amigo se lleva el abrigo 3 y el tercer amigo se lleva el abrigo 1. Analiza el siguiente c odigo > coats == 1:3 [1] FALSE FALSE FALSE > sum(coats == 1:3) [1] 0 Observa que sum(coats == 1:3) devuelve el n umero de amigos que se llevan su propio abrigo. Ahora deber amos repetir este experimento muchas veces y guardar los resultados de cada repetici on. En programaci on, cuando queremos repetir sucesivamente alg un c alculo utilizamos bucles. 2.1.1 Bucles for Un bucle for for repetir a un mismo c odigo un determinado n umero de veces. La sintaxis de un bucle for en R es: for(variable in vector){ comandos } El bucle ja el valor de variable igual a cada valor de vector y cada vez eval ua el c odigo comandos. Ejecuta los siguientes ejemplos.

> for (i in 1:10){ print(i) } > for (i in c(2, 4, 7)){ print(i) } Volvamos al problema de los abrigos. Copia el siguiente c odigo en un script y ejec utalo. El c odigo simula 10 ocasiones en las que los tres amigos entran en el bar y beben m as de la cuenta. coincide <- numeric() # crea un vector B <- 10 # n umero de simulaciones for (i in 1:B) { coats <- sample(1:3) coincide[i] <- sum(coats == 1:3) # N de amigos con su abrigo } Ejercicio 3: Qu e informaci on contiene el vector coincide? En cu antas ocasiones ninguno de los amigos se lleva su abrigo? Ejercicio 4: Repite el experimento 10000 veces. Cu al es la frecuencia relativa del evento ning un amigo se lleva su abrigo? Compara el resultado que obtienes con la soluci on exacta del problema (1/3). Ejercicio 5: Cu al es la probabilidad aproximada de que ning un amigo se lleve su abrigo si el grupo est a formado por 4 amigos? Cu al es la probabilidad aproximada de que se lleve su abrigo solo uno del grupo? Y dos? Y tres? Cu al es la probabilidad aproximada de que todos los amigos se lleven su abrigo? Ejercicio 6: Cu al es la probabilidad aproximada de que ning un amigo se lleve su abrigo si el grupo est a formado por 15 amigos? Ejercicio 7: Aproxima por simulaci on el n umero de intentos necesarios para abrir una puerta cuando tenemos 10 llaves y separamos las ya usadas.

2.2 EL problema del caballero de M er e


En el siglo XVII los juegos de azar eran la principal diversi on de la alta sociedad francesa. Antoine Gombard, Caballero De Mer e pregunt o a Blas Pascal (1623-1662) en un viaje si era ventajoso apostar por el resultado de obtener al menos un seis en una serie de cuatro lanzamientos de un dado. As mismo, le interasaba saber si era ventajoso apostar por el resultado de obtener al menos un seis doble en 24 tiradas de un par de dados. En 1654, Pascal y Pierre de Fermat (1601-1665) mantuvieron abundante correspondencia sobre este y otros problemas relacionados con el c alculo de probabilidades.

Soluci on usando simulaci on: Este problema tambi en puede ser abordado utilizando simulaci on. Deber amos simular muchas veces las situaciones descritas (cuatro tiradas de un dado y 24 tiradas de un par de dados). Si despu es dividimos el n umero de ocurrencias de los resultados deseados entre el n umero total de intentos, obtendr amos una soluci on aproximada a la soluci on anal tica exacta. Consideremos en primer lugar la primera apuesta (la probabilidad de sacar al menos un seis en cuatro tiradas de dado). El siguiente c odigo simula cuatro tiradas de dado. > dice <- sample(1:6, 4, replace = TRUE) > dice [1] 6 4 4 3 Cada vez que simulamos una apuesta debemos evaluar si obtenemos un 6. 2.2.1 Expresiones condicionales Las expresiones condicionales nos permiten ejecutar diferentes operaciones dependiendo de si se cumple o no una determinada condici on. Las expresiones condicionales en R siguen la siguiente sintaxis. if(condici on 1){ expresiones si la condici on 1 es true } else if(condici on 2){ expresiones si la condici on 2 true } else{ expresiones en otro caso } Volvamos al problema de M er e. Copia el siguiente c odigo en un script y ejec utalo. El c odigo simula 10 apuestas. win <- 0 # N umero de veces que gana Mere B <- 10 # N umero de apuestas for (i in 1:B) { dice <- sample(1:6, 4, replace = TRUE) # cuatro lanzamientos n6 <- sum(dice == 6) # N umero de 6 en cuatro lanzamientos if (n6 >= 1) { win <- win + 1 } } pwin <- win/B # Probabilidad aproximada pwin

Ejercicio 8: Repite 10000 veces el experimento consistente en lanzar 4 veces un dado. Cu al es la frecuencia relativa el evento sacar al menos un seis en cuatro tiradas de dado? Compara el resultado obtenido con la soluci on exacta del problema (1 (5/6)4 ). Cuando aprendemos a programar nos suele resultar m as sencillo escribir el c odigo utilizando bucles, ya que los bucles reproducen la forma en la que pensamos el problema. Sin embargo, debemos acostumbrarnos a vectorizar las operaciones y evitar el uso de bucles en R. Existen varias funciones en R, como apply que en muchas ocasiones nos evitan la utilizaci on de bucles. El siguiente c odigo simula 10 apuestas del caballero de M er e sin bucles ni expresiones condicionales. Analiza e intenta comprender el c odigo. B <- 10 dice <- matrix(sample(1:6, 4 * B, replace = TRUE), ncol = 4) n6 <- apply(dice == 6, 1, sum) win <- sum(n6 >= 1) pwin <- win/B # Probabilidad aproximada pwin

Ejercicio 9: Simula la segunda apuesta del Caballero de M er e (24 tiradas de un par de dados). Repite 10000 veces el experimento y calcula la frecuencia relativa del evento sacar al menos un seis doble en 24 tiradas de un par de dados. Compara el resultado obtenido con la soluci on exacta (1 (35/36)24 ).

3 Simulando datos con distinta probabilidad


Hasta ahora hemos generado muestras a partir de vectores cuyos elementos ten an la misma probabilidad de ser elegidos. La funci on sample tiene otro argumento opcional (prob) que se puede usar para asignar probabilidades a cada elemento del vector que se sortea. Por ejemplo, supongamos que queremos simular lanzamientos de un dado no equilibrado. Supongamos que para dicho dado, la probabilidad de obtener un 1 es 0.5 y la probabilidad de obtener cualquiera de los restantes valores es 0.1. El siguiente c odigo simula 10 lanzamientos de dicho dado. > sample(1:6, 10, replace = TRUE, prob = c(0.5, 0.1, 0.1, 0.1, + 0.1, 0.1)) [1] 1 3 1 4 1 1 3 1 1 4 Ejercicio 10: C omo usar as la opci on prob para simular con la funci on sample la suma de dos dados?Y c omo har as para generar 10000 valores de dicha suma (sin usar el bucle for)? C omo utilizar as lo anterior para estimar la probabilidad de ganar en el segundo problema del caballero de Mer e? 6

Vous aimerez peut-être aussi