Why I chose this story

I’ve never smoked. However, during my college days in India, I came across the habit of smoking becoming commonplace around me. Many of the students had gone to a different city to study, away from their parents. Several of my friends began smoking out of the coolness factor. Little by little, this became their regular means of communication and many of them can’t stop. I remember them from the first time I met them as having a different look.

A country data set won’t tell me why my friends started and it won’t measure peer pressure. So I was not going to attempt to prove that. I took an alternative approach, however, using open data and the big picture. What is happening to smoking in India? What was the situation in countries that used to smoke many years ago? Has vaping become the norm? The ‘long lag’ in my title; this is because the damage from smoking is only realised many years after the person has taken up the habit. I was wondering whether I see any clues to that in the data.

How to use this report: All charts are interactive. Use the mouse to hover over a point to view its details, zoom by dragging, and hide/show a legend point by clicking on it. Charts 3, 4 and 5 are all interconnected; click any country in any chart and see it in the other two. Double click anywhere white to reset.

Data and preprocessing

I used three independent data sources:

  1. Cigarette sales per adult per day from Our World in Data (Ritchie & Roser, 2023). The original data come from the International Smoking Statistics collection. It covers mostly European and other rich countries, from 1865 to 2015.
  2. Tobacco use and e-cigarette data from the World Health Organization (WHO) Global Health Observatory (World Health Organization, 2026a, 2026b). These are two downloads from the same WHO source. The tobacco file has smoking and tobacco use estimates for 2000 to 2030. The e-cigarette file has the latest survey results for adults.
  3. Lung cancer incidence (trachea, bronchus and lung) from the Global Cancer Observatory (2024), run by the International Agency for Research on Cancer (IARC). I used the age-standardised rate (ASR) per 100,000 people for both sexes.

I chose lung cancer because the World Health Organization (2023) says smoking tobacco is its primary risk factor.

The steps I did in preprocessing are in the code below. The main ones are renaming columns, removing old countries (like USSR), removing zero sales values, and joining the datasets using the three-letter country code (ISO3).

library(tidyverse)
library(plotly)
library(crosstalk)
# loading the four csv files
sales_raw   <- read_csv("sales-of-cigarettes-per-adult-per-day.csv")
tobacco_raw <- read_csv("tobacco_use.csv", guess_max = 20000)
ecig_raw    <- read_csv("E-cigarette.csv", guess_max = 20000)
lung_raw    <- read_csv("dataset-asr-inc-both-sexes-in-2024-trachea-bronchus-and-lung.csv")
# 1. cigarette sales
sales <- sales_raw %>%
  select(country = Entity, iso3 = Code, year = Year, sales = 4) %>%
  # codes starting with OWID are old countries (USSR, Yugoslavia, Czechoslovakia) so I removed them
  filter(!str_starts(iso3, "OWID")) %>%
  # a few early rows for France and Italy have 0 sales which is not real, so I removed them
  filter(sales > 0)
# 2. WHO tobacco use
tobacco <- tobacco_raw %>%
  select(iso3 = SpatialDimValueCode, country = Location, region = ParentLocation,
         year = Period, indicator = Indicator, sex = Dim1,
         value = FactValueNumeric, comment = FactComments) %>%
  mutate(
    # the WHO indicator names are very long so I made shorter names
    measure = case_when(
      str_detect(indicator, "cigarette smoking") ~ "Cigarette smoking",
      str_detect(indicator, "tobacco smoking")   ~ "Any smoked tobacco",
      str_detect(indicator, "tobacco use")       ~ "Any tobacco use (smoked + smokeless)"
    ),
    # WHO writes "This is a projection" in the comment column for modelled values
    projection = if_else(str_detect(comment, "projection") %in% TRUE, "Projection", "Estimate")
  )

# one row per country with its WHO region, I use this to add the region later
regions <- tobacco %>%
  distinct(iso3, country, region)
# 3. WHO e-cigarette use (current use among adults, latest survey)
ecig <- ecig_raw %>%
  filter(Dim1 == "Prevalence of current e-cigarette use among adults (%)") %>%
  filter(Dim2 == "Both sexes", !is.na(FactValueNumeric)) %>%
  select(iso3 = SpatialDimValueCode, ecig = FactValueNumeric)
# 4. lung cancer rates
lung <- lung_raw %>%
  select(iso3 = 5, lung_rate = 8)
# smoking in 2024, both sexes (cigarette smoking, age-standardised)
smoke_2024 <- tobacco %>%
  filter(year == 2024, sex == "Both sexes", measure == "Cigarette smoking") %>%
  select(iso3, country, region, smoking = value)

# the peak year of cigarette sales in each country
peak_sales <- sales %>%
  group_by(iso3) %>%
  slice_max(sales, n = 1, with_ties = FALSE) %>%
  ungroup() %>%
  select(iso3, peak_country = country, peak_year = year, peak_sales = sales)

# table for chart 3 (past sales vs lung cancer today)
past_vs_now <- peak_sales %>%
  inner_join(lung, by = "iso3") %>%
  left_join(regions, by = "iso3")

# table for charts 4 and 5 (smoking, lung cancer and e-cigarettes today)
now_data <- smoke_2024 %>%
  left_join(lung, by = "iso3") %>%
  left_join(ecig, by = "iso3")
# summary
data_summary <- tibble(
  Dataset = c("Cigarette sales", "WHO tobacco use", "WHO e-cigarettes (current use)", "Lung cancer rate"),
  Rows = c(nrow(sales), nrow(tobacco), nrow(ecig), nrow(lung)),
  Countries = c(n_distinct(sales$iso3), n_distinct(tobacco$iso3), n_distinct(ecig$iso3), n_distinct(lung$iso3))
)
knitr::kable(data_summary, caption = "Size of each dataset after cleaning")
Size of each dataset after cleaning
Dataset Rows Countries
Cigarette sales 2683 48
WHO tobacco use 16533 167
WHO e-cigarettes (current use) 70 70
Lung cancer rate 186 186
# I used these numbers to check the values that I wrote in the text
india_male_2000   <- tobacco %>% filter(iso3 == "IND", sex == "Male", measure == "Cigarette smoking", year == 2000) %>% pull(value)
india_male_2024   <- tobacco %>% filter(iso3 == "IND", sex == "Male", measure == "Cigarette smoking", year == 2024) %>% pull(value)
india_female_2024 <- tobacco %>% filter(iso3 == "IND", sex == "Female", measure == "Cigarette smoking", year == 2024) %>% pull(value)
india_male_smoked_2024 <- tobacco %>% filter(iso3 == "IND", sex == "Male", measure == "Any smoked tobacco", year == 2024) %>% pull(value)
india_ecig <- ecig %>% filter(iso3 == "IND") %>% pull(ecig)

us_peak <- peak_sales %>% filter(iso3 == "USA")
median_peak_year <- round(median(peak_sales$peak_year))

cor_peak_sales <- round(cor(past_vs_now$peak_sales, past_vs_now$lung_rate, method = "spearman"), 2)
cor_peak_year  <- round(cor(past_vs_now$peak_year, past_vs_now$lung_rate, method = "spearman"), 2)

smoke_lung <- now_data %>% filter(!is.na(lung_rate))
cor_smoke_lung <- round(cor(smoke_lung$smoking, smoke_lung$lung_rate, method = "spearman"), 2)

# correlation inside each WHO region
region_cor <- smoke_lung %>%
  group_by(region) %>%
  summarise(r = round(cor(smoking, lung_rate, method = "spearman"), 2), n = n())
wp <- region_cor %>% filter(region == "Western Pacific")

top_past <- past_vs_now %>% slice_max(lung_rate, n = 1)
india_lung <- lung %>% filter(iso3 == "IND") %>% pull(lung_rate)
median_lung <- round(median(lung$lung_rate), 1)

smoke_ecig <- now_data %>% filter(!is.na(ecig))
cor_smoke_ecig <- round(cor(smoke_ecig$smoking, smoke_ecig$ecig, method = "spearman"), 2)
top_ecig <- smoke_ecig %>% arrange(desc(ecig)) %>% slice(1:3)
region_cols <- c("Africa" = "#E69F00", "Americas" = "#56B4E9", "Eastern Mediterranean" = "#009E73",
                 "Europe" = "#0072B2", "South-East Asia" = "#D55E00", "Western Pacific" = "#CC79A7")

# small function to put the data source under each plot
add_source <- function(p, source_text, y_pos = -0.22) {
  p %>% layout(
    annotations = list(x = 0, y = y_pos, xref = "paper", yref = "paper", text = source_text,
                       showarrow = FALSE, xanchor = "left", font = list(size = 10)),
    margin = list(b = 100)
  )
}

Chart 1: In India smoking is falling, but it is still a male habit

This chart shows three WHO measures for India, split by sex. For men, cigarette smoking went from 32.7% in 2000 to 7.7% in the 2024 estimate. For women it is just 0.4%. The line for “any smoked tobacco” for men is much higher (17.1% in 2024). This refers to all non-cigarette smoked products. In the national data smoking is primarily a male habit in India. This was not unusual as all my friends who smoked were men.

The falling lines appear to be good news, but they are averages for all adults. If the average drops, it doesn’t mean that for those who began the habit, it is easy to stop. Circles are WHO estimates and triangles are projections WHO has made based on the latest survey.

india <- tobacco %>%
  filter(iso3 == "IND", sex %in% c("Male", "Female")) %>%
  mutate(
    sex = factor(sex, levels = c("Male", "Female")),
    hover = paste0(measure, "<br>", sex, ", ", year, ": ", value, "%<br>", projection)
  )

chart1 <- ggplot(india, aes(x = year, y = value, colour = measure, group = measure, text = hover)) +
  geom_line(linewidth = 0.8) +
  geom_point(data = filter(india, projection == "Estimate"), shape = 16, size = 2.5) +
  geom_point(data = filter(india, projection == "Projection"), shape = 17, size = 2.5) +
  facet_wrap(~ sex) +
  scale_colour_manual(values = c("Cigarette smoking" = "#0072B2",
                                 "Any smoked tobacco" = "#D55E00",
                                 "Any tobacco use (smoked + smokeless)" = "#009E73")) +
  labs(title = "India: tobacco use is falling, men still smoke far more than women",
       x = "Year", y = "Adults (%), age-standardised", colour = "Measure") +
  theme_minimal()

ggplotly(chart1, tooltip = "text", height = 520) %>%
  add_source("Source: World Health Organization (2026a). Triangles = projections.")

Chart description: Line chart with two panels, one for men and one for women. There are 3 lines in both panels for the years 2000-2030. All lines go down over time. The men’s lines are much higher than the women’s lines. The line for tobacco use is the tallest in each panel while cigarette smoking is the lowest.

Source: World Health Organization (2026a), Global Health Observatory.

Chart 2: The countries that smoked the most did it a long time ago

To look at the “long lag” I needed the past. This graph plots cigarette sales per adult per day since 1865. The grey lines are the 48 countries in the data set, the coloured lines are 6 of my choosing. The dots are the peak year for each coloured country. In 1963, the U.S. had the highest rate of 10.8 cigarettes per adult per day. The median year for the countries is approximately 1988 and the majority of countries had a peak year between 1960 and 1999.

One problem is that India is not in this dataset. It’s predominantly European and rich countries so I can only use it to see what the past was like in countries that had already experienced the entire rise and fall.

highlight_countries <- c("United States", "United Kingdom", "Australia", "Japan", "Germany", "France")

sales_highlight <- sales %>%
  filter(country %in% highlight_countries) %>%
  mutate(hover = paste0(country, ", ", year, ": ", sales, " cigarettes per adult per day"))

sales_all <- sales %>%
  mutate(hover = paste0(country, ", ", year, ": ", sales, " cigarettes per adult per day"))

sales_peaks <- sales_highlight %>%
  group_by(country) %>%
  slice_max(sales, n = 1, with_ties = FALSE) %>%
  ungroup() %>%
  mutate(hover = paste0(country, " peak: ", year, ", ", sales, " cigarettes per adult per day"))

chart2 <- ggplot() +
  geom_line(data = sales_all, aes(x = year, y = sales, group = country, text = hover),
            colour = "grey80") +
  geom_line(data = sales_highlight, aes(x = year, y = sales, colour = country, group = country, text = hover),
            linewidth = 1) +
  geom_point(data = sales_peaks, aes(x = year, y = sales, colour = country, text = hover), size = 3) +
  scale_colour_manual(values = c("United States" = "#0072B2", "United Kingdom" = "#D55E00",
                                 "Australia" = "#009E73", "Japan" = "#CC79A7",
                                 "Germany" = "#E69F00", "France" = "#56B4E9")) +
  labs(title = "Most countries hit peak cigarette sales between 1960 and 1999",
       x = "Year", y = "Cigarettes sold per adult per day", colour = "Country") +
  theme_minimal()

ggplotly(chart2, tooltip = "text", height = 520) %>%
  add_source("Source: Ritchie and Roser (2023). Grey lines = other countries.")

Chart description: Line chart from 1865 to 2015. Most countries start low, rise to a peak between about 1960 and 1999, and then fall. Six countries are coloured and the other countries are grey. A dot marks the peak of each coloured line.

Source: Ritchie and Roser (2023), Our World in Data. The original data are from the International Smoking Statistics collection.

Chart 3: Does the past show up in lung cancer today? Partly

Here I tested the lag idea. Countries are represented by dots. The x axis represents the highest ever number of cigarettes sold and the colour represents the year that occurred. The 2024 lung cancer rate is shown on the y-axis. If the lag period is indeed long, then countries with higher per-capita cigarette sales in the past should have higher per-capita rates of lung cancer now. There is a moderate link (Spearman correlation 0.43). The Spearman correlation ranges from -1 to 1 with a value near 0 indicating a weak correlation. The year of the peak is, however, almost unrelated to the rate of lung cancer (correlation -0.08), so I can’t see the lag in the timing.

I have to be careful. The dot represents an entire country and the cancer rates are estimates. There are other causes of lung cancer, and the sales data only includes cigarettes sold, rather than who smoked them. Therefore, this chart does not confirm the lag. It shows that heavy smoking in the past and lung cancer today go together to some extent.

Use the region filter below to look at one region. It also filters charts 4 and 5.

# shared data so the three charts are linked (same group name and the key is the country code)
shared_past <- SharedData$new(
  past_vs_now %>% mutate(hover = paste0(peak_country, "<br>Peak: ", peak_sales, " cigarettes/adult/day in ", peak_year,
                                        "<br>Lung cancer rate 2024: ", lung_rate)),
  key = ~iso3, group = "countries")

filter_select("region_filter", "Filter by WHO region", SharedData$new(regions, key = ~iso3, group = "countries"), ~region)
chart3 <- ggplot(shared_past, aes(x = peak_sales, y = lung_rate, colour = peak_year, text = hover)) +
  geom_point(size = 3, alpha = 0.85) +
  scale_colour_viridis_c(direction = -1) +
  labs(title = "Peak cigarette sales in the past vs lung cancer rate in 2024",
       x = "Highest cigarette sales (cigarettes per adult per day)",
       y = "Lung cancer, new cases per 100,000 (age-standardised)",
       colour = "Peak year") +
  theme_minimal()

ggplotly(chart3, tooltip = "text", height = 520) %>%
  highlight(on = "plotly_click", off = "plotly_doubleclick") %>%
  add_source("Sources: Ritchie and Roser (2023); Global Cancer Observatory (2024).")

Chart description: Scatter plot with about 48 countries. The x-axis is peak cigarette sales and the y-axis is the lung cancer rate in 2024. The dots go up to the right but are quite spread out. The dot colour shows the year of the peak, from yellow for early peaks to dark purple for later ones. Hungary is the highest on the y-axis (45.12 per 100,000).

Sources: Ritchie and Roser (2023); Global Cancer Observatory (2024).

Chart 4: Today, countries with more smokers have more lung cancer, but not in every region

Now I looked at the present. Each dot represents a country – split into panels by WHO region. The x-axis represents the percentage of adults that smoke cigarettes (2024 WHO estimate) and the y-axis represents the lung cancer rate. The Spearman correlation is 0.68 across 158 countries, and this is definitely positive. The lines are straight trend lines for each region.

The regions are quite different. Europe has high smoking and high lung cancer rates, and Africa has low values on both. In the Western Pacific the link goes the other way (correlation -0.29, 19 countries), so the overall pattern is not the same everywhere. India’s lung cancer rate is 7.62 per 100,000, compared with a median of 11.8 across all countries. If the long lag idea is right, today’s rates say more about smoking in earlier years than about my friends’ future. Also, this is only a link between countries, and the WHO 2024 smoking values are modelled estimates (projections from the most recent survey in each country), so I cannot say smoking causes the differences.

shared_now <- SharedData$new(
  now_data %>%
    filter(!is.na(lung_rate)) %>%
    mutate(hover = paste0(country, "<br>Cigarette smokers: ", smoking, "%<br>Lung cancer rate: ", lung_rate)),
  key = ~iso3, group = "countries")

chart4 <- ggplot(shared_now, aes(x = smoking, y = lung_rate, colour = region, text = hover)) +
  geom_point(size = 2.5, alpha = 0.85) +
  geom_smooth(aes(group = region), method = "lm", se = FALSE, linewidth = 0.7) +
  facet_wrap(~ region) +
  scale_colour_manual(values = region_cols) +
  labs(title = "Smoking and lung cancer rates in 2024, by WHO region",
       x = "Adults who smoke cigarettes (%), 2024 estimate",
       y = "Lung cancer per 100,000", colour = "Region") +
  theme_minimal() +
  theme(legend.position = "none")

ggplotly(chart4, tooltip = "text", height = 620) %>%
  highlight(on = "plotly_click", off = "plotly_doubleclick") %>%
  add_source("Sources: World Health Organization (2026a); Global Cancer Observatory (2026).", y_pos = -0.15)

Chart description: Six small scatter plots, one for each WHO region. In every panel, countries with a higher share of smokers tend to have a higher lung cancer rate, but the dots are spread out. Europe is in the top right and Africa is in the bottom left. In the Western Pacific panel the trend line goes down.

Sources: World Health Organization (2026a); Global Cancer Observatory (2026).

Chart 5: Countries with more smokers do not clearly have more vapers

The last part of my title is vapour. This chart compares cigarette smoking with current e-cigarette use among adults. Only 69 countries have both e-cigarette survey data and a smoking estimate. The correlation between the two is 0.27, so countries with more smokers do not clearly have more vapers. The highest e-cigarette use is in Serbia (18.4%), New Zealand (14%) and Croatia (12%). India reports only 0.02%.

I need to say that these e-cigarette numbers come from different surveys. They have different years and age groups, and some countries use different definitions. So the comparison between countries is rough. Also, there is only one recent survey for each country, so the long lag question cannot be tested for e-cigarettes with this data.

shared_ecig <- SharedData$new(
  smoke_ecig %>%
    mutate(hover = paste0(country, "<br>Cigarette smokers: ", smoking, "%<br>Current e-cigarette users: ", ecig, "%")),
  key = ~iso3, group = "countries")

chart5 <- ggplot(shared_ecig, aes(x = smoking, y = ecig, colour = region, text = hover)) +
  geom_point(size = 3, alpha = 0.85) +
  scale_colour_manual(values = region_cols) +
  labs(title = "Cigarette smoking and e-cigarette use among adults",
       x = "Adults who smoke cigarettes (%), 2024 estimate",
       y = "Adults who currently use e-cigarettes (%)", colour = "Region") +
  theme_minimal()

ggplotly(chart5, tooltip = "text", height = 520) %>%
  highlight(on = "plotly_click", off = "plotly_doubleclick") %>%
  add_source("Source: World Health Organization (2026a, 2026b).")

Chart description: Scatter plot of about 69 countries. The x-axis is the share of adults who smoke cigarettes and the y-axis is the share who use e-cigarettes. The dots are coloured by WHO region. There is no clear straight pattern. Most countries have e-cigarette use below 10%.

Sources: World Health Organization (2026a, 2026b).

What I take from this

My friends’ story is not in this data, but this data helps me look at the bigger picture. Smoking is declining in India on average, and it is primarily men who smoke, which is what I observed in college. Countries with high smoking rates in the past have had a peak in smoking many years ago, and the countries with high smoking rates are also the countries with high lung cancer rates. In modern times, there is a relationship between the number of smokers in a country and the number of cases of lung cancer, but this is not true everywhere. It was very difficult to observe the lag in the peaks. Smoking is not without risk. It implies that country information is too coarse to reveal the time to damage. With vaping, there is not sufficient or comparable data to predict what will occur.

Limits of my work

  • Each dot is a country, so the charts cannot say anything about one person or one group of friends.
  • Many WHO smoking values, and almost all from 2023 onwards, are projections and not new surveys.
  • The cigarette sales dataset has no data for India and ends in 2015.
  • The e-cigarette numbers come from different surveys, so countries are not perfectly comparable.
  • The lung cancer rates are estimates, and lung cancer has causes other than smoking.

Acknowledgements

I acknowledge the use of generative AI tools, including ChatGPT (OpenAI, 2026) and Claude (Anthropic, 2026), during the preparation of this assessment. The tools were used for suggestions for refining written work, reviewing spelling and grammar, suggesting relevant references and online information sources. All suggested information and sources were independently reviewed and verified before being used in the assessment.

References

Global Cancer Observatory. (2024). Cancer today: Age-standardised incidence rate (world) per 100,000, trachea, bronchus and lung, both sexes [Data set]. International Agency for Research on Cancer, World Health Organization. Retrieved October 20, 2026, from https://gco.iarc.who.int/today

Ritchie, H., & Roser, M. (2023). Manufactured cigarette sales per adult per day [Data set]. Our World in Data. https://ourworldindata.org/grapher/sales-of-cigarettes-per-adult-per-day

World Health Organization. (2023). Lung cancer [Fact sheet]. https://www.who.int/news-room/fact-sheets/detail/lung-cancer

World Health Organization. (2026a). Estimate of current tobacco use, tobacco smoking and cigarette smoking prevalence (%) (age-standardized) [Data set]. Global Health Observatory. https://www.who.int/data/gho

World Health Organization. (2026b). Tobacco Monitor: Population-based national surveys, smokeless tobacco or e-cigarettes [Data set]. Global Health Observatory. https://www.who.int/data/gho

OpenAI. (2026). ChatGPT [Large language model]. https://chatgpt.com/

Anthropic. (2026). Claude [Large language model]. https://claude.ai/