> -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf > Of Mario > Sent: Monday, August 25, 2008 1:51 PM > To: Greg Snow; r-help@r-project.org > Subject: Re: [R] Two envelopes problem > > 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,
Yes it does. >conditional on the first > having £10, you should exactly see 2/3 of the second envelopes having £5 > and 1/3 having £20. How did you derive that "conditional on the first having £10, you should exactly see 2/3 of the second envelopes having £5 and 1/3 having £20"? In particular, where did the 2/3 and 1/3 come from? Using your function, generateenv(), I get an even distribution of £5 and £20 for an initial uniform distribution. # use floor to get integer values 1:19 rintuniform <- function(n, ...) return (floor(runif(n, ...))) env <- generateenv(r=2, rintuniform, 1e6, min=1, max=20) 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]) # ~ 12.5 five <- which(env[i10,2]==5) # indices where second envelope=5 length(five)/length(i10) # proportion of first envelope=10 # where second envelope=5 In the last lines of your simulation, your function, rintexp(), generates approximately twice as many 5's as 10's. That is the source of your approximately 2 to 1 ratio of 5's and 20's in the second envelope, conditional on the first envelope containing 10. As demonstrated above, if you start with a uniform distribution, the ratio of 5's and 20's in the second envelope, conditional on the first envelope containing 10, is 1:1. >But I'm getting a slight deviation from this ratio, > which is consistent, and I don't know why. > > Cheers, > Mario. > > 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 > > [EMAIL PROTECTED] > > (801) 408-8111 > > > > > > > > > >> -----Original Message----- > >> From: [EMAIL PROTECTED] > >> [mailto:[EMAIL PROTECTED] On Behalf Of Mario > >> Sent: Monday, August 25, 2008 1:41 PM > >> To: r-help@r-project.org > >> 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 > >> Dan Daniel Nordlund Bothell, WA USA ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.