Site icon R-bloggers

Ggplot2, PubMed citation frequency and DSM-IV Axis I disorders by year

[This article was first published on R Psychologist » R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Introduction

In an earlier post I used ggplot2 to plot publication count by year for different psychotherapy orientations. I’m using an updated version of that R-code in this post to plot publication count for several major DSM-IV disorders. It’s basically like a very simple discourse analysis.

The search string

I searched for the following disorders: Depression, Bipolar disorder, Post-Traumatic Stress Disorder (PTSD), Attention-Deficit/Hyperactivity Disorder (ADHD), Obsessive-Compulsive Disorder (OCD), Anorexia nervosa, Bulimia nervosa, Social phobia, Panic disorder, Generalized anxiety disorder (GAD), Borderline personality disorder, Agoraphobia and Specific phobia. The following PubMed queries were used:

PubMed Search String

Results — the plots


Figure 1. ggplot with DSM-IV Axis 1 disorders PubMed publication count by year.

Depression removed and plot zoomed in.

Figure 1. ggplot with DSM-IV Axis 1 disorders PubMed publication count by year (depression removed).

Conclusion

The word depression is really mentioned much much more often than the other disorders in articles title/abstracts. Among the other disorders there seem to be that some disorders have become more popular in the last decade. Bipolar disorder, PTSD, ADHD and OCD seem to have gotten some extra attention compared to the remaining disorders. Especially bipolar disorder appear to really have become the “it” diagnosis in the last decade. From what I’ve heard from psychologists and psychiatrists working in the swedish psychiatry there seem to be some validity to this conclusion.

Changes to the R code

I made some changes to the R code since my last post. Since I’m importing and reading publication year from individual data files for each disorder, I changed the code to bind each new disorder to the previous one, generating one variable in long format. It would have made a lot of redundant code to plot each disorder on it’s own ggplot2-layer. I also updated the scrape.pubmed()-function to now accept two arguments, where I specified disorder and disorder type (like mood disorder or anxiety disorder). Another change is that I’m now using direct.label() to remove the legend from ggplot and add labels direct to the plot.

The actual code used

library(stringr) # used for str_extract()
library(ggplot2) # used for plotting
library(plyr) # used for count()

#########################
#### Scrape function ####
#########################
scrape.pubmed <- function(x,y) {
  results <- pubmed_result[5]
  results <- results[results != "ShortDetails"]
  year <- str_extract(results, "(19[0-9]{2}|20[0-1][0-9])")
  count <- count(year[year < 2012])
  count$cat <- x
  count$type <- y
  return(count)
}

########################
#### scrape pubmed #####
########################

# read.delim is used on some files because the csv wouldn't be read
# correctly. Excel was used to save the csv-files as tab delim. files.

# borderline
pubmed_result <- read.delim("~/Downloads/pubmed_borderline.txt")
data.long <- scrape.pubmed("borderline","personality disorder")

# ADHD
pubmed_result <- read.csv("~/Downloads/pubmed_ADHD.csv", row.names = NULL)
data.long <- rbind(data.long,
             scrape.pubmed("ADHD","Attention deficit ... behavior disorder"))

# Depression
pubmed_result <- read.delim("~/Downloads/pubmed_depression.txt")
data.long <- rbind(data.long, scrape.pubmed("depression","mood disorder"))

# Bulimia
pubmed_result <- read.csv("~/Downloads/pubmed_bulimia.csv", row.names = NULL)
data.long <- rbind(data.long, scrape.pubmed("bulimia","eating disorder"))

# Anorexia
pubmed_result <- read.csv("~/Downloads/pubmed_anorexia.csv", row.names = NULL)
data.long <- rbind(data.long, scrape.pubmed("anorexia", "eating disorder"))

# GAD
pubmed_result <- read.csv("~/Downloads/pubmed_gad.csv", row.names = NULL)
data.long <- rbind(data.long, scrape.pubmed("GAD", "anxiety disorder"))

# PTSD
pubmed_result <- read.csv("~/Downloads/pubmed_ptsd.csv", row.names = NULL)
data.long <- rbind(data.long, scrape.pubmed("PTSD", "anxiety disorder"))

# OCD
pubmed_result <- read.csv("~/Downloads/pubmed_ocd.csv", row.names = NULL)
data.long <- rbind(data.long, scrape.pubmed("OCD", "anxiety disorder"))

# Specific phobia
pubmed_result <- read.csv("~/Downloads/pubmed_specific_phobia.csv",
                          row.names = NULL)
data.long <- rbind(data.long, scrape.pubmed(
                              "Specific phobia", "anxiety disorder"))

# Agoraphobia
pubmed_result <- read.csv("~/Downloads/pubmed_agoraphobia.csv", row.names = NULL)
data.long <- rbind(data.long, scrape.pubmed("agoraphobia", "anxiety disorder"))

# Panic disorder
pubmed_result <- read.csv("~/Downloads/pubmed_panic.csv", row.names = NULL)
data.long <- rbind(data.long, scrape.pubmed("Panic disorder", "anxiety disorder"))

# Bipolar disorder
pubmed_result <- read.delim("~/Downloads/pubmed_bipolar.txt")
data.long <- rbind(data.long, scrape.pubmed("Bipolar disorder", "mood disorder"))

# Social phobia
pubmed_result <- read.csv("~/Downloads/pubmed_socialphobia.csv", row.names = NULL)
data.long<- rbind(data.long, scrape.pubmed("social phobia", "anxiety disorder"))

###############
#### plot #####
###############

# Used for a plot without depression.
data.long <- data.long[data.long$cat != "depression",]

# Custom linetypes
line.type <- c("anxiety disorder" = "solid",
               "mood disorder" = "longdash",
               "eating disorder" = "dashed",
               "personality disorder" = "twodash",
               "Attention deficit ... behavior disorder" = "dotted"
               )

# Ggplot syntax, saved in 'p' for use with direct.label()
p <- ggplot(data.long, aes(x, freq, group = cat, color = cat, linetype=type)) +
  geom_line() +
  scale_x_discrete(breaks = seq(1900,2011,5),
                   limits=as.character(seq(1970,2021))) +
  opts(title="Number of PubMed hits per year and DSM-IV diagnosis",
       axis.text.x=theme_text(angle=45)) +
  xlab("Publication year") +
  ylab("Hits") +
  scale_linetype_manual("Disorder type", values=line.type)

# Use direct.label with the saved ggplot-syntax, to get direct labels after
# each line.
direct.label(p, "last.bumpup")

To leave a comment for the author, please follow the link and comment on their blog: R Psychologist » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.