In medicine patient-years is a popular concept. Example: $100$ patients are followed for $2$ years. In this case, there are $200$ patient-years in total. If there were $8$ myocardial infarctions in the group, the rate would be $8$ MIs per $200$ patient years or $8/200*100= 4$ MIs per $100$ patient-years or $8/200*1000= 40$ per $1,000$ patient years, and so on (see here).

See here for an example where confidence intervals are reported for patient years:

For MGUS patients we estimated a mortality rate of 52 [95% CI 48-56] per 1000 patient-years, whereas for MGRS patients the rate was 29 [14-58] per 1000 patient-years.

How can I get CI for patient-years like this?


Thanks to @EdM for the great answer. There are two problems:

  1. I get other results. The link in the answer suggests to use the Poisson distribution with poisson.test. Doing so for the results above gives me for example:

poisson.test(52, conf.level = 0.95)$conf.int

38.84 to 68.19. But in the source above it is 52 [95% CI 48-56]

  1. The results differ depending on what time frame the rate refers to. For example, if we choose mortality rate per 10,000 patient years instead the CI's change. For mortality rate per 1,000 patient years the CI's overlap (52[38.84-68.19] and 29[19.42-41.65]). For the morality rate per 10,000 patient years the CI's don't overlap (520[476.26-566.68] and 290[257.58-325.37]).
  • $\begingroup$ The first reference you quote is not about comparing patient years (py) but about comparing incidence rates (number per py). Perhaps that is the key search term you are looking for? $\endgroup$ – mdewey Jun 11 '19 at 9:21
  • $\begingroup$ @mdewey I edited the question and added the text. The 2nd source also seems to refer to a rate, namely the mortality rate. But they report the results for "per 1000 patient-years" and this is something I don't understand. So I wonder how to get a value with the CI for py. $\endgroup$ – machine Jun 11 '19 at 9:53
  • $\begingroup$ "I get other results." I don't think your calculation makes sense here (/possible at all), because you don't know how many person-years they had! You only know the rate. What you did (T=1 is the default in poisson.test!) essentially assumes 1 py with 52 deaths. If they had 520 deaths in 10 py (poisson.test( 520, T = 10 )) then the point estimate for the rate is the same (so both is possible), yet the CI is different. $\endgroup$ – Tamas Ferenci Jun 12 '19 at 8:31
  • $\begingroup$ By the way it is rather easy to figure out what could have been the py: round( sapply( 1:20, function( x ) poisson.test( 52*x, T = x )$conf.int ), 0 ), so 11 to 15 is possible. $\endgroup$ – Tamas Ferenci Jun 12 '19 at 8:36
  • $\begingroup$ "The results differ depending on what time frame the rate refers to." Yes, that is just the solution to your question (see above). It is totally logical: more py is analogous to having higher sample size, so of course the sampling variability is lower. $\endgroup$ – Tamas Ferenci Jun 12 '19 at 8:37

They indeed used Poisson distribution ("We calculated crude incidence rates as the number of events divided by the total number of person-years at risk following MGUS diagnosis, and 95% confidence intervals (CIs) were based on a Poisson distribution").

We can infer the likely follow-up times: round( sapply( 1:20, function( x ) poisson.test( 52*x, T = x )$conf.int ), 0 ) so something between 11,000 and 15,000 seems to work for the MGUS group (where we had a mortality rate of 52 [95% CI 48-56] per 1000 patient-years), and round( sapply( seq( 0.1, 1, 0.1 ), function( x ) poisson.test( round( 29*x ), T = x )$conf.int ), 0 ) suggests around 300 py (where the rate was 29 [14-58] per 1000 patient-years).

This seems extremely unbalanced, but so was the sample: they had 2,891 MGUS and 44 MGRS patients. They write that "Overall follow-up time for the 2935 patients was 11,050 person-years" so everything seems to check.

UPDATE: AAh, this whole calculation was unnecessary: they've given the number of deaths! "Of the 2891 MGUS patients 566 (20%) and of the 44 MGRS patients eight (18%) died during follow-up." So we actually know the follow-up time (up to rounding): $566/52=10.9$ in the MGUS group, $8/29=0.28$ in the MGRS (in 1000 py). poisson.test(566,10.9) and poisson.test(8,0.28) checks basically OK (I mean the CIs match the presented ones, with a little difference in the MGRS group), and $10.9+0.28= 11.18$ also checks out more-or-less with their presented overall follow-up time.

(I don't know what is the reason for the difference in the MGRS group; I checked that no follow-up time for which the rate is rounded to 29 will result in the CI they presented in the paper. Perhaps its just a rounding error on their part; my best idea is to write an email to the corresponding author.)

  • $\begingroup$ Thank you so much! "We can infer the likely follow-up times". Why is the rate multiplied by a number and this number used as the T value to get the possible range? Somehow I don't understand the logic behind that. $\endgroup$ – machine Jun 12 '19 at 9:09
  • $\begingroup$ @schwantke I simply iterated on the possible follow-up times (in 1000 py). Then, the number of deaths must be 52 times the follow-up time, so that the rate - which is the number of deaths divided by the follow-up time - is 52, as in the paper. $\endgroup$ – Tamas Ferenci Jun 12 '19 at 9:11

Events per patient-year are calculated as the number of events divided by the number of patient-years. As the number of patient-years is known, the source of variability is in the number of counts.

Infrequent events like those in these studies are often analyzed as if they are sampled from a Poisson distribution. For a Poisson distribution, the mean and the variance are equal so that confidence intervals and p-values can be calculated just from the number of events. There should, however, be some effort made to document that the Poisson model is appropriate for the data set. If time-to-event information is important, then a more complete survival analysis should be performed.

I suspect that the "exacerbation days" were modeled as continuous variables with comparisons done with t-tests, although the details aren't clear from the page you linked. Similar considerations would still apply: the number of patient-years is known, so the variability is simply in the distributions of "exacerbation days" between treatment and control groups.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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