INGENIERIA de TELECOMUNICACION ESTADISTICA 2009-2010 PRACTICA 2. PROBABILIDAD Y VARIABLES ALEATORIAS OBJETIVOS: Introducción a la probabilidad y a las variables aleatorias 1. Probabilidad 1. Simular 1000 lanzamientos de una moneda cuya probabilidad de obtener cara (codificada como 1) es de 0,4 y la de obtener cruz (codificada como 0) es de 0,6. ¿Cómo se podrı́a ver que la simulación está funcionando según lo esperado? >> >> >> >> n=1000; p=0.4; u=rand(n,1); m=1*(u<=p)+0*(u>p); mean(m) % aprox. 0.40 2. Simular 10 lanzamientos de una moneda cuya probabilidad de obtener cara (codificada como 1) es de 0,4 y la de obtener cruz (codificada como 0) es de 0,6 y localizar en un vector los lanzamientos que son cara. >> >> >> >> >> >> n=10; p=0.4; u=rand(n,1); m=1*(u<=p)+0*(u>p); lanza=(1:n)’ data=[lanza m]; donde=data(find(data(:,2)==1)) 3. La probabilidad de lluvia en un dı́a es de p = 0,5. Indicar el código MATLAB/Octave para saber cuál es la probabilidad de que llueva el fin de semana (asumiendo independencia de lluvia entre dı́as) Compararla con la teórica. Sea A el suceso llueve en sábado y B el suceso llueve en domingo, y la probabilidad de lluvia P (A) = P (B) = 0,5. Por tanto, la probabilidad de que llueva el fin de semana es: P (A ∪ B) = P (A) + P (B) − P (A ∩ B) = 0,5 + 0,5 − 0,5 · 0,5 = 0,75 Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 1 % mediante simulacion: >> u=rand(10000,2) ; % simulamos 2 columnas (sábado y domingo) >> x=(u<=p); % si u<=p, toma valor 1 y 0 en caso contrario >> w=(x(:,1)==1 | x(:,2)==1); % si llueve el sábado % domingo o ambos, w=1 y w=0 en caso % contrario >> prob = sum(w)/10000; % aprox. 0.75 4. Indicar el código MATLAB para calcular la fiabilidad de un sistema de 5 componentes en serie cuya probabilidad de fallo es de 0.05 para cada uno de ellos y donde se supone que los fallos se producen de forma independiente entre sı́. Compararla con la fiabilidad teórica. Sea p = 1 − 0,05 la “probabilidad de que cada componente no falle”, la probabilidad teórica es p5 = 0,7738. % mediante simulación: >> u=rand(1000,5); >> x=(u<=p); >> w=(x(:,1)==1 & x(:,2)==1 & x(:,3)==1 & x(:,4)==1 & x(:,5)==1); >> prob=sum(w)/1000; % aprox. 0.7738 5. La empresa “Aikon” tiene una planta de fabricación de teléfonos móviles. Se sabe que el 30 % de los teléfonos fabricados en dicha planta son defectuosos. Si un teléfono es defectuoso, la probabilidad de que un robot del Departamento de Calidad de la empresa lo detecte es 0, 9 y si no es defectuoso, la probabilidad de que el robot lo considere defectuoso y lo saque de producción es de 0, 2. Si un cliente compra dos teléfonos que no han sido sacados de la cadena de producción, ¿cuál es la probabilidad de que sean ambos no defectuosos? Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 2 La solución teórica es la siguiente: Sean los sucesos A = “ser defectuoso”, Ā = “no ser defectuoso”, R = “el robot dice que es defectuoso”, y R̄ = “el robot dice que no es defectuoso”. Los datos del problema nos dice que: P (A) = 0,3, P (R|A) = 0,9 y que P (R|Ā) = 0,2, por lo que P (Ā) = 1 − P (A) = 0,7, P (R̄|A) = 0,1 y P (R̄|Ā) = 0,8. Se tiene por tanto que la probabilidad de que un teléfono que no haya sido sacado de la cadena de producción sea no defectuoso es: P (Ā|R̄) = P (R̄|Ā)P (Ā) P (R̄|Ā)P (Ā) = = 0,949 P (R̄) P (R̄|Ā)P (Ā) + P (R̄|A)P (A) Y por tanto, que dos lo sean es 0, 949 × 0, 949 = 0, 9006. En MATLAB, podemos calcular la probabilidad, sin necesidad de aplicar el teorema de Bayes. Mediante simulación y a partir de las probabilidades dadas en el problema: 1. Simulamos la fabricación de n móviles (por ej: n = 10000). Sabiendo que el 30 % son defectuosos (el 70 % no son defectuosos). >> n=10000; >> n_def=0.3*n; % no de defectuosos >> n_no_def=0.7*n; % no de no defectuosos 2. Crearemos el vector M, formado por los vectores DEF, y NDEF, que toma valor 1 si el móvil fabricado es defectuoso y 0 si no lo es. >> DEF = repmat(1,n_def,1) ; >> NDEF = repmat(0,n_no_def,1) ; >> M = [DEF ; NDEF]; 3. Generamos números aleatorios mediante el comando rand, de tamaño n_def y n_no_def. >> u_def=rand(n_def,1); >> u_no_def=rand(n_no_def,1); 4. Mediante la condición booleana, y con las probabilidades P (R|A) = 0,9 y P (R|Ā) = 0,2, generamos un vector R, que indica que el Robot detecta que el móvil es defectouso y en efecto lo es (1) y toma valor 0 si lo detecta cuando no lo es. >> R_DEF = 1*(u_def<=0.9) + 0*(u_def>0.9); >> R_NDEF = 1*(u_no_def<=0.2) + 0*(u_no_def>0.2); >> R =[ R_DEF ; R_NDEF ]; Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 3 5. Finalmente creamos un matriz datos, que contiene en la primera columna el vector M y en la segunda el vector R. Por tanto la probabilidad P (Ā|R̄), se puede aproximar contando las veces que R=0 y M=1, para ello utilizamos en comando find. >> datos = [ M R ]; >> AIKON = datos(find(datos(:,2)==0)); % finalmente con tabulate >> tabulate(AIKON) Value 0 1 Count 5631 309 Percent 94.80% 5.20% Obtenemos P (Ā|R̄) ≈ 0, 949, en nuestro caso hemos obtenido 0.9480. Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 4 2. Variables aleatorias 2.1. Funciones preliminares útiles La siguienta tabla resume algunas de las funciones más importantes para la generación de números aleatorios en MATLAB/Octave: Función Descripción Sintaxis rand unifrnd unidrnd n. aleatorios ∈ [0, 1] n. aleatorios ∈ [a, b] n. aleatorios discretos ∈ {1, 2, ..., N } rand(m,n) unifrnd(a,b,m,n) unidrnd(N,m,n) donde m y n, son respectivamente en nÂo de filas y columnas a generar. Ejemplos: 1. Genera 100 datos de la distribución uniforme contı́nua U(0, 1). >> x=rand(100,1) % ó x=unifrnd(0,1,100,1) 2. Genera con MATLAB/Octave, 5 lanzamientos de un dado. >> x=unidrnd(6,5,1) % generamos los 5 lanzamientos % a partir de una unif. discreta entre 1 y 6 % otra manera: >> u=rand(6,1) >> x=floor(6*u+1) 3. Genera con MATLAB/Octave, 5 lanzamientos de 3 dados. >> x=unidrnd(6,5,3) % generamos los 5 lanzamientos de los 3 dados % a partir de una uniforme discreta entre 1 y 6 % otra manera: >> u=rand(5,3) >> x=floor(6*u+1) 2.2. Generación de variables aleatorias 1. Supongamos el experimento del lanzamiento de dos monedas. Sea X, la variable aleatoria “número de cruces”. Determina con MATLAB/Octave la función de probabilidad de X. Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 5 >> n=10000; >> u1=rand(n,1); >> u2=rand(n,1); >> m1=1*(u1<=1/2)+0*(u1>1/2); >> m2=1*(u2<=1/2)+0*(u2>1/2); >> x=m1+m2; % generamos los n lanzamientos de las % monedas 1 y 2, con probabilidad % 1/2 de cruz (=1) y de cara (=0) % x es la suma de las cruces de ambas monedas >> tabulate(x) % con tabulate, obtenemos la tabla de frecuencias % absoluta y relativa Value 0 1 2 Count 2483 5006 2511 Percent 24.83% 50.06% 25.11% De este modo hemos aproximado la función de probabilidad teórica: p(x) = P (X = x) >> tab=tabulate(x) % guardamos la tabla en una matriz tab >> bar(tab(:,3)) % representamos el diagrama de barras de las % frecuencias relativas 60 50 40 30 X p(x) 0 1 2 1/4 1/2 1/4 20 10 0 1 2 3 2. Dada la variable aleatoria X, del ejercicio anterior, comprueba los valores teóricos E[X] y Var[X]. Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 6 La esperanza de X es: µ = E[X] = n X xi × P (X = xi ) = 0 × i=1 1 1 1 +1 +2× =1 2 4 2 Y la varianza: σ 2 = Var[X] = n X (xi − µ)2 P (X = xi ) i=1 2 = (0 − 1) × 1 1 1 + ... + (2 − 1)2 × = 2 2 2 Recuerda: Var[X] = E[X 2 ] − (E[X])2 En MATLAB podemos comprobar que: >> mean(x) >> var(x) % es aproximadamente 1 % es aproximadamente 0.5 3. El método de la inversa1 de la función de distribución, FX (x), afirma que “si una variable aleatoria X tiene una función de distribución FX (x) que admite inversa, entonces se verifica que la variable transformada U = FX (X) sigue siempre una distribución uniforme continua U”. Este resultado se aplica en la vida real considerando la igualdad u = FX (x) y despejando x en función de u, que vendrá dado por x = FX−1 (u), con lo que si se genera u ∼ U(0, 1) se tiene que x = FX−1 (u) sigue la distribución de X. Para generar u ∼ U con MATLAB/Octave podemos utilizar rand ó unifrnd. a) Sea X una variable aleatoria con función de distribución FX (x), dada por: 0 x<0 FX (x) = 1 − e−2x 0≤x ?Cómo simuları́as valores de la v.a. X? b) Comprueba con MATLAB/Octave los valores de E[X] y de Var[X]. 1 Para más detalles: link Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 7 a) Por el método de la inversa tenemos que considerando la igualdad u = FX (x), tenemos que para 0 ≤ x, se verifica que: 1 − e−2x = u 1 − u = e−2x 1 − log(1 − u) = x 2 Con lo que si generamos u ∼ U(0, 1), obtendremos que x ∼ f (x). El pseudocódigo serı́a: 1: 2: 3: 4: Fijar n = 100 Generar n datos u ∼ U(0, 1) Aplicar transformación inversa (x = − 21 log(1 − u)) Tenemos que x ∼ f (x) 45 40 35 En MATLAB, sobre el Command Window: 30 >> >> >> >> n=100000; u=rand(n,1); x = (-1/2)*log(1-u); hist(x) 25 20 15 10 5 0 0 0.5 1 1.5 2 2.5 NOTA: El método de la inversa permite simular variables aleatorias de manera sencilla a partir de v.a.’s uniformes. En este ejercicio se han simulado v.a.’s Exponenciales de parámetro λ = 2. b) Dada la función de distribución de X, FX (x), podemos obtener la función de densidad f (x), sabiendo que dFX (x) f (x) = dx y por tanto: −2x 2e x≥0 f (x) = 0 en otro caso Z µ = E[X] = ∞ xf (x)dx = −∞ Z ∞ 1 2 1 2 1 f (x)dx = σ = Var[X] = (x − µ) f (x)dx = x− 2 4 −∞ −∞ 2 2 Z ∞ Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 8 >> mean(x) >> var(x) % es aprox. 0.5 % es aprox. 0.25 NOTA: como se indicó en el apartado anterior, X ∼ Exp(λ = 2), donde E[X] = 1/λ y Var[X] = 1/λ2 . Ejemplos: 4. Sea X una variable aleatoria Rayleigh de parámetro α cuya función de densidad f (x) viene dada por αx exp − α2 x2 x > 0 f (x) = 0 resto con media y varianza dadas por r µ = E [X] = π 2α σ 2 = V [X] = 4−π 2α a) ¿Cuál serı́a el código para generar 50 valores X con α = 0, 17? b) ¿Qué procedimientos numéricos se podrı́a usar para ver que se ha generado de forma correcta la v.a. X en el apartado anterior? a) La forma de generar X es a través del método de la función inversa de la función de distribución. Para ello en primer lugar hay que calcular la función de distribución. Rx x≤0 −∞ 0dt R=x0 F (x) = R x α 2 α 2 αt exp − αt exp − t dt = t dt x >0 2 2 −∞ 0 con lo que F (x) = α −2 1 α 2 exp − α2 t2 t 0 0 = − exp − α2 x2 − 1 = 1 − exp − α2 x2 x≤0 x>0 que cumple las cuatro propiedades para ser función de distribución (F (−∞) = 0, F (+∞) = 1, monótona no decreciente y continua por la derecha). Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 9 En segundo lugar se utiliza el resultado teórico de que Y = F (X) sigue, siempre que F admita inversa, una U (0, 1). A efectos prácticos este resultado se utiliza generando una u según una U (0, 1) igualando a F (x) y despejando x en función de u. Dado que u > 0 se invierte F según la expresión: α 1 − exp − x2 = u 2 α 1 − u = exp − x2 2 −2 x2 = Ln (1 − u) α r −2 Ln (1 − u) x=± α De la expresión anterior se toma la raı́z positiva para que x > 0 que es donde se ha invertido F . El pseudocódigo serı́a: - Generar u según una q U (0, 1) . - Concluir que x = −2 α Ln (1 − u) sigue la v.a. requerida (en este caso Rayleigh). >> y=rand(50,1); >> alpha=0.17; >> x=sqrt((-2/alpha)*log(1-y)); b) Podemos comprobar que la media observada y la desviación tı́pica obervada para los x generados son parecidos a los valores teóricos: >> media_teorica = sqrt(pi/(2*alpha)); >> media_teorica = 3.0397 >> var_teorica = (4-pi)/(2*alpha); >> var_teorica = 2.5247 >> mean(x) >> var(x) % aprox. 3.0397 % aprox. 2.5247 5. Decir si es verdadera o falsa la siguiente afirmación. En caso de que sea verdadera demostrarlo y en caso de que sea falsa dar un contraejemplo o su valor correcto: El código en MATLAB/Octave para generar 100 valores de una v.a “Gompertz generalizada” con función de distribución 1 − exp (− exp (x)) 0 < x F (x) = 0 resto Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 10 es >> x=rand(100,1); >> g=-log(1-x); % log es logaritmo neperiano X Es falsa. Para generar una v.a. continua cuya función de distribución admita inversa, se considera F (x) = u con u ∼ U (0, 1) y se despeja la x. Por lo que F (x) = 1 − exp (− exp (x)) = u 1 − u = exp (− exp (x)) ln (1 − u) = − exp (x) x = ln (− ln (1 − u)) Por tanto el código en MATLAB serı́a: >> u=rand(1000,1); >> x=log(-log(1-u)); 2.3. Ejercicios propuestos: Probabilidad 1. Indicar el código MATLAB para resolver el problema Ex. JUN 2005 ITTel, C2a (link). NOTA: Utilizar a modo de ejemplo que p=0.8 y recordar que la probabilidad teórica resuelta en dicho ejercicio es: 2p2 − p3 2. Indicar el código MATLAB para resolver el problema Ex. JUN 2007 ITTel, C1a (link). Recordar: Ejercicio AIKON. 2.4. 1. Ejercicios propuestos: Variables aleatorias a) Indicar el código MATLAB para resolver el problema Ex. JUN 2007 ITTel, C1b (link). b) En el apartado a), comprueba gráficamente mediante un diagrama de barras, que la generación de X1 y X2 es correcta. PISTA: Recordar Ejercicio 2.2.1 de esta práctica. 2. Utiliza el método de la transformación inversa de la función de distribución para generar una variable aleatoria continua cuya función de densidad sea 0 resto f (x) = 1 0<x<6 18 x a) Aplica el procedimiento del método de la transformación inversa para este caso. PISTA: Determina en primer lugar la función de distribución FX (x). Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 11 b) Escribe el PSEUDOCÓDIGO para generar números aleatorios de la variable aleatoria X. c) Escribe el código MATLAB que genera las variables aleatorias de X mediante el método de la transformación inversa. Ing. de Telecomunicacion - Estadistica (2009-2010), PRACTICA 2. PROBABILIDAD Y V.A’s 12