20-month follow up

Participants were asked to repeat the ICG 20-24 months after their participation in the study, either via mail or online.

library(tidyverse)
library(lubridate)
library(psych)
library(ggplot2)
filter <- dplyr::filter
select <- dplyr::select
# Import CSV from Qualtrics
fu <- read.csv("~/Downloads/OT+fMRI+Inventory+of+Complicated+Grief+-+20-mo.+Follow+Up_January+16%2C+2019_13.45.csv", stringsAsFactors = FALSE, na.strings="")[ ,-c(2:17)] %>%
  filter(grepl("^D1", Consent, ignore.case = TRUE)) # remove rows that aren't IDs 
# Rename variables
fu <- rename(fu, date_followup = StartDate,
ID = Consent,
fu_icg_1 = ICG.R1.19_1,
fu_icg_2 = ICG.R1.19_2,
fu_icg_3 = ICG.R1.19_3,
fu_icg_4 = ICG.R1.19_4,
fu_icg_5 = ICG.R1.19_5,
fu_icg_6 = ICG.R1.19_6,
fu_icg_7 = ICG.R1.19_7,
fu_icg_8 = ICG.R1.19_8,
fu_icg_9 = ICG.R1.19_9,
fu_icg_10 = ICG.R1.19_10,
fu_icg_11 = ICG.R1.19_11,
fu_icg_12 = ICG.R1.19_12,
fu_icg_13 = ICG.R1.19_13,
fu_icg_14 = ICG.R1.19_14,
fu_icg_15 = ICG.R1.19_15,
fu_icg_16 = ICG.R1.19_16,
fu_icg_17 = ICG.R1.19_17,
fu_icg_18 = ICG.R1.19_18,
fu_icg_19 = ICG.R1.19_19)
# Make all of the ICG variables numeric and make date_followup into POSIXct (date format):
fu <- fu %>% mutate_at(vars(-c(ID,date_followup)), funs(as.numeric)) %>% mutate(date_followup = ymd_hms(date_followup))
fu <- fu %>% filter(!grepl("2018-01-08 15:32:23", date_followup)) # remove D125's response from 1-08-2018 (she has a duplicate)
# Scoring
##################  
### Inventory of Complicated Grief
  
# Citation: Prigerson, H. G., Maciejewski, P. K., Reynolds, C. F., Bierhals, A. J., Newsom, J. T., Fasiczka, A., ... & Miller, M. (1995). Inventory of Complicated Grief: a scale to measure maladaptive symptoms of loss. Psychiatry Research, 59(1), 65-79.
# Answer choices range from 0 (Never) – 4 (Always). 
# NO reverse scored items. 
# Sum all items (possible range: 0 – 76; clinical cut-off = 25). [tot_icg]
tot_icg_20mFU <- subset(fu, select=c(fu_icg_1:fu_icg_19))
fu$tot_icg_20mFU <- rowSums(tot_icg_20mFU, na.rm=TRUE)
  
describe(fu$tot_icg_20mFU)
   vars  n  mean    sd median trimmed  mad min max range skew kurtosis  se
X1    1 32 15.91 10.16     14   15.04 9.64   2  45    43 0.74     0.21 1.8
qqnorm(fu$tot_icg_20mFU)

# need to make variable for "time since death to FU?"
# Merge these variables into the master
data <- readRDS("~/Dropbox/GLASS Lab/OT Study/data/cleaned-data/selfreports_oxtr_cortisol_random_AB_bx_clean.rds")
data <- left_join(data,fu, by="ID") # merge by ID
saveRDS(data, "~/Dropbox/GLASS Lab/OT Study/data/cleaned-data/selfreports_oxtr_cortisol_random_AB_bx_20mfu_clean.rds")
# How correlated are the ICG measurements?
corr.test(data$tot_icg, data$tot_icg_20mFU)
Call:corr.test(x = data$tot_icg, y = data$tot_icg_20mFU)
Correlation matrix 
[1] 0.81
Sample Size 
[1] 32
Probability values  adjusted for multiple tests. 
[1] 0

 To see confidence intervals of the correlations, print with the short=FALSE option
plot(data$tot_icg, data$tot_icg_20mFU)

t.test(data$tot_icg, data$tot_icg_20mFU, paired=TRUE)

    Paired t-test

data:  data$tot_icg and data$tot_icg_20mFU
t = 4.7626, df = 31, p-value = 4.237e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 3.23403 8.07847
sample estimates:
mean of the differences 
                5.65625 
# Descriptive stats and distributions (only participants with FU data)
ttest <- data %>% filter(tot_icg_20mFU != "NA")
describe(ttest$tot_icg)
   vars  n  mean    sd median trimmed   mad min max range skew kurtosis   se
X1    1 32 21.56 11.45     19   21.04 13.34   4  51    47 0.43    -0.47 2.02
describe(ttest$tot_icg_20mFU)
   vars  n  mean    sd median trimmed  mad min max range skew kurtosis  se
X1    1 32 15.91 10.16     14   15.04 9.64   2  45    43 0.74     0.21 1.8
boxplot(ttest$tot_icg,ttest$tot_icg_20mFU)

# Create a change variable
## question for down the line: if we use the change score, do we want to use difference scores or standardized residuals?
data <- data %>% mutate(change_icg = tot_icg_20mFU - tot_icg)
describe(data$change_icg)
   vars  n  mean   sd median trimmed  mad min max range  skew kurtosis   se
X1    1 32 -5.66 6.72     -5   -5.46 5.93 -19   7    26 -0.29    -0.74 1.19
hist(data$change_icg)

boxplot(data$change_icg)

qqnorm(data$change_icg)

# Transform data to long format, for visualizing change over time
icg <- subset(data, select=c(ID, tot_icg)) %>% mutate(time = rep("1"))
icg_fu <- subset(data, select=c(ID, tot_icg_20mFU)) %>% rename(tot_icg = tot_icg_20mFU) %>% mutate(time = rep("2"))
change <- bind_rows(icg, icg_fu) %>% mutate(ID=as.factor(ID))
# Plot trajectories
p <- ggplot(data = change, aes(x = time, y = tot_icg, group = ID, colour=factor(ID))) + geom_point(show.legend = FALSE) + geom_line(show.legend = FALSE)
p # I can label these with participant IDs but didn't for now so that I don't see who's in which group

# Is time since the death associated with ICG at either timepoint, or change in ICG?
corr.test(data$timesincedeath, data$tot_icg)
Call:corr.test(x = data$timesincedeath, y = data$tot_icg)
Correlation matrix 
[1] 0.01
Sample Size 
[1] 40
Probability values  adjusted for multiple tests. 
[1] 0.97

 To see confidence intervals of the correlations, print with the short=FALSE option
plot(data$timesincedeath, data$tot_icg)

corr.test(data$timesincedeath, data$tot_icg_20mFU)
Call:corr.test(x = data$timesincedeath, y = data$tot_icg_20mFU)
Correlation matrix 
[1] 0.05
Sample Size 
[1] 32
Probability values  adjusted for multiple tests. 
[1] 0.79

 To see confidence intervals of the correlations, print with the short=FALSE option
plot(data$timesincedeath, data$tot_icg_20mFU)

corr.test(data$timesincedeath, data$change_icg)
Call:corr.test(x = data$timesincedeath, y = data$change_icg)
Correlation matrix 
[1] -0.09
Sample Size 
[1] 32
Probability values  adjusted for multiple tests. 
[1] 0.61

 To see confidence intervals of the correlations, print with the short=FALSE option
plot(data$timesincedeath, data$change_icg)

# How about years together?
corr.test(data$yrs_together, data$tot_icg)
Call:corr.test(x = data$yrs_together, y = data$tot_icg)
Correlation matrix 
[1] 0.15
Sample Size 
[1] 40
Probability values  adjusted for multiple tests. 
[1] 0.34

 To see confidence intervals of the correlations, print with the short=FALSE option
plot(data$yrs_together, data$tot_icg)

corr.test(data$yrs_together, data$tot_icg_20mFU)
Call:corr.test(x = data$yrs_together, y = data$tot_icg_20mFU)
Correlation matrix 
[1] 0.2
Sample Size 
[1] 32
Probability values  adjusted for multiple tests. 
[1] 0.26

 To see confidence intervals of the correlations, print with the short=FALSE option
plot(data$yrs_together, data$tot_icg_20mFU)

corr.test(data$yrs_together, data$change_icg)
Call:corr.test(x = data$yrs_together, y = data$change_icg)
Correlation matrix 
[1] 0.18
Sample Size 
[1] 32
Probability values  adjusted for multiple tests. 
[1] 0.32

 To see confidence intervals of the correlations, print with the short=FALSE option
plot(data$yrs_together, data$change_icg)

LS0tCnRpdGxlOiAiT1QgZk1SSTogMjAtTW9udGggRlUgRGF0YSIKYXV0aG9yOiAiU2FyZW4gU2VlbGV5IgpkYXRlOiAiMDEtMTYtMjAxOCIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiBubwogICAgbnVtYmVyX3NlY3Rpb25zOiBubwogICAgdG9jX2Zsb2F0OiBubwogICAgdGhlbWU6ICJwYXBlciIKLS0tCgojIDIwLW1vbnRoIGZvbGxvdyB1cApQYXJ0aWNpcGFudHMgd2VyZSBhc2tlZCB0byByZXBlYXQgdGhlIElDRyAyMC0yNCBtb250aHMgYWZ0ZXIgdGhlaXIgcGFydGljaXBhdGlvbiBpbiB0aGUgc3R1ZHksIGVpdGhlciB2aWEgbWFpbCBvciBvbmxpbmUuCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KGdncGxvdDIpCmZpbHRlciA8LSBkcGx5cjo6ZmlsdGVyCnNlbGVjdCA8LSBkcGx5cjo6c2VsZWN0CgojIEltcG9ydCBDU1YgZnJvbSBRdWFsdHJpY3MKZnUgPC0gcmVhZC5jc3YoIn4vRG93bmxvYWRzL09UK2ZNUkkrSW52ZW50b3J5K29mK0NvbXBsaWNhdGVkK0dyaWVmKy0rMjAtbW8uK0ZvbGxvdytVcF9KYW51YXJ5KzE2JTJDKzIwMTlfMTMuNDUuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBuYS5zdHJpbmdzPSIiKVsgLC1jKDI6MTcpXSAlPiUKICBmaWx0ZXIoZ3JlcGwoIl5EMSIsIENvbnNlbnQsIGlnbm9yZS5jYXNlID0gVFJVRSkpICMgcmVtb3ZlIHJvd3MgdGhhdCBhcmVuJ3QgSURzIAoKIyBSZW5hbWUgdmFyaWFibGVzCmZ1IDwtIHJlbmFtZShmdSwgZGF0ZV9mb2xsb3d1cCA9IFN0YXJ0RGF0ZSwKSUQgPSBDb25zZW50LApmdV9pY2dfMSA9IElDRy5SMS4xOV8xLApmdV9pY2dfMiA9IElDRy5SMS4xOV8yLApmdV9pY2dfMyA9IElDRy5SMS4xOV8zLApmdV9pY2dfNCA9IElDRy5SMS4xOV80LApmdV9pY2dfNSA9IElDRy5SMS4xOV81LApmdV9pY2dfNiA9IElDRy5SMS4xOV82LApmdV9pY2dfNyA9IElDRy5SMS4xOV83LApmdV9pY2dfOCA9IElDRy5SMS4xOV84LApmdV9pY2dfOSA9IElDRy5SMS4xOV85LApmdV9pY2dfMTAgPSBJQ0cuUjEuMTlfMTAsCmZ1X2ljZ18xMSA9IElDRy5SMS4xOV8xMSwKZnVfaWNnXzEyID0gSUNHLlIxLjE5XzEyLApmdV9pY2dfMTMgPSBJQ0cuUjEuMTlfMTMsCmZ1X2ljZ18xNCA9IElDRy5SMS4xOV8xNCwKZnVfaWNnXzE1ID0gSUNHLlIxLjE5XzE1LApmdV9pY2dfMTYgPSBJQ0cuUjEuMTlfMTYsCmZ1X2ljZ18xNyA9IElDRy5SMS4xOV8xNywKZnVfaWNnXzE4ID0gSUNHLlIxLjE5XzE4LApmdV9pY2dfMTkgPSBJQ0cuUjEuMTlfMTkpCgojIE1ha2UgYWxsIG9mIHRoZSBJQ0cgdmFyaWFibGVzIG51bWVyaWMgYW5kIG1ha2UgZGF0ZV9mb2xsb3d1cCBpbnRvIFBPU0lYY3QgKGRhdGUgZm9ybWF0KToKZnUgPC0gZnUgJT4lIG11dGF0ZV9hdCh2YXJzKC1jKElELGRhdGVfZm9sbG93dXApKSwgZnVucyhhcy5udW1lcmljKSkgJT4lIG11dGF0ZShkYXRlX2ZvbGxvd3VwID0geW1kX2htcyhkYXRlX2ZvbGxvd3VwKSkKCmZ1IDwtIGZ1ICU+JSBmaWx0ZXIoIWdyZXBsKCIyMDE4LTAxLTA4IDE1OjMyOjIzIiwgZGF0ZV9mb2xsb3d1cCkpICMgcmVtb3ZlIEQxMjUncyByZXNwb25zZSBmcm9tIDEtMDgtMjAxOCAoc2hlIGhhcyBhIGR1cGxpY2F0ZSkKCiMgU2NvcmluZwoKIyMjIyMjIyMjIyMjIyMjIyMjICAKIyMjIEludmVudG9yeSBvZiBDb21wbGljYXRlZCBHcmllZgogIAojIENpdGF0aW9uOiBQcmlnZXJzb24sIEguIEcuLCBNYWNpZWpld3NraSwgUC4gSy4sIFJleW5vbGRzLCBDLiBGLiwgQmllcmhhbHMsIEEuIEouLCBOZXdzb20sIEouIFQuLCBGYXNpY3prYSwgQS4sIC4uLiAmIE1pbGxlciwgTS4gKDE5OTUpLiBJbnZlbnRvcnkgb2YgQ29tcGxpY2F0ZWQgR3JpZWY6IGEgc2NhbGUgdG8gbWVhc3VyZSBtYWxhZGFwdGl2ZSBzeW1wdG9tcyBvZiBsb3NzLiBQc3ljaGlhdHJ5IFJlc2VhcmNoLCA1OSgxKSwgNjUtNzkuCgojIEFuc3dlciBjaG9pY2VzIHJhbmdlIGZyb20gMCAoTmV2ZXIpIOKAkyA0IChBbHdheXMpLiAKIyBOTyByZXZlcnNlIHNjb3JlZCBpdGVtcy4gCiMgU3VtIGFsbCBpdGVtcyAocG9zc2libGUgcmFuZ2U6IDAg4oCTIDc2OyBjbGluaWNhbCBjdXQtb2ZmID0gMjUpLiBbdG90X2ljZ10KCnRvdF9pY2dfMjBtRlUgPC0gc3Vic2V0KGZ1LCBzZWxlY3Q9YyhmdV9pY2dfMTpmdV9pY2dfMTkpKQpmdSR0b3RfaWNnXzIwbUZVIDwtIHJvd1N1bXModG90X2ljZ18yMG1GVSwgbmEucm09VFJVRSkKICAKZGVzY3JpYmUoZnUkdG90X2ljZ18yMG1GVSkKcXFub3JtKGZ1JHRvdF9pY2dfMjBtRlUpCgojIG5lZWQgdG8gbWFrZSB2YXJpYWJsZSBmb3IgInRpbWUgc2luY2UgZGVhdGggdG8gRlU/IgoKIyBNZXJnZSB0aGVzZSB2YXJpYWJsZXMgaW50byB0aGUgbWFzdGVyCmRhdGEgPC0gcmVhZFJEUygifi9Ecm9wYm94L0dMQVNTIExhYi9PVCBTdHVkeS9kYXRhL2NsZWFuZWQtZGF0YS9zZWxmcmVwb3J0c19veHRyX2NvcnRpc29sX3JhbmRvbV9BQl9ieF9jbGVhbi5yZHMiKQpkYXRhIDwtIGxlZnRfam9pbihkYXRhLGZ1LCBieT0iSUQiKSAjIG1lcmdlIGJ5IElECnNhdmVSRFMoZGF0YSwgIn4vRHJvcGJveC9HTEFTUyBMYWIvT1QgU3R1ZHkvZGF0YS9jbGVhbmVkLWRhdGEvc2VsZnJlcG9ydHNfb3h0cl9jb3J0aXNvbF9yYW5kb21fQUJfYnhfMjBtZnVfY2xlYW4ucmRzIikKCiMgSG93IGNvcnJlbGF0ZWQgYXJlIHRoZSBJQ0cgbWVhc3VyZW1lbnRzPwpjb3JyLnRlc3QoZGF0YSR0b3RfaWNnLCBkYXRhJHRvdF9pY2dfMjBtRlUpCnBsb3QoZGF0YSR0b3RfaWNnLCBkYXRhJHRvdF9pY2dfMjBtRlUpCnQudGVzdChkYXRhJHRvdF9pY2csIGRhdGEkdG90X2ljZ18yMG1GVSwgcGFpcmVkPVRSVUUpCgojIERlc2NyaXB0aXZlIHN0YXRzIGFuZCBkaXN0cmlidXRpb25zIChvbmx5IHBhcnRpY2lwYW50cyB3aXRoIEZVIGRhdGEpCnR0ZXN0IDwtIGRhdGEgJT4lIGZpbHRlcih0b3RfaWNnXzIwbUZVICE9ICJOQSIpCmRlc2NyaWJlKHR0ZXN0JHRvdF9pY2cpCmRlc2NyaWJlKHR0ZXN0JHRvdF9pY2dfMjBtRlUpCmJveHBsb3QodHRlc3QkdG90X2ljZyx0dGVzdCR0b3RfaWNnXzIwbUZVKQoKIyBDcmVhdGUgYSBjaGFuZ2UgdmFyaWFibGUKIyMgcXVlc3Rpb24gZm9yIGRvd24gdGhlIGxpbmU6IGlmIHdlIHVzZSB0aGUgY2hhbmdlIHNjb3JlLCBkbyB3ZSB3YW50IHRvIHVzZSBkaWZmZXJlbmNlIHNjb3JlcyBvciBzdGFuZGFyZGl6ZWQgcmVzaWR1YWxzPwpkYXRhIDwtIGRhdGEgJT4lIG11dGF0ZShjaGFuZ2VfaWNnID0gdG90X2ljZ18yMG1GVSAtIHRvdF9pY2cpCmRlc2NyaWJlKGRhdGEkY2hhbmdlX2ljZykKaGlzdChkYXRhJGNoYW5nZV9pY2cpCmJveHBsb3QoZGF0YSRjaGFuZ2VfaWNnKQpxcW5vcm0oZGF0YSRjaGFuZ2VfaWNnKQoKIyBUcmFuc2Zvcm0gZGF0YSB0byBsb25nIGZvcm1hdCwgZm9yIHZpc3VhbGl6aW5nIGNoYW5nZSBvdmVyIHRpbWUKaWNnIDwtIHN1YnNldChkYXRhLCBzZWxlY3Q9YyhJRCwgdG90X2ljZykpICU+JSBtdXRhdGUodGltZSA9IHJlcCgiMSIpKQppY2dfZnUgPC0gc3Vic2V0KGRhdGEsIHNlbGVjdD1jKElELCB0b3RfaWNnXzIwbUZVKSkgJT4lIHJlbmFtZSh0b3RfaWNnID0gdG90X2ljZ18yMG1GVSkgJT4lIG11dGF0ZSh0aW1lID0gcmVwKCIyIikpCmNoYW5nZSA8LSBiaW5kX3Jvd3MoaWNnLCBpY2dfZnUpICU+JSBtdXRhdGUoSUQ9YXMuZmFjdG9yKElEKSkKCiMgUGxvdCB0cmFqZWN0b3JpZXMKcCA8LSBnZ3Bsb3QoZGF0YSA9IGNoYW5nZSwgYWVzKHggPSB0aW1lLCB5ID0gdG90X2ljZywgZ3JvdXAgPSBJRCwgY29sb3VyPWZhY3RvcihJRCkpKSArIGdlb21fcG9pbnQoc2hvdy5sZWdlbmQgPSBGQUxTRSkgKyBnZW9tX2xpbmUoc2hvdy5sZWdlbmQgPSBGQUxTRSkKcCAjIEkgY2FuIGxhYmVsIHRoZXNlIHdpdGggcGFydGljaXBhbnQgSURzIGJ1dCBkaWRuJ3QgZm9yIG5vdyBzbyB0aGF0IEkgZG9uJ3Qgc2VlIHdobydzIGluIHdoaWNoIGdyb3VwCgojIElzIHRpbWUgc2luY2UgdGhlIGRlYXRoIGFzc29jaWF0ZWQgd2l0aCBJQ0cgYXQgZWl0aGVyIHRpbWVwb2ludCwgb3IgY2hhbmdlIGluIElDRz8KY29yci50ZXN0KGRhdGEkdGltZXNpbmNlZGVhdGgsIGRhdGEkdG90X2ljZykKcGxvdChkYXRhJHRpbWVzaW5jZWRlYXRoLCBkYXRhJHRvdF9pY2cpCgpjb3JyLnRlc3QoZGF0YSR0aW1lc2luY2VkZWF0aCwgZGF0YSR0b3RfaWNnXzIwbUZVKQpwbG90KGRhdGEkdGltZXNpbmNlZGVhdGgsIGRhdGEkdG90X2ljZ18yMG1GVSkKCmNvcnIudGVzdChkYXRhJHRpbWVzaW5jZWRlYXRoLCBkYXRhJGNoYW5nZV9pY2cpCnBsb3QoZGF0YSR0aW1lc2luY2VkZWF0aCwgZGF0YSRjaGFuZ2VfaWNnKQoKIyBIb3cgYWJvdXQgeWVhcnMgdG9nZXRoZXI/CmNvcnIudGVzdChkYXRhJHlyc190b2dldGhlciwgZGF0YSR0b3RfaWNnKQpwbG90KGRhdGEkeXJzX3RvZ2V0aGVyLCBkYXRhJHRvdF9pY2cpCgpjb3JyLnRlc3QoZGF0YSR5cnNfdG9nZXRoZXIsIGRhdGEkdG90X2ljZ18yMG1GVSkKcGxvdChkYXRhJHlyc190b2dldGhlciwgZGF0YSR0b3RfaWNnXzIwbUZVKQoKY29yci50ZXN0KGRhdGEkeXJzX3RvZ2V0aGVyLCBkYXRhJGNoYW5nZV9pY2cpCnBsb3QoZGF0YSR5cnNfdG9nZXRoZXIsIGRhdGEkY2hhbmdlX2ljZykKYGBgCgo=