1

I am using the below code to find how many iterations it takes for the confidence interval to become approximately 25. However, when I run it it stops with interval lengths which do not fit the criteria. They are close, but not between 24.99 and 25.01.

counter <- 0
r <- 50
while((r-25)>0.01){
    counter <- counter + 1
    a <- replicate(500,profit())
    CI_l <- mean(a) - (sd(a)/sqrt(500))*qnorm(0.975)
    CI_u <- mean(a) + (sd(a)/sqrt(500))*qnorm(0.975)
    r <- CI_u-CI_l
}
cat("It took ", counter, " tries to get to an interval of", r)

I am sure that there are also easier ways to do this but my main concern is whether R is doing something wrong or I am.

Matt_1448
  • 13
  • 2
  • 1
    Please edit your question to ensure reproducibility. `Error in profit() : could not find function "profit"` – jpsmith Dec 17 '22 at 13:28

1 Answers1

1

When r is well below 25, then (r-25) is well below 0.01, therefore the while condition is false and it ends.

r <- 1
(r-25)
# [1] -24
(r-25) > 0.01
# [1] FALSE

Use abs(.),

abs(r-25) > 0.01
# [1] TRUE

leading to

while(abs(r-25) > 0.01){
  # ...
}

I applaud the use of tolerance in a test of inequality; often the first attempt is while (r != 25), but according to Why are these numbers not equal? and R FAQ 7.31 it may never occur (even if r is very close to 25).

r2evans
  • 141,215
  • 6
  • 77
  • 149