This website depicts the code used to make visualizations for the manuscript:

Hubert. T.1 , Rippey, C.1 , Fenlon. E.1 , Wild, H.1 , Adams. T.1,2 ( In Preparation) The Interactive Effect of COVID-Related Stress and Adverse Childhood Experiences on Post Traumatic Stress Disorder Symptoms in Adults.

1Department of Psychology, University of Kentucky.

2Department of Psychiatry, Yale School of Medicine.

The code below was primarily written by Hannah Wild and optimized by the primary author Troy Hubert.

Current Study

The current study aims to investigate how adverse childhoood experiences (ACEs) may impact the relationship between covid related stress (CRS) and posttraumatic stress symptoms (PTSS). The current study examined how the relationship between CRS and PTSS differed based upon no ACEs (ACEs = 0), low ACEs (ACEs = 1-3), and high ACEs (ACEs ≥ 4). We hypothesized that CRS would impact PTSS more in those with high ACEs (ACEs ≥ 4) compared to those with less ACEs (ACEs < 4). Additionally we wanted to examine if this relationship was similar or different within the PTSS clusters (i.e., Re-expereining the traumatic related stimuli, avoidance of trauma related stimuli, negative cognitions and mood, and hyperarousal symptoms).

Abstract

Background: Childhood adversity may reduce the ability to cope and navigate stressors later in life. As such, there is a well-documented link between childhood adversity and posttraumatic stress symptoms (PTSS). Rates of psychiatric disorders increased during the COVID-19 pandemic. The current study aims to investigate the unique and interactive effects of COVID-related stress (CRS) and adverse childhood experiences (ACEs) on PTSS symptoms.

Method: A convenience sample of undergraduate students (n = 620) who endorsed at least one traumatic experience (Life Events Checklist for DSM-5) completed an online survey. Participants answered questionnaires to assess ACEs (0, 1-3, ≥ 4), coping and stress responses to COVID-related stressors, posttraumatic stress symptoms and symptom clusters, and symptoms of depression.

Results: For individuals who reported high levels of ACEs (≥4 ACEs), CRS significantly increased (B = .079, p = .009) PTS symptom severity. Additionally, there was an interactive effect of ACEs and CRS on the re-experiencing, negative alterations in cognition in mood, and hyperarousal symptom clusters.

Discussion: Individuals who experienced ACEs may be more vulnerable to the effects of environmental stress in adulthood, such as stressors experienced during the COVID-19 pandemic. This may increase the degree to which CRS impacts psychiatric symptoms, including symptoms of PTSD. Future research should examine associations between ACEs, adult environmental stressors, and psychiatric symptoms using longitudinal designs, validated clinician-administered interviews, and clinical samples. Conclusion: Environments of high stress, such as the COVID-19 pandemic, may increase the impact of PTSS in those with high levels of childhood adversity.

Information on Visualizations

The following code visualizes moderation analysis regression models. Two main plots are made:

  1. Johnson Neyman Plot
    • This plot signifies at what point there is a significant interaction.
  2. Interaction Intervals
    • This plot shows the slopes of X (i.e., Covid Related Stress) onto Y (i.e., PTSS) at three different levels of ACES (e.g., 0, 1-3, ≥ 4).

The code below starts by making visualizations for PTSS severity followed by exploratory analyses visualizing PTSS symptom clusters (intrusive thoughts, avoidance of trauma related stimuli, negative cogitions and mood, and hyper-arousal).

Prepare data for visualizaiton

Load libraries used for visualizations

# Libraries used
require("tidyverse")
require("dplyr")
require("stringr")
require("papaja")
require("tinylabels")
require("apaTables")
require("haven")
require("psych")
require("summarytools")
require("jtools")
require("interactions")
require("rlang")
require("kableExtra")

Chagne data types

dfall= read_sav("~/Desktop/Coding/Data/DuplicatesLabeled_SONADataset.sav")
dfall = dfall[dfall$Missing_or_Dup==1,]
dfall$ace_tot = as.integer(dfall$ace_tot)
dfall$crs_tot  = dfall$crs_tot-mean(dfall$crs_tot)

dfall <- dfall %>%
  mutate(ace_3cat = as.factor(ifelse(ace_tot == 0, "0 ACEs", 
                    ifelse(ace_tot > 0 & ace_tot < 4, "1-3 ACEs", "≥4 ACEs"))))

library(arsenal) 
dfall$ace2cat = factor(dfall$ace2cat)
dfall$race = factor(dfall$race)
dfall$sex = factor(dfall$sex)

dfall$White=0
dfall$White[dfall$race==5]=1
dfall$White=factor(dfall$White)

dfall$Male = 0
dfall$Male[dfall$sex==1]=1
dfall$Male=factor(dfall$Male)

Table 1: Discriptive Analyses

The first thing we want to do is create a table displaying descriptive statistics for our demographics

Demographics and descriptives statistics of variables

Demo_tab<-data.frame(table1::table1(~ace_tot+pcl_tot+crs_tot+LECtotal+PHQ9+White+Male | ace_3cat, data=dfall))
Demo_tab<- cbind(Demo_tab[,1], Demo_tab[,5], Demo_tab[,3], Demo_tab[,4], Demo_tab[,2])
colnames(Demo_tab) <- c("Variable","Total Sample", "0 ACEs", "1-3 ACEs", "≥4 ACEs" )

x<-knitr::kable(Demo_tab) %>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
kableExtra::add_footnote(x, c("CRS was mean centered for moderation analysis"))
Variable Total Sample 0 ACEs 1-3 ACEs ≥4 ACEs
(N=620) (N=203) (N=288) (N=129)
ace_tot
Mean (SD) 1.94 (2.05) 0 (0) 1.83 (0.808) 5.25 (1.32)
Median [Min, Max] 1.00 [0, 10.0] 0 [0, 0] 2.00 [1.00, 3.00] 5.00 [4.00, 10.0]
= ‘PTSD Checklist for DSM5 - Total’
Mean (SD) 17.3 (19.3) 10.6 (14.0) 16.6 (18.5) 29.5 (22.5)
Median [Min, Max] 10.0 [0, 80.0] 5.00 [0, 61.0] 10.0 [0, 80.0] 27.0 [0, 80.0]
Covid Related Stress - Total
Mean (SD) 0.000000000000000737 (9.16) -2.66 (8.29) 0.208 (8.48) 3.73 (10.5)
Median [Min, Max] -1.13 [-14.1, 30.9] -4.13 [-14.1, 25.9] -0.126 [-14.1, 24.9] 3.87 [-14.1, 30.9]
LEC - Total (directly, witnessed it, learned about it happening to close friend/relative, and/or experienced it in their job)
Mean (SD) 6.45 (4.16) 5.65 (4.08) 6.54 (4.14) 7.53 (4.11)
Median [Min, Max] 6.00 [1.00, 17.0] 5.00 [1.00, 17.0] 6.00 [1.00, 17.0] 7.00 [1.00, 17.0]
PHQ9
Mean (SD) 8.83 (6.33) 6.36 (5.67) 8.85 (5.85) 12.6 (6.47)
Median [Min, Max] 8.00 [0, 27.0] 5.00 [0, 27.0] 8.00 [0, 27.0] 13.0 [0, 27.0]
White
0 143 (23.1%) 44 (21.7%) 65 (22.6%) 34 (26.4%)
1 477 (76.9%) 159 (78.3%) 223 (77.4%) 95 (73.6%)
Male
0 470 (75.8%) 143 (70.4%) 218 (75.7%) 109 (84.5%)
1 150 (24.2%) 60 (29.6%) 70 (24.3%) 20 (15.5%)
a CRS was mean centered for moderation analysis

Figure 1: PTSS severity

Plot the figures

Next we are going to run a linear regression using glm(). This regession output will be used to create both the interaction slopes plot, and the Johnson Neyman (JN) plot. The interaction slopes plot will be made using interact_plot() and the JN plot will be made using johnson_neyman(). Both interact_plot()and johnson_neyman() use ggplot() to make their visualizations.

#1. define model
mod = glm(pcl_tot~crs_tot*ace_tot+LECtotal+PHQ9+White+Male, data=dfall)

#2. plot interaction 
totINT <-interact_plot(mod, pred = crs_tot,modx = ace_tot, 
              modx.values = c(0,1,4),
              interval=TRUE,
              colors=c(cnonsigline,csigline),
              legend.main="ACEs") +
              ylab("PCL-5 Total Score") +
              xlab("Covid Related Stress Response") +
              labs(title = "CRS and ACEs Interaction") +                                              theme_classic() +
              theme(legend.position = "bottom")
  
totINT

#3. Create Johnson Neyman plot
totJN<-johnson_neyman(mod, pred = crs_tot, modx = ace_tot,mod.range=c(0,10), sig.color = sigcolor, insig.color = insigcolor)$plot

#4. JN plot
totJN<-totJN +
  ylab("B (95% CI) of CRS on PCL") +
  xlab("ACES") +
  labs(title = "Johnson Neyman Plot") + 
  scale_x_discrete(limits=c(0,1,2,3,4,5,6,7,8,9,10)) +
  theme_classic()  +
  theme(legend.position = "none") 
  # I can't figure out how to change the title in R so I will do it in illustrator

#5. Put them together
library(ggpubr)
final=ggarrange(totINT, totJN,
          ncol = 2, nrow = 1, 
          widths = c(1, 1, 1),
        common.legend = FALSE)
  # Its squishy and idk why
final

ggsave("~/Desktop/Coding/Figure1_ACE_CRS_PTSD.png",plot=final, scale=1, width=8.5,height=5, units=c("in"),dpi=300)

Explination of results

These results suggest that ACEs may moderates the relationship between CRS and PTSS severity. More specifically, Individuals who report 4 or more ACEs have significantly higher PTSS based upon CRS compared to those who report less than 4 ACEs. The level that the interactive effect becomes signiicant is at 4 ACEs.

Figure 2 PTSS Symptom Clusters

Create functions for plots

For the symptom clusters we are first going to create functions (intfig() and jnfig()) that will create the plots for us, reducing the amount of code needed to make all 8 plots. We are also creating a vector of the PTSS cluster names that will be called in these functions.

#1. Interaction plot function
intfig <- function(t){
tempINT <-interact_plot(mod,
              pred = crs_tot,modx = ace_tot, 
              modx.values = c(0,1,4),
              interval=TRUE,
              colors=c(cnonsigline,csigline),
              legend.main="ACEs") +
              ylab(titles[t]) +
              xlab("Covid Related Stress") +                                                          theme_classic() +
              labs(title=titles[t]) +  
              theme(legend.position = "bottom") +
              theme(text = element_text(size = 8)) 
return(tempINT)
}

#2. Johnson Neyman plot function
jnfig <- function(t){
tempJN<-johnson_neyman(mod, pred = crs_tot, modx = ace_tot,mod.range=c(0,10), sig.color = sigcolor, insig.color = insigcolor)$plot +
  ylab(titles[t]) +
  labs(title=titles[t]) +
  xlab("ACES") +
  scale_x_discrete(limits=c(0,1,2,3,4,5,6,7,8,9,10)) +
  theme_classic()  +
  theme(legend.position = "none") +
  theme(text = element_text(size = 8)) 
return(tempJN)
}

#3. Set values or functions
ptsdvars = c("pcl_reex", "pcl_avoi", "pcl_neg",  "pcl_aro")
titles = c("Re-experiencing","Avoidance","Negative Alteration","Arousal")

Running Plot Functions

The code below uses intfig() and jnfig() to make these plots for all four PTSS clusters.

#1. Rexexpereincing symptoms 
mod = glm(pcl_reex~crs_tot*ace_tot+LECtotal+PHQ9+White+Male, data = dfall)
rexINT = intfig(1)
rexJN = jnfig(1)

#2. Avoidance Symptoms
mod = glm(pcl_avoi~crs_tot*ace_tot+LECtotal+PHQ9+White+Male, data = dfall)
avoiJN=jnfig(2)
avoiINT=intfig(2)

#3. Negative Cognition Symptoms
mod = glm(pcl_neg~crs_tot*ace_tot+LECtotal+PHQ9+White+Male, data = dfall)
negJN=jnfig(3)
negINT=intfig(3)

#4. Hyper arousal Symptoms
mod = glm(pcl_aro~crs_tot*ace_tot+LECtotal+PHQ9+White+Male, data = dfall)
aroJN =jnfig(4)
aroINT = intfig(4)

#FINAL FIGURE
library(ggpubr)
final=ggarrange(rexINT, rexJN, avoiINT, avoiJN,negINT, negJN,aroINT, aroJN,
        #  labels = c("A", "B", "C", "D","E","F","G","H"),
          ncol = 4, nrow = 2, 
        common.legend = TRUE)

final

ggsave("Figure2_1.18.23.png",plot=final, scale=1, width=10,height=8, units=c("in"),dpi=300)

Explanation of results

These results suggest that ACEs moderates the relationship between CRS and Rexexpereincing, Negative Cognitions, and Hyperarousal symptoms. More specifically, Individuals who report 4 or more ACEs have significantly higher PTS for these symptom clusters (i.e., Rexexpereincing, Negative Cognitions, and Hyperarousal) based upon CRS compared to those who report less than 4 ACEs. The level that the interactive effect becomes signiicant is at 4 ACEs. For all of these symptom clusters

There was not a significant interaction between CRS and ACEs on Avoidance symptoms; Said otherwise, there is not a difference between the relationship of CRS and avoidance PTSS at any level of ACEs.