INGENIERIA de TELECOMUNICACION
ESTADISTICA2010-2011
PRACTICA 2. PROBABILIDAD Y VARIABLES ALEATORIAS
OBJETIVOS: Introducci´on a la probabilidad mediante experimentos aleatorios. Introducci´on 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´omo se podr´ıa ver que la simulaci´on est´a funcionando seg´un 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); >> lanzamiento=(1:n)’ >> datos=[lanzamiento m]; >> localiza=datos(find(datos(:,2)==1))
3. La probabilidad de lluvia en un d´ıa es de p= 0.5. Indicar el c´odigo MATLAB/Octave para saber cu´al es la probabilidad de que llueva el fin de semana (asumiendo independencia de lluvia entre d´ıas) Compararla con la te´orica.
>> p=0.5;
>> prob_teorica = 0.5+0.5-0.5*0.5 prob_teorica =
% mediante simulacion:
>> u=rand(10000,2) ; % simulamos 2 columnas (s´abado 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´abado
% domingo o ambos, w=1 y w=0 en caso
% contrario
>> prob = sum(w)/10000; % aprox. 0.75
4. Indicar el c´odigo 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´orica.
>> p=1-0.05;
>> prob_fiabilidad_teorica=p^5; prob_fiabilidad_teorica=
0.7738 % mediante simulaci´on:
>> 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´on de tel´efonos m´oviles. Se sabe que el 30 % de los tel´efonos fabricados en dicha planta son defectuosos. Si un tel´efono 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´on es de 0.2. Si un cliente compra dos tel´efonos que no han sido sacados de la cadena de producci´on, ¿cu´al es la probabilidad de que sean ambos no defectuosos?
La soluci´on te´orica es la siguiente: Sean los sucesos A = “ser defectuos”, ¯A = “no ser defectuos”, R =“el robot dice que es defectuoso”, y ¯R = “el robot dice que no es defectuoso”. Los datos del problema nos dicen que:
P(A) = 0.3, P(R|A) = 0.9 y que P(R|A¯) = 0.2, por lo que P( ¯A) = 1−P(A) = 0.7, P( ¯R|A) = 0.1 yP( ¯R|A¯) = 0,8. Se tiene por tanto que la probabilidad de que un tel´efono que no haya sido sacado de la cadena de producci´on sea no defectuoso es:
P( ¯A|R¯) = P( ¯R| ¯ A)P( ¯A) P( ¯R) = P( ¯R|A¯)P( ¯A) P( ¯R|A¯)P( ¯A) +P( ¯R|A)P(A) = 0.949 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´on y a partir de las probabilidades dadas en el problema: 1. Simulamos la fabricaci´on de n m´oviles (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 N DEF, que toma valor 1 si el m´ovil 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´umeros aleatorios mediante el comando rand, de tama˜no n_def y
n_no_def.
>> u_def=rand(n_def,1);
>> u_no_def=rand(n_no_def,1);
4. Mediante la condici´on booleana, y con las probabilidades P(R|A) = 0.9 y P(R|A¯) = 0.2, generamos un vectorR, que indica que el Robot detecta que el m´ovil 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 ];
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( ¯A|R¯), se puede aproximar contando las veces queR = 0 yM = 0, para ello utilizamos en comando find.
>> datos = [ M R ];
>> AIKON = datos(find(datos(:,2)==0)); % finalmente con tabulate
>> tabulate(AIKON) Value Count Percent
0 5631 94.80%
1 309 5.20%
2.
Variables aleatorias
La siguienta tabla resume algunas de las funciones m´as importantes para la generaci´on de n´umeros aleatorios en MATLAB/Octave:
Funci´on Descripci´on Sintaxis
rand no aleatorios∈[0,1] rand(m,n)
unifrnd no aleatorios ∈[a, b] unifrnd(a,b,m,n)
unidrnd no aleatorios discretos∈ {1,2, ..., N} unidrnd(N,m,n)
donde myn, son respectivamente en no de filas y columnas a generar.
2.1. Funciones preliminares ´utiles
1. Genera 100 datos de la distribuci´on uniforme cont´ınuaU(0,1).
>> x=rand(100,1) % ´o 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 uniforme 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´on de variables aleatorias
1. Supongamos el experimento del lanzamiento de dos monedas. Sea X, la variable aleatoria “n´umero de cruces”. Determina con MATLAB/Octave la funci´on de probabilidad de X.
>> n=10000; >> u1=rand(n,1); >> u2=rand(n,1);
>> m1=1*(u1<=1/2)+0*(u1>1/2); % generamos los n lanzamientos de las >> m2=1*(u2<=1/2)+0*(u2>1/2); % monedas 1 y 2, con probabilidad
% 1/2 de cruz (=1) y de cara (=0) >> x=m1+m2; % x es la suma de las cruces de ambas monedas
>> tabulate(x) % con tabulate, obtenemos la tabla de frecuencias % absoluta y relativa
Value Count Percent
0 2483 24.83%
1 5006 50.06%
2 2511 25.11%
De este modo hemos aproximado la funci´on de probabilidad te´orica: 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 1 2 3 0 10 20 30 40 50 60 X p(x) 0 1/4 1 1/2 2 1/4
2. Dada la variable aleatoria X, del ejercicio anterior, comprueba los valores te´oricos E[X] y Var[X]. SOLUCI ´ON: XLa esperanza deX es: µ=E[X] = n X i=1 xi×P(X =xi) = 0× 1 4+ 1 1 2+ 2× 1 4 = 1
Y la varianza: σ2 =Var[X] = n X i=1 (xi−µ)2P(X =xi) = (0−1)2×1 4 + (1−1) 2×1 2 + (2−1) 2×1 4 = 1 2 Recuerda: Var[X] =E[X2]−(E[X])2 >> mean(x) % es aproximadamente 1 >> var(x) % es aproximadamente 0.5
3. Elm´etodo de la inversa1 de la funci´on de distribuci´on,FX(x), afirma que “si una variable
aletoria X tiene una funci´on de distribuci´on FX(x) que admite inversa, entonces se verifica
que la variable transformada U =FX(X) sigue siempre una distribuci´on uniforme continua
U”.
Este resultado se aplica en la vida real considerando la igualdad u =FX(x) y despejando x en funci´on deu, que vendr´a dado porx=FX−1(u), con lo que si se generau∼ U(0,1) se tiene quex=FX−1(u) sigue la distribuci´on de X.
Para generaru∼ U con MATLAB/Octave podemos utilizarrand ´o unifrnd. a) Sea X una variable aleatoria con funci´on de distribuci´onFX(x), dada por:
FX(x) =
0 x <0 1−e−2x 0≤x
¿C´omo simular´ıas valores de la v.a. X?
b) Comprueba con MATLAB/Octave los valores de E[X] y de Var[X].
SOLUCI ´ON:
a) Por el m´etodo 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
2log(1−u) =x
Con lo que si generamos u∼ U(0,1), obtendremos quex∼f(x). El pseudoc´odigo ser´ıa:
1: Fijar n= 100
2: Generar n datos u∼ U(0,1)
4: Tenemos que x∼f(x)
En MATLAB, sobre el Command Window:
>> n=100000; >> u=rand(n,1); >> x = (-1/2)*log(1-u); >> hist(x) 0 0.5 1 1.5 2 2.5 0 5 10 15 20 25 30 35 40 45
NOTA:El m´etodo 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´ametroλ= 2. b) Dada la funci´on de distribuci´on deX,FX(x), podemos obtener la funci´on de densidad f(x), sabiendo que f(x) = dFX(x) dx y por tanto: f(x) = 2e−2x x≥0 0 en otro caso µ=E[X] = Z ∞ −∞ xf(x)dx= 1 2 σ2 =Var[X] = Z ∞ −∞ (x−µ)2f(x)dx= Z ∞ −∞ x− 1 2 2 f(x)dx= 1 4 >> mean(x) % es aprox. 0.5 >> var(x) % es aprox. 0.25
NOTA: como se indic´o en el apartado anterior, X ∼ Exp(λ = 2), donde E[X] = 1/λ y Var[X] = 1/λ2.
4. Sea X una variable aleatoria Rayleigh de par´ametro α cuya funci´on de densidad f(x) viene dada por f(x) = αxexp −α 2x 2 x >0 0 resto con media y varianza dadas por
µ=E[X] =
r
π 2α
σ2 =V [X] = 4−π 2α
a) ¿Cu´al ser´ıa el c´odigo para generar 50 valoresX conα= 0,17?
b) ¿Qu´e procedimientos num´ericos se podr´ıa usar para ver que se ha generado de forma correcta la v.a.X en el apartado anterior?
SOLUCI ´ON:
a) La forma de generarXes a trav´es del m´etodo de la funci´on inversa de la funci´on de distribuci´on. Para ello en primer lugar hay que calcular la funci´on de distribuci´on.
F(x) = Rx −∞0dt= 0 x≤0 Rx −∞αtexp − α 2t2 dt=R0xαtexp −α2t2dt x >0 con lo que F(x) = 0 x≤0 α −α212exp −α 2t 2t 0=− exp − α 2x 2 −1= 1−exp −α 2x 2 x >0
que cumple las cuatro propiedades para ser funci´on de distribuci´on (F(−∞) = 0, F(+∞) = 1,
mon´otona no decreciente y continua por la derecha).
En segundo lugar se utiliza el resultado te´orico de queY =F(X)sigue, siempre queF admita inversa, una U(0,1). A efectos pr´acticos este resultado se utiliza generando una u seg´un una
U(0,1) igualando aF(x) y despejandox en funci´on deu. Dado que u >0 se invierte F seg´un la expresi´on: 1−exp−α 2x 2=u 1−u= exp−α 2x 2 x2= −2 α Ln(1−u) x=± r −2 α Ln(1−u)
De la expresi´on anterior se toma la ra´ız positiva para quex > 0 que es donde se ha invertido
F. El pseudoc´odigo ser´ıa: - Generar u seg´un una U(0,1).
- Concluir quex=
q
−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´on t´ıpica obervada para losxgenerados son parecidos a los valores te´oricos:
>> media_teorica = sqrt(pi/(2*alpha)); >> media_teorica = 3.0397 >> var_teorica = (4-pi)/(2*alpha); >> var_teorica = 2.5247 >> mean(x) % aprox. 3.0397 >> var(x) % aprox. 2.5247
5. Decir si es verdadera o falsa la siguiente afirmaci´on. En caso de que sea verdadera demostrarlo y en caso de que sea falsa dar un contraejemplo o su valor correcto:
El c´odigo en MATLAB/Octave para generar 100 valores de una v.a “ Gompertz generalizada” con funci´on de distribuci´on
F(x) = 1−exp (−exp (x)) 0< x 0 resto es >> x=rand(100,1);
>> g=-log(1-x); % log es logaritmo neperiano SOLUCI ´ON:
X Es falsa. Para generar una v.a. continua cuya funci´on de distribuci´on admita inversa, se considera
F(x) =u
conu∼U(0,1)y se despeja lax. 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´odigo en MATLAB ser´ıa:
>> u=rand(1000,1); >> x=log(-log(1-u));
6. En una caseta de una feria se nos propone el siguiente juego. Hay que elegir un n´umero del 1 al 6. El feriante lanzar´a tres dados. Si sale el n´umero elegido en los tres dados recibiremos 3 euros, si sale en dos recibiremos 2 euros, si sale en uno recibiremos 1 euro y si no sale en ninguno, pagaremos 1 euro. ¿Es ventajoso el juego para nosotros? Resolverlo con una funci´on MATLAB/Octave.
SOLUCI ´ON:
XCreamos la funci´onjuego3dados.m:
%%% *.m file
function esperanza = juego3dados(n,k) u=unidrnd(6,n,3); a=(u==k); s=sum(a,2); g=-1*(s==0)+1*(s==1)+2*(s==2)+3*(s==3); esperanza=sum(g)/n; %%%
Utilizando esta la funci´onjuego3dados.m, observamos que para cualquier valor dek, la esper-anza es negativa, y por tanto el juego no es ventajoso. Se puede observar que el valor obtenido es aproximadamente el valor te´orico −0.08.
>> esperanza = juego3dados(1000,k)
2.3. Ejercicios propuestos
1. Utiliza el m´etodo de la transformaci´on inversa de la funci´on de distribuci´on para generar una variable aleatoria continua cuya funci´on de densidad sea
f(x) = 0 resto 1 18x 0< x <6 a) Calcular E [X].
b) Aplicar el m´etodo de la transformaci´on inversa para generar valores de la v.a.X.PISTA:
determinar en primer lugar la funci´on de distribuci´on FX(x).
c) Escribir el PSEUDOC ´ODIGO para generar valores de la v.a. X.
d) Escribir el c´odigo MATLAB/Octave para genera valores de la v.a.X.
e) Dada la v.a.Y = 1/X, determinar fY (y) por el teorema de la transformaci´on. Verificar quefY (y) cumple las dos propiedades para ser funci´on de densidad.
f) Determinar FY (y) a partir de fY (y) y directamente a partir de la definici´on FY (y) = P(Y ≤y). Verificar que FY (y) cumple las cuatro propiedades para ser funci´on de dis-tribuci´on.
h) Comprobar con MATLAB/Octave el valor te´orico de E[Y] por el m´etodo de la inversa aplicado aFY (y).
i) Comprobar con MATLAB/Octave el valor te´orico deE[Y] generando directamenteY = 1/X, con valoresX a partir del apartado c).
j) Comprobar con MATLAB/Octave, utilizando las v.a. X eY anteriores que E 1 X 6 = 1 E[X] (es decir que la esperanza no es un operador no lineal).