Migraine medication use in Danish and Swedish women

In this post I will explore the use of medications, which are indicated to stop migraine episodes or to prevent them. I will use publicly available aggregated data on prescribed medication in Denmark between 1996 and 2019.

library(tidyverse)
library(magrittr)
library(colorfindr)
library(ggrepel)

Danish data

Getting the data

link_list_dk <- list(
  "1996_atc_code_data.txt" = "https://medstat.dk/da/download/file/MTk5Nl9hdGNfY29kZV9kYXRhLnR4dA==",
  "1997_atc_code_data.txt"  = "https://medstat.dk/da/download/file/MTk5N19hdGNfY29kZV9kYXRhLnR4dA==",
  "1998_atc_code_data.txt" = "https://medstat.dk/da/download/file/MTk5OF9hdGNfY29kZV9kYXRhLnR4dA==",
  "1999_atc_code_data.txt" = "https://medstat.dk/da/download/file/MTk5OV9hdGNfY29kZV9kYXRhLnR4dA==",
  "2000_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwMF9hdGNfY29kZV9kYXRhLnR4dA==",
  "2001_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwMV9hdGNfY29kZV9kYXRhLnR4dA==",
  "2002_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwMl9hdGNfY29kZV9kYXRhLnR4dA==",
  "2003_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwM19hdGNfY29kZV9kYXRhLnR4dA==",
  "2004_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwNF9hdGNfY29kZV9kYXRhLnR4dA==",
  "2006_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwNl9hdGNfY29kZV9kYXRhLnR4dA==",
  "2007_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwN19hdGNfY29kZV9kYXRhLnR4dA==",
  "2008_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwOF9hdGNfY29kZV9kYXRhLnR4dA==",
  "2009_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAwOV9hdGNfY29kZV9kYXRhLnR4dA==",
  "2010_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxMF9hdGNfY29kZV9kYXRhLnR4dA==",
  "2011_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxMV9hdGNfY29kZV9kYXRhLnR4dA==",
  "2012_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxMl9hdGNfY29kZV9kYXRhLnR4dA==",
  "2013_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxM19hdGNfY29kZV9kYXRhLnR4dA==",
  "2014_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxNF9hdGNfY29kZV9kYXRhLnR4dA==",
  "2015_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxNV9hdGNfY29kZV9kYXRhLnR4dA==",
  "2016_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxNl9hdGNfY29kZV9kYXRhLnR4dA==",
  "2017_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxN19hdGNfY29kZV9kYXRhLnR4dA==",
  "2018_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxOF9hdGNfY29kZV9kYXRhLnR4dA==",
  "2019_atc_code_data.txt" = "https://medstat.dk/da/download/file/MjAxOV9hdGNfY29kZV9kYXRhLnR4dA==",
  "atc_code_text.txt" = "https://medstat.dk/da/download/file/YXRjX2NvZGVfdGV4dC50eHQ=",
  "atc_groups.txt" = "https://medstat.dk/da/download/file/YXRjX2dyb3Vwcy50eHQ=",
  "population_data.txt" = "https://medstat.dk/da/download/file/cG9wdWxhdGlvbl9kYXRhLnR4dA=="
)

# ATC codes are stored in files
seq_atc <- c(1:23)
atc_code_data_list <- link_list_dk[seq_atc]

Data on population sizes of each age group and sex.

# age structure data
# parse with column type character
age_structure <- read_delim(link_list_dk[["population_data.txt"]], delim = ";", col_names = c(paste0("V", c(1:7))), col_types = cols(V1 = col_character(), V2 = col_character(), V3 = col_character(), V4 = col_character(), V5 = col_character(), V6 = col_character(), V7 = col_character())) %>%
  # rename and keep columns
  select(year = V1,
         region_text = V2,
         region = V3,
         gender = V4,
         age = V5,
         denominator_per_year = V6) %>% 
  # human-reading friendly label on sex categories
  mutate(
      gender_text = case_when(
      gender == "0" ~ "both sexes",
      gender == "1" ~ "men",
      gender == "2" ~ "women",
      T ~ as.character(gender)
    )
  ) %>% 
  # make numeric variables
  mutate_at(vars(year, age, denominator_per_year), as.numeric) %>% 
  # keep only data for the age categories I will work with, only on women, and for the whole Denmark
  filter(age %in% 15:84, gender == "2", region == "0") %>% 
  arrange(year, age, region, gender)

age_structure %>% slice(1:10)
## # A tibble: 10 x 7
##     year region_text region gender   age denominator_per_year gender_text
##    <dbl> <chr>       <chr>  <chr>  <dbl>                <dbl> <chr>      
##  1  1996 DK          0      2         15                29092 women      
##  2  1996 DK          0      2         16                29961 women      
##  3  1996 DK          0      2         17                31344 women      
##  4  1996 DK          0      2         18                31419 women      
##  5  1996 DK          0      2         19                32494 women      
##  6  1996 DK          0      2         20                36363 women      
##  7  1996 DK          0      2         21                36366 women      
##  8  1996 DK          0      2         22                36498 women      
##  9  1996 DK          0      2         23                38452 women      
## 10  1996 DK          0      2         24                37873 women

Prepare labels for the drugs in English

eng_drug <- read_delim(link_list_dk[["atc_groups.txt"]], delim = ";", col_names = c(paste0("V", c(1:6))), col_types = cols(V1 = col_character(), V2 = col_character(), V3 = col_character(), V4 = col_character(), V5 = col_character(), V6 = col_character())) %>% 
  # keep drug classes labels in English
  filter(V5 == "1") %>% 
  select(ATC = V1,
         drug = V2,
         unit_dk = V4)

eng_drug %>% slice(1:10)
## # A tibble: 10 x 3
##    ATC     drug                                    unit_dk                  
##    <chr>   <chr>                                   <chr>                    
##  1 A       Alimentary tract and metabolism         No common unit for volume
##  2 A01     Stomatological preparations             No common unit for volume
##  3 A01A    Stomatological preparations             No common unit for volume
##  4 A01AA   Caries prophylactic agents              Packages                 
##  5 A01AA01 Sodium fluoride                         Packages                 
##  6 A01AB   Antiinfectives for local oral treatment No common unit for volume
##  7 A01AB02 Hydrogenperoxide                        <NA>                     
##  8 A01AB03 Chlorhexidine                           DDD                      
##  9 A01AB04 Amphotericin                            DDD                      
## 10 A01AB09 Miconazole                              DDD

The medication used in Denmark for either migraine episode relief or migraine prophylaxis:

regex_triptans <- "N02CC$"
regex_ergots <- "N02CA$"
regex_nsaid <- "M01A$"
regex_naproxen <- "M01AE02$"
regex_erenumab <- "N02CX07$|N02CD01$"
regex_galcanezumab <- "N02CX08$|N02CD02$"
regex_fremanezumab <- "N02CD03$"
regex_paracet <- "N02BE01$"
regex_salyc_acid_caff <- "N02BA51$"
regex_metoclopramide <- "A03FA01$"
regex_domperidone <- "A03FA03$"
regex_metoprolol <- "C07AB02$"
regex_propanolol <- "C07AA05$"
regex_tolfenamic <- "M01AG02$"
regex_topiramate <- "N03AX11$"
regex_valproate <- "N03AG01$"
regex_flunarizine <- "N07CA03$"
regex_amitriptyline <- "N06AA09$"
regex_gabapentin <- "N03AX12$"
regex_pizotifen <- "N02CX01$"
regex_lisinopril <- "C09AA03$"
regex_candesartan <- "C09CA06$"
regex_riboflavin <- "A11HA04$"
regex_botulinum <- "M03AX01$"

all_migraine_drugs <- paste(regex_triptans, regex_ergots, regex_nsaid, regex_naproxen, regex_erenumab, regex_galcanezumab, regex_fremanezumab, regex_paracet, regex_salyc_acid_caff, regex_metoclopramide, regex_domperidone, regex_metoprolol, regex_propanolol, regex_tolfenamic, regex_topiramate, regex_valproate, regex_flunarizine, regex_amitriptyline, regex_gabapentin, regex_pizotifen, regex_lisinopril, regex_candesartan, regex_riboflavin, regex_botulinum, sep = "|")
# ATC data
atc_data <- map(atc_code_data_list, ~read_delim(file = .x, delim = ";", trim_ws = T, col_names = c(paste0("V", c(1:14))), col_types = cols(V1 = col_character(), V2 = col_character(), V3 = col_character(), V4 = col_character(), V5 = col_character(),V6 = col_character(), V7 = col_character(), V8 = col_character(), V9 = col_character(), V10 = col_character(), V11 = col_character(), V12 = col_character(), V13 = col_character(), V14 = col_character()))) %>% 
  # bind data from all years
  bind_rows()

atc_data %<>% 
  # rename and keep columns
  rename(
    ATC = V1,
    year = V2,
    sector = V3,
    region = V4,
    gender = V5,
    age = V6,
    number_of_people = V7,
    patients_per_1000_inhabitants = V8,
    turnover = V9,
    regional_grant_paid = V10,
    quantity_sold_1000_units = V11,
    quantity_sold_units_per_unit_1000_inhabitants_per_day = V12,
    percentage_of_sales_in_the_primary_sector = V13
  ) %>% 
  # clean columns names and set-up labels
  mutate(
    year = as.numeric(year),
    region_text = case_when(
      region == "0" ~ "DK",
      region == "1" ~ "Region Hovedstaden",
      region == "2" ~ "Region Midtjylland",
      region == "3" ~ "Region Nordjylland",
      region == "4" ~ "Region Sjælland",
      region == "5" ~ "Region Syddanmark",
      T ~ NA_character_
    ),
    gender_text = case_when(
      gender == "0" ~ "both sexes",
      gender == "1" ~ "men",
      gender == "2" ~ "women",
      T ~ as.character(gender)
    )
  ) %>% 
  mutate_at(vars(turnover, regional_grant_paid, quantity_sold_1000_units, quantity_sold_units_per_unit_1000_inhabitants_per_day, number_of_people, patients_per_1000_inhabitants), as.numeric) %>% 
  select(-V14) %>%
  filter(
  gender == "2",
  region == "0",
  sector =="0"
) %>% 
  filter(str_detect(ATC, all_migraine_drugs)) %>% 
  # deal with non-numeric age and re-code as numeric
  mutate(
    age = case_when(
      age == "95+" ~ "95",
      T ~ as.character(age)
    ),
    age = as.integer(age)
    )  %>% 
  filter(age %in% 15:84) %>% 
  mutate(
    age_cat = case_when(
      age %in% 15:24 ~ "15-24",
      age %in% 25:34 ~ "25-34",
      age %in% 35:44 ~ "35-44",
      age %in% 45:54 ~ "45-54",
      age %in% 55:64 ~ "55-64",
      age %in% 65:74 ~ "65-74",
      age %in% 75:84 ~ "75-84",
      T ~ NA_character_
    )
) %>% 
  left_join(age_structure) %>% 
  left_join(eng_drug) %>% 
  group_by(ATC, year, age_cat) %>% 
  mutate(
    numerator = sum(number_of_people),
    denominator = sum(denominator_per_year),
    patients_per_1000_inhabitants = numerator / denominator * 1000
  ) %>% 
  filter(row_number() == 1) %>% 
  ungroup() %>% 
  select(year, ATC, drug, unit_dk, gender, age_cat, patients_per_1000_inhabitants) %>% 
  mutate(
    country = "Denmark"
  )

atc_data %>% slice(1:10)
## # A tibble: 10 x 8
##     year ATC    drug       unit_dk gender age_cat patients_per_1000_inh… country
##    <dbl> <chr>  <chr>      <chr>   <chr>  <chr>                    <dbl> <chr>  
##  1  1999 A03FA… Metoclopr… DDD     2      15-24                   15.1   Denmark
##  2  1999 A03FA… Metoclopr… DDD     2      25-34                   20.4   Denmark
##  3  1999 A03FA… Metoclopr… DDD     2      35-44                   18.7   Denmark
##  4  1999 A03FA… Metoclopr… DDD     2      45-54                   21.8   Denmark
##  5  1999 A03FA… Metoclopr… DDD     2      55-64                   26.4   Denmark
##  6  1999 A03FA… Metoclopr… DDD     2      65-74                   33.3   Denmark
##  7  1999 A03FA… Metoclopr… DDD     2      75-84                   42.6   Denmark
##  8  1999 A03FA… Domperido… DDD     2      15-24                    0.415 Denmark
##  9  1999 A03FA… Domperido… DDD     2      25-34                    0.448 Denmark
## 10  1999 A03FA… Domperido… DDD     2      35-44                    0.557 Denmark

Checking if all medication utilization was available

atc_data %>% 
  distinct(ATC, drug) %>% 
  filter(is.na(drug))
## # A tibble: 1 x 2
##   ATC     drug 
##   <chr>   <chr>
## 1 N02CD01 <NA>
# fix missing label for N02CD01
atc_data %<>% mutate(
  drug = case_when(
    ATC == "N02CD01" ~ "Erenumab",
    T ~ drug
  )
)

Results: Denmark

All results for Denmark

results_dk <- atc_data %>% 
  filter((age_cat == "25-34" | age_cat == "35-44"), year == "2019") %>% 
  select(ATC, drug, age_cat, patients_per_1000_inhabitants, unit_dk, country)

Swedish data

Now, to Swedish data. The full guide on how to upload aggregated Swedish medication data can be found here. I have the data loaded and will use the same list of medications as for the Danish data.

Keep only the drugs used in migraine, population of women between 18 and 84 on the national level

data_se %<>% 
  filter(gender == "Kvinnor", region == "Riket") %>% 
  filter(str_detect(string = ATC, pattern = all_migraine_drugs))

Swedish data is grouped by age categories:

data_se %>% distinct(age_group)
## # A tibble: 19 x 1
##    age_group
##    <chr>    
##  1 0-4      
##  2 5-9      
##  3 10-14    
##  4 15-19    
##  5 20-24    
##  6 25-29    
##  7 30-34    
##  8 35-39    
##  9 40-44    
## 10 45-49    
## 11 50-54    
## 12 55-59    
## 13 60-64    
## 14 65-69    
## 15 70-74    
## 16 75-79    
## 17 80-84    
## 18 85+      
## 19 Totalt

Categorize age groups according to Danish data:

data_se %<>% filter(! age_group %in% c("0-4", "5-9", "10-14", "85+", "Totalt")) %>% 
  # re-group ages as is Danish data
  mutate(
    age_cat = case_when(
      age_group == "15-19" | age_group == "20-24" ~ "15-24",
      age_group == "25-29" | age_group == "30-34" ~ "25-34",
      age_group == "35-39" | age_group == "40-44" ~ "35-44",
      age_group == "45-49" | age_group == "50-54" ~ "45-54",
      age_group == "55-59" | age_group == "60-64" ~ "55-64",
      age_group == "65-69" | age_group == "70-74" ~ "65-74",
      age_group == "75-79" | age_group == "80-84" ~ "75-84",
      T ~ "other"
    )
  ) %>% 
  group_by(ATC, year, age_cat) %>% 
  mutate(
    numerator = sum(`Antal patienter`),
    denominator = sum(Befolkning),
    patients_per_1000_inhabitants = numerator / denominator * 1000
  ) %>% 
  filter(row_number() == 1) %>% 
  ungroup() %>% 
  select(year, ATC, gender, age_cat, patients_per_1000_inhabitants) %>% 
  mutate(
    country = "Sweden"
  )

data_se %>% count(age_cat)
## # A tibble: 7 x 2
##   age_cat     n
##   <chr>   <int>
## 1 15-24     308
## 2 25-34     308
## 3 35-44     308
## 4 45-54     308
## 5 55-64     308
## 6 65-74     308
## 7 75-84     308

Add English labels to the ATC codes in Swedish data

data_se %<>% 
  left_join(eng_drug)

Check if all medication utilization was available

data_se %>% 
  distinct(ATC, drug) %>% 
  filter(is.na(drug))
## # A tibble: 3 x 2
##   ATC     drug 
##   <chr>   <chr>
## 1 N02CD01 <NA> 
## 2 N02CD03 <NA> 
## 3 N02CX07 <NA>
# fix missing label for N02CD01
data_se %<>% mutate(
  drug = case_when(
    ATC == "N02CD01" ~ "Erenumab",
    ATC == "N02CD03" ~ "Galcanezumab",
    ATC == "N02CX07" ~ "Erenumab",
    T ~ drug
  )
)

Join Danish and Swedish data

atc_data %<>% full_join(data_se)
plot_utilization <- function(data, drug_regex, title, max_year){
  data %>% 
  filter(!is.na(patients_per_1000_inhabitants)) %>% 
  mutate(label = if_else(year == max_year, as.character(age_cat), NA_character_),
         value = case_when(
             age_cat == "25-34" ~"#3E9286",
             age_cat == "35-44" ~ "#E8B88A",
             T ~ "gray"
         )) %>%
  filter(str_detect(ATC, {{ drug_regex }})) %>% 
  ggplot(aes(x = year, y = patients_per_1000_inhabitants, group = age_cat, color = value)) +
  geom_line() +
  facet_grid(rows = vars(drug, ATC), cols = vars(country), scales = "free", drop = F) +
  theme_light(base_size = 14) +
  scale_x_continuous(breaks = c(seq(1995, 2019, 4))) +
  scale_color_identity() +
  theme(plot.caption = element_text(hjust = 0, size = 10),
        legend.position = "none",
        panel.spacing = unit(0.8, "cm")) +
  labs(y = "Female patients\nper 1,000 women in the population", title = paste0(title, " utilization in women"), subtitle = "aged between 15 and 84 years", caption = "dataviz by Elena Dudukina Twitter @evpatora") +
    ggrepel::geom_label_repel(aes(label = label), na.rm = TRUE, nudge_x = 3, hjust = 0.5, direction = "y", segment.size = 0.1, segment.colour = "black", show.legend = F)
}
list_regex <- list(regex_triptans, regex_ergots, regex_nsaid, regex_naproxen, regex_erenumab, regex_paracet, regex_salyc_acid_caff, regex_metoclopramide, regex_domperidone, regex_metoprolol, regex_propanolol, regex_topiramate, regex_valproate, regex_flunarizine, regex_amitriptyline, regex_gabapentin, regex_pizotifen, regex_lisinopril, regex_candesartan, regex_botulinum, regex_tolfenamic)

list_title <- list("triptans", "ergots", "NSAIDs", "naproxen", "erenumab", "paracetamol", "salycilic acid and caffeine", "metoclopramide", "domperidone", "metoprolol", "propanolol", "topiramate", "valproate", "flunarizine", "amitriptyline", "gabapentin", "pizotifen", "lisinopril", "candesartan", "botulinum", "tolfenamic") %>% 
  map_if(. != "NSAIDs", ~ str_to_sentence(.))

list_plots <- pmap(list(list_regex, list_title), ~plot_utilization(data = atc_data, drug_regex = ..1, title = ..2, max_year = 2019)) %>% 
  setNames(., c("triptans", "ergots", "NSAIDs", "naproxen", "erenumab", "paracetamol", "salycilic acid and caffeine", "metoclopramide", "domperidone", "metoprolol", "propanolol", "topiramate", "valproate", "flunarizine", "amitriptyline", "gabapentin", "pizotifen", "lisinopril", "candesartan", "botulinum", "tolfenamic"))

Combined results for Denmark and Sweden

results_all <- data_se %>% 
  filter((age_cat == "25-34" | age_cat == "35-44"), year == "2019", !is.na(patients_per_1000_inhabitants)) %>% 
  select(ATC, drug, age_cat, patients_per_1000_inhabitants, country) %>%
  full_join(results_dk) %>% 
  select(-unit_dk) %>% 
  arrange(ATC, age_cat) %>% 
  # separate columns for drugs utilization rate in Denmark and Sweden
  pivot_wider(names_from = country, values_from = patients_per_1000_inhabitants) %>% 
  relocate(Sweden, .after = Denmark)

Triptans

  • Acute migraine treatment
  • Danish women of ages between 25 and 34 utilize triptans at a higher rate (26 women per 1000 females in this age group) than women in the same age group in Sweden (19 women per 1000 females)
  • In the age category 35-44 years, Danish women utilize triptans at 1.5 times higher rate
list_plots$triptans

results_all %>% 
  filter(str_detect(ATC, regex_triptans)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N02CC Selective 5ht(1)-receptor agonists 25-34 26.35166 18.96388
N02CC Selective 5ht(1)-receptor agonists 35-44 43.47541 29.31439

Ergots

  • Acute migraine treatment
  • Utilization is very low in Sweden and is zero in Denmark (in 2019)
list_plots$ergots

results_all %>% 
  filter(str_detect(ATC, regex_ergots)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N02CA Ergot alkaloids 25-34 0 0.0560297
N02CA Ergot alkaloids 35-44 0 0.1105720

NSAIDs

  • Non‐specific acute treatment: indication for aggregated data is unknown
  • Danish women of both age categories of interest (25-34 years and 35-44 years) utilize NSAIDs at a higher rate than Swedish women
list_plots$NSAIDs

results_all %>% 
  filter(str_detect(ATC, regex_nsaid)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
M01A Antiinflammatory/antirheumatic prod.,non-steroids 25-34 123.2309 87.11605
M01A Antiinflammatory/antirheumatic prod.,non-steroids 35-44 169.2165 119.87122

Naproxen

  • Non‐specific acute treatment: indication for aggregated data is unknown
  • Swedish women of both age categories of interest (25-34 years and 35-44 years) utilize naproxen at a higher rate than Danish women
list_plots$naproxen

results_all %>% 
  filter(str_detect(ATC, regex_naproxen)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
M01AE02 Naproxen 25-34 8.890147 45.52050
M01AE02 Naproxen 35-44 10.451094 60.82099

Erenumab

  • Prophylactic treatment
  • No record found in Danish data
  • Very low utilization according to Swedish data
list_plots$erenumab

results_all %>% 
  filter(str_detect(ATC, regex_erenumab)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N02CD01 Erenumab 25-34 NA 0.3993909
N02CD01 Erenumab 35-44 NA 0.8108611

Paracetamol

  • Nonspecific acute treatment: indication for aggregated data is unknown
  • Utilization rate of paracetamol (via prescription) in Denmark is remarkably higher than in Sweden for women in age categories 25-34 and 35-44 years
list_plots$paracetamol

results_all %>% 
  filter(str_detect(ATC, regex_paracet)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N02BE01 Paracetamol 25-34 134.8802 64.02322
N02BE01 Paracetamol 35-44 196.8056 93.76663

Salycilic acid and caffeine

  • Nonspecific acute treatment: indication for aggregated data is unknown
  • Low utilization in both Sweden and Denmark; the utilization rate among Danish women is 8 times that among Swedish women aged 25-34 and 11 times that among Swedish women aged 35-44
list_plots$`salycilic acid and caffeine`

results_all %>% 
  filter(str_detect(ATC, regex_salyc_acid_caff)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N02BA51 Acetylsalicylic acid, comb excl psycholeptics 25-34 2.168261 0.2629084
N02BA51 Acetylsalicylic acid, comb excl psycholeptics 35-44 3.818285 0.3253059

Metoclopramide

  • Nonspecific acute treatment: indication for aggregated data is unknown
  • Utilization rates are similar in Denmark and Sweden among women of age categories of interest
list_plots$metoclopramide

results_all %>% 
  filter(str_detect(ATC, regex_metoclopramide)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
A03FA01 Metoclopramide 25-34 9.967407 9.190300
A03FA01 Metoclopramide 35-44 7.405591 8.401867

Domperidone

  • Nonspecific acute treatment: indication for aggregated data is unknown
  • Low utilization in Denmark and Sweden; although higher rates among Danish women than in Swedish women
list_plots$domperidone

results_all %>% 
  filter(str_detect(ATC, regex_domperidone)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
A03FA03 Domperidone 25-34 1.640624 0.0416631
A03FA03 Domperidone 35-44 1.748027 0.0689072

Metoprolol

  • Nonspecific prophylactic treatment: indication for aggregated data is unknown
  • Utilization rate of metoprolol is higher among Swedish women between 25 and 44 years than among Danish women in the same age band
list_plots$metoprolol

results_all %>% 
  filter(str_detect(ATC, regex_metoprolol)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
C07AB02 Metoprolol 25-34 3.712701 6.271011
C07AB02 Metoprolol 35-44 9.832298 12.291115

Propranolol

  • Nonspecific prophylactic treatment: indication for aggregated data is unknown
  • Utilization rate of metoprolol is higher among Swedish women between 25 and 44 years than among Danish women in the same age band
list_plots$propanolol

results_all %>% 
  filter(str_detect(ATC, regex_propanolol)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
C07AA05 Propranolol 25-34 4.495914 8.117116
C07AA05 Propranolol 35-44 5.235527 10.042819

Tolfenamic acid

  • Nonspecific acute treatment: indication for aggregated data is unknown
  • No available data in Sweden; low utilization in Denmark
list_plots$tolfenamic

results_all %>% 
  filter(str_detect(ATC, regex_tolfenamic)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
M01AG02 Tolfenamic acid 25-34 0.8106935 NA
M01AG02 Tolfenamic acid 35-44 1.4571648 NA

Topiramate

  • Prophylactic migraine treatment
  • Indication is unknown
  • Similar utilization among women in the age categories 25-34 and 35-44 years in Sweden and Denmark
list_plots$topiramate

results_all %>% 
  filter(str_detect(ATC, regex_topiramate)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N03AX11 Topiramate 25-34 1.816503 1.468264
N03AX11 Topiramate 35-44 2.757492 1.836456

Valproate

  • Prophylactic migraine treatment
  • Indication is unknown
  • Similar utilization among women in the age categories 25-34 and 35-44 years in Sweden and Denmark
list_plots$valproate

results_all %>% 
  filter(str_detect(ATC, regex_valproate)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N03AG01 Valproic acid 25-34 1.588410 1.716806
N03AG01 Valproic acid 35-44 2.212837 2.222657

Flunarizin

  • Prophylactic migraine treatment
  • Very low utilization in Denmark and Sweden
list_plots$flunarizine

results_all %>% 
  filter(str_detect(ATC, regex_flunarizine)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N07CA03 Flunarizine 25-34 0.0154212 0.0100566
N07CA03 Flunarizine 35-44 0.0854206 0.0192299

Amitriptyline

  • Prophylactic migraine treatment
  • Indication is unknown
  • Utilization rate is higher among Swedish women in the age categories 25-34 and 35-44 years
list_plots$amitriptyline

results_all %>% 
  filter(str_detect(ATC, regex_amitriptyline)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N06AA09 Amitriptyline 25-34 3.822626 9.08255
N06AA09 Amitriptyline 35-44 7.727821 15.67237

Gabapentin

  • Prophylactic migraine treatment
  • Indication is unknown
  • Higher utilization rate among Danish women in the age categories 25-34 and 35-44 years compared with Swedish women of the same age categories
list_plots$gabapentin

results_all %>% 
  filter(str_detect(ATC, regex_gabapentin)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N03AX12 Gabapentin 25-34 6.427837 4.344453
N03AX12 Gabapentin 35-44 14.563093 8.613396

Pizotifen

  • Prophylactic migraine treatment
  • Very low utilization among Swedish women and zero among Danish women in the age categories 25-34 and 35-44 years
list_plots$pizotifen

results_all %>% 
  filter(str_detect(ATC, regex_pizotifen)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
N02CX01 Pizotifen 25-34 0 0.0229865
N02CX01 Pizotifen 35-44 0 0.0256399

Lisinopril

  • Prophylactic migraine treatment
  • Very low utilization among Swedish women and nearly zero among Danish women in the age categories 25-34 and 35-44 years
list_plots$lisinopril

results_all %>% 
  filter(str_detect(ATC, regex_lisinopril)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
C09AA03 Lisinopril 25-34 0.2967962 0.0086199
C09AA03 Lisinopril 35-44 0.8212592 0.0512798

Candesartan

  • Prophylactic migraine treatment
  • Indication is unknown
  • Similar utilization rates among Swedish and Danish women in the age categories 25-34 and 35-44 years
list_plots$candesartan

results_all %>% 
  filter(str_detect(ATC, regex_candesartan)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
C09CA06 Candesartan 25-34 1.728563 1.282935
C09CA06 Candesartan 35-44 3.727034 5.190472

Botulinum toxin

  • Prophylactic migraine treatment
  • Indication is unknown
  • Higher utilization rates among Swedish women than among Danish women (nearly zero) in the age categories 25-34 and 35-44 years
list_plots$botulinum

results_all %>% 
  filter(str_detect(ATC, regex_botulinum)) %>% 
  kableExtra::kable(format = "html")
ATC drug age_cat Denmark Sweden
M03AX01 Botulinum toxin 25-34 0.000000 1.508491
M03AX01 Botulinum toxin 35-44 0.017775 2.052792

Conclusion

In the publicly available aggregated prescription data, the utilization of different medications with a possible indication for treating migraine episodes among women 25-34 and 35-44 years was mostly comparable between Denmark and Sweden. However, utilization patterns of some drugs (eg, triptans, non-steroids overall and specifically naproxen, paracetamol, salycilic acid and caffeine, amitriptyline) noticeably differed between the two Nordic countries.

Cheers! ✌️

Elena Dudukina
Elena Dudukina
PhD student in Epidemiology

I am interested in women’s health, reproductive epidemiology, pharmacoepidemiology, causal inference, directed acyclic graphs, and R stats.

Related