library(readr)
df <- read_csv("WS_Dictator_data.csv")

library(tidyverse)
library(lmerTest)
library(lmtest)
library(sjPlot)
library(ggsignif)
library(WRS2)

# setting variable types
df$ID <- as.factor(df$ID)
df$Group <- as.factor(df$Group)
df$Condition <- as.factor(df$Condition)

df$Decision <- as.numeric(df$Decision)
df$Gave_0 <- as.factor(df$Gave_0)
df$Gave_3 <- as.factor(df$Gave_3)
df$Gave_MT_3 <- as.factor(df$Gave_MT_3)

is.factor(df$ID)
is.factor(df$Group)
is.factor(df$Condition)

## Test model order using lme
library(nlme)
lme0 <- lme(Decision ~ 1, data = df, random = ~1|ID, method = "ML")
lme1 <- lme(Decision ~ Model_Order, data = df, random = ~1|ID, method = "ML")
anova(lme0,lme1)
# Order does not improve model

# test for normality by total decision per participant
df_test = df %>%
  dplyr::select(ID, Group, Decision) %>%
  group_by(ID, Group) %>% 
  summarise(total = sum(Decision))

# normality test
shapiro.test(df_test$total)
# W = 0.92722, p-value = 0.0184

## Data fails normality test so use heteroscedastic ANOVA (from WRS2)

set.seed(12345)

WRS2::med1way(total ~ Group,
              data = df_test)
# Test statistic F: 5.1835 
# Critical value: 3.5666 
# p-value: 0.022 

## sig diffs between WS and TD medians

##################### wilcoxon
## comparing groups for each condition
wilcox.test(df$Decision[df$Group == "WS" & df$Condition == "Baseline"], df$Decision[df$Group == "TD" & df$Condition == "Baseline"])
wilcox.test(df$Decision[df$Group == "WS" & df$Condition == "Generous"], df$Decision[df$Group == "TD" & df$Condition == "Generous"])
wilcox.test(df$Decision[df$Group == "WS" & df$Condition == "Selfish"], df$Decision[df$Group == "TD" & df$Condition == "Selfish"])

# wilcox.test notes that can't compute exact p values with ties, so verified the results using coin::wilcox_test
library(coin)
df.baseline <- subset(df, Condition=="Baseline")
df.generous <- subset(df, Condition=="Generous")
df.selfish <- subset(df, Condition=="Selfish")

wilcox_test(Decision ~ Group, data = df.baseline)
wilcox_test(Decision ~ Group, data = df.generous)
wilcox_test(Decision ~ Group, data = df.selfish)

################################## Friedman

## non-parametric tests to look at condition diffs within each group
friedman.test(
  as.matrix(data.frame(Decw =df$Decision[df$Group == "WS"], cond.w = df$Condition[df$Group == "WS"], ID.w = df$ID[df$Group == "WS"])))

friedman.test(
  as.matrix(data.frame(Decw =df$Decision[df$Group == "TD"], cond.w = df$Condition[df$Group == "TD"], ID.w = df$ID[df$Group == "TD"])))

# Posthoc
library(PMCMR)
posthoc.friedman.conover.test(y = c(df$Decision[df$Group == "WS"]), groups = c(df$Condition[df$Group == "WS"]), blocks = c(df$ID[df$Group == "WS"]) %>% droplevels())
posthoc.friedman.conover.test(y = c(df$Decision[df$Group == "TD"]), groups = c(df$Condition[df$Group == "TD"]), blocks = c(df$ID[df$Group == "TD"]))
## sig diffs between baseline and Selfish and Generous for both WS and TD; for both Selfish and Generous do not differ


################################## GLMMs for Exploratory Analyses

## Use generalized linear mixed effects models to test dichotomous variables for giving categories
library(lme4)
library(optimx)
library(phia)

df$Condition <- relevel(df$Condition, ref = 'Baseline')

## WS Group
# Gave zero
dg.1 <- glmer(Gave_0 ~ Group*Condition + (1|ID), data = df, family = binomial, control = glmerControl(optimizer = "bobyqa", calc.derivs = FALSE,optCtrl = list(maxfun=50000)))
summary(dg.1)
# no diffs

dg.2 <- glmer(Gave_0 ~ Group + Condition + (1|ID), data = df, family = binomial, control = glmerControl(optimizer = "bobyqa", calc.derivs = FALSE,optCtrl = list(maxfun=50000)))
summary(dg.2)
# no diffs

# Gave 3 (half)
dg.3 <- glmer(Gave_3 ~ Group*Condition + (1|ID), data = df, family = binomial, control = glmerControl(optimizer = "bobyqa", calc.derivs = FALSE,optCtrl = list(maxfun=50000)))
summary(dg.3)
# Selfish condition at p = .053

dg.4 <- glmer(Gave_3 ~ Group + Condition + (1|ID), data = df, family = binomial, control = glmerControl(optimizer = "bobyqa", calc.derivs = FALSE,optCtrl = list(maxfun=50000)))
summary(dg.4)
# no diffs here so Selfish not different

# Gave more than 3 (generous)
dg.5 <- glmer(Gave_MT_3 ~ Group*Condition + (1|ID), data = df, family = binomial, control = glmerControl(optimizer = "bobyqa", calc.derivs = FALSE,optCtrl = list(maxfun=50000)))
summary(dg.5)
# coeffs large, se all same; likely due to TD Baseline having no Gave_MT_3

dg.6 <- glmer(Gave_MT_3 ~ Group + Condition + (1|ID), data = df, family = binomial, control = glmerControl(optimizer = "bobyqa", calc.derivs = FALSE,optCtrl = list(maxfun=50000)))
summary(dg.6)
# for Group, p = .0342; Generous Condition, p = .0729, higher relative to baseline

# set ref level to Selfish to test Generous-Selfish contrasts
df$Condition <- relevel(df$Condition, ref = 'Selfish')
# none sig

