R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

###################
# READ THIS FIRST #
###################

# Right-click the R icon and "Run as administrator" > Tools > Check for Updates. Session > Restart R and Clear Output.
# Create new GitHub repository. Open New Project in RStudio w/repo URL.
# Qualtrics: Data & Analysis/Export & Import/Export Data/CSV/Use Numeric values. Extract files.
# Identify column numbers in Excel. Rename csv being read in.

Overview (Steps)

###################
# Import the data #
###################

# Import data, subset and name the variables in the dataframes, remove blanks (by language)
raw.df <- read.csv("UNC Center for Health Equity Research - Health Equity Summer Intensive Evaluation_October 7, 2022_06.34.csv", stringsAsFactors = TRUE)
raw.df <- raw.df[3:nrow(raw.df),] #cut rows 2-3 with question wording & "ImportID"
raw.df$Q3 <- as.character(raw.df$Q3) #convert CATA to character and not factor

#############
# Libraries #
#############
library(data.table) #for %like%
## Warning: package 'data.table' was built under R version 4.1.3
library(dplyr)      #for %>% ?
## Warning: package 'dplyr' was built under R version 4.1.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
## 
##     between, first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.3
#install.packages("ggalt")
library(ggalt)      #for geom_dumbbell
## Warning: package 'ggalt' was built under R version 4.1.3
## Registered S3 methods overwritten by 'ggalt':
##   method                  from   
##   grid.draw.absoluteGrob  ggplot2
##   grobHeight.absoluteGrob ggplot2
##   grobWidth.absoluteGrob  ggplot2
##   grobX.absoluteGrob      ggplot2
##   grobY.absoluteGrob      ggplot2
library(likert)
## Loading required package: xtable
## 
## Attaching package: 'likert'
## The following object is masked from 'package:dplyr':
## 
##     recode
#install.packages("writexl")
library(writexl)
## Warning: package 'writexl' was built under R version 4.1.3
#########################
# Wrangle Dumbbell Data #
#########################

#slice Loop & Merge dataset by sessions for dumbbell
ksa01.df <- raw.df[raw.df$Q3 %like% "1",c(21,22:25)]   #will also catch 10,11,12,14
ksa02.df <- raw.df[raw.df$Q3 %like% "2",c(21,90:93)]   #will also catch 12
ksa03.df <- raw.df[raw.df$Q3 %like% "3",c(21,158:161)]
ksa04.df <- raw.df[raw.df$Q3 %like% "4",c(21,226:229)] #will also catch 14
ksa05.df <- raw.df[raw.df$Q3 %like% "5",c(21,294:297)]
ksa06.df <- raw.df[raw.df$Q3 %like% "6",c(21,362:365)]
ksa07.df <- raw.df[raw.df$Q3 %like% "7",c(21,430:433)]
ksa08.df <- raw.df[raw.df$Q3 %like% "8",c(21,498:501)]
ksa09.df <- raw.df[raw.df$Q3 %like% "9",c(21,566:569)]
ksa10.df <- raw.df[raw.df$Q3 %like% "10",c(21,634:637)]
ksa11.df <- raw.df[raw.df$Q3 %like% "11",c(21,702:705)]
ksaws.df <- raw.df[raw.df$Q3 %like% "12",c(21,770:773)]

#rename the session no. for CATA obs & listwise delete missingness
ksa01.df$Q3[ksa01.df$Q3 != "1"] <- "1"                  #this is key for the CATA
ksa01.df[ksa01.df==""] <- NA
ksa01.df <- na.omit(ksa01.df)                          #listwise delete missingness, else can't compute means

ksa02.df$Q3[ksa02.df$Q3 != "2"] <- "2"
ksa02.df[ksa02.df==""] <- NA
ksa02.df <- na.omit(ksa02.df)

ksa03.df$Q3[ksa03.df$Q3 != "3"] <- "3"
ksa03.df[ksa03.df==""] <- NA
ksa03.df <- na.omit(ksa03.df)

ksa04.df$Q3[ksa04.df$Q3 != "4"] <- "4"
ksa04.df[ksa04.df==""] <- NA
ksa04.df <- na.omit(ksa04.df)                          #listwise delete missingness, else can't compute means

ksa05.df$Q3[ksa05.df$Q3 != "5"] <- "5"
ksa05.df[ksa05.df==""] <- NA
ksa05.df <- na.omit(ksa05.df)

ksa06.df$Q3[ksa06.df$Q3 != "6"] <- "6"
ksa06.df[ksa06.df==""] <- NA
ksa06.df <- na.omit(ksa06.df)                          #listwise delete missingness, else can't compute means

ksa07.df$Q3[ksa07.df$Q3 != "7"] <- "7"
ksa07.df[ksa07.df==""] <- NA
ksa07.df <- na.omit(ksa07.df)

ksa08.df$Q3[ksa08.df$Q3 != "8"] <- "8"
ksa08.df[ksa08.df==""] <- NA
ksa08.df <- na.omit(ksa08.df)

ksa09.df$Q3[ksa09.df$Q3 != "9"] <- "9"
ksa09.df[ksa09.df==""] <- NA
ksa09.df <- na.omit(ksa09.df)

ksa10.df$Q3[ksa10.df$Q3 != "10"] <- "10"
ksa10.df[ksa10.df==""] <- NA
ksa10.df <- na.omit(ksa10.df)                          #listwise delete missingness, else can't compute means

ksa11.df$Q3[ksa11.df$Q3 != "11"] <- "11"
ksa11.df[ksa11.df==""] <- NA
ksa11.df <- na.omit(ksa11.df)

ksaws.df$Q3[ksaws.df$Q3 != "12"] <- "12"
ksaws.df[ksaws.df==""] <- NA
ksaws.df <- na.omit(ksaws.df)

# rename all the columns in these dumbbell dataframes
rename_ksa <- lapply(list(ksa01.df,
                          ksa02.df,
                          ksa03.df,
                          ksa04.df,
                          ksa05.df,
                          ksa06.df,
                          ksa07.df,
                          ksa08.df,
                          ksa09.df,
                          ksa10.df,
                          ksa11.df,
                          ksaws.df),function(x) {
  names(x)<- c("session",
               "prek","prea","postk","posta")
 x})
 
names(rename_ksa) <- c("ksa01.df",
                       "ksa02.df",
                       "ksa03.df",
                       "ksa04.df",
                       "ksa05.df",
                       "ksa06.df",
                       "ksa07.df",
                       "ksa08.df",
                       "ksa09.df",
                       "ksa10.df",
                       "ksa11.df",
                       "ksaws.df")
list2env(rename_ksa, envir = .GlobalEnv)
## <environment: R_GlobalEnv>
#bind the dumbbell dataframes into one
ksa.df <- rbind(ksa01.df,
                 ksa02.df,
                 ksa03.df,
                 ksa04.df,
                 ksa05.df,
                 ksa06.df,
                 ksa07.df,
                 ksa08.df,
                 ksa09.df,
                 ksa10.df,
                 ksa11.df,
                 ksaws.df)

#convert session name to factor 
ksa.df$session <- factor(ksa.df$session,
                          levels = c(1,2,3,4,5,6,7,8,9,10,11,12),
                          labels = c("Concept of Trust",
                                     "Structural Racism",
                                     "Participatory Budgeting",
                                     "Social Determinants of Health",
                                     "Data is More than Numbers",
                                     "Equitable Partnerships",
                                     "Applying an Equity Lens",
                                     "Race & Racism in Healthcare",
                                     "Intervention Mapping",
                                     "Culturally Responsive Evaluation",
                                     "Co-creating Data Visualization",
                                     "Co-Lab(orative) Learning Workshop"))
#convert pre/post scores to numeric type
ksa.df$prek  <- as.numeric(as.character(ksa.df$prek))
ksa.df$prea  <- as.numeric(as.character(ksa.df$prea))
ksa.df$postk <- as.numeric(as.character(ksa.df$postk))
ksa.df$posta <- as.numeric(as.character(ksa.df$posta))

#create a knowledge data frame with generated average scores for dumbbells
ksa.df %>%
  group_by(session) %>%
  summarise_at(vars("prek","postk"), mean)-> prepostk.df
prepostk.df$id <- "knowledge"                                 #this is key for aggregated dataset
names(prepostk.df)<- c("session", "pre","post","id")

#create an ability data frame with generated average scores for dumbbells
ksa.df %>%
  group_by(session) %>%
  summarise_at(vars("prea","posta"), mean)-> preposta.df
preposta.df$id <- "ability"                                   #this is key for aggregated dataset
names(preposta.df)<- c("session", "pre","post","id")

#create one data frame for knowledge & ability by session: https://r-graph-gallery.com/web-extended-dumbbell-plot-ggplot2.html
prepost.df <- rbind(prepostk.df,preposta.df)

#########################
# Wrangle Lollipop Data #
#########################

overall01.df <- raw.df[raw.df$Q3 %like% "1",c(21,70)]   #will also catch 10,11,12,14
overall02.df <- raw.df[raw.df$Q3 %like% "2",c(21,134)]  #will also catch 12
overall03.df <- raw.df[raw.df$Q3 %like% "3",c(21,198)]
overall04.df <- raw.df[raw.df$Q3 %like% "4",c(21,262)]  #will also catch 14
overall05.df <- raw.df[raw.df$Q3 %like% "5",c(21,326)]
overall06.df <- raw.df[raw.df$Q3 %like% "6",c(21,390)]
overall07.df <- raw.df[raw.df$Q3 %like% "7",c(21,464)]
overall08.df <- raw.df[raw.df$Q3 %like% "8",c(21,518)]
overall09.df <- raw.df[raw.df$Q3 %like% "9",c(21,582)]
overall10.df <- raw.df[raw.df$Q3 %like% "10",c(21,646)]
overall11.df <- raw.df[raw.df$Q3 %like% "11",c(21,710)]
overallws.df <- raw.df[raw.df$Q3 %like% "12",c(21,774)]

#rename the session no. for CATA obs & listwise delete missingness
overall01.df$Q3[overall01.df$Q3 != "1"] <- "1"          #this is key for the CATA
overall01.df[overall01.df==""] <- NA
overall01.df <- na.omit(overall01.df)

overall02.df$Q3[overall02.df$Q3 != "2"] <- "2"
overall02.df[overall02.df==""] <- NA
overall02.df <- na.omit(overall02.df)

overall03.df$Q3[overall03.df$Q3 != "3"] <- "3"
overall03.df[overall03.df==""] <- NA
overall03.df <- na.omit(overall03.df)

overall04.df$Q3[overall04.df$Q3 != "4"] <- "4"
overall04.df[overall04.df==""] <- NA
overall04.df <- na.omit(overall04.df)

overall05.df$Q3[overall05.df$Q3 != "5"] <- "5"
overall05.df[overall05.df==""] <- NA
overall05.df <- na.omit(overall05.df)

overall06.df$Q3[overall06.df$Q3 != "6"] <- "6"
overall06.df[overall06.df==""] <- NA
overall06.df <- na.omit(overall06.df)

overall07.df$Q3[overall07.df$Q3 != "7"] <- "7"
overall07.df[overall07.df==""] <- NA
overall07.df <- na.omit(overall07.df)

overall08.df$Q3[overall08.df$Q3 != "8"] <- "8"
overall08.df[overall08.df==""] <- NA
overall08.df <- na.omit(overall08.df)

overall09.df$Q3[overall09.df$Q3 != "9"] <- "9"
overall09.df[overall09.df==""] <- NA
overall09.df <- na.omit(overall09.df)

overall10.df$Q3[overall10.df$Q3 != "10"] <- "10"
overall10.df[overall10.df==""] <- NA
overall10.df <- na.omit(overall10.df)

overall11.df$Q3[overall11.df$Q3 != "11"] <- "11"
overall11.df[overall11.df==""] <- NA
overall11.df <- na.omit(overall11.df)

overallws.df$Q3[overallws.df$Q3 != "12"] <- "12"
overallws.df[overallws.df==""] <- NA
overallws.df <- na.omit(overallws.df)

# rename all the columns in these dumbbell dataframes
rename_overall <- lapply(list(overall01.df,
                              overall02.df,
                              overall03.df,
                              overall04.df,
                              overall05.df,
                              overall06.df,
                              overall07.df,
                              overall08.df,
                              overall09.df,
                              overall10.df,
                              overall11.df,
                              overallws.df),function(x) {
  names(x)<- c("session","rating")
 x})
 
names(rename_overall) <- c("overall01.df",
                           "overall02.df",
                           "overall03.df",
                           "overall04.df",
                           "overall05.df",
                           "overall06.df",
                           "overall07.df",
                           "overall08.df",
                           "overall09.df",
                           "overall10.df",
                           "overall11.df",
                           "overallws.df")
list2env(rename_overall, envir = .GlobalEnv)
## <environment: R_GlobalEnv>
#bind the overall dataframes into one
overall.df <- rbind(overall01.df,
                    overall02.df,
                    overall03.df,
                    overall04.df,
                    overall05.df,
                    overall06.df,
                    overall07.df,
                    overall08.df,
                    overall09.df,
                    overall10.df,
                    overall11.df,
                    overallws.df)

#convert session name to factor 
overall.df$session <- factor(overall.df$session,
                             levels = c(1,2,3,4,5,6,7,8,9,10,11,12),
                             labels = c("Concept of Trust",
                                        "Structural Racism",
                                        "Participatory Budgeting",
                                        "Social Determinants of Health",
                                        "Data is More than Numbers",
                                        "Equitable Partnerships",
                                        "Applying an Equity Lens",
                                        "Race & Racism in Healthcare",
                                        "Intervention Mapping",
                                        "Culturally Responsive Evaluation",
                                        "Co-creating Data Visualization",
                                        "Co-Lab(orative) Learning Workshop"))
#convert overall rating score to numeric type
overall.df$rating  <- as.numeric(as.character(overall.df$rating))

#generate average scores for dumbbells: overall quality for all sessions
overall.df %>%
  group_by(session) %>%
  summarise_at(vars("rating"), mean)-> overall.df

#generate average scores for overall Q
overalltot <- mean(overall.df$rating)

#######################
# Wrangle Likert Data #
#######################

#subset Likert scale items by session
likert01.df <- raw.df[raw.df$Q3 %like% "1",c(21,71:74)]   #will also catch 10,11,12,14
likert02.df <- raw.df[raw.df$Q3 %like% "2",c(21,135:138)] #will also catch 12
likert03.df <- raw.df[raw.df$Q3 %like% "3",c(21,199:202)]
likert04.df <- raw.df[raw.df$Q3 %like% "4",c(21,263:266)] #will also catch 14
likert05.df <- raw.df[raw.df$Q3 %like% "5",c(21,327:330)]
likert06.df <- raw.df[raw.df$Q3 %like% "6",c(21,391:394)]
likert07.df <- raw.df[raw.df$Q3 %like% "7",c(21,455:458)]
likert08.df <- raw.df[raw.df$Q3 %like% "8",c(21,519:522)]
likert09.df <- raw.df[raw.df$Q3 %like% "9",c(21,583:586)]
likert10.df <- raw.df[raw.df$Q3 %like% "10",c(21,647:650)]
likert11.df <- raw.df[raw.df$Q3 %like% "11",c(21,711:714)]
likertws.df <- raw.df[raw.df$Q3 %like% "12",c(21,779:783)]

#rename the Likert session no. for CATA obs & listwise delete missingness
likert01.df$Q3[likert01.df$Q3 != "1"] <- "1"              #this is key for CATA
likert01.df[likert01.df==""] <- NA
likert01.df <- na.omit(likert01.df)

likert02.df$Q3[likert02.df$Q3 != "2"] <- "2"
likert02.df[likert02.df==""] <- NA
likert02.df <- na.omit(likert02.df)

likert03.df$Q3[likert03.df$Q3 != "3"] <- "3"
likert03.df[likert03.df==""] <- NA
likert03.df <- na.omit(likert03.df)

likert04.df$Q3[likert04.df$Q3 != "4"] <- "4"
likert04.df[likert04.df==""] <- NA
likert04.df <- na.omit(likert04.df)

likert05.df$Q3[likert05.df$Q3 != "5"] <- "5"
likert05.df[likert05.df==""] <- NA
likert05.df <- na.omit(likert05.df)

likert06.df$Q3[likert06.df$Q3 != "6"] <- "6"
likert06.df[likert06.df==""] <- NA
likert06.df <- na.omit(likert06.df)

likert07.df$Q3[likert07.df$Q3 != "7"] <- "7"
likert07.df[likert07.df==""] <- NA
likert07.df <- na.omit(likert07.df)

likert08.df$Q3[likert08.df$Q3 != "8"] <- "8"
likert08.df[likert08.df==""] <- NA
likert08.df <- na.omit(likert08.df)

likert09.df$Q3[likert09.df$Q3 != "9"] <- "9"
likert09.df[likert09.df==""] <- NA
likert09.df <- na.omit(likert09.df)

likert10.df$Q3[likert10.df$Q3 != "10"] <- "10"
likert10.df[likert10.df==""] <- NA
likert10.df <- na.omit(likert10.df)

likert11.df$Q3[likert11.df$Q3 != "11"] <- "11"
likert11.df[likert11.df==""] <- NA
likert11.df <- na.omit(likert11.df)

likertws.df$Q3[likertws.df$Q3 != "12"] <- "12"
likertws.df[likertws.df==""] <- NA
likertws.df <- na.omit(likertws.df)

# rename all the columns in these Likert dataframes
rename_likert <- lapply(list(likert01.df,
                             likert02.df,
                             likert03.df,
                             likert04.df,
                             likert05.df,
                             likert06.df,
                             likert07.df,
                             likert08.df,
                             likert09.df,
                             likert10.df,
                             likert11.df),function(x) {
  names(x)<- c("session",
               "effective presenter",
               "knowledgeable presenter",
               "insightful information",
               "relevant techniques")
 x})
 
names(rename_likert) <- c("likert01.df",
                          "likert02.df",
                          "likert03.df",
                          "likert04.df",
                          "likert05.df",
                          "likert06.df",
                          "likert07.df",
                          "likert08.df",
                          "likert09.df",
                          "likert10.df",
                          "likert11.df")
list2env(rename_likert, envir = .GlobalEnv)
## <environment: R_GlobalEnv>
names(likertws.df) <- c("session",
                        "effective guidance",
                        "welcoming space",
                        "structured activities",
                        "insightful information",
                        "relevant techniques")
                            
#bind the Days 1-2 session dataframes into one
likert.df <- rbind(likert01.df,
                   likert02.df,
                   likert03.df,
                   likert04.df,
                   likert05.df,
                   likert06.df,
                   likert07.df,
                   likert08.df,
                   likert09.df,
                   likert10.df,
                   likert11.df)

#convert variables to factor 
likert.df$session <- factor(likert.df$session,
                            levels = c(1,2,3,4,5,6,7,8,9,10,11),
                            labels = c("Concept of Trust",
                                       "Structural Racism",
                                       "Participatory Budgeting",
                                       "Social Determinants of Health",
                                       "Data is More than Numbers",
                                       "Equitable Partnerships",
                                       "Applying an Equity Lens",
                                       "Race & Racism in Healthcare",
                                       "Intervention Mapping",
                                       "Culturally Responsive Evaluation",
                                       "Co-creating Data Visualization"))
likertws.df$session <- factor(likertws.df$session,
                              levels = c(12),
                              labels = c("Co-Lab(orative) Learning Workshop"))

likertlabels <- c("Strongly Disagree",
                  "Somewhat Disagree",
                  "Neither",
                  "Somewhat Agree",
                  "Strongly Agree")

likert.df$`effective presenter` <- factor(likert.df$`effective presenter`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)
likert.df$`knowledgeable presenter` <- factor(likert.df$`knowledgeable presenter`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)
likert.df$`insightful information` <- factor(likert.df$`insightful information`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)
likert.df$`relevant techniques` <- factor(likert.df$`relevant techniques`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)

likertws.df$`effective guidance` <- factor(likertws.df$`effective guidance`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)
likertws.df$`welcoming space` <- factor(likertws.df$`welcoming space`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)
likertws.df$`structured activities` <- factor(likertws.df$`structured activities`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)
likertws.df$`insightful information` <- factor(likertws.df$`insightful information`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)
likertws.df$`relevant techniques` <- factor(likertws.df$`relevant techniques`,
                                          levels = c(1,2,3,4,5),
                                          labels = likertlabels)
#######################
# Wrangle Likert Data #
#######################

#subset likelihood items by session
likely01.df <- raw.df[raw.df$Q3 %like% "1",c(21,80:81)]   #will also catch 10,11,12,14
likely02.df <- raw.df[raw.df$Q3 %like% "2",c(21,144:145)] #will also catch 12
likely03.df <- raw.df[raw.df$Q3 %like% "3",c(21,208:209)]
likely04.df <- raw.df[raw.df$Q3 %like% "4",c(21,272:273)] #will also catch 14
likely05.df <- raw.df[raw.df$Q3 %like% "5",c(21,336:337)]
likely06.df <- raw.df[raw.df$Q3 %like% "6",c(21,400:401)]
likely07.df <- raw.df[raw.df$Q3 %like% "7",c(21,464:465)]
likely08.df <- raw.df[raw.df$Q3 %like% "8",c(21,528:529)]
likely09.df <- raw.df[raw.df$Q3 %like% "9",c(21,592:593)]
likely10.df <- raw.df[raw.df$Q3 %like% "10",c(21,656:657)]
likely11.df <- raw.df[raw.df$Q3 %like% "11",c(21,720:721)]
likelyws.df <- raw.df[raw.df$Q3 %like% "12",c(21,784:785)]

#rename the likely session no. for CATA obs & listwise delete missingness
likely01.df$Q3[likely01.df$Q3 != "1"] <- "1"              #this is key for CATA
likely01.df[likely01.df==""] <- NA
likely01.df <- na.omit(likely01.df)

likely02.df$Q3[likely02.df$Q3 != "2"] <- "2"
likely02.df[likely02.df==""] <- NA
likely02.df <- na.omit(likely02.df)

likely03.df$Q3[likely03.df$Q3 != "3"] <- "3"
likely03.df[likely03.df==""] <- NA
likely03.df <- na.omit(likely03.df)

likely04.df$Q3[likely04.df$Q3 != "4"] <- "4"
likely04.df[likely04.df==""] <- NA
likely04.df <- na.omit(likely04.df)

likely05.df$Q3[likely05.df$Q3 != "5"] <- "5"
likely05.df[likely05.df==""] <- NA
likely05.df <- na.omit(likely05.df)

likely06.df$Q3[likely06.df$Q3 != "6"] <- "6"
likely06.df[likely06.df==""] <- NA
likely06.df <- na.omit(likely06.df)

likely07.df$Q3[likely07.df$Q3 != "7"] <- "7"
likely07.df[likely07.df==""] <- NA
likely07.df <- na.omit(likely07.df)

likely08.df$Q3[likely08.df$Q3 != "8"] <- "8"
likely08.df[likely08.df==""] <- NA
likely08.df <- na.omit(likely08.df)

likely09.df$Q3[likely09.df$Q3 != "9"] <- "9"
likely09.df[likely09.df==""] <- NA
likely09.df <- na.omit(likely09.df)

likely10.df$Q3[likely10.df$Q3 != "10"] <- "10"
likely10.df[likely10.df==""] <- NA
likely10.df <- na.omit(likely10.df)

likely11.df$Q3[likely11.df$Q3 != "11"] <- "11"
likely11.df[likely11.df==""] <- NA
likely11.df <- na.omit(likely11.df)

likelyws.df$Q3[likelyws.df$Q3 != "12"] <- "12"
likelyws.df[likelyws.df==""] <- NA
likelyws.df <- na.omit(likelyws.df)

# rename all the columns in these likelihood dataframes
rename_likely <- lapply(list(likely01.df,
                             likely02.df,
                             likely03.df,
                             likely04.df,
                             likely05.df,
                             likely06.df,
                             likely07.df,
                             likely08.df,
                             likely09.df,
                             likely10.df,
                             likely11.df,
                             likelyws.df),function(x) {
  names(x)<- c("session",
               "use what you learned",
               "recommend this session to others")
 x})
 
names(rename_likely) <- c("likely01.df",
                          "likely02.df",
                          "likely03.df",
                          "likely04.df",
                          "likely05.df",
                          "likely06.df",
                          "likely07.df",
                          "likely08.df",
                          "likely09.df",
                          "likely10.df",
                          "likely11.df",
                          "likelyws.df")
list2env(rename_likely, envir = .GlobalEnv)
## <environment: R_GlobalEnv>
#bind the likelihood dataframes into one
likely.df <- rbind(likely01.df,
                   likely02.df,
                   likely03.df,
                   likely04.df,
                   likely05.df,
                   likely06.df,
                   likely07.df,
                   likely08.df,
                   likely09.df,
                   likely10.df,
                   likely11.df,
                   likelyws.df)

#convert likelihood variables to factor
likely.df$session <- factor(likely.df$session,
                            levels = c(1,2,3,4,5,6,7,8,9,10,11,12),
                            labels = c("Concept of Trust",
                                       "Structural Racism",
                                       "Participatory Budgeting",
                                       "Social Determinants of Health",
                                       "Data is More than Numbers",
                                       "Equitable Partnerships",
                                       "Applying an Equity Lens",
                                       "Race & Racism in Healthcare",
                                       "Intervention Mapping",
                                       "Culturally Responsive Evaluation",
                                       "Co-creating Data Visualization",
                                       "Co-Lab(orative) Learning Workshop"))
likelylabels <- c("Not at all Likely",
                  "Somewhat Unlikely",
                  "Neutral",
                  "Somewhat Likely",
                  "Extremely Likely")
likely.df$`use what you learned` <- factor(likely.df$`use what you learned`,
                                           levels = c(1,2,3,4,5),
                                           labels = likelylabels)
likely.df$`recommend this session to others` <- factor(likely.df$`recommend this session to others`,
                                           levels = c(1,2,3,4,5),
                                           labels = likelylabels)

####################
# Wrangle Feedback #
####################
feedback01.df <- raw.df[raw.df$Q3 %like% "1",c(19,21,83,85)]   #will also catch 10,11,12,14
feedback02.df <- raw.df[raw.df$Q3 %like% "2",c(19,21,147,149)] #will also catch 12
feedback03.df <- raw.df[raw.df$Q3 %like% "3",c(19,21,211,213)]
feedback04.df <- raw.df[raw.df$Q3 %like% "4",c(19,21,275,277)] #will also catch 14
feedback05.df <- raw.df[raw.df$Q3 %like% "5",c(19,21,339,341)]
feedback06.df <- raw.df[raw.df$Q3 %like% "6",c(19,21,402,403,405)]
feedback07.df <- raw.df[raw.df$Q3 %like% "7",c(19,21,467,469)]
feedback08.df <- raw.df[raw.df$Q3 %like% "8",c(19,21,531,533)]
feedback09.df <- raw.df[raw.df$Q3 %like% "9",c(19,21,595,597)]
feedback10.df <- raw.df[raw.df$Q3 %like% "10",c(19,21,659,661)]
feedback11.df <- raw.df[raw.df$Q3 %like% "11",c(19,21,723,725)]
feedbackws.df <- raw.df[raw.df$Q3 %like% "12",c(19,21,788,789)]
feedbackheri.df <- raw.df[raw.df$Q3 %like% "14", c(19,21,854:856)]

#rename the likelihood session no. for CATA obs & listwise delete missingness
feedback01.df$Q3[feedback01.df$Q3 != "1"] <- "1"              #this is key for CATA
feedback01.df[feedback01.df==""] <- NA

feedback02.df$Q3[feedback02.df$Q3 != "2"] <- "2"
feedback02.df[feedback02.df==""] <- NA

feedback03.df$Q3[feedback03.df$Q3 != "3"] <- "3"
feedback03.df[feedback03.df==""] <- NA

feedback04.df$Q3[feedback04.df$Q3 != "4"] <- "4"
feedback04.df[feedback04.df==""] <- NA

feedback05.df$Q3[feedback05.df$Q3 != "5"] <- "5"
feedback05.df[feedback05.df==""] <- NA

feedback06.df$Q3[feedback06.df$Q3 != "6"] <- "6"
feedback06.df[feedback06.df==""] <- NA

feedback07.df$Q3[feedback07.df$Q3 != "7"] <- "7"
feedback07.df[feedback07.df==""] <- NA

feedback08.df$Q3[feedback08.df$Q3 != "8"] <- "8"
feedback08.df[feedback08.df==""] <- NA

feedback09.df$Q3[feedback09.df$Q3 != "9"] <- "9"
feedback09.df[feedback09.df==""] <- NA

feedback10.df$Q3[feedback10.df$Q3 != "10"] <- "10"
feedback10.df[feedback10.df==""] <- NA

feedback11.df$Q3[feedback11.df$Q3 != "11"] <- "11"
feedback11.df[feedback11.df==""] <- NA

feedbackws.df$Q3[feedbackws.df$Q3 != "12"] <- "12"
feedbackws.df[feedbackws.df==""] <- NA

feedbackheri.df$Q3[feedbackheri.df$Q3 != "14"] <- "14"
feedbackheri.df[feedbackheri.df==""] <- NA

# rename all the columns in these Likert dataframes
rename_feedback <- lapply(list(feedback01.df,
                               feedback02.df,
                               feedback03.df,
                               feedback04.df,
                               feedback05.df,
#                               feedback06.df,
                               feedback07.df,
                               feedback08.df,
                               feedback09.df,
                               feedback10.df,
                               feedback11.df,
                               feedbackws.df),function(x) {
  names(x)<- c("role","session",
               "session improvements",
               "session relevance")
 x})
 
names(rename_feedback) <- c("feedback01.df",
                            "feedback02.df",
                            "feedback03.df",
                            "feedback04.df",
                            "feedback05.df",
#                            "feedback06.df",
                            "feedback07.df",
                            "feedback08.df",
                            "feedback09.df",
                            "feedback10.df",
                            "feedback11.df",
                            "feedbackws.df")
list2env(rename_feedback, envir = .GlobalEnv)
## <environment: R_GlobalEnv>
names(feedback06.df) <- c("role","session",
                        "use in work",
                        "session improvements",
                        "session relevance")
names(feedbackheri.df) <- c("role","session",
                            "networking",
                            "event improvements",
                            "event successes")
                            
#bind the dataframes into one
feedback.df <- rbind(feedback01.df,
                     feedback02.df,
                     feedback03.df,
                     feedback04.df,
                     feedback05.df,
#                     feedback06.df,
                     feedback07.df,
                     feedback08.df,
                     feedback09.df,
                     feedback10.df,
                     feedback11.df,
                     feedbackws.df)

#convert feedback variables to factor 
feedback.df$session <- factor(feedback.df$session,
                    levels = c(1,2,3,4,5,6,7,8,9,10,11,12),
                    labels = c("Concept of Trust",
                               "Structural Racism",
                               "Participatory Budgeting",
                               "Social Determinants of Health",
                               "Data is More than Numbers",
                               "Equitable Partnerships",
                               "Applying an Equity Lens",
                               "Race & Racism in Healthcare",
                               "Intervention Mapping",
                               "Culturally Responsive Evaluation",
                               "Co-creating Data Visualization",
                               "Co-Lab(orative) Learning Workshop"))
feedback06.df$session <- factor(feedback06.df$session,
                                levels = c(6),
                                labels = c("Equitable Partnerships"))
feedbackheri.df$session <- factor(feedbackheri.df$session,
                                  levels = c(14),
                                  labels = c("HERI"))
feedback.df$role <- factor(feedback.df$role,
                           levels = c(1,2,7,5,4,6),
                           labels = c("Student","Faculty","Research Staff","Corporate/Industry","Community Member","Other"))

#write_xlsx(feedback.df,"C:\\Users\\josep\\Documents\\HERI\\feedback-mmdd.xlsx") #create a spreadsheet out of the dataframe; will stop knitting
#write_xlsx(feedback06.df,"C:\\Users\\josep\\Documents\\HERI\\feedbackS6-mmdd.xlsx")
#write_xlsx(feedbackheri.df,"C:\\Users\\josep\\Documents\\HERI\\feedbackheri-mmdd.xlsx")

#####################
# Dumbbell Settings #
#####################

# Version 1: https://r-graph-gallery.com/web-extended-dumbbell-plot-ggplot2.html (too many dots from full dataset)
# Version 2: from IIN (just dots plus legend with generated averages)
# Version 3: https://datavizpyr.com/dumbbell-plot-in-r-with-ggplot2/(did not print)
# Version 4: https://www.geeksforgeeks.org/how-to-make-dumbbell-plot-in-r-with-ggplot2/ (works with generated averages, sorted by session name)
# Version 5: https://www.youtube.com/watch?v=USNOB-5ou8k&ab_channel=BusinessScience at 2:1 (works with generated averages, plus guiding lines, sorted by greatest difference)
# Version 6: https://www.connorrothschild.com/post/dumbbell-plots/ with difference scores (works but can't get difference scores to print)

gold <- "#d8b365"
teal <- "#5ab4ab"

xsubtitle <- "Average Ratings (out of 5)"
caption <- "Source: 2022 HERI Evaluation Survey"

###########################
# K for all sessions #
###########################
prepost.df [prepost.df$id=="knowledge",] %>%                 #runs code if these cells have a certain value
  mutate(difference = (post-pre),                            #generates a difference score
         position = post - (0.5 * difference)) %>%           #half-way between pre and post, from the post dot
  
  ggplot() + 
  aes(x = pre,
      xend = post,
#      y = session) + #default: sorted by session name
      y = reorder(session, pre), group = session) +          #sorted by greatest pre score; could replace with difference
  geom_dumbbell(
    size_x = 5, colour_x = gold,                             #orange pre dot
    size_xend = 5, colour_xend = teal,                       #green post dot
    size = 1,                                                  #black line
    dot_guide = TRUE,
    dot_guide_size = 0.15,
    dot_guide_colour = "grey60") +
  scale_x_continuous(breaks = seq (1,5,1),limits = c(1,5)) + #show x axis from 1 to 5 in intervals of 1, even if no data
   geom_text(data=filter(prepost.df, session=="Race & Racism in Healthcare"),
            aes(x=pre, y=session, label = "Before"),
            color = gold, size=2, vjust=-1.5, fontface="bold",family="Lato")+
   geom_text(data=filter(prepost.df, session=="Race & Racism in Healthcare"),
            aes(x=post, y=session, label = "After"),
            color = teal, size=2, vjust=-1.5, fontface="bold",family="Lato")+
   geom_text(aes(x=pre,y=session,label = round(pre, digits = 1)), color = "white", size = 2) +             #insert pre-score in dot, rounding to 1 decimal place
   geom_text(aes(x=post,y=session,label = round(post, digits = 1)), color = "white", size = 2) +           #insert post-score in dot, rounding to 1 decimal place
   geom_text(aes(x=position,y=session,label = round(difference, digits = 1)), nudge_y = 0.25, size = 1.5)+ #insert difference over line
  labs(title = "Knowledge Ratings Before & After Each Session", y = NULL, x = xsubtitle, caption = caption) +
  theme(panel.border = element_blank(),                                   #no gap
        panel.background = element_rect(fill = 'transparent',color = NA), #transparent bkgd
        panel.grid.minor = element_blank(), 
        panel.grid.major.y = element_blank(),
        panel.grid.major.x = element_line(), 
        axis.ticks = element_blank())                                     #no ticks
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database

ggsave("Session All - Knowledge.png", height = 4, width = 7)
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
######################
# A for all sessions #
######################
prepost.df [prepost.df$id == "ability",] %>% 
  mutate(difference = (post-pre),
         position = post - (0.5 * difference)) %>%           
  
  ggplot() + 
  aes(x = pre,
      xend = post,
#      y = session) + #default: sorted by session name
      y = reorder(session, pre), group = session) +                
  geom_dumbbell(
    size_x = 5, colour_x = gold,
    size_xend = 5, colour_xend = teal,
    size = 1,
    dot_guide = TRUE,
    dot_guide_size = 0.15,
    dot_guide_colour = "grey60") +
  scale_x_continuous(breaks = seq (1,5,1),limits = c(1,5)) + 
   geom_text(data=filter(prepost.df, session=="Race & Racism in Healthcare"),
            aes(x=pre, y=session, label = "Before"),
            color = gold, size=2, vjust=-1.5, fontface="bold",family="Lato")+
   geom_text(data=filter(prepost.df, session=="Race & Racism in Healthcare"),
            aes(x=post, y=session, label = "After"),
            color = teal, size=2, vjust=-1.5, fontface="bold",family="Lato")+
   geom_text(aes(x=pre,y=session,label = round(pre, digits = 1)), color = "white", size = 2) +             
   geom_text(aes(x=post,y=session,label = round(post, digits = 1)), color = "white", size = 2) +           
   geom_text(aes(x=position,y=session,label = round(difference, digits = 1)), nudge_y = 0.25, size = 1.5)+ 
  labs(title = "Ability Ratings Before & After Each Session", y = NULL, x = xsubtitle, caption = caption) +
  theme(panel.border = element_blank(),                                   
        panel.background = element_rect(fill = 'transparent',color = NA), 
        panel.grid.minor = element_blank(), 
        panel.grid.major.y = element_blank(),
        panel.grid.major.x = element_line(), 
        axis.ticks = element_blank())                                     
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database

ggsave("Session All - Ability.png", height = 4, width = 7)
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
############################
# Overall for all sessions #
############################
 overall.df %>% 
  ggplot() + 
  aes(x = rating,
      xend = rating,
      y = reorder(session, rating), group = session) +
  geom_dumbbell(
    size_x = 5, colour_x = gold,
    size_xend = 5, colour_xend = teal,
    size = 1,
    dot_guide = TRUE,
    dot_guide_size = 0.2,
    dot_guide_colour = "black") +
  scale_x_continuous(breaks = seq (1,5,1),limits = c(1,5)) + 
  geom_text(aes(label = round(rating, digits = 1)), color = "white", size = 2) + #insert rating in lollipop, rounding to 1 decimal place
  labs(title = "Overall Ratings for Each Session", y = NULL, x = "average ratings (from very poor to excellent)",
       caption = caption) +
  theme(panel.border = element_blank(),                                   
        panel.background = element_rect(fill = 'transparent',color = NA), 
        panel.grid.minor = element_blank(), 
        panel.grid.major.y = element_blank(),
        panel.grid.major.x = element_line(), 
        axis.ticks = element_blank())                                     

ggsave("Session All - Overall Rating.png", height = 3.5, width = 7)

#########################################
# Session Settings: Dumbbell AND Likert #
#########################################

# CHANGE thissession, GGSAVEs; RERUN for each session

thissession <- "Concept of Trust"
#thissession <- "Structural Racism"
#thissession <- "Participatory Budgeting"
#thissession <- "Social Determinants of Health"
#thissession <- "Data is More than Numbers"
#thissession <- "Equitable Partnerships"
#thissession <- "Applying an Equity Lens"
#thissession <- "Race & Racism in Healthcare"
#thissession <- "Intervention Mapping"
#thissession <- "Culturally Responsive Evaluation"
#thissession <- "Co-creating Data Visualization"
#thissession <- "Co-Lab(orative) Learning Workshop"

######################
# K and A by session #
######################
prepost.df [prepost.df$session==thissession,] %>% 
  ggplot() + 
  aes(x = pre,
      xend = post,
      y = id) + 
  geom_dumbbell(
    size_x = 2, colour_x = gold,
    size_xend = 2, colour_xend = teal,
    size = 1,
    dot_guide = TRUE,
    dot_guide_size = 0.15,
    dot_guide_colour = "grey60") +
  scale_x_continuous(breaks = seq (1,5,1),limits = c(1,5)) + 
  #geom_text(data=filter(prepost.df, id=="knowledge"),
  #          aes(x=pre, y=session, label="Before"),
  #          color = gold, size=2, vjust=-1.5, fontface="bold",family="Lato") +
  #geom_text(data=filter(prepost.df, id=="knowledge"),
  #          aes(x=post, y=session, label = "After"),
  #          color = teal, size=2, vjust=-1.5, fontface="bold",family="Lato") +
  labs(title = thissession, y = NULL, x = xsubtitle, 
       subtitle = "Changes in knowledge & ability ratings", 
       caption = caption) +
  theme(
        panel.grid.minor = element_blank(), 
        panel.grid.major.y = element_blank(),
        panel.grid.major.x = element_line(), 
        axis.ticks = element_blank(),        
        panel.border = element_blank(),     
        panel.background = element_rect(fill = 'transparent',color = NA) 
        )

ggsave("Session ## - K and A.png", height = 1.5, width = 5)

#####################
# Likert by session #
#####################

quant <- likert(likert.df[likert.df$session==thissession,2:5])
plot(quant, positive.order = TRUE) + 
  labs(title = thissession)

ggsave("Session ## - Quant.png", width = 9, height = 2.5)

#quantws <- likert(likertws.df[likertws.df$session==thissession,2:6])
#plot(quantws, positive.order = TRUE) + 
#  labs(title = thissession)

#ggsave("Session 12 - Quant.png", width = 9, height = 2.5)

#########################
# Likelihood by session #
#########################
likely <- likert(likely.df[likely.df$session==thissession,2:3])
plot(likely, positive.order = TRUE) + 
  labs(title = thissession, subtitle = "How likely are you to...")

ggsave("Session ## - Likely.png", width = 9, height = 2)