Sei sulla pagina 1di 22

EE178/EE278A: A rst lecture about simulating

probabilistic models
Andrea Montanari

Stanford University
April 7, 2013

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

1 / 21

Simulating probabilistic models

Once upon a time: Flip a lot of coins :-)

Nowdays: Use computers .

The history of stochastic simulations is almost as old as the history of modern

computers. John von Neumann made seminal contributions to both.

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

2 / 21

Fundamental ingredients

A probabilistic model

(
P)
;

A source of random numbers


An algorithm that uses these random numbers to generate samples
from

(
P)
;

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

3 / 21

You can use your favorite programming language

Matlab, R, Python, C/C++, Ruby, Java, . . .

I will be using R

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

4 / 21

Generating random numbers


All of these have a way to generate a uniformly random number
between 0 and 1

> runif(1,min=0,max=1)
[1] 0.3287469
> runif(1)
[1] 0.2160798
> runif(1)
[1] 0.3713341
> runif(1)
[1] 0.625605
> runif(1)
[1] 0.06062561

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

5 / 21

In other words

They generate independent samples from

=[
P=

0; 1

(
P)
;

uniform distribution

We will use this as our building block.


(Often, there are more general built-in routines, but it is instructive to
program them.)

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

6 / 21

How do uniform random numbers look like?

0.5

q
q
q
q q q
q
q
q qq
q q qq
q
qq q q q
q q
q
q
q q q
q
q q
qq
q
q
q
q
q
q
q q q qq q
qq
qq
q
q
q
q qq q
q qq q q
q
q
q q
q
q q
q q qq
q q q q
q
q qq q q
q
q qq
qq q qq
q q
q q
q qq q q
q
q
qq
q
qq
q
q
q q
q qq
q
qq q q
q
q
q
q qqq
qq q
q
q q
q
q q qq
q
q
q q q
qq
q
qq q q q q
q q
q
q
q
q
q
q
q
q
q
q
q
q
q q q
q
qq q
q
q q
q
q qq q q
q
q
q
q
q
qq
q q
q q q
q
q
q
qq
q qq
q
qq q
qq
qq q q q
q
q
q
q
qq q q qq
q qq q
q
qq
qq
q
qq
q
q
q q
q
q q q
q q
q
q
q qq
q
q
q
q q
q
q
q q q qq q
q q
qq q
q
q
q q
q
q
qq
q
q
q
q qq
q
q qq
q
q q
q
qq q
q q
q
q
q
q
qq
q
q
q q
q
qq
q
q
q
qq
q
q qq
q qq q
q
q qq
q
q
q
q
q q q
q q
q q q
qq
q
q
q
q
q
q qq q q
q
q
q
q
q q q
q
q
q qq
q q
q q
q
q q
q q q q q q
q
q
q qq q
q
q
qq q
q
q
qq q
q
q
q
q
q qq qq
q
qq
q
q
q
q
q
q
q
q q
q
q q
q
q q
q
q
q q
q
q q qq q
q q
q
q
q
q q q
qq
q
qq
q
q
q
q q
q q
q
qq qq
q
qq
q q
q q
q q
q
q
q q
q
q q q
q
q
q
q
q qq q q
qq q
q
q
q
q
q
q
q
q qq
qq q q
q
q
q q
q
q

0.5

0.0

vec

1.0

1.5

> vec = runif(500,min=0,max=1)


> plot(vec)

100

200

300

400

500

Index

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

7 / 21

How uniform are they?


> vec = runif(500,min=0,max=1)
> hist(vec,breaks=10,col="blue")

30
0

10

20

Frequency

40

50

60

Histogram of vec

0.0

0.2

0.4

0.6

0.8

1.0

vec

500 samples

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

8 / 21

How uniform are they?


> vec= runif(5000,min=0,max=1)
> hist(vec,breaks=10,col="blue")

300
0

100

200

Frequency

400

500

Histogram of vec_long

0.0

0.2

0.4

0.6

0.8

1.0

vec_long

5000 samples

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

9 / 21

How uniform are they?


> vec = runif(50000,min=0,max=1)
> hist(vec,breaks=10,col="blue")

3000
2000
0

1000

Frequency

4000

5000

Histogram of vec_long2

0.0

0.2

0.4

0.6

0.8

1.0

vec_long2

50000 samples

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

10 / 21

`Natural' questions

How much `non-uniform' for

small?

How many bins should I use?

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

11 / 21

Distinct calls should produce independent random numbers

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

12 / 21

Visually inspecting dependence/independence

1.0

> vec = runif(500,min=0,max=1)


> vec2 = c(vec[-1],0)
> plot(vec,vec2)

q qq
q
q
q
q
qq
q q q
q
q
q
q
q q
q
q q q
q qq
qq
q
q
q
q q
q
qq
q
q
q
q
qq
q
q
q
q
q
q
q
q q
q
q
q
qq
q
q
q
q
q
q
q
q
q q
q
q
q
q
q
qq
qq q
q
q
q
q
q
q
q
q q
q
q q qq
q
q
q q
qq
qq
q
q q qq
q
q
q
q q
q
q
q
q
q
q
q
q q
q
q qqq
q q
q
q
q
q
q
q q
q
q
q
q q
q
q
q
q
q
qq
q
q
q
q
q
q
q
qq q q
q
q
q
q
qq
q
q q q
q
q
q q
q
q
q
q
q
q
q
q
q
q
q
q
q
q q q
q
q
q
q
q
q
qq
q q
q
q
q
qq
qq
q
q
q
q
q
q
q
q
q
q q
q
q
q
qq
q
q
q
qq
q
q q q qqq
q
qq
q
q
q q
q
q
q
q q q q
q
q
q
q
q
q q
q
q q qq
q
q
q q
q
q
q q
q
q q q q q qq
q q
q
q
q
q
q
q
q
q
q
q
q
q
qq
q
qq
q
q
q
q
qq
q
q
q
qq q
q
q
q q q q
q
qq q
qq
q qq
q
q
q
q
q q
q
q
qq
q
q
q q
qq
q q
q
q
q
q
q
q
qq
q q qq
qq
q
qq
qq
q
q
q
q
q
q
q
q q
q
q
q
q q
q
qq
q
q
q
q
q
q
qq
q
q q
q q
q
q q q q
q
q
q
q
q
q
qq
q q
q
q q
q q
q
q
q q
q q qq
q
q
q q qq q
q
qq
q
q
q
q q qqq
q
q
q
q
q
q
qq
q
q
q
q
q
q q
q
q q
q
q
q
q
q
q
q
q
q
q
q
q
q
q q
q
q q
q q
q
qq
q
qq
q
q
q
q
q
q
q q
q

0.0

0.2

0.4

vec2

0.6

0.8

0.0

qq
q

0.2

q q
q
q
q
q
q

0.4

0.6

0.8

1.0

vec

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

13 / 21

Visually inspecting dependence/independence

1.0

> vec = runif(500,min=0,max=1)


> vec2 = c(vec[-1],0)
> plot(vec,vec2*cos(vec))

0.8
0.6
0.4

vec2 * cos(vec)

q
qq

q
q

q
q
q q qq
q

qq
q

q qq q
q
q q

q q
q
q
q
q
q

q
q
q

qq

q
q
q
q
q
q q
q q
q
q

q
q
q
q

q
q q
qq
q q
q
q
q
q
q
q
q
q
qq
q
q
q
q
q q
qq
qq
q
q
qq
q
q q
qq
q
q
q
q
q
q
q
q q
qqq
q qq q q
q
q
q
q
q
q
q q
q
q
q
q
q q q
q
q
q q
q
q
q q q
q
q
q
q
q
q
q qq q
q
q
q
q q
qq q
q q
qq
q
q q
q
q
q
q
q
q
q
q
q
q
q
q q
q
q
q
qq
q
qq q
q
q
q q q
q
q
qq q q
q q
q q q q
q
qqq
q
q q
q
q
q
qq q
qq
q
q
q
q
q
q
q
q
q
q q q q
q
q
q
q
q
q
q
qq
q
qq
q
q
q q
q
qq
q qq
q q
q q
q
q
q
q
qq
q
q q
q
q
q
q
q q
q
q
qq
q
q
qq q
q
q
q
q
q
q
q q q
qq
q
q q
q
q
q q
q
q
q
q
q
q
q
q
q
q
qq
q
q q
q
q
q
q
q
q
q
q
qq
q
q
q
q
q q q
q qq
q
q
q
q q
q q
q qq
q
qq
q
qq
q
q
q
q
q
q
q
q
q q
q
q
q q
q
q
qq
qq
qq
q
q q
q
q
q
q
q
q
q
q q
q
q q q q
q
qq
q q
q q
q q
q
q q
q
q
qq
q q qq q
q
q
q
q q
q
qq
q
q
q
q
q qq
q
q
q q qqq
q
q
q
q q
q
qq
q
q
q
q
q
q
q
q
q
q
q
q
q q q
q
q
q
q
q
q
q
q
q
qq
q q
q q q
q q
q
q
qq
q
qq
qq q
q
q
q
q
q
q q
q
q
q

0.2

0.0

0.0

q qq

q
q

0.2

0.4

0.6

0.8

1.0

vec

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

14 / 21

How does a random number generator work?

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

15 / 21

We do not really need to know but. . .

Useful to know in caseit has some problems


Interesting and instructive.

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

16 / 21

Here is my example (not a particularly good one)


rnumber = 0;
myset.seed <- function( myseed ){
rnumber <<- myseed;
}
myrunif <- function( n ){
x = c(1:n);
for (i in 1:n ){
rnumber <<- (459*rnumber+14)%%1503;
x[i] = (rnumber/1503);
}
}

return (x);

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

18 / 21

Let's check it out

0.5

q q q qq
q q q qq
q q q qq
q q
q q
q q
q
q
q
q
q
q
q
q
q
q
q
q
q
q
q
q q
q q
q q
q q q qq
q q q qq
q q q qq
q
q
q
q
q
q
q q q q qq q
q q q q qq q
q q q q qq q
q
q
q q q q qq q
q q q q qq q
q qq q
q
q
q
q
q
q
q
qq q q q
qq q q q
q q q qq
q q
q q
q q
q
q
q
q
q
q
q
q
q
qq
qq
qq
q
q
q
q
q
q
q q qq
q q qq
q q qq
q
q
q
q q q
q q q
q q q
q
q
q
q
q
q
q
q
q
q
q
q
q q
qq
qq
qq
q q qq
q q qq
q
q
q
q
q
qq
qq
qq
q q
q q
q q
qq q
qq q
qq q
q
q
q
q q
q q
q q
q
q
q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q q
q q q
q q q
qq q
qq q
qq q
q
q
q
q
q
q
q qq
q qq
q qq
q
q
q
q
q
q
q
q
q
q q
q q
q q
q q
q q
q q
q
q
q
qq
qq
qq
qq q
qq q
qq q
qq q
qq q
qq q
qq
qq
qq
q
q
q
q
q q
q q
q q
q q
q q
q q
q
q
q
q
q
q
q
q
q
q qq
q qq
q qq
q
q
q
q
q
q
qq q
qq q
qq q
q q q
q q q
q q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q
q
q
q q
q q
q q
q
q
q
qq q
qq q
qq q
q q
q q
q
q q
qq
qq
qq
q
q
q q qq
q q qq
q q qq
qq
qq
qq
q
q
q
q
q
q
q
q
q
q
q
q
q q
q q
q q
q
q
q
q

0.5

0.0

vec

1.0

1.5

> myset.seed(0)
> vec = myrunif(500)
> plot(vec)

100

200

300

400

500

Index

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

19 / 21

Visually inspecting dependence/independence

> vec = myrunif(500,min=0,max=1)


> vec2 = c(vec[-1],0)
> plot(vec,vec2)

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

20 / 21

Visually inspecting dependence/independence

0.0

0.2

0.4

vec2

0.6

0.8

1.0

> vec = myrunif(500,min=0,max=1)


> vec2 = c(vec[-1],0)
> plot(vec,vec2)

q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q

q q
q q
q q
q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q q
q

0.0

0.2

0.4

0.6

0.8

1.0

vec

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

21 / 21

A bit better
rnumber = 0;
myset.seed <- function( myseed ){
rnumber <<- myseed;
}
myrunif <- function( n ){
x = c(1:n);
for (i in 1:n ){
rnumber <<- (1664525*rnumber+1013904223)%%(2^32);
x[i] = (rnumber/2^32);
}
}

return (x);

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

23 / 21

Visually inspecting dependence/independence

1.0

> vec = myrunif(500,min=0,max=1)


> vec2 = c(vec[-1],0)
> plot(vec,vec2)

q
q
q
q
q
q
q
q q qq
q
q
q
q
q
qq
q
q
q
q
q
q q
q
q
q
q
q
q
q
q q
q
q q
q
q
q q
q
q q
q
q q
q
q q
q qq
q
q
q q q
q
q
q
q
q
q
q
q q
qq
q
q q
q qq q
q q
q
q
q
q
q
q
qq q q
q
q
q
q
q
q q
q qq
q
q q
q
q
q q
q
q
q
qq q q q
q
q
q q
qq
qq
q
q q
q
q
q q
q
q
q q
q
q q
q
q
q
q
q
q
q
q
q
q q q
q
q
q
q q
q
q
qq
q
q
q q q
q qq
q q
q
q
q
q
q
q
q
q
q
q
q q
q
q
q
q
q
q q
q
q
q
q q
q
q
q
q
q
q
qq
q q
q
q
q
q
q
q
q q
q
qq
q
q
q q
q
q
q
qq
q
q q
q
q q qq q q
q
q
q q
q
q
q
q q
q
q
q
q
q
q
qq q
q
q
q
qq
q
qq q
qq q
q
q
q
q
q
qq
qq
q
q
q
q q
q
q
q
q
q
q q
q
q
q
q
qq
q
q q
q
q
q
q q q
q
q
q
q
q
q q
q
q
q
q
q
q q
q
q
qq
q
q q
q
q
qq q
qq
q
q
q
q
qq
q
q
q
qq
q q q
q
qq
qq
q
q
q
q
q q q
q
q
q q
q
q
q
q
q
q
q
q q q
qq
q
q
q
q
q
q q
q
q
q
q q q q
q
q q
q
q
q
q
q
q q q
qq q q
q
q
q
qq q
q
q
q
qq q q q
q
q
q
q
q
q
q
q q q
q
q
q
q
q
q q
q q
q
q q
qq
q
q
q
qq
q
q
q
q
q
q
q
q
q
q qq
q
q q
q
q
q
q
q
q q
q
q
q
q
q
q
q
qq q
q q
q
q
q
q
q
q
q
q
q
q
q
q
qq
q
qq
q
q
q
q
q

0.0

0.2

0.4

vec2

0.6

0.8

q
qq

0.0

0.2

0.4

0.6

0.8

1.0

vec

Andrea Montanari (Stanford)

EE178/EE278A

April 7, 2013

24 / 21

Potrebbero piacerti anche