I'm working on a problem (using R) which involves estimating the number of failures in a population of components. I have information on the number of components that were added to the population in each month & the number of failures in each month (over a period of 28 months). Of course I also know age of any component at any given time (in days). This diagram gives an idea of the current age-profile of the population. The failures are included in red (they occur rarely).

enter image description here

Here is a histogram with the age-profile of the failed components enter image description here

It appears that failure is approx. equally likely at any time (the diagram above suggests that most failures occur in the early stages, < 250 days, but the population contains many more "young" components than old)

Here is info on how the population developed over time:


I want to predict how many failures will occur in the next 3 months, with a confidence interval. I tried to fit a Weibull distribution but I'm not sure it's so suitable given how few failures occur. Are there maybe better (non-parametric perhaps?) methods available that might allow me to estimate the number of failures in the next 3 months? I expect the population to grow in the next 3 months also, if I could allow for this in the estimation that would be even better. Thanks in advance :)

EDIT Adding the full dataset here
EDIT #2 I returned to the Weibull distribution after looking at some survival function graphs & realising that the components showed a slight wearing out behaviour. I also discovered that the Weibull was suitable for handling cases with relatively few failures. Below is the Kaplan-Meier survival curve. It's clear that the curve begins to dip a bit around the 600 day mark.enter image description here

I then fit a Weibull distribution to the data using the survival package in R.

srFit_weibull <- survreg(Surv(age, delta) ~ 1, dist="weibull")

Where delta is 1 for events, i.e failures & 0 otherwise (I've added delta to my original dataset). Inspecting srFit_weibull I get the parameters.

Scale= 0.8101698 

Now, from this answer I need to convert these parameters in order to get the cumulative distribution function (cdf), i.e. F(t)

$\beta = 1/0.8101698 = 1.23$
$\eta = exp(9.822805) = 18449.73$

And the cdf F(t) = $1 - \exp(-(\frac{t}{\eta})^\beta)$

Now my question is
(i) with F(t) how do I get an estimate, with confidence interval, of how many failures will occur in the next 3 months within this current population? I've read that the number of failures is simply $n*F(t)$ but I'm not sure if this holds in my case (as the population contains components of varying ages & the components exhibit a wearing out behaviour)

(ii) If I add 2000, 2200 & 2500 new components to the population over the next 3 months how can I get an estimate, with confidence interval, of how many components will break over the coming 3 months?

  • $\begingroup$ A couple comments: 1.) that dataset alone is insufficient: it does not include the current age of the components 2.) are implying you are interested in seeing how reliably changes over time (another thought would be to see if it changes with number of active components)? $\endgroup$
    – Cliff AB
    Jan 9, 2016 at 23:41
  • $\begingroup$ i) I'll put together a sample data set (the original has ~ 20k elements) to clear this up ii) I'm not currently interested in tracking reliability over time, just predicting for the next 3 months (allowing for the fact that the population of components will increase over this period) $\endgroup$
    – Octave1
    Jan 10, 2016 at 14:09
  • $\begingroup$ @CliffAB I've added the full dataset $\endgroup$
    – Octave1
    Jan 11, 2016 at 20:06
  • $\begingroup$ your question seems to indicate that you are interested in modeling change in time, ie "I expect the population to grow in the next 3 months also, if I could allow for this...". But your data has no information about current time, or current components in system. $\endgroup$
    – Cliff AB
    Jan 11, 2016 at 20:56
  • $\begingroup$ the age column in the dataset represents the current age of the component for censored observations & the age at failure for uncensored observations. Sorry if this was unclear $\endgroup$
    – Octave1
    Jan 11, 2016 at 21:06

1 Answer 1


I'll read quite a bit into your problem, so please correct me if I over-read.

You have components produced in a manufacturing process, and these are indistinguishable (lacking a lot number or any other such feature), so failures inform you only about 'the component' in general, and not specific groups of components. When failures occur, some cost is incurred that you need to prepare for; maybe, for example, some kind of urgent service is required to replace the failed part, and you need to allocate a sufficient pool of 24/7 service personnel to meet the anticipated workload.

Your analysis is divided into 2 stages. In the first stage, you characterize the survival function $S(t) \equiv 1-F(t)$ of the component. You could consider this stage the 'engineering' stage. (Consider that this is the sort of thing you might even be able to read off a suitably detailed 'spec sheet' for the component.) In the second stage, you want do the 'operations research' (or, simply, 'business') side of the analysis, and you want to estimate the service-cost of a planned schedule of deployment.

It sounds to me as if the 'engineering' stage of the analysis is already done, and you are reasonably happy with your characterization of the failure behavior of this component, using a Weibull distribution. The 'business' side of the analysis might profitably be prototyped in a spreadsheet before you implement it in R.

Consider first the expected number of failures at some time $T$, 3 months in the future. The relevant calculation is:

$$ \Sigma_{i=1}^{N} F(T-t_i), $$

where $i$ ranges over all the components $\{1,..,N\}$ you are planning to deploy before some date $T$ (say, 3 months into the future as per your expressed concern), and the $t_i$ are the times at which each component were/will be deployed (where $t_i<0$ for an already-deployed component). This is just the sum (over all the components that will be fielded as of $T$) of the probability that the component will fail by time $T$. The spreadsheet would have one row for every component, and 2 columns: one column for the (past or planned future) deployment date $t_i$; a second column with $p_i(T) \equiv F(T-t_i)$, the probability that component will fail by time $T$.

Your desire for a confidence interval around this expectation essentially means you want to know the distribution of the number of failures by time $T$. To me, the obvious way to do this would be by a simulation: Add another M=200 columns to the spreadsheet -- titled 'rep1', 'rep2', ..., 'rep200'. Fill each of these with 0/1 values according to random Bernoulli draws with probabilities $p_i$ in column 2 of the spreadsheet. At the bottom of this big $N \times M$ grid, sum the columns to get a row of failure counts $n_{rep}$. Plot a histogram of that row. Sort the row, and pick off the 10th and 190th elements, and say, "If our Weibull time-to-failure model is correct, then we have a 95% chance of seeing between $n_{10th}$ and $n_{190th}$ failures in the next 3 months."

I should note that, because your failures are so rare, I felt entitled to ignore the possibility that a component replaced by the service department will subsequently fail. The analysis I've suggested cannot be extended to a period $T$ comparable to the mean component life.

Finally, you should keep in your back pocket the simple, exponential decay approximation to your problem, in which each component acts like a radioactive atom with a constant failure rate. Making time thus homogeneous introduces much simplicity and enables closed-form solutions that you can (and should) use to check any result you get from your Weibull model.

  • $\begingroup$ Thanks very much for the answer, info regarding the simulation is great (this had totally slipped mind) & also makes lots of sense to use the exponential for sanity checking (I had considered using it for getting a rough confidence interval). When I have a chance I'll come back with greater detail on what I came up with while working on this problem $\endgroup$
    – Octave1
    Jan 19, 2016 at 14:49
  • $\begingroup$ You're most welcome, Octave1; thank you for the great question. And following up with your own solution would rounding-out this discussion perfectly. $\endgroup$ Jan 20, 2016 at 13:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.