Re: [R] Two envelopes problem

From: Mario <>
Date: Mon, 25 Aug 2008 21:51:28 +0100

No, no, no. I have solved the Monty Hall problem and the Girl's problem and this is quite different. Imagine this, I get the envelope and I open it and it has A (A=10 or any other amount it doesn't matter), a third friend gets the other envelope, he opens it, it has B, now B could be either 2A or A/2. He doesn't know what I have, he doesn't have any additional information. According to your logic, he should switch, as he has a 50% chance of having 2B and 50% chance of having B/2. But the same logic applies to me. In conclusion, its advantageous for both of us to switch. But this is a paradox, if I'm expected to make a profit, then surely he's expected to make a loss! This is why this problem is so famous. If you look at the last lines of my simulation, I get, conditional on the first envelope having had 10, that the second envelope has 5 approximatedly 62.6% of the time and 37.4% for the second envelope. In fact, it doesn't matter what the original distribution of money in the envelopes is, conditional on the first having 10, you should exactly see 2/3 of the second envelopes having 5 and 1/3 having 20. But I'm getting a slight deviation from this ratio, which is consistent, and I don't know why.


Greg Snow wrote:
> You are simulating the answer to a different question.
> Once you know that one envelope contains 10, then you know conditional on that information that either x=10 and the other envelope holds 20, or 2*x=10 and the other envelope holds 5. With no additional information and assuming random choice we can say that there is a 50% chance of each of those. A simple simulation (or the math) shows:
>> tmp <- sample( c(5,20), 100000, replace=TRUE )
>> mean(tmp)
> [1] 12.5123
> Which is pretty close to the math answer of 12.5.
> If you have additional information (you believe it unlikely that there would be 20 in one of the envelopes, the envelope you opened has 15 in it and the other envelope can't have 7.5 (because you know there are no coins and there is no such thing as a .5 bill in the local currency), etc.) then that will change the probabilities, but the puzzle says you have no additional information.
> Your friend is correct in that switching is the better strategy.
> Another similar puzzle that a lot of people get confused over is:
> "I have 2 children, one of them is a girl, what is the probability that the other is also a girl?"
> Or even the classic Monty Hall problem (which has many answers depending on the motivation of Monty).
> Hope this helps,
> (p.s., the above children puzzle is how I heard the puzzle, I actually have 4 children (but the 1st 2 are girls, so it was accurate for me for a while).
> --
> Gregory (Greg) L. Snow Ph.D.
> Statistical Data Center
> Intermountain Healthcare
> (801) 408-8111
>> -----Original Message-----
>> From:
>> [] On Behalf Of Mario
>> Sent: Monday, August 25, 2008 1:41 PM
>> To:
>> Subject: [R] Two envelopes problem
>> A friend of mine came to me with the two envelopes problem, I
>> hadn't heard of this problem before and it goes like this:
>> someone puts an amount `x' in an envelope and an amount `2x'
>> in another. You choose one envelope randomly, you open it,
>> and there are inside, say 10. Now, should you keep the 10
>> or swap envelopes and keep whatever is inside the other
>> envelope? I told my friend that swapping is irrelevant since
>> your expected earnings are 1.5x whether you swap or not. He
>> said that you should swap, since if you have 10 in your
>> hands, then there's a 50% chance of the other envelope having
>> 20 and 5% chance of it having 5, so your expected earnings
>> are 12.5 which is more than 10 justifying the swap. I told
>> my friend that he was talking non-sense. I then proceeded to
>> write a simple R script (below) to simulate random money in
>> the envelopes and it convinced me that the expected earnings
>> are simply
>> 1.5 * E(x) where E(x) is the expected value of x, a random
>> variable whose distribution can be set arbitrarily. I later
>> found out that this is quite an old and well understood
>> problem, so I got back to my friend to explain to him why he
>> was wrong, and then he insisted that in the definition of the
>> problem he specifically said that you happened to have 10
>> and no other values, so is still better to swap. I thought
>> that it would be simply to prove in my simulation that from
>> those instances in which 10 happened to be the value seen in
>> the first envelope, then the expected value in the second
>> envelope would still be 10. I run the simulation and
>> surprisingly, I'm getting a very slight edge when I swap,
>> contrary to my intuition. I think something in my code might
>> be wrong. I have attached it below for whoever wants to play
>> with it. I'd be grateful for any feedback.
>> # Envelopes simulation:
>> #
>> # There are two envelopes, one has certain amount of money
>> `x', and the other an # amount `r*x', where `r' is a positive
>> constant (usaully r=2 or r=0.5).
>> You are
>> # allowed to choose one of the envelopes and open it. After
>> you know the amount # of money inside the envelope you are
>> given two options: keep the money from # the current envelope
>> or switch envelopes and keep the money from the second #
>> envelope. What's the best strategy? To switch or not to switch?
>> #
>> # Naive explanation: imagine r=2, then you should switch
>> since there is a 50% # chance for the other envelope having
>> 2x and 50% of it having x/2, then your # expected earnings
>> are E = 0.5*2x + 0.5x/2 = 1.25x, since 1.25x > x you # should
>> switch! But, is this explanation right?
>> #
>> # August 2008, Mario dos Reis
>> # Function to generate the envelopes and their money # r:
>> constant, so that x is the amount of money in one envelop and
>> r*x is the
>> # amount of money in the second envelope
>> # rdist: a random distribution for the amount x # n: number
>> of envelope pairs to generate # ...: additional parameters
>> for the random distribution # The function returns a 2xn
>> matrix containing the (randomized) pairs # of envelopes
>> generateenv <- function (r, rdist, n, ...) {
>> env <- matrix(0, ncol=2, nrow=n)
>> env[,1] <- rdist(n, ...) # first envelope has `x'
>> env[,2] <- r*env[,1] # second envelope has `r*x'
>> # randomize de envelopes, so we don't know which one from
>> # the pair has `x' or `r*x'
>> i <- as.logical(rbinom(n, 1, 0.5))
>> renv <- env
>> renv[i,1] <- env[i,2]
>> renv[i,2] <- env[i,1]
>> return(renv) # return the randomized envelopes }
>> # example, `x' follows an exponential distribution with E(x)
>> = 10 # we do one million simulations n=1e6) env <-
>> generateenv(r=2, rexp, n=1e6, rate=1/10)
>> mean(env[,1]) # you keep the randomly assigned first envelope
>> mean(env[,2]) # you always switch and keep the second
>> # example, `x' follows a gamma distributin, r=0.5 env <-
>> generateenv(r=.5, rgamma, n=1e6, shape=1, rate=1/20)
>> mean(env[,1]) # you keep the randomly assigned first envelope
>> mean(env[,2]) # you always switch and keep the second
>> # example, a positive 'normal' distribution # First write
>> your won function:
>> rposnorm <- function (n, ...)
>> {
>> return(abs(rnorm(n, ...)))
>> }
>> env <- generateenv(r=2, rposnorm, n=1e6, mean=20, sd=10)
>> mean(env[,1]) # you keep the randomly assigned first envelope
>> mean(env[,2]) # you always switch and keep the second
>> # example, exponential approximated as an integer rintexp <-
>> function(n, ...) return (ceiling(rexp(n, ...))) # we use
>> ceiling as we don't want zeroes env <- generateenv(r=2,
>> rintexp, n=1e6, rate=1/10)
>> mean(env[,1]) # you keep the randomly assigned first envelope
>> mean(env[,2]) # you always switch and keep the second i10 <-
>> which(env[,1]==10)
>> mean(env[i10,1]) # Exactly 10
>> mean(env[i10,2]) # ~ 10.58 - 10.69 after several trials
>> ______________________________________________
>> mailing list
>> PLEASE do read the posting guide
>> and provide commented, minimal, self-contained, reproducible code.
> mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Mon 25 Aug 2008 - 20:55:31 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 26 Aug 2008 - 09:33:58 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive