Last updated: 2020-09-09

Checks: 6 1

Knit directory: Comparative_eQTL/analysis/

This reproducible R Markdown analysis was created with workflowr (version 1.5.0). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


The R Markdown is untracked by Git. To know which version of the R Markdown file created these results, you’ll want to first commit it to the Git repo. If you’re still working on the analysis, you can ignore this warning. When you’re finished, you can run wflow_publish to commit the R Markdown file and build the HTML.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20190319) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility. The version displayed above was the version of the Git repository at the time these results were generated.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Ignored files:
    Ignored:    .DS_Store
    Ignored:    .Rhistory
    Ignored:    .Rproj.user/
    Ignored:    WorkingManuscript.zip
    Ignored:    WorkingManuscript/
    Ignored:    analysis/.DS_Store
    Ignored:    analysis/.Rhistory
    Ignored:    analysis/figure/
    Ignored:    analysis_temp/.DS_Store
    Ignored:    big_data/
    Ignored:    code/.DS_Store
    Ignored:    code/snakemake_workflow/.DS_Store
    Ignored:    code/snakemake_workflow/.Rhistory
    Ignored:    data/.DS_Store
    Ignored:    data/PastAnalysesDataToKeep/.DS_Store
    Ignored:    figures/
    Ignored:    output/.DS_Store

Untracked files:
    Untracked:  analysis/20200907_Response_Point_09.Rmd
    Untracked:  output/CellProportionPhenotypesNormalizedForGWAS.tab

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


There are no past versions. Publish this analysis with wflow_publish() to start tracking its development.


Original reviewer point:

Did the authors consider looking for cell-type QTLs? They state several times in the paper the possibility that genetic factors may influence cell types. They have enough data - at least in human - to obtain QTLs for specific cell types, as others have done (Marderstein et. al. Nat Comms 2020; Donovan et. al. Nat Comms 2020). If these cell type QTLs were enriched near genes with a high dispersion, this may bolster the author’s argument that genetic factors underlie dispersion by affecting cell type composition.

Here I will attempt the reviewer’s suggestion. GTEx companion paper has already published cell type deconvolutions from the bulk heart data (Supplemental table 17). From here I can attempt to map QTLs for cell type, similar to what was performed in Marderstein et. al. Nat Comms 2020. In this case, they had cell type porportions for various cell types, and performed a GWAS on each cell type porportion phenotype. Since these proportion phenotypes are all inter-related, maybe it will be simpler at first to just do a GWAS on the first PC of the cell porportion matrix. I’ll do some exploratory analysis with this idea here, and then implement the GWAS in the snakemake.

First load libraries

library(tidyverse)
library(knitr)
library(gplots)

Now, read in the published GTEx cell type deconvolutions (CIBERSORT) for heart left ventricle.

CellTypePorportions <- read.csv("../data/41467_2020_14561_MOESM18_ESM.csv") %>% dplyr::select(-P.value)

head(CellTypePorportions) %>% kable()
Input.Sample cardiac_muscle_cell cardiac_neuron endocardial_cell endothelial_cell fibroblast leukocyte myofibroblast_cell smooth_muscle_cell
GTEX-1117F-0726-SM-5GIEN 0.4141443 0.0390111 0.0247209 0.0173081 0.2976485 0.0735854 0.0539711 0.0796106
GTEX-111FC-0626-SM-5N9CU 0.5934551 0.0304994 0.0000000 0.0000000 0.2718323 0.0159834 0.0000000 0.0882298
GTEX-111FC-0826-SM-5GZWO 0.6191502 0.0391776 0.0000000 0.0884489 0.0896640 0.0193383 0.0317195 0.1125015
GTEX-111VG-0326-SM-5GZX7 0.4135017 0.0633654 0.0000000 0.0216553 0.3748008 0.0000000 0.0064154 0.1202614
GTEX-111YS-0326-SM-5GZZ3 0.7092151 0.0367780 0.0071714 0.0568536 0.0534341 0.0368498 0.0273321 0.0723659
GTEX-111YS-0426-SM-5987O 0.6929481 0.0390429 0.0000000 0.1227475 0.0000000 0.0000000 0.0729518 0.0723097
CellTypePorportions %>%
  gather(key="cell.type", value="percent", -Input.Sample) %>%
  ggplot(aes(x=reorder(Input.Sample, percent, FUN=max), y=percent, fill=cell.type)) +
  geom_bar(stat="identity") +
  scale_y_continuous(limits = c(-0.001,1.001), expand = c(0, 0)) +
  theme_bw() +
  theme(axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank())

I may want to consider removing outlier samples…

For now, let’s plot oeruse how the cell porportion phenotypes covary, and plot samples in PC space. I think it makes sense to center but not rescale data… I want the more predominant cell types to matter more, since ultimately I am interested in if cell type QTLs may explain the highly dispersed genes in the sample, and cell types more predominant in the bulk samples should inuitively matter more.

#Covariance Matrix
CellTypePorportions %>%
  column_to_rownames("Input.Sample") %>%
  cov() %>%
  heatmap.2(trace = "none", cexRow=0.5, cexCol=0.5, col=bluered(75))

#PCA
PC.results <- CellTypePorportions %>%
  column_to_rownames("Input.Sample") %>%
  as.matrix() %>%
  prcomp(center=T, scale=F)

screeplot(PC.results, type="lines")

PCs <- as.data.frame(PC.results$x[,1:3])
ggplot(PCs, aes(x=PC1, y=PC2)) +
  geom_point() +
  theme_bw()

#Correlate PCs back to original Cell Type Porportions
Cor.Mat <- cor(PCs, (CellTypePorportions %>% column_to_rownames("Input.Sample")))
heatmap.2(t(Cor.Mat), trace = "none", cexRow=0.5, col=bluered(75), Colv=FALSE)

Seems reasonable to just do GWAS on the first two PCs, the first of which mostly represents cardiac muscle cell and fibroblast, the second PC mostly correlates with myofibroblast and endothelial.

Let’s write out these first 2 PC phenotype proxies, as well as the original cardiac muscle cell portions, and endothelial cell porportions. I may consider running a GWAS on all of those phenotypes. I will also inverse normalize phenotypes here. This should moderate impact of outliers, so I won’t do any outlier filtering.

InverseNormTrans <- function(x){
  return(qnorm((rank(x,na.last="keep")-0.5)/sum(!is.na(x))))
}

DataToOutput <- PCs %>%
  rownames_to_column("Input.Sample") %>%
  dplyr::select(Input.Sample, PC1, PC2) %>%
  left_join(
    (CellTypePorportions %>% dplyr::select(Input.Sample, cardiac_muscle_cell, endothelial_cell)),
    by="Input.Sample"
  ) %>%
  gather(key="phenotype", value="value", -Input.Sample) %>%
  group_by(phenotype) %>%
  mutate(NormalizedPhenotype=InverseNormTrans(value)) %>%
  ungroup() %>%
  dplyr::select(-value) %>%
  pivot_wider(id_cols="Input.Sample", names_from="phenotype", values_from = NormalizedPhenotype)

But actually, now I realize that a lot of these samples are independent biopsy replicates from the same individual. This is a good oppurtunity to check that the cell type porportions aren’t completely technical. I expect that cell type porportion estimates (or their PCs) from the same indivudals should be better correlated than from unrelated individuals.

#How many samples have replicates
DataToOutput %>%
  mutate(Ind=str_match(Input.Sample, "^GTEX-\\w+")) %>%
  count(Ind) %>% pull(n) %>% hist()

Let’s read more of the GTEx annotations about these samples, to learn about the difference between replicates..

Samples <- read.table("../data/GTExAnnotations/GTEx_Analysis_v8_Annotations_SampleAttributesDS.txt", header=T, sep='\t', quote="") %>%
  filter(SAMPID %in% DataToOutput$Input.Sample) %>%
  separate(SAMPID, into = c("GTEX", "Ind", "tissueSiteID", "SM", "Aliquot"), remove = F, sep="-",)
table(Samples$SMTSD)

                   Adipose - Subcutaneous 
                                        0 
             Adipose - Visceral (Omentum) 
                                        0 
                            Adrenal Gland 
                                        0 
                           Artery - Aorta 
                                        0 
                        Artery - Coronary 
                                        0 
                          Artery - Tibial 
                                        0 
                                  Bladder 
                                        0 
                         Brain - Amygdala 
                                        0 
 Brain - Anterior cingulate cortex (BA24) 
                                        0 
          Brain - Caudate (basal ganglia) 
                                        0 
            Brain - Cerebellar Hemisphere 
                                        0 
                       Brain - Cerebellum 
                                        0 
                           Brain - Cortex 
                                        0 
             Brain - Frontal Cortex (BA9) 
                                        0 
                      Brain - Hippocampus 
                                        0 
                     Brain - Hypothalamus 
                                        0 
Brain - Nucleus accumbens (basal ganglia) 
                                        0 
          Brain - Putamen (basal ganglia) 
                                        0 
       Brain - Spinal cord (cervical c-1) 
                                        0 
                 Brain - Substantia nigra 
                                        0 
                  Breast - Mammary Tissue 
                                        0 
             Cells - Cultured fibroblasts 
                                        0 
      Cells - EBV-transformed lymphocytes 
                                        0 
         Cells - Leukemia cell line (CML) 
                                        0 
                      Cervix - Ectocervix 
                                        0 
                      Cervix - Endocervix 
                                        0 
                          Colon - Sigmoid 
                                        0 
                       Colon - Transverse 
                                        0 
    Esophagus - Gastroesophageal Junction 
                                        0 
                       Esophagus - Mucosa 
                                        0 
                   Esophagus - Muscularis 
                                        0 
                           Fallopian Tube 
                                        0 
                 Heart - Atrial Appendage 
                                      297 
                   Heart - Left Ventricle 
                                      303 
                          Kidney - Cortex 
                                        0 
                         Kidney - Medulla 
                                        0 
                                    Liver 
                                        0 
                                     Lung 
                                        0 
                     Minor Salivary Gland 
                                        0 
                        Muscle - Skeletal 
                                        0 
                           Nerve - Tibial 
                                        0 
                                    Ovary 
                                        0 
                                 Pancreas 
                                        0 
                                Pituitary 
                                        0 
                                 Prostate 
                                        0 
      Skin - Not Sun Exposed (Suprapubic) 
                                        0 
           Skin - Sun Exposed (Lower leg) 
                                        0 
         Small Intestine - Terminal Ileum 
                                        0 
                                   Spleen 
                                        0 
                                  Stomach 
                                        0 
                                   Testis 
                                        0 
                                  Thyroid 
                                        0 
                                   Uterus 
                                        0 
                                   Vagina 
                                        0 
                              Whole Blood 
                                        0 
#How many samples
dim(Samples)
[1] 600  68
#How many unique aliquots amongst the 600 samples
Samples$Aliquot %>% unique() %>% length()
[1] 600
DataToOutput %>%
  mutate(Ind=str_match(Input.Sample, "^GTEX-\\w+")) %>%
  add_count(Ind) %>%
  filter(n==2) %>%
  left_join(Samples, by=c("Input.Sample"="SAMPID")) %>% pull(SMTSD) %>% table()
.
                   Adipose - Subcutaneous 
                                        0 
             Adipose - Visceral (Omentum) 
                                        0 
                            Adrenal Gland 
                                        0 
                           Artery - Aorta 
                                        0 
                        Artery - Coronary 
                                        0 
                          Artery - Tibial 
                                        0 
                                  Bladder 
                                        0 
                         Brain - Amygdala 
                                        0 
 Brain - Anterior cingulate cortex (BA24) 
                                        0 
          Brain - Caudate (basal ganglia) 
                                        0 
            Brain - Cerebellar Hemisphere 
                                        0 
                       Brain - Cerebellum 
                                        0 
                           Brain - Cortex 
                                        0 
             Brain - Frontal Cortex (BA9) 
                                        0 
                      Brain - Hippocampus 
                                        0 
                     Brain - Hypothalamus 
                                        0 
Brain - Nucleus accumbens (basal ganglia) 
                                        0 
          Brain - Putamen (basal ganglia) 
                                        0 
       Brain - Spinal cord (cervical c-1) 
                                        0 
                 Brain - Substantia nigra 
                                        0 
                  Breast - Mammary Tissue 
                                        0 
             Cells - Cultured fibroblasts 
                                        0 
      Cells - EBV-transformed lymphocytes 
                                        0 
         Cells - Leukemia cell line (CML) 
                                        0 
                      Cervix - Ectocervix 
                                        0 
                      Cervix - Endocervix 
                                        0 
                          Colon - Sigmoid 
                                        0 
                       Colon - Transverse 
                                        0 
    Esophagus - Gastroesophageal Junction 
                                        0 
                       Esophagus - Mucosa 
                                        0 
                   Esophagus - Muscularis 
                                        0 
                           Fallopian Tube 
                                        0 
                 Heart - Atrial Appendage 
                                      201 
                   Heart - Left Ventricle 
                                      201 
                          Kidney - Cortex 
                                        0 
                         Kidney - Medulla 
                                        0 
                                    Liver 
                                        0 
                                     Lung 
                                        0 
                     Minor Salivary Gland 
                                        0 
                        Muscle - Skeletal 
                                        0 
                           Nerve - Tibial 
                                        0 
                                    Ovary 
                                        0 
                                 Pancreas 
                                        0 
                                Pituitary 
                                        0 
                                 Prostate 
                                        0 
      Skin - Not Sun Exposed (Suprapubic) 
                                        0 
           Skin - Sun Exposed (Lower leg) 
                                        0 
         Small Intestine - Terminal Ileum 
                                        0 
                                   Spleen 
                                        0 
                                  Stomach 
                                        0 
                                   Testis 
                                        0 
                                  Thyroid 
                                        0 
                                   Uterus 
                                        0 
                                   Vagina 
                                        0 
                              Whole Blood 
                                        0 

Ok, so what seems to be happening is that the replicates are all atrial appendage vs left ventricle. For purposes of GWAS, I should just filter for left-ventricle samples, since I ultimately want to relate this back to the left ventricle samples I calculated dispersion for. But, as for the question of individual reproducibility - that dispersion isn’t completely due to technical differences in biopsy sites - it would be interesting to check whether cell composition is more due to individual, or biopsy site. For example, if it is due to individual differences, I expect the cell type composition of different sites (atrial appendage vs left ventricle, picked from matched individuals) to be more correlated than comparing just left ventricle when two samples are picked from random individuals.

#What is correlation between left ventricle and atrial appendage, across individuals
ScatterData1 <- DataToOutput %>%
  left_join(Samples, by=c("Input.Sample"="SAMPID")) %>%
  dplyr::select(PC1, Ind, SMTSD) %>%
  pivot_wider(id_cols="Ind", names_from="SMTSD", values_from = "PC1") %>%
  drop_na() %>%
  column_to_rownames("Ind")
ggplot(ScatterData1, aes(x=`Heart - Atrial Appendage`, y=`Heart - Left Ventricle`)) +
  geom_point() +
  theme_bw()

cor(ScatterData1)
                         Heart - Atrial Appendage Heart - Left Ventricle
Heart - Atrial Appendage                1.0000000              0.5256553
Heart - Left Ventricle                  0.5256553              1.0000000
#What is correlation between randomly selected individuals, within left ventricle individual
ScatterData2 <- DataToOutput %>%
  left_join(Samples, by=c("Input.Sample"="SAMPID")) %>%
  dplyr::select(PC1, Ind, SMTSD) %>%
  filter(SMTSD=="Heart - Atrial Appendage") %>%
  mutate(RandomGroupAssignment=sample(2, n(), replace = T)) %>%
  dplyr::group_by(RandomGroupAssignment) %>% 
  mutate(row_number = row_number()) %>%
  ungroup() %>%
  pivot_wider(id_cols = "row_number", names_from = "RandomGroupAssignment", values_from = "PC1") %>%
  drop_na() %>%
  column_to_rownames("row_number")
ggplot(ScatterData2, aes(x=`1`, y=`2`)) +
  geom_point() +
  xlab("Random individual A, left ventricle") +
  ylab("Random individual B, left ventricle") +
  theme_bw()

cor(ScatterData2)
            1           2
1  1.00000000 -0.02041527
2 -0.02041527  1.00000000

Ok this is good. So it seems that the cell type composition is correlated across individuals. Let’s replot the barplots or samples in PC space but separated by left ventricle and atrial appendage.

PCs %>%
  rownames_to_column("Input.Sample") %>%
  left_join(Samples, by=c("Input.Sample"="SAMPID")) %>%
  dplyr::select(PC1, PC2, Ind, SMTSD) %>%
  ggplot(aes(x=PC1, y=PC2, color=SMTSD)) + 
  geom_point() +
  theme_bw()

CellTypePorportions %>%
  gather(key="cell.type", value="percent", -Input.Sample) %>%
  left_join(Samples, by=c("Input.Sample"="SAMPID")) %>%
  ggplot(aes(x=reorder(Input.Sample, percent, FUN=max), y=percent, fill=cell.type)) +
  geom_bar(stat="identity") +
  scale_y_continuous(limits = c(-0.001,1.001), expand = c(0, 0)) +
  facet_wrap(~SMTSD) +
  theme_bw() +
  theme(axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank())

Ok, actually, PC2 represents the cell types associated with atrial appendage, but it still seems true that the PC1 (cardiac muscle cell and fibroblast axis) correlates across individuals quite well.

Let’s filter for left ventricle samples only, redo the PCA analysis, and write out quantile normalized phenotypes.

#PCA
PC.results <- CellTypePorportions %>%
  left_join(
    (Samples %>% dplyr::select(SAMPID, SMTSD)),
    by=c("Input.Sample"="SAMPID")) %>%
  filter(SMTSD=="Heart - Left Ventricle") %>%
  dplyr::select(-SMTSD) %>%
  column_to_rownames("Input.Sample") %>%
  as.matrix() %>%
  prcomp(center=T, scale=F)

screeplot(PC.results, type="lines")

PCs <- as.data.frame(PC.results$x[,1:3])
ggplot(PCs, aes(x=PC1, y=PC2)) +
  geom_point() +
  theme_bw()

#Correlate PCs back to original Cell Type Porportions
df.ToCorrelate <- inner_join(
  PCs %>% rownames_to_column("Input.Sample"),
  CellTypePorportions,
  by="Input.Sample") %>% column_to_rownames("Input.Sample")
Cor.Mat <- cor(df.ToCorrelate[,1:3], df.ToCorrelate[,4:ncol(df.ToCorrelate)])
heatmap.2(t(Cor.Mat), trace = "none", cexRow=0.5, col=bluered(75), Colv=FALSE)

I think just using the PC1 as the phenotype, which mostly captures the cardiomyocte:fibroblast axis, is reasonable enough…

DataToOutput <- PCs %>%
  rownames_to_column("Input.Sample") %>%
  dplyr::select(Input.Sample, PC1) %>%
  left_join(
    (CellTypePorportions %>% dplyr::select(Input.Sample, cardiac_muscle_cell, fibroblast)),
    by="Input.Sample"
  ) %>%
  gather(key="phenotype", value="value", -Input.Sample) %>%
  group_by(phenotype) %>%
  mutate(NormalizedPhenotype=InverseNormTrans(value)) %>%
  ungroup() %>%
  dplyr::select(-value) %>%
  pivot_wider(id_cols="Input.Sample", names_from="phenotype", values_from = NormalizedPhenotype)

head(DataToOutput) %>% kable()
Input.Sample PC1 cardiac_muscle_cell fibroblast
GTEX-111FC-0826-SM-5GZWO 0.3371901 -0.3371901 0.4812159
GTEX-111YS-0426-SM-5987O 0.0082728 -0.0165462 -0.9033567
GTEX-1122O-0826-SM-5GICV -1.1563825 1.0216836 -0.9033567
GTEX-117YW-0326-SM-5N9CY 1.3993229 -1.3993229 1.3565712
GTEX-117YX-1126-SM-5H128 -2.3976272 2.3976272 -0.9033567
GTEX-11DXX-0326-SM-5PNWC -0.9674216 0.8909849 -0.9033567

Actually, I should also inverse normal transform the data before doing GWAS.

DataToOutput <- DataToOutput %>%
  gather(key="phenotype", value="value", -Input.Sample) %>%
  group_by(phenotype) %>%
  mutate(quantile.normalized.value = InverseNormTrans(value)) %>%
  ungroup() %>%
  dplyr::select(-value) %>%
  spread(key="phenotype", value="quantile.normalized.value")

##Check quantile normalization...
#Data looks normally distributed
qqnorm(DataToOutput$cardiac_muscle_cell)

#With sd=1, suggesting I didn't accidently aggregate all phenotypes before quantile normalization
sd(DataToOutput$cardiac_muscle_cell)
[1] 0.9995252
#And normalized data is monotonic increasinging from original data.
inner_join(
  DataToOutput,
  CellTypePorportions,
  by="Input.Sample",
  suffix=c(".QQnorm", ".raw")) %>%
  ggplot(aes(x=cardiac_muscle_cell.QQnorm, y=cardiac_muscle_cell.raw)) +
  geom_point()

and finally, write out the quantile normalized cell porportion phenotypes

DataToOutput %>%
  mutate(Ind=str_match(Input.Sample, "^GTEX-\\w+")) %>%
  dplyr::select(Ind, everything(), -Input.Sample) %>%
write_tsv("../output/CellProportionPhenotypesNormalizedForGWAS.tab")

sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Catalina 10.15.5

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] gplots_3.0.1.1  knitr_1.26      forcats_0.4.0   stringr_1.4.0  
 [5] dplyr_0.8.3     purrr_0.3.3     readr_1.3.1     tidyr_1.0.0    
 [9] tibble_2.1.3    ggplot2_3.2.1   tidyverse_1.3.0

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.5         lubridate_1.7.4    lattice_0.20-38    gtools_3.8.1      
 [5] assertthat_0.2.1   zeallot_0.1.0      rprojroot_1.3-2    digest_0.6.23     
 [9] R6_2.4.1           cellranger_1.1.0   backports_1.1.5    reprex_0.3.0      
[13] evaluate_0.14      httr_1.4.1         highr_0.8          pillar_1.4.2      
[17] rlang_0.4.1        lazyeval_0.2.2     readxl_1.3.1       rstudioapi_0.10   
[21] gdata_2.18.0       rmarkdown_1.18     labeling_0.3       munsell_0.5.0     
[25] broom_0.5.2        compiler_3.6.1     httpuv_1.5.2       modelr_0.1.5      
[29] xfun_0.11          pkgconfig_2.0.3    htmltools_0.4.0    tidyselect_0.2.5  
[33] workflowr_1.5.0    fansi_0.4.0        crayon_1.3.4       dbplyr_1.4.2      
[37] withr_2.1.2        later_1.0.0        bitops_1.0-6       grid_3.6.1        
[41] nlme_3.1-143       jsonlite_1.6       gtable_0.3.0       lifecycle_0.1.0   
[45] DBI_1.0.0          git2r_0.26.1       magrittr_1.5       scales_1.1.0      
[49] KernSmooth_2.23-16 cli_2.0.0          stringi_1.4.3      farver_2.0.1      
[53] fs_1.3.1           promises_1.1.0     xml2_1.2.2         ellipsis_0.3.0    
[57] generics_0.0.2     vctrs_0.2.0        tools_3.6.1        glue_1.3.1        
[61] hms_0.5.2          yaml_2.2.0         colorspace_1.4-1   caTools_1.17.1.3  
[65] rvest_0.3.5        haven_2.2.0