|
|
| Probability Discussions of probability theory |
08-28-2011, 01:13 PM
|
#1
|
|
Carpal \'Tunnel
Join Date: Feb 2008
Location: NOT SHTTY POCKET FIVES FORUM
Posts: 14,060
|
Standard deviation and risk of ruin help
Hi,
I'm trying to calculate my risk of ruin for the 180 mans on Pokerstars. I don't know what the standard deviation for these tournaments is. I'm assuming an average buy-in of $10, an ROI of 13%, a bankroll of $4000.
Thanks for any help.
|
|
|
08-28-2011, 03:30 PM
|
#2
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
Well, the real key is knowing the standard deviation. If you know the ROI, you ought to have some feel for the finish distribution. If you have an idea of the finish distribution you can calculate the SD. Once you have the SD, it is easy to get the RoR.
|
|
|
08-28-2011, 07:03 PM
|
#3
|
|
Carpal \'Tunnel
Join Date: Feb 2006
Location: Austin, TX
Posts: 12,571
|
Re: Standard deviation and risk of ruin help
At the very least I wonder if you could start with the SD you'd get if you were equally likely to finish in any position. Then you use the relatively standard SD formula and go from there. I'd probably make it a spreadsheet and then try altering the assumptions to assume we have more than an even chance of winning $ and see how much that changes things.
|
|
|
08-28-2011, 08:25 PM
|
#4
|
|
old hand
Join Date: Jun 2011
Posts: 1,303
|
Re: Standard deviation and risk of ruin help
As sherman says knowing the finish distribution will give you the best idea of the SD. If you're asking about 13% ROI because that is your current ROI at the game, then if you can dig up past results for yourself, that would give you a better idea of the SD. As an estimate though, you can just create a reasonable finish distribution for someone with a 13% ROI, and this will mimic the SD pretty well because the biggest factor for SD in MTTs is field size and payout schedule.
| Position | Payout % | Prob. Of Finish | Buyins Won | Avg. BI won | Variance (BI^2) |
|---|
| 1 | 30.0 | 0.0071 | 48.5720 | 0.3449 | 16.6612 | | 2 | 20.0 | 0.0069 | 32.0480 | 0.2211 | 7.0295 | | 3 | 11.9 | 0.0068 | 18.6636 | 0.1269 | 2.3358 | | 4 | 8.0 | 0.0067 | 12.2192 | 0.0819 | 0.9792 | | 5 | 6.5 | 0.0067 | 9.7406 | 0.0653 | 0.6189 | | 6 | 5.0 | 0.0066 | 7.2620 | 0.0479 | 0.3357 | | 7 | 3.5 | 0.0066 | 4.7834 | 0.0316 | 0.1429 | | 8 | 2.6 | 0.0065 | 3.2962 | 0.0214 | 0.0652 | | 9 | 1.7 | 0.0064 | 1.8091 | 0.0116 | 0.0180 | | 10 thru 18 | 1.2 | 0.0590 | 0.9829 | 0.0580 | 0.0429 | | 19 thru 180 | 0.0 | 0.8807 | -1.0000 | -0.8807 | 1.1242 | | Total | 100.0 | 1.0000 | | 0.1298 | 29.3536 |
Here is an example that will create a 12.98% ROI. It has a total variance of 29.35 BI^2. The Standard Deviation is simply the square root of the variance, in this case, 5.418 Buy-ins per tourney.
Now standard deviation will scale with the square root of number of tourneys played. So a sample of 100 Tourneys would have a SD of 54.18 BI, 10,000 Tourneys would have a SD of 541.8 BI, etc...
One way to estimate Risk of Ruin is by using the formula:
RoR = e^(-2*WR*BR/SD^2)
Here WR would be 0.1298 BI.
BR is =$4000/$10 = 400 BI
(Note: Stars only has $7 and $15 180 mans...I'll assume you'd mix the two?)
SD is 5.418 BI.
Using this formula yields a RoR of 2.9%. But it's independent of sample size.
I believe this formula leans toward a conservative estimate of RoR for 180 mans at least. Using a normal distribution table, this SD and BR will cause you to go broke <1% if you don't cashout/adjust stakes/truly have a ROI of 13%.
So generally speaking, $4000 should be plenty to handle the swings for a player who has >10% ROI.
Here is a blog post about BR management with suggestions on cashing out over time that seems very sound, imo.
http://www.pocketfives.com/blogs/jennifear/
|
|
|
08-28-2011, 08:51 PM
|
#5
|
|
Carpal \'Tunnel
Join Date: Feb 2008
Location: NOT SHTTY POCKET FIVES FORUM
Posts: 14,060
|
Re: Standard deviation and risk of ruin help
Stars has 2.50, 3.50 rebuy (played as 6.50), 8, 15, and 35 180s. I'd be playing the 3.50-15's.
|
|
|
08-28-2011, 08:55 PM
|
#6
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
Actually, I have another problem with this whole analysis. I don't doubt the accuracy, simply the appropriateness of using statistics that make assumptions of the data that are not met. I cannot be sure, but given that the RoR formula uses SD in its calculation I assume it is only accurate to the degree to which such assumptions are met.
I wrote an article for the 2+2 magazine some years ago that demonstrated that traditional confidence intervals using the t (or Z) distribution are inaccurate unless sample sizes are very large (perhaps well over 1000 MTTs played). I advocated a bootstrapping approach to estimating 95% confidence interval and demonstrated that it performed much better in terms of Type I error rates.
So in the situation you present here, I would also prefer some resampling approach to estimating the RoR. A computer simulation that draws results from the distribution given by tringlomane above would be interesting. Start with your BR and then simulate results until you achieve some total BR (say $20,000 to be safe) or you go broke (i.e. can't afford another BI. Repeat perhaps 10,000 or more times to see how often you would go broke. It would be interesting to know if those results match the results of the RoR formula.
|
|
|
08-28-2011, 09:43 PM
|
#7
|
|
old hand
Join Date: Jun 2011
Posts: 1,303
|
Re: Standard deviation and risk of ruin help
Quote:
Originally Posted by Sherman
Actually, I have another problem with this whole analysis. I don't doubt the accuracy, simply the appropriateness of using statistics that make assumptions of the data that are not met. I cannot be sure, but given that the RoR formula uses SD in its calculation I assume it is only accurate to the degree to which such assumptions are met.
I wrote an article for the 2+2 magazine some years ago that demonstrated that traditional confidence intervals using the t (or Z) distribution are inaccurate unless sample sizes are very large (perhaps well over 1000 MTTs played). I advocated a bootstrapping approach to estimating 95% confidence interval and demonstrated that it performed much better in terms of Type I error rates.
So in the situation you present here, I would also prefer some resampling approach to estimating the RoR. A computer simulation that draws results from the distribution given by tringlomane above would be interesting. Start with your BR and then simulate results until you achieve some total BR (say $20,000 to be safe) or you go broke (i.e. can't afford another BI. Repeat perhaps 10,000 or more times to see how often you would go broke. It would be interesting to know if those results match the results of the RoR formula.
|
Yes, you are right, what you suggest is the more appropriate thing to do. Unfortunately, I'm too coding retarded to pull it off right now. I never really have messed with random number generators in C much. Apparently Excel can do random numbers for you...but pulling this off in a spreadsheet may be messy. I may give it a quick and dirty try with the spreadsheet tomorrow.
|
|
|
08-28-2011, 11:11 PM
|
#8
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
Sorry, I really didn't think through how easy it would be for me to write something. So here is an R function (you can download R for free from www.r-project.org) that does it all for you:
Code:
finishdist <- c(rep(48.571,71),rep(32.048,69),rep(18.6636,68),rep(12.2192,67),rep(9.7406,67),rep(7.2620,66),rep(4.7834,66),
rep(3.2962,65),rep(1.8091,64),rep(.9829,590),rep(-1,8807))
RoR.sim <- function(finishdist, startBR=100, winAmt=5*startBR, sims=1000) {
res <- rep(NA, sims)
for (i in 1:sims) {
BR <- startBR
while(BR >= 1 & BR < winAmt) {
BR <- BR + sample(finishdist, 1, T)
}
res[i] <- BR
}
probs <- cbind(sims, sum(res < 1) / sims, sum(res >= winAmt) / sims)
colnames(probs) <- c("Sims", "Ruin", "Win")
rownames(probs) <- "Probabilities"
out <- list(probs, summary(res))
names(out) <- c("Ruin/Win Results", "Summary of Final Bankrolls")
return(out)
}
RoR.sim(finishdist)
All you have to do is create your own finish distribution and assign it any name you would like (e.g. FinishDist). Then run the RoR.sim function code to store the function in the R system's memory. Then type:
RoR.sim(FinishDist)
and you will get 1000 simulations assuming you start with a 100 BI bankroll and you will quit when you have 5 times your starting bankroll amount (500 BIs by default). Of course, you can change any of these options to you liking.
For example, if you want more sims just say,
RoR.sim(finishdist, sims=10000)
or however many you would like.
If you want to stop when you have doubled your bankroll, just say,
RoR.sim(finishdist, winAmt=2*StartBR)
If you want to change your starting bankroll amount just say,
RoR.sim(finishdist, startBR=50)
or however many BIs instead of 50 you would like.
The only requirement is that you give it a finish distribution (in BIs) which you can tailor to your liking. Above I made one following tringlomane's example such that each prize (or loss) represents the expected probability of getting each prize (e.g. I made 71 first places as 48.572 and 8807 OOTM finishes as -1).
If you copy and paste the code I have above into R directly, it will run 1000 simulations based on that distribution. It outputs the number of simulations and the probability of ruin and winning along with a summary (min, 1st quartile, median, mean, 3rd quartile, and max) of the bankroll results.
|
|
|
08-28-2011, 11:29 PM
|
#9
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
Sorry, but I couldn't help myself. I already made a change to the function that also outputs your expected ROI (if the finish distribution were accurate).
Code:
RoR.sim <- function(finishdist, startBR=100, winAmt=5*startBR, sims=1000) {
res <- rep(NA, sims)
for (i in 1:sims) {
BR <- startBR
while(BR >= 1 & BR < winAmt) {
BR <- BR + sample(finishdist, 1, T)
}
res[i] <- BR
}
tradRoR <- exp(-2*(sum(finishdist) / length(finishdist))*startBR/var(finishdist))
probs <- rbind(sims, (sum(finishdist) / length(finishdist)) * 100, tradRoR, sum(res < 1) / sims, sum(res >= winAmt) / sims)
rownames(probs) <- c("Sims", "ROI %", "Traditional Ruin Prob", "Simulated Ruin Prob.", "Simulated Win Prob.")
colnames(probs) <- "Results"
out <- list(probs, summary(res))
names(out) <- c("Ruin/Win Results", "Summary of Final Bankrolls")
return(out)
}
# Example
finishdist <- c(rep(48.571,71),rep(32.048,69),rep(18.6636,68),rep(12.2192,67),rep(9.7406,67),rep(7.2620,66),rep(4.7834,66),
rep(3.2962,65),rep(1.8091,64),rep(.9829,590),rep(-1,8807))
RoR.sim(finishdist)
RoR.sim(finishdist, startBR=40)
RoR.sim(finishdist=c(rep(20/10.5,55),rep(-1,45)))
I moved the function to the top and the examples to the bottom. I include an additional example that might reflect a HU STT player who wins 55% of the time.
Now updated to output traditional risk of ruin calculation result side by side.
Last edited by Sherman; 08-28-2011 at 11:47 PM.
|
|
|
08-29-2011, 12:04 AM
|
#10
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
Further improved (sorry for so many posts):
Code:
RoR.sim <- function(finishdist, startBR=100, winAmt=5*startBR, sims=1000, digits=5) {
res <- rep(NA, sims)
print("Simulating...please wait")
for (i in 1:sims) {
BR <- startBR
if(i == .25*sims) {print("25% of sims complete.")}
if(i == .5*sims) {print("50% of sims complete.")}
if(i == .75*sims) {print("75% of sims complete.")}
while(BR >= 1 & BR < winAmt) {
BR <- BR + sample(finishdist, 1, T)
}
res[i] <- BR
}
tradRoR <- exp(-2*(sum(finishdist) / length(finishdist))*startBR/var(finishdist))
probs <- rbind(sims, (sum(finishdist) / length(finishdist)) * 100, tradRoR, sum(res < 1) / sims, sum(res >= winAmt) / sims)
rownames(probs) <- c("Sims", "ROI %", "Traditional Ruin Prob", "Simulated Ruin Prob.", "Simulated Win Prob.")
colnames(probs) <- "Results"
out <- list(round(probs, digits), summary(res))
names(out) <- c("Ruin/Win Results", "Summary of Final Bankrolls")
return(out)
}
# Example
finishdist <- c(rep(48.571,71),rep(32.048,69),rep(18.6636,68),rep(12.2192,67),rep(9.7406,67),rep(7.2620,66),rep(4.7834,66),
rep(3.2962,65),rep(1.8091,64),rep(.9829,590),rep(-1,8807))
RoR.sim(finishdist)
RoR.sim(finishdist, startBR=40)
RoR.sim(finishdist=c(rep(20/10.5,55),rep(-1,45)))
By the way, this code will get you the results for the OP's problem where has has 400 Buyins.
RoR.sim(finishdist, startBR=400)
When I ran that, I got a simulated RoR (1000 trials) of .026, whereas the traditional RoR was .02907. Pretty dang close to each other, which of course suggests there was no need for all this simulation work. ;-)
|
|
|
08-29-2011, 03:53 AM
|
#11
|
|
old hand
Join Date: Jun 2011
Posts: 1,303
|
Re: Standard deviation and risk of ruin help
Quote:
Originally Posted by Sherman
By the way, this code will get you the results for the OP's problem where has has 400 Buyins.
RoR.sim(finishdist, startBR=400)
When I ran that, I got a simulated RoR (1000 trials) of .026, whereas the traditional RoR was .02907. Pretty dang close to each other, which of course suggests there was no need for all this simulation work. ;-)
|
You got it to be 0.026? I ran it 3 times at BR=400 and got it to be 0.016, 0.017, and 0.017. You are right though, this is a significantly higher RoR than a Z-table would predict because of the very top-heavy payouts.
So OP, a $4000 roll should be fine, but you will have a small risk of bust if you don't move stakes at all.
And thanks for the code! Now I think I'm going re-run the optimal play probabilities on that VP machine that lucky ass Huck Seed hit on (it had about a 0.6% player advantage), and see what his RoR is with a $1M roll (i.e. 2000 betting units). Before you threw up this code, I just made stat estimates on: "If he doesn't hit the Royal Flush"...lol
|
|
|
08-31-2011, 05:37 PM
|
#12
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
I'm bumping this to ask for some help. I'm trying to generalize the function I wrote to be used by anyone for any tournament style RoR problem.
Here is the updated function:
Code:
RoR.sim <- function(prizes, probs, startBR=100, winAmt=5*startBR, sims=1000) {
if(sum(probs) != 1) {stop("Finish probabilities do not total 1.00. Please adjust input probabilities.")}
if(length(prizes) != length(probs)) {stop("prizes and probs must be the same length (have the same number of elements).")}
BI <- -min(prizes)
draws <- probs*10^(max(nchar(round(probs,6)))-2)
finishdist <- rep(prizes, draws)
ROI <- sum(finishdist) / (-1*min(finishdist)*length(finishdist))
if(sims==FALSE) {tradRoR <- exp(-2*ROI*startBR/var(finishdist))
out <- rbind("ROI %"=ROI, "Traditional RoR"=tradRoR)
colnames(out) <- "Results"
return(out)
}
res <- rep(NA, sims)
print("Simulating...please wait")
for (i in 1:sims) {
BR <- startBR
if(i == .25*sims) {print("25% of sims complete.")}
if(i == .5*sims) {print("50% of sims complete.")}
if(i == .75*sims) {print("75% of sims complete.")}
while(BR >= BI & BR < winAmt) {
BR <- BR + sample(prizes, 1, T, prob=probs)
}
res[i] <- BR
}
tradRoR <- exp(-2*ROI*startBR/var(finishdist))
out <- rbind(sims, ROI, tradRoR, sum(res < BI) / sims, sum(res >= winAmt) / sims)
rownames(out) <- c("Sims", "ROI %", "Traditional Ruin Prob.", "Simulated Ruin Prob.", "Simulated Win Prob.")
colnames(out) <- "Results"
return(out)
}
I've been testing other situations than the one we began with here. For example, consider an 9 person STT with the following prize structure and finish probabilities.
Code:
STTprizes.stars <- c(34, 16, 7, -11)
STTprob.stars <- c(.15, .13, .11, .61)
When I run the following code though (using that prize structure and finish distribution) which includes a 110 unit starting bankroll (10 buyins) I get wildly different RoRs between the simulated RoR and the traditional RoR (traditional RoR is 91.7%, while simulated RoR is only around 39%). What the heck is going on here?
RoR.sim(STTprizes.stars, STTprob.stars2, startBR=110, winAmt=1100)
|
|
|
08-31-2011, 07:26 PM
|
#13
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
Here are some other results that have me concerned:
Consider a HUSNG that costs $10.50 to enter and the winner get $20 (i.e. makes $9.50). So you either make $9.50 or lose $10.50.
Now consider the following win-rates: 55%, 54%, 53%, 52%, 51%, 50%, and 49% and starting with a bankroll of 10 buyins.
When I apply the function above I get the following risk of ruin results (10,000 sims):
Code:
ROI % Trad % Sim %
4.76 90.48 36.31
2.86 94.20 53.15
0.95 98.03 72.70
-0.95 102.00 88.15
-2.86 106.12 95.90
-6.67 114.87 99.83
Things to notice include the huge differences between the simulated ruin percentage and the traditional ruin percentage, especially when the ROI is quite good (winning 55% of the time is probably pretty good for headsup, I'm not really sure though). The other thing to notice is that the traditional RoR just gets it wrong when your ROI is negative providing estimates of over 100% chance that you will go broke.
|
|
|
08-31-2011, 08:18 PM
|
#14
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
Here is a a bit more about these HU situations. Obviously there are massive differences between these results. In the simulation you stop when you reach 50 buyins, so I wondered if that might be the problem (so I made it higher), but that doesn't really make any difference because it is so hard to go broke once you are already that high.
Maybe the problem is in the computation of the variance for the traditional ROR? I'm using the N-1 in the denominator and perhaps I should be using N? I'm not sure. Either way, I doubt changing the variance by that amount would make a difference as large as this.
Basically you would be saying to someone who is very good at HUSNGs (a 60% winner) that they have a 75% chance of going broke with 10 Buyins if you used the traditional formula, but only a 5% chance if you used the simulation.
Code:
Win% ROI% Trad. ROR% Sim. ROR%
60 14.285714 75.48396 4.98
59 12.380952 76.64246 7.47
58 9.668110 81.40758 11.20
57 7.744108 84.89049 16.19
56 6.666667 86.88151 24.35
55 4.761905 90.48374 36.29
54 2.857143 94.19693 53.50
53 0.952381 98.03246 72.03
52 -0.952381 102.00297 88.12
51 -2.857143 106.12249 96.13
50 -4.761905 109.41743 99.15
49 -6.666667 114.87283 99.81
48 -8.571429 119.54056 99.98
47 -10.476190 124.43172 100.00
46 -12.380952 129.57089 100.00
45 -14.285714 134.98588 100.00
|
|
|
09-03-2011, 10:44 AM
|
#15
|
|
Carpal \'Tunnel
Join Date: Jun 2005
Location: Psychology Department
Posts: 6,793
|
Re: Standard deviation and risk of ruin help
Thanks to Bruce's help, I was able to fix the problem. Here are the results for the HUSNGs now:
Code:
RoR.sim <- function(prizes, probs, startBR=100, winAmt=5*startBR, sims=1000) {
if(sum(probs) != 1) {stop("Finish probabilities do not total 1.00. Please adjust input probabilities.")}
if(length(prizes) != length(probs)) {stop("prizes and probs must be the same length (have the same number of elements).")}
BI <- -min(prizes)
ROI <- sum(prizes*probs) / BI
VAR <- sum(prizes^2 * probs) - ROI^2
if(sims==FALSE) {tradRoR <- exp(-2*ROI*BI*startBR/VAR)
out <- rbind("ROI %"=ROI, "Traditional RoR"=tradRoR)
colnames(out) <- "Results"
return(out)
}
res <- rep(NA, sims)
print("Simulating...please wait")
for (i in 1:sims) {
BR <- startBR
if(i == .25*sims) {print("25% of sims complete.")}
if(i == .5*sims) {print("50% of sims complete.")}
if(i == .75*sims) {print("75% of sims complete.")}
while(BR >= BI & BR < winAmt) {
BR <- BR + sample(prizes, 1, T, prob=probs)
}
res[i] <- BR
}
tradRoR <- exp(-2*ROI*BI*startBR/VAR)
out <- rbind(sims, BI, startBR/BI, ROI*100, sqrt(VAR), tradRoR*100, (sum(res < BI) / sims)*100, (sum(res >= winAmt) / sims)*100)
rownames(out) <- c("Sims", "BuyIn", "BR (in Buyins)", "ROI %", "SD", "Trad. Ruin %", "Sim. Ruin %", "Sim. Win %")
colnames(out) <- "Results"
return(out)
}
Code:
Win% ROI% Trad. ROR% Sim. ROR%
60 14.285714 4.048706 4.92
59 12.380952 6.244850 7.50
58 10.476190 9.614745 11.08
57 8.571429 14.776531 16.57
56 6.666667 22.669143 23.97
55 4.761905 34.716376 36.17
54 2.857143 53.073663 52.39
53 0.952381 80.998644 72.59
52 -0.952381 123.406755 88.12
51 -2.857143 187.702916 96.16
50 -4.761905 285.024580 99.09
49 -6.666667 432.096772 99.78
48 -8.571429 653.996240 99.95
47 -10.476190 988.264102 100.00
46 -12.380952 1491.015824 100.00
45 -14.285714 2246.005324 100.00
As you can see, the results for the traditional RoR formula and the simulated formula are quite similar except when the ROI becomes negative (52% win percentage HU). Of course if you are -EV at a game, it is assured that you will lose, but your actual risk of ruin cannot be higher than 100%. If those numbers are adjusted (down) to 100% the results mirror each other again.
|
|
|
| Thread Tools |
|
|
| Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 01:38 PM.
|