Add confidence intervals to a plot

28 Views Asked by At

I've coded a martingale function, like this:

martingala <- function(bolsa, apuesta, limite, prob) {
  dinero <- bolsa
  betsize <- apuesta
  while(dinero >= betsize & betsize <= limite) {
    roll <- rbinom(1, 1, prob)
    if(roll == 1) {
      dinero <- dinero + betsize
      betsize <- betsize
    } else {
      dinero <- dinero - betsize
      betsize <- betsize * 2
    }
  }
  return(dinero)
}

Then I've coded a plot for the average results for different values of probability, from 0.2 to 0.6 in 0.01 steps, running the function 1000x:

x<- seq(.2, .6, .01)
m <- c()
n <- 1000
for (i in x){
  a <- c(replicate(n, martingala(100, 10, 500, i)))
    m <- c(m, mean(a))
    Up <- mean(a)+1.95*sd(a)/sqrt(n)
    Lo <- mean(a)+1.95-sd(a)/sqrt(n)
    }
plot(m, main = "Martingala probabilidad variable", xlab = "Probabilidad", ylab = "Ganancia media")

Any ideas about how I could add the Confidence Intervals (Up & Lo, respectively) to the plot? Thanks in advance.

1

There are 1 best solutions below

0
jpsmith On BEST ANSWER

There may be something wrong with your math here, but to address the specific coding problem of plotting the CIs - you are not creating a vector for Up and Lo, so they are being overwritten each iteration in the loop and only represent the last value of i (0.6).

In your current code, you can correct that by creating a vector (albeit, growing vectors inside a loop is discouraged) then use lines to plot the CIs:

x <- seq(.2, .6, .01)
m <- c()
n <- 1000
Up <- c() # added
Lo <- c() # added

for (i in x){
  a <- replicate(n, martingala(100, 10, 500, i))
  m <- c(m, mean(a))
  Up <- c(Up, mean(a) + 1.95 * sd(a) / sqrt(n))  # added c()
  Lo <- c(Lo, mean(a) + 1.95 - sd(a) / sqrt(n)) # added c()
}

plot(m, main = "Martingala probabilidad variable", xlab = "Probabilidad", ylab = "Ganancia media")
lines(Up)
lines(Lo)

enter image description here