2021

September 3

A Visual History of Patent Protection

I noticed that most articles in economic journals avoid to visualize the scores of patent rights indexes. But doing so is quite helpful to understand how patentability, compulsory licensing and patent terms have changed over time.

The following graphs are based on the widely used patent rights index by Park and colleagues. This index is available for 122 countries over 55 years and consist of five main categories:

  1. coverage +
  2. membership +
  3. loss of rights +
  4. duration +
  5. enforcement

Coverage

A country has high coverage, according to the index, if it grants patents for formerly unpatentable „technologies“:

  1. pharmaceuticals,
  2. chemicals,
  3. food,
  4. plant and animal varieties,
  5. surgical products,
  6. microorganisms, and
  7. utility models (somewhat problematic)
coverage

Patent Rights Index (Category: Coverage), 1960-2015

Membership

Park and colleagues assume that membership in the following international agreements generally equals higher protection:

  1. Paris Convention
  2. PCT
  3. UPOV
  4. TRIPS
membership

Patent Rights Index (Category: Membership), 1960-2015

Loss of Rights

An additional assumption of the index is that countries without (!) the following provisions provide higher protection to patent owners:

  1. working requirements
  2. compulsory licensing requirements
  3. straightout revocation
loss_of_rights

Patent Rights Index (Category: Loss of Rights), 1960-2015

Patent Term

To determine whether the patent term in a given country is long or short, the index compares available years to the “appropriate maximal term of protection”. If a country allows 15 years of protection, but could have allowed 20, it receives a score of 0.75 (15 years/20 years).

duration

Patent Rights Index (Category: Duration), 1960-2015

Enforcement

Does country x make the following enforcement mechanisms available to patent owners?

  1. preliminary injunctions
  2. contributory infringements
  3. burden-of-proof reversals
enforcement

Patent Rights Index (Category: Enforcement), 1960-2015

Overall

The final index just sums up the scores across all five categories to get overall scores for each country.

overall

Patent Rights Index (Overall), 1960-2015

Yearly Averages

Heatmaps are helpful to explore timeseries of individual countries over time. To be able to spot more general trends, I have also plotted yearly averages.

averages

Patent Rights Index (Cross-Country Averages)

Code

Code (+data) is available here: https://github.com/markushlang/patent_rights_index

2020

April 15

Spanish Flu Datasets

I have bundled a few datasets mentioned in Alfred W. Crosby’s (2003) book “America’s Forgotten Pandemic” into an R package. In addition to Crosby’s data, I have also added data on non-pharmaceutical interventions by larger U.S. cities during the 1918 and 1919 outbreak from Howard Markel and colleagues.

The spanishflu package can be used to create figures similar to current COVID-19 figures.

This is a small example on how to do that:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45


# load packages
library(pacman)
pacman::p_load("tidyverse","lubridate","ggrepel","paletteer","scales","prismatic")
pacman::p_load_gh("markushlang/spanishflu")

# prepare cumulative counts
flu_curve <- deaths_registered_in_certain_cities %>%
  select(date,city,deaths) %>%
  group_by(city) %>%
  arrange(date) %>%
  mutate(deaths = ifelse(is.na(deaths),0,deaths)) %>%
  mutate(cu_deaths = cumsum(deaths)) %>%
  filter(cu_deaths > 9) %>%
  mutate(days_elapsed = date - min(date),
         end_label = ifelse(date == max(date), city, NA))

# create cumulative deaths plot
flu_curve %>%
  filter(city %in% c("New York","Philadelphia","Chicago",
                     "Boston","Pittsburgh")) %>%
  ggplot(mapping = aes(x = days_elapsed, y = cu_deaths,
         color = city, label = end_label,
         group = city)) +
  geom_line(size = 0.8) +
  geom_text_repel(nudge_x = 1.1,
                  nudge_y = 0.1,
                  segment.color = NA) +
  guides(color = FALSE) +
  theme_minimal() +
  scale_color_manual(values = prismatic::clr_darken(paletteer_d("jcolors::default"), 0.2)) +
  scale_y_continuous(labels = scales::comma_format(accuracy = 1),
                     trans = "log2") +  
  labs(x = "Days Since 10th Confirmed Death",
       y = "Cumulative Number of Deaths (log scale)",
       title = "Cumulative Deaths from the Spanish Flu, Selected U.S. Cities") +
    theme(plot.title = element_text(size = rel(1), face = "bold"),
          axis.text.y = element_text(size = rel(1)),
          axis.title.x = element_text(size = rel(0.75)),
          axis.title.y = element_text(size = rel(0.75)),
          axis.text.x = element_text(size = rel(1)),
          legend.text = element_text(size = rel(1))
          )

Cummulative Deaths from the Spanish Flu

Selected U.S. Cities