From 4e8aec8dc6b4fce09d14be4529b7a1fd8774fe56 Mon Sep 17 00:00:00 2001 From: Simon Whatley Date: Tue, 9 Jun 2026 17:46:02 +0100 Subject: [PATCH 1/8] Impact of concurrent and consecutive tobacco smoking on LLP and PLCO risk inputs --- .../smoking-overlap-risk-calculator-impact.md | 186 ++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 docs/smoking-overlap-risk-calculator-impact.md diff --git a/docs/smoking-overlap-risk-calculator-impact.md b/docs/smoking-overlap-risk-calculator-impact.md new file mode 100644 index 0000000..9bd0c81 --- /dev/null +++ b/docs/smoking-overlap-risk-calculator-impact.md @@ -0,0 +1,186 @@ +# Impact of concurrent and consecutive tobacco smoking on LLP and PLCO risk inputs + +This note looks at how smoking cigarettes and roll-ups at the same time, rather than one after the other, can affect lung cancer risk scores in the LLP and PLCO risk calculators. + +It is not clinical guidance. It is a modelling note for the v4.3 prototype questions. + +## Summary + +Concurrent smoking means the person smokes more tobacco in the same calendar years. Consecutive smoking means the person smokes for more calendar years, but not necessarily more tobacco overall. + +For risk calculators this matters because: + +- **LLP/LLPv2 is mainly sensitive to smoking duration**, not separate daily quantities. If 2 tobacco products overlap, the overlapping years should usually be counted once, not once per product. +- **PLCOm2012 is sensitive to both smoking intensity and smoking duration**. If 2 tobacco products overlap, the daily cigarette-equivalent amount should be added together for those overlapping years. + +For the v4.3 prototype, this means we should avoid simply adding the number of years for each selected tobacco type. That would double-count overlapping periods. + +## What v4.3 asks + +The v4.3 prototype asks: + +- whether someone has ever smoked tobacco +- the types of tobacco smoked for 1 year or longer +- for each selected tobacco type: + - age started smoking that type + - age quit smoking that type, where relevant + - stopped periods of 1 year or longer + - smoking frequency + - smoking quantity + - whether the amount changed over time + +This supports a better calculation than a single "years smoked" field, because it can identify overlap between tobacco types. + +One limitation is that the prototype asks roll-up quantity as bands of grams of rolling tobacco, not as a number of roll-ups. For this worked example, I use the product decision that **1 roll-up is equivalent to 2 cigarettes**. + +## Calculator inputs affected + +### LLP and LLPv2 + +LLP uses smoking duration as a risk factor. The original LLP model groups smoking duration into bands. Published coefficients for smoking duration include: + +| Smoking duration | Model coefficient | +| --- | ---: | +| Never | 0 | +| 1 to 19 years | 0.769 | +| 20 to 39 years | 1.452 | +| 40 to 59 years | 2.507 | +| 60 years or more | 2.724 | + +LLPv2 was adapted for UK lung screening use. It includes smoking duration and treats cigar and pipe smoking as conferring an identical risk to cigarette smoking. NHS England's Targeted Lung Health Checks protocol lists LLPv2 factors including age, gender, smoking duration, respiratory conditions, asbestos exposure, previous malignancy and family history. + +For concurrent tobacco use, the smoking duration input should be the **union of smoking years**, not the sum of per-product durations. + +### PLCOm2012 + +PLCOm2012 estimates 6-year lung cancer risk. The smoking inputs are: + +- smoking status +- average number of cigarettes smoked per day +- duration smoked in years +- years since quitting + +The published implementation uses smoking intensity and duration separately, rather than using pack-years alone. Because of that, 2 histories with the same pack-years can produce different PLCOm2012 scores if one has higher intensity over fewer years and the other has lower intensity over more years. + +For concurrent tobacco use, the smoking intensity input should be the **sum of cigarette-equivalent tobacco used in the same period**. + +## Worked example: cigarettes and roll-ups + +Assume: + +- current age: 65 +- current smoker +- White ethnicity/race input for PLCOm2012 +- education level: 4 +- BMI: 27 +- no COPD +- no personal cancer history +- no family history of lung cancer +- no quit time, because the person currently smokes +- 1 roll-up = 2 cigarettes + +Smoking pattern: + +- cigarettes: 10 cigarettes per day +- roll-ups: 5 roll-ups per day +- roll-up equivalent: 5 roll-ups x 2 = 10 cigarettes per day + +So when cigarettes and roll-ups are smoked concurrently: + +```text +total cigarette-equivalent intensity = 10 + (5 x 2) + = 20 cigarettes per day +``` + +## Comparing concurrent and consecutive use + +To isolate the effect of overlap, compare 2 histories with the same total cigarette-equivalent exposure: + +| Scenario | History | Calendar smoking duration | Average cigarette-equivalent intensity | Pack-years | +| --- | --- | ---: | ---: | ---: | +| Concurrent | 10 cigarettes/day and 5 roll-ups/day for 15 years | 15 years | 20/day | 15 | +| Consecutive | 10 cigarettes/day for 15 years, then 5 roll-ups/day for 15 years | 30 years | 10/day | 15 | + +Both histories have the same total cigarette-equivalent exposure. If we express that exposure as pack-years, they both equal 15 pack-years. + +Pack size is only needed for the pack-year conversion. It is not needed if the calculation uses cigarette-equivalents per day and smoking duration directly. + +In this comparison, pack-years means: + +```text +(cigarette-equivalents smoked per day / 20 cigarettes in a pack) x smoking duration in years +``` + +```text +concurrent pack-years = (20 / 20) x 15 = 15 +consecutive pack-years = (10 / 20) x 30 = 15 +``` + +But the risk models do not treat them identically. + +## LLP impact + +Using the original LLP smoking-duration bands: + +| Scenario | Smoking duration input | LLP smoking-duration band | Smoking-duration coefficient | +| --- | ---: | --- | ---: | +| Concurrent | 15 years | 1 to 19 years | 0.769 | +| Consecutive | 30 years | 20 to 39 years | 1.452 | + +In LLP, the consecutive history has the higher smoking-duration contribution because it spans more calendar years. The concurrent history should not be counted as 30 years just because there are 15 years of cigarettes and 15 years of roll-ups. Those years overlap. + +If overlapping product histories were summed incorrectly, the concurrent example would be moved from the 1 to 19 year band to the 20 to 39 year band. That would overstate the smoking-duration part of the LLP score. + +## PLCOm2012 impact + +Using the PLCOm2012 formula with the assumptions above: + +| Scenario | PLCO smoking intensity input | PLCO duration input | PLCOm2012 6-year risk | +| --- | ---: | ---: | ---: | +| Concurrent | 20 cigarettes/day | 15 years | 1.35% | +| Consecutive | 10 cigarettes/day | 30 years | 0.88% | + +In this example, PLCOm2012 gives the concurrent history the higher score, despite the shorter duration, because its smoking-intensity term is non-linear and the jump from 10 to 20 cigarettes per day is large enough to outweigh the longer duration in the consecutive example. + +This is why a pack-year-only transformation is not enough for PLCOm2012. The 2 scenarios both equal 15 pack-years, but they produce different PLCOm2012 scores. + +## Practical implication for v4.3 + +For someone who smokes cigarettes and roll-ups, we should calculate a calendar timeline: + +1. Convert each tobacco type to a cigarette-equivalent amount. +2. For each calendar year, add together the cigarette-equivalent amounts smoked in that year. +3. Count smoking duration as the number of calendar years with any qualifying smoking. +4. Derive average cigarettes per day across those smoking years for PLCOm2012. +5. Use the calendar duration, not the sum of product durations, for LLP/LLPv2. + +For the example: + +```text +Concurrent: +15 calendar years with smoking +20 cigarette-equivalents per day + +Consecutive: +30 calendar years with smoking +10 cigarette-equivalents per day +``` + +## Critique of this answer + +This answer is useful for explaining the direction of impact, but it has limitations: + +- It uses a simplified 2-product example and assumes stable daily use over whole years. +- It uses the original LLP published smoking-duration bands to explain the effect. LLPv2 and programme implementations may have operational details that are not fully visible in public calculator documentation. +- It assumes 1 roll-up equals 2 cigarettes because that was specified for this analysis. The prototype currently asks rolling tobacco quantity in grams, so an implementation would need a reliable conversion from grams or bands to cigarette-equivalent values. +- It calculates PLCOm2012 for a specific baseline person. Changing age, BMI, ethnicity/race, education, COPD, cancer history or family history changes the absolute percentages, although the overlap issue remains. +- It does not address changed smoking amounts over time beyond the simple concurrent/consecutive comparison. Real histories may need year-by-year segments. + +## Sources + +- NHS England, [Standard protocol prepared for the Targeted Lung Health Checks Programme](https://www.england.nhs.uk/wp-content/uploads/2019/02/B1646-standard-protocol-targeted-lung-health-checks-programme-v2.pdf), lists LLPv2 and PLCOm2012 thresholds and factors. +- Cassidy et al., [The LLP risk model: an individual risk prediction model for lung cancer](https://pmc.ncbi.nlm.nih.gov/articles/PMC2361453/), describes the original LLP model and smoking-duration coefficients. +- Raji et al., [Predictive Accuracy of the Liverpool Lung Project Risk Model](https://pmc.ncbi.nlm.nih.gov/articles/PMC3723683/), validates the LLP model and publishes smoking-duration coefficients. +- NIHR Journals Library, [Details of the Liverpool Lung Project risk model version 2](https://www.ncbi.nlm.nih.gov/books/NBK362751/?report=printable), describes LLPv2 adaptations used in UKLS. +- Tammemagi et al., [Selection Criteria for Lung-Cancer Screening](https://pmc.ncbi.nlm.nih.gov/articles/PMC3929969/), describes PLCOm2012 predictors and the handling of smoking intensity and duration. +- resplab, [PLCOm2012 R implementation](https://rdrr.io/github/resplab/PLCOm2012/src/R/plcom2012.R), gives the formula used for the PLCOm2012 worked calculation. From bc4678a56f18c002b31a79718233348181d14ac7 Mon Sep 17 00:00:00 2001 From: Simon Whatley Date: Tue, 9 Jun 2026 20:32:36 +0100 Subject: [PATCH 2/8] Add LLPv2 impact --- .../smoking-overlap-risk-calculator-impact.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/smoking-overlap-risk-calculator-impact.md b/docs/smoking-overlap-risk-calculator-impact.md index 9bd0c81..9688e46 100644 --- a/docs/smoking-overlap-risk-calculator-impact.md +++ b/docs/smoking-overlap-risk-calculator-impact.md @@ -51,6 +51,8 @@ LLPv2 was adapted for UK lung screening use. It includes smoking duration and tr For concurrent tobacco use, the smoking duration input should be the **union of smoking years**, not the sum of per-product durations. +For LLPv2, cigarette-equivalent quantity is useful for normalising different products into a consistent tobacco exposure, but the public LLPv2 descriptions do not expose a separate cigarettes-per-day or pack-years term equivalent to PLCOm2012. The main overlap issue is therefore duration: how many calendar years the person smoked any relevant tobacco. + ### PLCOm2012 PLCOm2012 estimates 6-year lung cancer risk. The smoking inputs are: @@ -131,6 +133,26 @@ In LLP, the consecutive history has the higher smoking-duration contribution bec If overlapping product histories were summed incorrectly, the concurrent example would be moved from the 1 to 19 year band to the 20 to 39 year band. That would overstate the smoking-duration part of the LLP score. +## LLPv2 impact + +For LLPv2, the analysis changes in 2 ways: + +1. LLPv2 broadens what counts in the smoking history. The UKLS documentation says LLPv2 added pipes and cigars alongside cigarettes and treated cigar and pipe smoking as conferring an identical risk to cigarette smoking. +2. LLPv2 does not appear, from public documentation, to use a separate intensity term like PLCOm2012. That means concurrent smoking does not increase the LLPv2 score simply because the person smoked more cigarette-equivalents per day in the same years. + +For the worked example: + +| Scenario | Calendar smoking duration | Cigarette-equivalent intensity | LLPv2 smoking impact | +| --- | ---: | ---: | --- | +| Concurrent | 15 years | 20/day | Lower duration contribution | +| Consecutive | 30 years | 10/day | Higher duration contribution | + +So, for LLPv2, the consecutive history is more likely to score higher than the concurrent history because it has more calendar years of smoking. + +If the 2 histories had the same calendar smoking duration, LLPv2 would not distinguish them through intensity in the way PLCOm2012 does. For example, 15 years at 20 cigarette-equivalents per day and 15 years at 10 cigarette-equivalents per day would have the same LLPv2 smoking-duration input, assuming both meet the relevant smoking threshold. + +The NIHR UKLS appendix also says start and stop smoking ages were grouped into 10-year bands for the LLP risk algorithm. That means small differences around age-band boundaries can affect the calculated LLPv2 risk in the live implementation. The public appendix does not provide enough detail to calculate an exact LLPv2 percentage for the worked example here. + ## PLCOm2012 impact Using the PLCOm2012 formula with the assumptions above: From 62465f792a2e4e549af2f9984eae01d8a0cb57a9 Mon Sep 17 00:00:00 2001 From: Simon Whatley Date: Tue, 9 Jun 2026 20:37:50 +0100 Subject: [PATCH 3/8] Add prototype v4.1 and v4.2 commentary --- .../smoking-overlap-risk-calculator-impact.md | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/docs/smoking-overlap-risk-calculator-impact.md b/docs/smoking-overlap-risk-calculator-impact.md index 9688e46..93499d2 100644 --- a/docs/smoking-overlap-risk-calculator-impact.md +++ b/docs/smoking-overlap-risk-calculator-impact.md @@ -2,7 +2,7 @@ This note looks at how smoking cigarettes and roll-ups at the same time, rather than one after the other, can affect lung cancer risk scores in the LLP and PLCO risk calculators. -It is not clinical guidance. It is a modelling note for the v4.3 prototype questions. +It is not clinical guidance. It is a modelling note for the v4.1, v4.2 and v4.3 prototype questions. ## Summary @@ -15,6 +15,8 @@ For risk calculators this matters because: For the v4.3 prototype, this means we should avoid simply adding the number of years for each selected tobacco type. That would double-count overlapping periods. +For v4.1 and v4.2, the issue is different. They collect one overall smoking duration and then ask about each tobacco type's frequency and quantity. That can support LLPv2 if the overall duration means "years when the person smoked any tobacco", but it is not enough to safely distinguish concurrent from consecutive product use for PLCOm2012. + ## What v4.3 asks The v4.3 prototype asks: @@ -33,6 +35,25 @@ This supports a better calculation than a single "years smoked" field, because i One limitation is that the prototype asks roll-up quantity as bands of grams of rolling tobacco, not as a number of roll-ups. For this worked example, I use the product decision that **1 roll-up is equivalent to 2 cigarettes**. +## What v4.1 and v4.2 ask + +The v4.1 and v4.2 prototypes collect smoking duration as a single overall smoking history: + +- age started smoking +- age stopped smoking, where relevant +- total periods stopped smoking for 1 year or longer + +They then collect tobacco type, frequency and quantity for each selected tobacco product. + +This means v4.1 and v4.2 can tell that someone smoked cigarettes and roll-ups, and can collect an amount for each product. They cannot tell whether those products were smoked: + +- at the same time +- one after the other +- partly overlapping +- for different start and stop periods + +So v4.1 and v4.2 cannot build a reliable product-by-product calendar timeline. They rely on the user giving a correct overall calendar duration for all tobacco smoking. + ## Calculator inputs affected ### LLP and LLPv2 @@ -166,6 +187,39 @@ In this example, PLCOm2012 gives the concurrent history the higher score, despit This is why a pack-year-only transformation is not enough for PLCOm2012. The 2 scenarios both equal 15 pack-years, but they produce different PLCOm2012 scores. +## Practical implication for v4.1 and v4.2 + +For LLPv2, v4.1 and v4.2 are probably workable if the single duration answer is treated as the number of calendar years when the person smoked any relevant tobacco. + +For the worked example: + +| Scenario | True history | v4.1/v4.2 duration answer needed for LLPv2 | +| --- | --- | ---: | +| Concurrent | cigarettes and roll-ups for the same 15 years | 15 years | +| Consecutive | cigarettes for 15 years, then roll-ups for 15 years | 30 years | + +For PLCOm2012, v4.1 and v4.2 are riskier. If a calculation simply adds cigarette-equivalent quantities across products and applies the total to the whole smoking duration, it assumes the products were smoked concurrently for the whole period. + +That assumption is correct for the concurrent example: + +```text +20 cigarette-equivalents per day for 15 years +``` + +But it would overstate the consecutive example if it turned this: + +```text +10 cigarette-equivalents per day for 30 years +``` + +into this: + +```text +20 cigarette-equivalents per day for 30 years +``` + +So v4.1 and v4.2 support LLPv2 better than PLCOm2012 for multi-product tobacco histories. They do not collect enough timing detail to reliably distinguish concurrent from consecutive tobacco use when deriving the PLCOm2012 intensity input. + ## Practical implication for v4.3 For someone who smokes cigarettes and roll-ups, we should calculate a calendar timeline: @@ -196,6 +250,7 @@ This answer is useful for explaining the direction of impact, but it has limitat - It uses the original LLP published smoking-duration bands to explain the effect. LLPv2 and programme implementations may have operational details that are not fully visible in public calculator documentation. - It assumes 1 roll-up equals 2 cigarettes because that was specified for this analysis. The prototype currently asks rolling tobacco quantity in grams, so an implementation would need a reliable conversion from grams or bands to cigarette-equivalent values. - It calculates PLCOm2012 for a specific baseline person. Changing age, BMI, ethnicity/race, education, COPD, cancer history or family history changes the absolute percentages, although the overlap issue remains. +- It treats v4.1 and v4.2 as data-capture designs rather than implemented calculator logic. If a downstream calculator made additional assumptions or asked follow-up questions outside the prototype, the impact could change. - It does not address changed smoking amounts over time beyond the simple concurrent/consecutive comparison. Real histories may need year-by-year segments. ## Sources From b4fa1d4d9dc518e7cc8971a745707faec7690965 Mon Sep 17 00:00:00 2001 From: Simon Whatley Date: Wed, 10 Jun 2026 12:06:37 +0100 Subject: [PATCH 4/8] Update content to include gram to roll up calculation --- .../smoking-overlap-risk-calculator-impact.md | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/docs/smoking-overlap-risk-calculator-impact.md b/docs/smoking-overlap-risk-calculator-impact.md index 93499d2..9f4b777 100644 --- a/docs/smoking-overlap-risk-calculator-impact.md +++ b/docs/smoking-overlap-risk-calculator-impact.md @@ -33,7 +33,17 @@ The v4.3 prototype asks: This supports a better calculation than a single "years smoked" field, because it can identify overlap between tobacco types. -One limitation is that the prototype asks roll-up quantity as bands of grams of rolling tobacco, not as a number of roll-ups. For this worked example, I use the product decision that **1 roll-up is equivalent to 2 cigarettes**. +One limitation is that the prototype asks roll-up quantity as bands of grams of rolling tobacco, not as a number of roll-ups. For this worked example, I use these product decisions: + +- 1 roll-up = 0.5g of rolling tobacco +- 1 roll-up = 2 cigarette-equivalents + +This means: + +```text +rolling tobacco cigarette-equivalents per day = (grams per day / 0.5) x 2 + = grams per day x 4 +``` ## What v4.1 and v4.2 ask @@ -100,13 +110,15 @@ Assume: - no personal cancer history - no family history of lung cancer - no quit time, because the person currently smokes -- 1 roll-up = 2 cigarettes +- 1 roll-up = 0.5g of rolling tobacco +- 1 roll-up = 2 cigarette-equivalents Smoking pattern: - cigarettes: 10 cigarettes per day - roll-ups: 5 roll-ups per day -- roll-up equivalent: 5 roll-ups x 2 = 10 cigarettes per day +- rolling tobacco: 5 roll-ups x 0.5g = 2.5g per day +- roll-up cigarette-equivalent: 5 roll-ups x 2 = 10 cigarettes per day So when cigarettes and roll-ups are smoked concurrently: @@ -115,6 +127,20 @@ total cigarette-equivalent intensity = 10 + (5 x 2) = 20 cigarettes per day ``` +The same calculation can be made from grams: + +```text +rolling tobacco cigarette-equivalents = 2.5g x 4 + = 10 cigarettes per day + +total cigarette-equivalent intensity = 10 + 10 + = 20 cigarettes per day +``` + +So the exact worked PLCOm2012 numbers do not change. The new information explains how to derive the same cigarette-equivalent value from grams. + +In v4.3, 2.5g would fall into the "Less than 10g" rolling tobacco answer band. That band is too broad to calculate an exact PLCOm2012 smoking intensity unless the implementation applies a representative value for the band. + ## Comparing concurrent and consecutive use To isolate the effect of overlap, compare 2 histories with the same total cigarette-equivalent exposure: @@ -220,6 +246,14 @@ into this: So v4.1 and v4.2 support LLPv2 better than PLCOm2012 for multi-product tobacco histories. They do not collect enough timing detail to reliably distinguish concurrent from consecutive tobacco use when deriving the PLCOm2012 intensity input. +The grams conversion does not fix this timing problem. It only makes the rolling tobacco amount computable as cigarette-equivalents: + +```text +2.5g rolling tobacco per day x 4 = 10 cigarette-equivalents per day +``` + +v4.1 and v4.2 would still need to know whether that 2.5g per day was smoked during the same years as the cigarettes or during different years. + ## Practical implication for v4.3 For someone who smokes cigarettes and roll-ups, we should calculate a calendar timeline: @@ -242,13 +276,22 @@ Consecutive: 10 cigarette-equivalents per day ``` -## Critique of this answer +For rolling tobacco, the conversion step is: + +```text +grams of rolling tobacco per day x 4 = cigarette-equivalents per day +``` + +If the input is a band, such as "Less than 10g", the implementation needs a clear rule for choosing a representative value before it can calculate PLCOm2012. For LLPv2, the exact gram amount is less important than the calendar duration, assuming the person meets the relevant smoking threshold. + +## Critique This answer is useful for explaining the direction of impact, but it has limitations: - It uses a simplified 2-product example and assumes stable daily use over whole years. - It uses the original LLP published smoking-duration bands to explain the effect. LLPv2 and programme implementations may have operational details that are not fully visible in public calculator documentation. -- It assumes 1 roll-up equals 2 cigarettes because that was specified for this analysis. The prototype currently asks rolling tobacco quantity in grams, so an implementation would need a reliable conversion from grams or bands to cigarette-equivalent values. +- It assumes 1 roll-up equals 0.5g of rolling tobacco and 2 cigarette-equivalents because those values were specified for this analysis. If either conversion changes, the PLCOm2012 intensity examples change. +- The prototype currently asks rolling tobacco quantity in grams bands. A band such as "Less than 10g" does not provide an exact gram value, so an implementation would need a reliable representative value or a more precise input before calculating PLCOm2012. - It calculates PLCOm2012 for a specific baseline person. Changing age, BMI, ethnicity/race, education, COPD, cancer history or family history changes the absolute percentages, although the overlap issue remains. - It treats v4.1 and v4.2 as data-capture designs rather than implemented calculator logic. If a downstream calculator made additional assumptions or asked follow-up questions outside the prototype, the impact could change. - It does not address changed smoking amounts over time beyond the simple concurrent/consecutive comparison. Real histories may need year-by-year segments. From a17a568be90b0ada76ac511d26744b5035127012 Mon Sep 17 00:00:00 2001 From: Simon Whatley Date: Wed, 10 Jun 2026 12:12:18 +0100 Subject: [PATCH 5/8] Reorganise commentary and add prototype data capture section --- .../smoking-overlap-risk-calculator-impact.md | 54 +++++++++++-------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/docs/smoking-overlap-risk-calculator-impact.md b/docs/smoking-overlap-risk-calculator-impact.md index 9f4b777..60c4458 100644 --- a/docs/smoking-overlap-risk-calculator-impact.md +++ b/docs/smoking-overlap-risk-calculator-impact.md @@ -13,11 +13,36 @@ For risk calculators this matters because: - **LLP/LLPv2 is mainly sensitive to smoking duration**, not separate daily quantities. If 2 tobacco products overlap, the overlapping years should usually be counted once, not once per product. - **PLCOm2012 is sensitive to both smoking intensity and smoking duration**. If 2 tobacco products overlap, the daily cigarette-equivalent amount should be added together for those overlapping years. -For the v4.3 prototype, this means we should avoid simply adding the number of years for each selected tobacco type. That would double-count overlapping periods. +For v4.1 and v4.2, the issue is that they collect one overall smoking duration and then ask about each tobacco type's frequency and quantity. That can support LLPv2 if the overall duration means "years when the person smoked any tobacco", but it is not enough to safely distinguish concurrent from consecutive product use for PLCOm2012. -For v4.1 and v4.2, the issue is different. They collect one overall smoking duration and then ask about each tobacco type's frequency and quantity. That can support LLPv2 if the overall duration means "years when the person smoked any tobacco", but it is not enough to safely distinguish concurrent from consecutive product use for PLCOm2012. +For v4.3, the issue changes. It asks duration questions for each selected tobacco type, so we can start to identify overlap. This means we should avoid simply adding the number of years for each selected tobacco type. That would double-count overlapping periods. -## What v4.3 asks +## Prototype data capture + +### v4.1 + +The v4.1 prototype collects smoking duration as one overall smoking history before the tobacco type loop: + +- age started smoking +- age stopped smoking, where relevant +- total periods stopped smoking for 1 year or longer + +It then collects tobacco type, smoking status, frequency, quantity and changed-use details for each selected tobacco product. + +This means v4.1 can tell that someone smoked cigarettes and roll-ups, and can collect an amount for each product. It cannot tell whether those products were smoked: + +- at the same time +- one after the other +- partly overlapping +- for different start and stop periods + +### v4.2 + +The v4.2 prototype keeps the same calculation limitation as v4.1. It groups the duration questions into a `smoking-duration` page and groups frequency and quantity into `tobacco-smoking` pages, but duration is still collected as one overall smoking history before the per-product tobacco loop. + +So v4.2 also relies on the user giving a correct overall calendar duration for all tobacco smoking. It cannot build a reliable product-by-product calendar timeline for concurrent or consecutive tobacco use. + +### v4.3 The v4.3 prototype asks: @@ -33,7 +58,9 @@ The v4.3 prototype asks: This supports a better calculation than a single "years smoked" field, because it can identify overlap between tobacco types. -One limitation is that the prototype asks roll-up quantity as bands of grams of rolling tobacco, not as a number of roll-ups. For this worked example, I use these product decisions: +### Rolling tobacco conversion + +The prototypes ask roll-up quantity as bands of grams of rolling tobacco, not as a number of roll-ups. For this worked example, we use these product decisions: - 1 roll-up = 0.5g of rolling tobacco - 1 roll-up = 2 cigarette-equivalents @@ -45,25 +72,6 @@ rolling tobacco cigarette-equivalents per day = (grams per day / 0.5) x 2 = grams per day x 4 ``` -## What v4.1 and v4.2 ask - -The v4.1 and v4.2 prototypes collect smoking duration as a single overall smoking history: - -- age started smoking -- age stopped smoking, where relevant -- total periods stopped smoking for 1 year or longer - -They then collect tobacco type, frequency and quantity for each selected tobacco product. - -This means v4.1 and v4.2 can tell that someone smoked cigarettes and roll-ups, and can collect an amount for each product. They cannot tell whether those products were smoked: - -- at the same time -- one after the other -- partly overlapping -- for different start and stop periods - -So v4.1 and v4.2 cannot build a reliable product-by-product calendar timeline. They rely on the user giving a correct overall calendar duration for all tobacco smoking. - ## Calculator inputs affected ### LLP and LLPv2 From 130c4cdcfd1387a2d1bb08f56d0f9e5da61a8652 Mon Sep 17 00:00:00 2001 From: Simon Whatley Date: Wed, 10 Jun 2026 14:08:44 +0100 Subject: [PATCH 6/8] Add second worked example for cigarettes and cigars --- .../smoking-overlap-risk-calculator-impact.md | 62 +++++++++++++++++-- 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/docs/smoking-overlap-risk-calculator-impact.md b/docs/smoking-overlap-risk-calculator-impact.md index 60c4458..7311844 100644 --- a/docs/smoking-overlap-risk-calculator-impact.md +++ b/docs/smoking-overlap-risk-calculator-impact.md @@ -58,9 +58,9 @@ The v4.3 prototype asks: This supports a better calculation than a single "years smoked" field, because it can identify overlap between tobacco types. -### Rolling tobacco conversion +### Cigarette-equivalent conversions -The prototypes ask roll-up quantity as bands of grams of rolling tobacco, not as a number of roll-ups. For this worked example, we use these product decisions: +The prototypes ask roll-up quantity as bands of grams of rolling tobacco, not as a number of roll-ups. For the roll-up worked example, we use these product decisions: - 1 roll-up = 0.5g of rolling tobacco - 1 roll-up = 2 cigarette-equivalents @@ -72,6 +72,10 @@ rolling tobacco cigarette-equivalents per day = (grams per day / 0.5) x 2 = grams per day x 4 ``` +For the large cigar worked example, we use this product decision: + +- 1 large cigar = 4 cigarette-equivalents + ## Calculator inputs affected ### LLP and LLPv2 @@ -105,7 +109,7 @@ The published implementation uses smoking intensity and duration separately, rat For concurrent tobacco use, the smoking intensity input should be the **sum of cigarette-equivalent tobacco used in the same period**. -## Worked example: cigarettes and roll-ups +## Worked example 1: cigarettes and roll-ups Assume: @@ -195,7 +199,7 @@ For LLPv2, the analysis changes in 2 ways: 1. LLPv2 broadens what counts in the smoking history. The UKLS documentation says LLPv2 added pipes and cigars alongside cigarettes and treated cigar and pipe smoking as conferring an identical risk to cigarette smoking. 2. LLPv2 does not appear, from public documentation, to use a separate intensity term like PLCOm2012. That means concurrent smoking does not increase the LLPv2 score simply because the person smoked more cigarette-equivalents per day in the same years. -For the worked example: +For the roll-up worked example: | Scenario | Calendar smoking duration | Cigarette-equivalent intensity | LLPv2 smoking impact | | --- | ---: | ---: | --- | @@ -221,11 +225,57 @@ In this example, PLCOm2012 gives the concurrent history the higher score, despit This is why a pack-year-only transformation is not enough for PLCOm2012. The 2 scenarios both equal 15 pack-years, but they produce different PLCOm2012 scores. +## Worked example 2: cigarettes and large cigars + +Use the same baseline person as the first example, but change the tobacco pattern: + +- cigarettes: 10 cigarettes per day +- large cigars: 1 large cigar per day +- large cigar cigarette-equivalent: 1 large cigar x 4 = 4 cigarette-equivalents per day + +So when cigarettes and large cigars are smoked concurrently: + +```text +total cigarette-equivalent intensity = 10 + (1 x 4) + = 14 cigarette-equivalents per day +``` + +To isolate the effect of overlap, compare 2 histories with the same total cigarette-equivalent exposure: + +| Scenario | History | Calendar smoking duration | Average cigarette-equivalent intensity | Pack-years | +| --- | --- | ---: | ---: | ---: | +| Concurrent | 10 cigarettes/day and 1 large cigar/day for 15 years | 15 years | 14/day | 10.5 | +| Consecutive | 10 cigarettes/day for 15 years, then 1 large cigar/day for 15 years | 30 years | 7/day | 10.5 | + +The consecutive average intensity is: + +```text +((10 x 15) + (4 x 15)) / 30 = 7 cigarette-equivalents per day +``` + +Both histories have the same pack-years: + +```text +concurrent pack-years = (14 / 20) x 15 = 10.5 +consecutive pack-years = (7 / 20) x 30 = 10.5 +``` + +For LLP and LLPv2, the impact is the same as the roll-up example. The consecutive history has the higher smoking-duration contribution because it spans 30 calendar years rather than 15. + +Using the PLCOm2012 formula with the same baseline assumptions: + +| Scenario | PLCO smoking intensity input | PLCO duration input | PLCOm2012 6-year risk | +| --- | ---: | ---: | ---: | +| Concurrent | 14 cigarette-equivalents/day | 15 years | 0.92% | +| Consecutive | 7 cigarette-equivalents/day | 30 years | 0.40% | + +If v4.1 or v4.2 simply added the cigarette and large cigar amounts and applied the total to the whole 30-year duration, it could incorrectly treat the consecutive history as 14 cigarette-equivalents per day for 30 years. That would overstate the PLCOm2012 smoking intensity for the consecutive history. + ## Practical implication for v4.1 and v4.2 For LLPv2, v4.1 and v4.2 are probably workable if the single duration answer is treated as the number of calendar years when the person smoked any relevant tobacco. -For the worked example: +The same duration pattern applies to both worked examples. For example: | Scenario | True history | v4.1/v4.2 duration answer needed for LLPv2 | | --- | --- | ---: | @@ -298,7 +348,7 @@ This answer is useful for explaining the direction of impact, but it has limitat - It uses a simplified 2-product example and assumes stable daily use over whole years. - It uses the original LLP published smoking-duration bands to explain the effect. LLPv2 and programme implementations may have operational details that are not fully visible in public calculator documentation. -- It assumes 1 roll-up equals 0.5g of rolling tobacco and 2 cigarette-equivalents because those values were specified for this analysis. If either conversion changes, the PLCOm2012 intensity examples change. +- It assumes 1 roll-up equals 0.5g of rolling tobacco, 1 roll-up equals 2 cigarette-equivalents, and 1 large cigar equals 4 cigarette-equivalents because those values were specified for this analysis. If any conversion changes, the PLCOm2012 intensity examples change. - The prototype currently asks rolling tobacco quantity in grams bands. A band such as "Less than 10g" does not provide an exact gram value, so an implementation would need a reliable representative value or a more precise input before calculating PLCOm2012. - It calculates PLCOm2012 for a specific baseline person. Changing age, BMI, ethnicity/race, education, COPD, cancer history or family history changes the absolute percentages, although the overlap issue remains. - It treats v4.1 and v4.2 as data-capture designs rather than implemented calculator logic. If a downstream calculator made additional assumptions or asked follow-up questions outside the prototype, the impact could change. From 6395806ea75191feb6cc2828263a36dbcc998100 Mon Sep 17 00:00:00 2001 From: Simon Whatley Date: Wed, 10 Jun 2026 14:10:34 +0100 Subject: [PATCH 7/8] Change cigar example to be 1 per week --- .../smoking-overlap-risk-calculator-impact.md | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/docs/smoking-overlap-risk-calculator-impact.md b/docs/smoking-overlap-risk-calculator-impact.md index 7311844..54f861d 100644 --- a/docs/smoking-overlap-risk-calculator-impact.md +++ b/docs/smoking-overlap-risk-calculator-impact.md @@ -230,34 +230,37 @@ This is why a pack-year-only transformation is not enough for PLCOm2012. The 2 s Use the same baseline person as the first example, but change the tobacco pattern: - cigarettes: 10 cigarettes per day -- large cigars: 1 large cigar per day -- large cigar cigarette-equivalent: 1 large cigar x 4 = 4 cigarette-equivalents per day +- large cigars: 1 large cigar per week +- large cigar cigarette-equivalent: 1 large cigar x 4 = 4 cigarette-equivalents per week So when cigarettes and large cigars are smoked concurrently: ```text -total cigarette-equivalent intensity = 10 + (1 x 4) - = 14 cigarette-equivalents per day +large cigar daily average = 4 / 7 + = 0.57 cigarette-equivalents per day + +total cigarette-equivalent intensity = 10 + 0.57 + = 10.57 cigarette-equivalents per day ``` To isolate the effect of overlap, compare 2 histories with the same total cigarette-equivalent exposure: | Scenario | History | Calendar smoking duration | Average cigarette-equivalent intensity | Pack-years | | --- | --- | ---: | ---: | ---: | -| Concurrent | 10 cigarettes/day and 1 large cigar/day for 15 years | 15 years | 14/day | 10.5 | -| Consecutive | 10 cigarettes/day for 15 years, then 1 large cigar/day for 15 years | 30 years | 7/day | 10.5 | +| Concurrent | 10 cigarettes/day and 1 large cigar/week for 15 years | 15 years | 10.57/day | 7.93 | +| Consecutive | 10 cigarettes/day for 15 years, then 1 large cigar/week for 15 years | 30 years | 5.29/day | 7.93 | The consecutive average intensity is: ```text -((10 x 15) + (4 x 15)) / 30 = 7 cigarette-equivalents per day +((10 x 15) + (0.57 x 15)) / 30 = 5.29 cigarette-equivalents per day ``` Both histories have the same pack-years: ```text -concurrent pack-years = (14 / 20) x 15 = 10.5 -consecutive pack-years = (7 / 20) x 30 = 10.5 +concurrent pack-years = (10.57 / 20) x 15 = 7.93 +consecutive pack-years = (5.29 / 20) x 30 = 7.93 ``` For LLP and LLPv2, the impact is the same as the roll-up example. The consecutive history has the higher smoking-duration contribution because it spans 30 calendar years rather than 15. @@ -266,10 +269,10 @@ Using the PLCOm2012 formula with the same baseline assumptions: | Scenario | PLCO smoking intensity input | PLCO duration input | PLCOm2012 6-year risk | | --- | ---: | ---: | ---: | -| Concurrent | 14 cigarette-equivalents/day | 15 years | 0.92% | -| Consecutive | 7 cigarette-equivalents/day | 30 years | 0.40% | +| Concurrent | 10.57 cigarette-equivalents/day | 15 years | 0.60% | +| Consecutive | 5.29 cigarette-equivalents/day | 30 years | 0.17% | -If v4.1 or v4.2 simply added the cigarette and large cigar amounts and applied the total to the whole 30-year duration, it could incorrectly treat the consecutive history as 14 cigarette-equivalents per day for 30 years. That would overstate the PLCOm2012 smoking intensity for the consecutive history. +If v4.1 or v4.2 simply added the cigarette and large cigar amounts and applied the total to the whole 30-year duration, it could incorrectly treat the consecutive history as 10.57 cigarette-equivalents per day for 30 years. That would overstate the PLCOm2012 smoking intensity for the consecutive history. ## Practical implication for v4.1 and v4.2 From f55970792926fe2bc2c89b24274c5c4d8419bbdf Mon Sep 17 00:00:00 2001 From: Simon Whatley Date: Wed, 10 Jun 2026 14:23:13 +0100 Subject: [PATCH 8/8] Add notes on cigarette equivalents --- docs/cigarette-equivalents--quantity.csv | 31 +++++ docs/cigarette-equivalents--time.csv | 37 ++++++ docs/cigarette-equivalents.md | 159 +++++++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 docs/cigarette-equivalents--quantity.csv create mode 100644 docs/cigarette-equivalents--time.csv create mode 100644 docs/cigarette-equivalents.md diff --git a/docs/cigarette-equivalents--quantity.csv b/docs/cigarette-equivalents--quantity.csv new file mode 100644 index 0000000..8be8371 --- /dev/null +++ b/docs/cigarette-equivalents--quantity.csv @@ -0,0 +1,31 @@ +Cigarettes,Rolling tobacco,Small cigar,Medium cigar,Large cigar,Pipe,Cigarillo,Heated tobacco +1,2,1.5,2,4,2.5,2,1 +2,1,1.3,1,0.5,0.8,1,2 +3,1.5,2,1.5,0.75,1.2,1.5,3 +4,2,2.7,2,1,1.6,2,4 +5,2.5,3.3,2.5,1.25,2,2.5,5 +6,3,4,3,1.5,2.4,3,6 +7,3.5,4.7,3.5,1.75,2.8,3.5,7 +8,4,5.3,4,2,3.2,4,8 +9,4.5,6,4.5,2.25,3.6,4.5,9 +10,5,6.7,5,2.5,4,5,10 +11,5.5,7.3,5.5,2.75,4.4,5.5,11 +12,6,8,6,3,4.8,6,12 +13,6.5,8.7,6.5,3.25,5.2,6.5,13 +14,7,9.3,7,3.5,5.6,7,14 +15,7.5,10,7.5,3.75,6,7.5,15 +16,8,10.7,8,4,6.4,8,16 +17,8.5,11.3,8.5,4.25,6.8,8.5,17 +18,9,12,9,4.5,7.2,9,18 +19,9.5,12.7,9.5,4.75,7.6,9.5,19 +20,10,13.3,10,5,8,10,20 +21,10.5,14,10.5,5.25,8.4,10.5,21 +22,11,14.7,11,5.5,8.8,11,22 +23,11.5,15.3,11.5,5.75,9.2,11.5,23 +24,12,16,12,6,9.6,12,24 +25,12.5,16.7,12.5,6.25,10,12.5,25 +26,13,17.3,13,6.5,10.4,13,26 +27,13.5,18,13.5,6.75,10.8,13.5,27 +28,14,18.7,14,7,11.2,14,28 +29,14.5,19.3,14.5,7.25,11.6,14.5,29 +30,15,20,15,7.5,12,15,30 \ No newline at end of file diff --git a/docs/cigarette-equivalents--time.csv b/docs/cigarette-equivalents--time.csv new file mode 100644 index 0000000..b51a753 --- /dev/null +++ b/docs/cigarette-equivalents--time.csv @@ -0,0 +1,37 @@ +Time (mins),Shisha,Chewing tobacco,Dry snuff +Cigarettes / min:,1.25,0.133,0.133 +10,12.5,1.33,1.33 +15,18.75,1.995,1.995 +20,25,2.66,2.66 +25,31.25,3.325,3.325 +30,37.5,3.99,3.99 +35,43.75,4.655,4.655 +40,50,5.32,5.32 +45,56.25,5.985,5.985 +50,62.5,6.65,6.65 +55,68.75,7.315,7.315 +60,75,7.98,7.98 +65,81.25,8.645,8.645 +70,87.5,9.31,9.31 +75,93.75,9.975,9.975 +80,100,10.64,10.64 +85,106.25,11.305,11.305 +90,112.5,11.97,11.97 +95,118.75,12.635,12.635 +100,125,13.3,13.3 +105,131.25,13.965,13.965 +110,137.5,14.63,14.63 +115,143.75,15.295,15.295 +120,150,15.96,15.96 +125,156.25,16.625,16.625 +130,162.5,17.29,17.29 +135,168.75,17.955,17.955 +140,175,18.62,18.62 +145,181.25,19.285,19.285 +150,187.5,19.95,19.95 +155,193.75,20.615,20.615 +160,200,21.28,21.28 +165,206.25,21.945,21.945 +170,212.5,22.61,22.61 +175,218.75,23.275,23.275 +180,225,23.94,23.94 \ No newline at end of file diff --git a/docs/cigarette-equivalents.md b/docs/cigarette-equivalents.md new file mode 100644 index 0000000..4d6b044 --- /dev/null +++ b/docs/cigarette-equivalents.md @@ -0,0 +1,159 @@ +# Cigarette equivalents + +This note summarises the cigarette-equivalent conversion data in: + +- `docs/cigarette-equivalents--quantity.csv` +- `docs/cigarette-equivalents--time.csv` + +It is a modelling reference for converting different tobacco products into cigarette-equivalent amounts. It is not clinical guidance. + +## Quantity-based products + +The quantity CSV uses the `Cigarettes` column as the target cigarette-equivalent amount. The other columns show how much of each product is equivalent to that number of cigarettes. + +For example, the `20` cigarette row gives: + +| Product | Equivalent quantity for 20 cigarettes | +| --- | ---: | +| Cigarettes | 20 cigarettes | +| Rolling tobacco | 10 roll-ups | +| Small cigar | 13.3 small cigars | +| Medium cigar | 10 medium cigars | +| Large cigar | 5 large cigars | +| Pipe | 8 full pipe loads | +| Cigarillo | 10 cigarillos | +| Heated tobacco | 20 heated tobacco sticks | + +These values imply the following cigarette-equivalent factors: + +| Product | Input unit | Cigarette-equivalents per unit | +| --- | --- | ---: | +| Cigarettes | 1 cigarette | 1 | +| Rolling tobacco | 1 roll-up | 2 | +| Small cigar | 1 small cigar | 1.5 | +| Medium cigar | 1 medium cigar | 2 | +| Large cigar | 1 large cigar | 4 | +| Pipe | 1 full pipe load | 2.5 | +| Cigarillo | 1 cigarillo | 2 | +| Heated tobacco | 1 heated tobacco stick | 1 | + +Use this formula for quantity-based products: + +```text +cigarette-equivalents = product quantity x cigarette-equivalents per unit +``` + +If the product is not smoked daily, first calculate the cigarette-equivalent amount for each smoking occasion, then normalise it to an average daily amount if the risk model needs cigarettes per day. + +For example: + +```text +1 large cigar per week = 1 x 4 cigarette-equivalents per week + = 4 / 7 + = 0.57 cigarette-equivalents per day +``` + +## Rolling tobacco and grams + +The prototype asks about rolling tobacco in grams, but the quantity CSV maps rolling tobacco as roll-ups. Use this assumption to convert between them: + +```text +1 roll-up = 0.5g rolling tobacco +``` + +The quantity CSV implies: + +```text +1 roll-up = 2 cigarette-equivalents +``` + +So rolling tobacco can be converted directly from grams: + +```text +roll-ups = grams of rolling tobacco / 0.5 + +cigarette-equivalents = roll-ups x 2 + = (grams of rolling tobacco / 0.5) x 2 + = grams of rolling tobacco x 4 +``` + +Examples: + +| Rolling tobacco | Roll-ups | Cigarette-equivalents | +| ---: | ---: | ---: | +| 0.5g | 1 | 2 | +| 2.5g | 5 | 10 | +| 5g | 10 | 20 | +| 7.5g | 15 | 30 | + +The reverse calculation is: + +```text +grams of rolling tobacco = cigarette-equivalents / 4 +``` + +For example: + +```text +20 cigarette-equivalents = 20 / 4 + = 5g rolling tobacco +``` + +## Time-based products + +The time CSV gives cigarette-equivalents by minutes of use. Its second row defines the cigarette-equivalents per minute: + +| Product | Cigarette-equivalents per minute | +| --- | ---: | +| Shisha | 1.25 | +| Chewing tobacco | 0.133 | +| Dry snuff | 0.133 | + +Use this formula for time-based products: + +```text +cigarette-equivalents = minutes of use x cigarette-equivalents per minute +``` + +Selected examples from the CSV: + +| Time | Shisha | Chewing tobacco | Dry snuff | +| ---: | ---: | ---: | ---: | +| 10 minutes | 12.5 | 1.33 | 1.33 | +| 30 minutes | 37.5 | 3.99 | 3.99 | +| 60 minutes | 75 | 7.98 | 7.98 | +| 120 minutes | 150 | 15.96 | 15.96 | +| 180 minutes | 225 | 23.94 | 23.94 | + +The CSV stores chewing tobacco and dry snuff values to 3 decimal places before display in the minute rows. + +## Applying the conversions + +To calculate a total cigarette-equivalent amount for a smoking period: + +1. Convert each selected tobacco product into cigarette-equivalents. +2. Normalise each product to the same time period, usually an average per day. +3. Add product amounts only where they are smoked during the same calendar period. +4. Keep smoking duration as calendar years with tobacco use, not the sum of per-product durations. + +For example, someone who smokes 10 cigarettes per day and 2.5g rolling tobacco per day has: + +```text +cigarettes = 10 cigarette-equivalents per day + +rolling tobacco = 2.5g x 4 + = 10 cigarette-equivalents per day + +total = 10 + 10 + = 20 cigarette-equivalents per day +``` + +If those products were smoked concurrently, the daily cigarette-equivalent amounts should be added for the overlapping years. If they were smoked consecutively, calculate separate periods before deriving any average intensity. + +## Data notes + +- The v4.1, v4.2 and v4.3 prototype tobacco type lists do not currently include heated tobacco, chewing tobacco or dry snuff. +- Heated tobacco appears in the quantity CSV only. Chewing tobacco and dry snuff appear in the time CSV only. +- The prototype's rolling tobacco question uses gram bands, such as `Less than 10g` and `10g to 30g`. A calculator needs a representative gram value, or a more precise input, before it can calculate an exact cigarette-equivalent amount from those bands. +- The prototype's shisha question uses time bands, such as `Up to 30 minutes` and `30 minutes to 1 hour`. A calculator needs a representative minute value, or a more precise input, before it can calculate an exact cigarette-equivalent amount from those bands. +- The `1` cigarette row in `docs/cigarette-equivalents--quantity.csv` lists rolling tobacco as `2`. That does not match the rest of the rolling tobacco column, where the equivalent roll-up quantity is `cigarettes / 2`. With `1 roll-up = 0.5g` and `1 roll-up = 2 cigarette-equivalents`, the expected equivalent for `1` cigarette would be `0.5` roll-ups, or `0.25g` rolling tobacco.