Weibull Reliability Test Demonstration I'll use the following example to help frame my question. The example comes from example 5 in https://www.weibull.com/pubs/2015_RAMS_right_sample_size.pdf
Example 5: Let's assume that the failure times of a component follow a Weibull distribution with a beta of 2. We need to determine the required number of samples for the test in order to demonstrate a reliability of 80% at 2,000 hours at a confidence level of 90%. The available test duration is 1,500 hours and the maximum number of allowed failures is 1.
I understand how to determine the test duration, in this example. And if I rephrased the question such that I had a set number of samples and needed to determine the test duration, I can do that too.
However, my question is in regards to what happens after the test is executed. Let's say that I in
fact had 32 components tested for 1,500 hours and 31 were un-failed, whereas one failed at 1,000 hours. I would have demonstrated that the reliability requirement is met (80% reliability at 2,000 hours with  90% confidence). But, what is the 90% lower confidence bound on the demonstrated reliability?
Is there a simple way to do this? For the exponential case (Weibull shape = 1) there's an easy formula to get the lower confidence bound (LCB) for the scale parameter based on the total test time and the number of observed failures. Is there something similar for when Weibull shape $\ne$ 1? I assume in this example we are essentially demonstrating the scale parameter is above a specified value (4233.87 in this example as the paper shows) with the shape parameter set to 2. Then if I input that defined shape parameter and the LCB for the scale parameter into the Weibull reliability function at my specified time (2000 hours here) I would see that reliability is greater than 0.80. So essentially, I'm trying to figure out what reliability (or scale value) was demonstrated with the given level of confidence, and set shape value, after my test was actually executed, despite the results demonstrating the requirement was met or not.
 A: I think I was able to answer my own question by creating functions to return the -2 log likelihood (-2LL) of the Weibull distribution and optimizing that, and then finding the likelihood lower confidence bound for the scale parameter by changing the scale parameter such that it changed the -2LL corresponded to the desired change in the chi-square distribution.
Function code is below followed by two examples.
# Return -2LL of Weibull
weibull.mle.fixed.shape <- function(scale, times, cens, shape){
  complete <- which(cens == 0)
  right_cens <- which(cens == 1)
  complete_ll <- dweibull(times[complete],
    shape = shape, scale = scale, log = TRUE)
  cens_ll <- pweibull(times[right_cens],
    shape = shape, scale = scale, lower.tail = FALSE, log = TRUE)
  ll <- sum(c(complete_ll, cens_ll))
  -2*ll
}

# Return difference in Weibull (-2LL - mle) vs chisq percentile
weibull.mle.fixed.shape.lcb <- function(scale, times, cens, shape, mle.ll, alpha){
  complete <- which(cens == 0)
  right_cens <- which(cens == 1)
  complete_ll <- dweibull(times[complete],
    shape = shape, scale = scale, log = TRUE)
  cens_ll <- pweibull(times[right_cens],
    shape = shape, scale = scale, lower.tail = FALSE, log = TRUE)
  ll <- sum(c(complete_ll, cens_ll))
  chisq_cv <- qchisq(1-(alpha*2), 1, lower.tail = TRUE)
  ((-2*ll)-mle.ll) - chisq_cv
}


# Function wrapping the two above functions together,
# optimize/solve for scale MLE, LL at MLE, and scale LCB
weibull.scale.lcb <- function(times = times, cens = cens, shape = 2, alpha, interval = c(4000, 10000), min){
  (scale_mle <- optimize(weibull.mle.fixed.shape,
    times = times, cens = cens, shape,
    interval = interval, maximum = FALSE)$min)

  (mle.ll <- weibull.mle.fixed.shape(times = times, cens = cens, shape = shape, scale_mle))
  (scale_lcb <- uniroot(weibull.mle.fixed.shape.lcb,
    times = times, cens = cens, shape = shape, mle.ll = mle.ll, alpha = alpha,
    interval = c(min, scale_mle))$root)

  return(list(mle = scale_mle, lcb = scale_lcb))
}

# Example 1
times <- c(rep(1500, 31), 1)
cens <- c(rep(1, 31), 0)
ex1 <- weibull.scale.lcb(times = times, cens = cens, shape = 2, alpha=.1, interval = c(4000, 10000), min=1000)
pweibull(2000, shape = 2, scale = ex1$lcb, lower.tail = FALSE)

# Example 2
times <- c(rep(1500, 30), 1499, 1499)
cens <- c(rep(1, 30), 0, 0)
ex2 <- weibull.scale.lcb(times = times, cens = cens, shape = 2, alpha=.1, interval = c(4000, 10000), min=1000)
pweibull(2000, shape = 2, scale = ex2$lcb, lower.tail = FALSE)

