#Wound Healing 
#Peter Aungle

if(!require("pacman")) install.packages("pacman")
pacman::p_load('tidyverse', 'svMisc', 'Rmisc','lme4','nlme', 'effects','rstanarm',
               'sjPlot','car','lattice', 'emmeans','ggstatsplot','yarrr','cowplot','gridGraphics', 'corrplot', 'broom.mixed','knitr')

#save.image('Clean_Healing.RData')
load("Clean_Healing.RData")

DFmodel <- read.csv("DFmodel.csv")
ratingsR <- read.csv("ratingsICC.csv")
Enrollment <- read.csv("enrollment.csv")
# Determining best-fit model

Model <- lmer(Healing ~ Condition+(1|Subject) +(1|ResponseId), data = DFmodel, REML = FALSE)
tab_model(Model)

# Add demographic variables
Model2 <- lmer(Healing ~ Condition+
                 Age+Gender+Race+
                 (1|Subject) +(1|ResponseId), data = DFmodel, REML = FALSE)
tab_model(Model2)


# Add psychosocial variables
Model3 <- lmer(Healing ~ Condition+Age+Gender+Race+
                 PSS_sum+Ascale+Dscale+Mindfulness+
                 (1|Subject) +(1|ResponseId), data = DFmodel, REML = FALSE)
tab_model(Model3)

# Add lab session variables: session mood(higher numbers = more negative mood) & session number (1, 2, or 3)
Model4 <- lmer(Healing ~ Condition+Age+Gender+Race+
                 Ascale+PSS_sum+Dscale+Mindfulness+
                 Session+Session_Mood+
                 (1|Subject) +(1|ResponseId), data = DFmodel, REML = FALSE)
tab_model(Model4, pred.labels = predictor_names)
pairs(emmeans(Model4, specs = "Condition")

# Add personality trait measures
Model5 <- lmer(Healing ~ Condition+Age+Gender+Race+
                 Ascale+PSS_sum+Dscale+Mindfulness+
                 Session+Session_Mood+
                 Openness+Conscientiousness+Extraversion+Agreeableness+Neuroticism+
                 (1|Subject) +(1|ResponseId), data = DFmodel, REML = FALSE)
tab_model(Model5)

# Compare models side by side with ANOVA to choose best model
anova(Model,Model2,Model3,Model4,Model5)


#-----The effect of excluding participants mentioned in the paper----

# Missed one of the three lab sessions
sub_ex_missedSession <- c("245662", "8wdBWLDXgY")
missedSession_DFmodel <- DFmodel %>% filter(!(Subject %in% sub_ex_missedSession))

missedSession_Model <- lmer(Healing ~ Condition+Age+Gender+Race+
                 Ascale+PSS_sum+Dscale+Mindfulness+
                 Session+Session_Mood+
                 (1|Subject) +(1|ResponseId), data = missedSession_DFmodel, REML = FALSE)
tab_model(missedSession_Model, show.ci = FALSE)

# Failed to complete all 7 healing surveys during a lab session
sub_ex_missedHealing <- c('246313', '245740', '4pgDVrelbG')
missedHealing_DFmodel <- DFmodel %>% filter(!(Subject %in% sub_ex_missedHealing & Condition == "56") 
    & !(Subject == "117694" & Condition == "14"))
missedHealing_Model <- lmer(Healing ~ Condition+Age+Gender+Race+
                 Ascale+PSS_sum+Dscale+Mindfulness+
                 Session+Session_Mood+
                 (1|Subject) +(1|ResponseId), data = missedHealing_DFmodel, REML = FALSE)
tab_model(missedHealing_Model, show.ci = FALSE)

# DF and model with all exclusions applied
DFmodel_ex_all <- missedSession_DFmodel %>% filter(!(Subject %in% sub_ex_missedHealing & Condition == "56")  # nolint
    & !(Subject == "117694" & Condition == "14")) 

partial_and_full_ex_Model <- lmer(Healing ~ Condition+Age+Gender+Race+
                 Ascale+PSS_sum+Dscale+Mindfulness+
                 Session+Session_Mood+
                 (1|Subject) +(1|ResponseId), data = DFmodel_ex_all, REML = FALSE)
tab_model(partial_and_full_ex_Model, show.ci = FALSE)

# Label the output with the name of each model for easy comparison, and change predictor names

predictor_names<- c('14-minute', '28-minute','56-minute','Age','Gender (Male)', 'Ethnicity (White)', 'Anxiety', 'Stress', 'Depression', 
'Mindfulness', 'Session 2', 'Session 3', 'Session Mood')

# Compare all models side by side and save as a table
tab_model(Model4, missedSession_Model, missedHealing_Model, partial_and_full_ex_Model, show.ci = FALSE, 
          show.se = FALSE, show.stat = FALSE, show.df = FALSE,
          dv.labels = c("Model No Exclusions", "Ex Missed Lab Sessions", "Ex Missed Healing Survey", "All Exclusions"), pred.labels = predictor_names)

# Filtering raters whose ratings had an average correlation with those of other raters greater than 0.60

selected_response_ids <- c("R_27JttzJouwhMv5P", "R_e5kGNps24JhW5s5", "R_2q1OevqncmA72jV", "R_1QtmXo279oXTu6f", "R_2wGKrNIafrW1exi", 
    "R_OKaiNq0VmcdYtUd", "R_3Ena5XdKlAMmmtR", "R_tY9Y1QEpQMenClH", "R_1I4p00HhjngCBwT", "R_ePOc3sh5wvaa2iJ", "R_1F99W1Qnk3uLGTg", 
    "R_RPiO4ewTjfuNciZ", "R_2PwkqDN24Ee3xAa")
DFmodel_bestRaters <- DFmodel %>% filter((ResponseId %in% selected_response_ids)) 
Model_bestRaters <-lmer(Healing ~ Condition+Age+Gender+Race+
                 Ascale+PSS_sum+Dscale+Mindfulness+
                 Session+Session_Mood+
                 (1|Subject) +(1|ResponseId), data = DFmodel_bestRaters, REML = FALSE)

tab_model(Model_bestRaters, show.ci = FALSE, show.se = FALSE, show.stat = FALSE, show.df = FALSE, pred.labels = predictor_names)
pairs(emmeans(Model_bestRaters, specs = "Condition"))

# calculate ICC
library(data.table)
install.packages("irr")
library(irr)
# we need two-way random ICC for each condition
# unit should be "single" because each photo pair is rated once by each rater
ratingsR <- ratingsR[,-1]
irr::icc(ratingsR, model="twoway", type="consistency") #ICC = 0.532

write.csv(DFmodel, "DFmodel.csv")
write.csv(ratingsR, "ratingsR.csv")
write.csv(Enrollment, "enrollment.csv")
write.csv(missedHealing_DFmodel, "missedHealing_DFmodel.csv")
write.csv(missedSession_DFmodel, "missedSession_DFmodel.csv")
write.csv(DFmodel_ex_all, "DFmodel_ex_all.csv")
