The purpose of this assignment was to form a hypothesis based on data collected at the beginning and end of a 12 week period of Cognitive Behavioural Therapy (CBT). The data was collected to investigate the effect of Jungian Sandplay therapy in a Virtual Reality environment. Patients were being treated for PTSD. Psychological interventions like this have been shown to have a positive impact.
The study consisted of 150 patients divided equally into 3 groups. An equal representation of male and female patients is present in each group. All patients were young adults aged 18 to 25 with no age information recorded.
Clean the raw data from the CSV file. Split the data into the 3 testing groups: control, static, animated. Split each group into male and female. Use histograms and boxplots to visually inspect outliers.
First, cleaning the data to remove errors such as typos and missing values. We used Descriptive Statistics to examine and look at the data. Looking for outliers in the data. Form a hypothesis based on visual inspection of the data in graphs. Then using Inferential Statistics to make predictions and generalizations based on the data. Performing Hypothesis tests to check the validity of the hypothesis based on the data provided.
Post‐traumatic stress disorder (PTSD) is seen as one of the most common psychiatric disorder to follow after exposure to a traumatic event. It has been recorded (by ptsd.va.gov) that approx. 6% of the population will have PTSD at some point in time. It has been known that trauma-focused cognitive behaviour therapy is the best-validated threat for PTSD. Although not all PTSD patients respond adequately to this type of treatment. There has also been studies that most people with PTSD do not access evidence-based treatment, and this situation is much worse for lower and middle income countries. This identify that there is still a lot to overcome in the style of treatment to better improve people’s lives with PTSD and remains a challenge.
So, we would expect there is either some change, or no change after 12 weeks. Each of the methods may have different outcomes, and the gender of the patients may be a factor in how they respond to each treatment, or to treatment in general by any of the 3 treatments.
For a treatment to be a success, the average PTSD levels for both observer rated and self-reported should improve over a 12 week period, across all groups (control, static, animated), and for all patient types (male, female).
H0 (Null hypothesis): There is no difference between the median values of male and female patients measurements over a 12 week period.
H1 (Alternative): There is a difference between the median values of male and female patients measurements over a 12 week period.
The participants involved in the study were all young adults with PTSD in the age range of 18 - 25 years. There were 150 students, equally divided into 75 males and 75 females.
The patients were allocated into one of three groups;
Non-animated means the objects in the virtual environment would be still and not interact. Animated means when you add objects onto the Jungian Sand play they would interact and move around the environment
The 3 groups underwent 12 weeks of treatment for 50 minutes per week with a therapist. During that time the patients either underwent traditional CBT; or used one of the two (quality) versions of the VR app.
During the study, PTSD was assessed using observer-rated (i.e., therapist-rated) and self-report (i.e., Child PTSD Symptom Scale Self-Report Version (CPSS-SR)) measurements, respectively. Both measurements are scaled to the range of 0 to 10. Measurements were taken at the start and end of the study.
1.1 Histograms
1.2 Boxplots
2.1 Mean
2.2 Median
2.3 Mode
3.1 Standard Deviation
The raw data is loaded from an external CSV file.
csv_file_name = "../daie_ca3_data_5.csv"
raw_data <- read.csv(csv_file_name)
# names(raw_data) # find name for column1, it's called ...1 elsewhereGet column names
names(raw_data)## [1] "X"               "gender"          "test_group"      "pre_trial_cpss" 
## [5] "post_trial_cpss" "pre_trial_or"    "post_trial_or"Get column data type
sapply(raw_data, typeof)##               X          gender      test_group  pre_trial_cpss post_trial_cpss 
##       "integer"     "character"     "character"        "double"        "double" 
##    pre_trial_or   post_trial_or 
##        "double"        "double"Display the raw data in a paged table.
# show a "prettier" paged table
rmarkdown::paged_table(raw_data)Check for any values less than 0 or greater than 10. Self-Report and Observer-Rated measurements are scaled to the range 0 to 10.
# identify_rows <- raw_data$pre_trial_cpss < 0 | raw_data$pre_trial_cpss > 10 | raw_data$post_trial_cpss < 0 | raw_data$post_trial_cpss > 10 | raw_data$pre_trial_or < 0 | raw_data$pre_trial_or > 10 | raw_data$post_trial_or < 0 | raw_data$post_trial_or > 10
# function to do same thing as above for 1 column at a time
check_range <- function(value) {
  return(value < 0 | value > 10) # return true if the value is less than 0 or greater than 10, otherwise false
}
identify_rows <- check_range(raw_data$pre_trial_cpss) | check_range(raw_data$post_trial_cpss) | check_range(raw_data$pre_trial_or) | check_range(raw_data$post_trial_or)
data_not_in_range <- raw_data %>% 
  select(X, gender, test_group, pre_trial_cpss, post_trial_cpss, pre_trial_or, post_trial_or) %>%
  subset(., identify_rows)
rmarkdown::paged_table(data_not_in_range)Show rows with missing data. We will remove this later.
missing_data <- raw_data %>%
  select(X, gender, test_group, pre_trial_cpss, post_trial_cpss, pre_trial_or, post_trial_or) %>%
  filter(!complete.cases(.))
rmarkdown::paged_table(missing_data)Use unique() to find all the different values in the gender column to find/rule out errors
gender_values = unique(raw_data$gender)
gender_values## [1] "Male"   "Female" "Feale"Use unique() to find all the different values in the test_group column to find/rule out errors
test_group_values = unique(raw_data$test_group)
test_group_values## [1] "Static"   "Control"  "Animated" "Anmated"After previously finding the typos “Feale” and “Anmated” with unique(), in gender and test_group columns. Show the rows, so we can be sure they were corrected in the cleaned data later.
typos <- raw_data %>%
  select(X, gender, test_group, pre_trial_cpss, post_trial_cpss, pre_trial_or, post_trial_or) %>%
  filter(gender == "Feale" | test_group == "Anmated")
typosShow all errors. Only Typos and Missing Data have been identified.
typos <- raw_data %>%
  select(X, gender, test_group, pre_trial_cpss, post_trial_cpss, pre_trial_or, post_trial_or) %>%
  filter(gender == "Feale" | test_group == "Anmated" | !complete.cases(.))
typosThe following has been performed to clean the data:
data <- raw_data %>% 
  select(X, gender, test_group, pre_trial_cpss, post_trial_cpss, pre_trial_or, post_trial_or) %>%
  distinct() %>% # remove duplicates (none anyway)
  filter(complete.cases(.)) %>% # remove rows with incomplete data
  mutate(gender = recode(gender, "Feale" = "Female")) %>% # change typo in gender column
  mutate(test_group = recode(test_group, "Anmated" = "Animated")) # change typo in test_group column
datadata$cpss_diff <- data$pre_trial_cpss - data$post_trial_cpssdata$or_diff <- data$pre_trial_or - data$post_trial_ordataThe 150 patients are divided into 3 groups of 50 in the Raw Data. Each group had an equal number of male and female participants. In the cleaned data 1 record has been removed.
The control group has 1 less patient record after cleaning the data
control_group <- filter(data, test_group == "Control")
control_groupstatic_group <- filter(data, test_group == "Static")
static_groupanimated_group <- filter(data, test_group == "Animated")
animated_groupHistograms for each group.
mean_control_cpss <- mean(control_group$cpss_diff)
sd_control_cpss <- sd(control_group$cpss_diff)
# right skewed
hist(control_group$cpss_diff, 
     main="Histogram of Control CPPS Treatment Difference",
     xlab="Control Group: Self-Report (CPPS) Difference",
     ylab="Patient Frequency")# hist(rnorm(control_group, mean_control_cpss, sd_control_cpss))  # normal distibution (random sample values generated)mean_control_or <- mean(control_group$or_diff)
sd_control_or <- sd(control_group$or_diff)
# symmetric? / right?
hist(control_group$or_diff, 
     main="Histogram of Control OR Treatment Difference",
     xlab="Control Group: Observer-Rated (OR) Difference",
     ylab="Patient Frequency")# hist(rnorm(control_group, mean_control_or, sd_control_or))# left skewed (outliers on right)
hist(static_group$cpss_diff, 
     main="Histogram of Static CPPS Treatment Difference",
     xlab="Static Group: Self-Report (CPPS) Difference",
     ylab="Patient Frequency")hist(static_group$or_diff, 
     main="Histogram of Static OR Treatment Difference",
     xlab="Static Group: Observer-Rated (OR) Difference",
     ylab="Patient Frequency")# left skewed
hist(animated_group$cpss_diff, 
     main="Histogram of Animated CPPS Treatment Difference",
     xlab="Animated Group: Self-Report (CPPS) Difference",
     ylab="Patient Frequency")# left skewed
hist(animated_group$or_diff, 
     main="Histogram of Animated OR Treatment Difference",
     xlab="Animated Group: Observer-Rated (OR) Difference",
     ylab="Patient Frequency")Boxplots of each groups treatment difference between Start and End.
Outside the boxplot whiskers, outliers are visible for all groups and for both measurement methods.
For the control group, outliers are visible for the whole group for both Self-Report and Observer-Rated measurements. When data is divided into Male and Female, outliers are visible only for Female Observer-Rated.
boxplot(control_group$cpss_diff, 
        main="Control Self-Report (CPSS) Boxplot")boxplot(control_group$or_diff, 
        main="Control Observer-Rated (OR) Boxplot")control_male <- filter(control_group, gender == "Male")
control_maleboxplot(control_male$cpss_diff, 
        main="Male - Control Self-Report (CPSS) Boxplot")boxplot(control_male$or_diff, 
        main="Male - Control Observer-Rated (OR) Boxplot")control_female <- filter(control_group, gender == "Female")
control_femaleboxplot(control_female$cpss_diff, 
        main="Female - Control Self-Report (CPSS) Boxplot")boxplot(control_female$or_diff, 
        main="Female - Control Observer-Rated (OR) Boxplot")For the static group, outliers are visible for the whole group for both Self-Report and Observer-Rated measurements. When data is divided into Male and Female, outliers are visible only for male measurements, and in both Self-Report and Observer-Rated measurements.
boxplot(static_group$cpss_diff, 
        main="Static Self-Report (CPSS) Boxplot")boxplot(static_group$or_diff, 
        main="Static Observer-Rated (OR) Boxplot")Outliers are visible for both male measurement methods.
static_male <- filter(static_group, gender == "Male")
static_maleboxplot(static_male$cpss_diff, 
        main="Male - Static Self-Report (CPSS) Boxplot")boxplot(static_male$or_diff, 
        main="Male - Static Observer-Rated (OR) Boxplot")No outliers are visible for female measurement methods.
static_female <- filter(static_group, gender == "Female")
static_femaleboxplot(static_female$cpss_diff, 
        main="Female - Static Self-Report (CPSS) Boxplot")boxplot(static_female$or_diff, 
        main="Female - Static Observer-Rated (OR) Boxplot")For the animated group, outliers are visible for the whole group for both Self-Report and Observer-Rated measurements. When data is divided into Male and Female, outliers are visible for male Observer-Rated measurements only.
boxplot(animated_group$cpss_diff, 
        main="Animated Self-Report (CPSS) Boxplot")boxplot(animated_group$or_diff, 
        main="Animated Observer-Rated (OR) Boxplot")Outliers are visible for both male measurement methods.
animated_male <- filter(animated_group, gender == "Male")
animated_maleboxplot(animated_male$cpss_diff, 
        main="Male - Animated Self-Report (CPSS) Boxplot")boxplot(animated_male$or_diff, 
        main="Male - Animated Observer-Rated (OR) Boxplot")No outliers are visible for female measurement methods.
animated_female <- filter(animated_group, gender == "Female")
animated_femaleboxplot(animated_female$cpss_diff, 
        main="Female - Animated Self-Report (CPSS) Boxplot")boxplot(animated_female$or_diff, 
        main="Female - Animated Observer-Rated (OR) Boxplot")Mean, Median, Mode
Mean Self-Report Difference
mean_control_cpss <- mean(control_group$cpss_diff)
mean_control_cpss## [1] 0.7865306Mean Self-Report Difference - Male
mean_control_cpss_male <- mean(control_male$cpss_diff)
mean_control_cpss_male## [1] 0.815Mean Self-Report Difference - Female
mean_control_cpss_female <- mean(control_female$cpss_diff)
mean_control_cpss_female## [1] 0.7592Mean Observer-Rated Difference
mean_control_or <- mean(control_male$or_diff)
mean_control_or## [1] 0.9333333Mean Observer-Rated Difference - Male
mean_control_or_male <- mean(control_female$or_diff)
mean_control_or_male## [1] 0.874Mean Observer-Rated Difference - Female
mean_control_or_female <- mean(control_group$or_diff)
mean_control_or_female## [1] 0.9030612Mean Self-Report Difference
mean_static_cpss <- mean(static_group$cpss_diff)
mean_static_cpss## [1] 0.664Mean Self-Report Difference - Male
mean_static_cpss_male <- mean(static_male$cpss_diff)
mean_static_cpss_male## [1] 0.6664Mean Self-Report Difference - Female
mean_static_cpss_female <- mean(static_female$cpss_diff)
mean_static_cpss_female## [1] 0.6616Mean Observer-Rated Difference
mean_static_or <- mean(static_male$or_diff)
mean_static_or## [1] 0.7096Mean Observer-Rated Difference - Male
mean_static_or_male <- mean(static_female$or_diff)
mean_static_or_male## [1] 0.6752Mean Observer-Rated Difference - Female
mean_static_or_female <- mean(static_group$or_diff)
mean_static_or_female## [1] 0.6924Mean Self-Report Difference
mean_animated_cpss <- mean(animated_group$cpss_diff)
mean_animated_cpss## [1] 0.6934Mean Self-Report Difference - Male
mean_animated_cpss_male <- mean(animated_male$cpss_diff)
mean_animated_cpss_male## [1] 0.5728Mean Self-Report Difference - Female
mean_animated_cpss_female <- mean(animated_female$cpss_diff)
mean_animated_cpss_female## [1] 0.814Mean Observer-Rated Difference
mean_animated_or <- mean(animated_male$or_diff)
mean_animated_or## [1] 0.6056Mean Observer-Rated Difference - Male
mean_animated_or_male <- mean(animated_female$or_diff)
mean_animated_or_male## [1] 0.9592Mean Observer-Rated Difference - Female
mean_animated_or_female <- mean(animated_group$or_diff)
mean_animated_or_female## [1] 0.7824Median Self-Report Difference
median_control_cpss <- median(control_group$cpss_diff)
median_control_cpss## [1] 0.73Median Self-Report Difference - Male
median_control_cpss_male <- median(control_male$cpss_diff)
median_control_cpss_male## [1] 1.045Median Self-Report Difference - Female
median_control_cpss_female <- median(control_female$cpss_diff)
median_control_cpss_female## [1] 0.66Median Observer-Rated Difference
median_control_or <- median(control_male$or_diff)
median_control_or## [1] 0.995Median Observer-Rated Difference - Male
median_control_or_male <- median(control_female$or_diff)
median_control_or_male## [1] 0.78Median Observer-Rated Difference - Female
median_control_or_female <- median(control_group$or_diff)
median_control_or_female## [1] 0.86Function used to calculate mode (tutorialspoint):
getmode <- function(v) {
  uniqv <- unique(v)
  uniqv[which.max(tabulate(match(v, uniqv)))]
}Mode Self-Report Difference
mode_control_cpss <- getmode(control_group$cpss_diff)
mode_control_cpss## [1] 1.22Mode Self-Report Difference - Male
mode_control_cpss_male <- getmode(control_male$cpss_diff)
mode_control_cpss_male## [1] 1.22Mode Self-Report Difference - Female
mode_control_cpss_female <- getmode(control_female$cpss_diff)
mode_control_cpss_female## [1] 0.66Mode Observer-Rated Difference
mode_control_or <- getmode(control_male$or_diff)
mode_control_or## [1] 1.7Mode Observer-Rated Difference - Male
mode_control_or_male <- getmode(control_female$or_diff)
mode_control_or_male## [1] 0.78Mode Observer-Rated Difference - Female
mode_control_or_female <- getmode(control_group$or_diff)
mode_control_or_female## [1] 0.78Standard Deviation Self-Report Difference
sd_control_cpss <- sd(control_group$cpss_diff)
sd_control_cpss## [1] 1.01783Standard Deviation Self-Report Difference - Male
sd_control_cpss_male <- sd(control_male$cpss_diff)
sd_control_cpss_male## [1] 1.420441Standard Deviation Self-Report Difference - Female
sd_control_cpss_female <- sd(control_female$cpss_diff)
sd_control_cpss_female## [1] 0.3698414Standard Deviation Observer-Rated Difference
sd_control_or <- sd(control_male$or_diff)
sd_control_or## [1] 1.481003Standard Deviation Observer-Rated Difference - Male
sd_control_or_male <- sd(control_female$or_diff)
sd_control_or_male## [1] 0.4315862Standard Deviation Observer-Rated Difference - Female
sd_control_or_female <- sd(control_group$or_diff)
sd_control_or_female## [1] 1.070057Standard Deviation Self-Report Difference
sd_static_cpss <- sd(static_group$cpss_diff)
sd_static_cpss## [1] 1.015745Standard Deviation Self-Report Difference - Male
sd_static_cpss_male <- sd(static_male$cpss_diff)
sd_static_cpss_male## [1] 1.416609Standard Deviation Self-Report Difference - Female
sd_static_cpss_female <- sd(static_female$cpss_diff)
sd_static_cpss_female## [1] 0.3157093Standard Deviation Observer-Rated Difference
sd_static_or <- sd(static_male$or_diff)
sd_static_or## [1] 1.647062Standard Deviation Observer-Rated Difference - Male
sd_static_or_male <- sd(static_female$or_diff)
sd_static_or_male## [1] 0.4128067Standard Deviation Observer-Rated Difference - Female
sd_static_or_female <- sd(static_group$or_diff)
sd_static_or_female## [1] 1.188483Standard Deviation Self-Report Difference
sd_animated_cpss <- sd(animated_group$cpss_diff)
sd_animated_cpss## [1] 0.9568157Standard Deviation Self-Report Difference - Male
sd_animated_cpss_male <- sd(animated_male$cpss_diff)
sd_animated_cpss_male## [1] 1.31823Standard Deviation Self-Report Difference - Female
sd_animated_cpss_female <- sd(animated_female$cpss_diff)
sd_animated_cpss_female## [1] 0.3179754Standard Deviation Observer-Rated Difference
sd_animated_or <- sd(animated_male$or_diff)
sd_animated_or## [1] 1.29165Standard Deviation Observer-Rated Difference - Male
sd_animated_or_male <- sd(animated_female$or_diff)
sd_animated_or_male## [1] 0.4911459Standard Deviation Observer-Rated Difference - Female
sd_animated_or_female <- sd(animated_group$or_diff)
sd_animated_or_female## [1] 0.9834644if(!require("tidyr")) install.packages("tidyr")## Loading required package: tidyrlibrary(tidyr)
# 95% confidence level is default setting
data %>% 
  select(gender, cpss_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(cpss_diff) %>% 
  t.test(cpss_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  cpss_diff by gender
## t = 0.37796, df = 81.685, p-value = 0.7064
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.2641789  0.3880997
## sample estimates:
## mean in group Female   mean in group Male 
##            0.7449333            0.6829730control_group %>% 
  select(gender, cpss_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(cpss_diff) %>% 
  t.test(cpss_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  cpss_diff by gender
## t = -0.18648, df = 25.986, p-value = 0.8535
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.6708979  0.5592979
## sample estimates:
## mean in group Female   mean in group Male 
##               0.7592               0.8150static_group %>% 
  select(gender, cpss_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(cpss_diff) %>% 
  t.test(cpss_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  cpss_diff by gender
## t = -0.016536, df = 26.378, p-value = 0.9869
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.6010478  0.5914478
## sample estimates:
## mean in group Female   mean in group Male 
##               0.6616               0.6664animated_group %>% 
  select(gender, cpss_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(cpss_diff) %>% 
  t.test(cpss_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  cpss_diff by gender
## t = 0.88936, df = 26.783, p-value = 0.3817
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.3154824  0.7978824
## sample estimates:
## mean in group Female   mean in group Male 
##               0.8140               0.5728data %>% 
  select(gender, or_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(or_diff) %>% 
  t.test(or_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  or_diff by gender
## t = 0.49942, df = 86.837, p-value = 0.6187
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.2655308  0.4437434
## sample estimates:
## mean in group Female   mean in group Male 
##            0.8361333            0.7470270control_group %>% 
  select(gender, or_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(or_diff) %>% 
  t.test(or_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  or_diff by gender
## t = -0.18873, df = 26.733, p-value = 0.8517
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.7047104  0.5860437
## sample estimates:
## mean in group Female   mean in group Male 
##            0.8740000            0.9333333static_group %>% 
  select(gender, or_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(or_diff) %>% 
  t.test(or_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  or_diff by gender
## t = -0.1013, df = 27.003, p-value = 0.9201
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.7311997  0.6623997
## sample estimates:
## mean in group Female   mean in group Male 
##               0.6752               0.7096animated_group %>% 
  select(gender, or_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(or_diff) %>% 
  t.test(or_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  or_diff by gender
## t = 1.2794, df = 30.798, p-value = 0.2103
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.2102211  0.9174211
## sample estimates:
## mean in group Female   mean in group Male 
##               0.9592               0.6056data %>% 
  select(gender, cpss_diff) %>% 
  filter(gender %in% c("Male", "Female")) %>% 
  drop_na(cpss_diff) %>% 
  t.test(cpss_diff ~ gender, data = .)## 
##  Welch Two Sample t-test
## 
## data:  cpss_diff by gender
## t = 0.37796, df = 81.685, p-value = 0.7064
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.2641789  0.3880997
## sample estimates:
## mean in group Female   mean in group Male 
##            0.7449333            0.6829730??? Hypothesis testing conclusion ??? change in anxiety over time + compare 3 groups
OpenIntro Statistics:
M., D., D., C. and Çetinkaya-Rundel, M., 2019. OpenIntro Statistics. OpenIntro, Incorporated.
OpenIntro Statistics. 2022. OpenIntro Statistics. [ONLINE] Available at: https://www.openintro.org/book/os/. [Accessed 21 December 2022].
Tutorialspoint:
R Tutorial. 2022. R Tutorial. [ONLINE] Available at: https://www.tutorialspoint.com/r/index.htm. [Accessed 21 December 2022].
Table of Contents:
Yihui Xie, J. J. Allaire, Garrett Grolemund. 2022. 3.1 HTML document | R Markdown: The Definitive Guide. [ONLINE] Available at: https://bookdown.org/yihui/rmarkdown/html-document.html. [Accessed 21 December 2022].
Cleaning Data
R Programming 101 (YouTube). 2022. Clean your data with R. R programming for beginners. - YouTube. [ONLINE] Available at: https://youtu.be/sV5lwAJ7vnQ. [Accessed 22 December 2022].
T Test
R Programming 101 (YouTube). 2022. Doing a t-test using R programming (in 4 minutes) - YouTube. [ONLINE] Available at: https://www.youtube.com/watch?v=x1RFWHV2VUU. [Accessed 23 December 2022].
Markdown
Markdown Basics. 2022. Markdown Basics. [ONLINE] Available at: https://rmarkdown.rstudio.com/authoring_basics.html. [Accessed 23 December 2022].
PTSD and CBT research
National Library of Medicine. 2022. Post‐traumatic stress disorder: a state‐of‐the‐art review of evidence and challenges. [ONLINE] Available at: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6732680/. [Accessed 23 December 2022].
Cognitive behavioural therapy (CBT) – PTSD UK. 2022. Cognitive behavioural therapy (CBT) – PTSD UK. [ONLINE] Available at: https://www.ptsduk.org/treatment-help/cognitive-behavioural-therapy-cbt/. [Accessed 23 December 2022].
Statistical Analysis
WallStreetMojo. 2022. Statistical Analysis. [ONLINE] Available at: https://www.wallstreetmojo.com/statistical-analysis/. [Accessed 23 December 2022].
Histograms
Data Camp. 2022. How to Make a Histogram with Basic R Tutorial. [ONLINE] Available at: https://www.datacamp.com/tutorial/make-histogram-basic-r. [Accessed 24 December 2022].