There are very many styles of nonparametric bootstrap
confidence intervals. I have used several of them,
and I haven't seen a reasonable method for a 95% bootstrap CI
for a population mean that failed to contain the sample mean.
[However, @whuber suggests that a bootstrap CI may not cover the sample mean, if it is based on a small sample from a highly skewed distribution, such as lognormal. Also, @Gada has given a reference about bootstrap CIs that don't contain the population mean.]
You have not said
what method you are using or said how large a sample you have.
So, my only direct comment on
your specific interval is to question whether you should
have done at least 2000 iterations. I agree with @Aksakal that
you should check your implementation of the intended style of CI.
Here are two methods applied to a sample of size $n = 25,$
which is contaminated with three observations from a population with
a much larger mean.
set.seed(1234)
x = c(rexp(22, 1/5), rexp(3, 1/100))
a = mean(x); a
[1] 10.9786
The true population mean (which would be unknown in a real-life
situation) is $\mu = 16.4,$ so I have an 'unlucky' low sample mean.
boxplot(x, horizontal = T)
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/wbfml.png)
My first bootstrap CI uses a deprecated simple quantile method
known to give bad results for highly skewed samples. With $2000$
iterations it gives the 95% CI $(5.07, 19.26),$ which includes
the sample mean (and the population mean).
set.seed(2022)
q = replicate(2000, mean(sample(x,25,rep=T)))
quantile(q, c(.025,.975))
2.5% 97.5%
5.072897 19.260683
A simple method, offering some bias protection, gives
the interval $(2.19, 16.88),$ which contains the sample mean
(and, in spite of bad luck, also the population mean).
set.seed(124)
d = replicate(2000, mean(sample(x,25,rep=T)) - a)
LU = quantile(d, c(.975,.025))
a - LU
97.5% 2.5%
2.194154 16.876843
resample_data()
fromfabricatr
package. $\endgroup$