---
title: "
Visualization of patterns of response data by Agustin Calatroni"
output:
html_document:
self_containded: TRUE
code_download: yes
toc: false
---
```{r setup, include=FALSE}
options(width = 200)
knitr::opts_chunk$set(echo = FALSE, eval = TRUE, warning = FALSE, message = FALSE, comment = NA, cache = FALSE)
```
```{r packages}
pacman::p_load(tidyverse, rio)
pacman::p_load(lubridate)
pacman::p_load(labelled)
```
```{r derive-data}
# Import All
d_all <- import("https://raw.githubusercontent.com/VIS-SIG/Wonderful-Wednesdays/master/data/2021/2021-03-10/AppData_FINAL.csv") %>%
mutate(across(starts_with("date"), ~dmy(.x))) %>%
arrange(AppID, date)
# Export
export(d_all, "f_lineup.csv")
# Labels
var_label(d_all) <- list(AppID = 'Participant Identifier for App Data',
activated = 'User Activated?',
date = 'Date of Activity in the App',
time = 'Time of Activity in the App',
date1 = 'Baseline Visit ',
date2 = 'Month 1 Visit' ,
date3 = 'Month 2 Visit' ,
date4 = 'Month 3 Visit' ,
sitekey = 'Site',
severity = 'COPD Severity',
sex = 'Gender of participant',
age = 'Age',
durationofcopd = 'No. Years since COPD Diagnosis',
smokstatus = 'Smoking Status at Baseline',
generalV = 'COPD Education Video',
prV = 'COPD Pulmonary Rehab Video',
inhalerV = 'How to use Inhaler Video',
mindV = 'Mindfulness activity video',
smokeV = 'Smoking Cessation video' ,
symptomscore = 'Symptom Score Rating ',
catscore = 'COPD Assessment Test (CAT) Score',
catRisk = 'CAT Risk Group')
# 1 rec per participant variables
d_per <- d_all %>%
select(AppID, activated, date1:date4, sitekey, severity, sex, age, durationofcopd, smokstatus) %>%
distinct() %>%
rowwise() %>%
mutate(nvisit = 4-sum(is.na(date1) + is.na(date2) + is.na(date3) + is.na(date4)))
# 1 rec per participant per day in app usage (idea, amount of time the app was used)
d_vis <- d_all %>%
select(AppID, date, generalV:smokeV, symptomscore) %>%
distinct() %>%
mutate(across(c(generalV, prV, inhalerV, mindV, smokeV), ~ifelse(is.na(.x), 0, .x))) %>%
group_by(AppID, date) %>%
summarise(across(c(generalV:smokeV), ~max(.x, na.rm = TRUE)))
# 1 rec per participant summing all daily activities
d_vis_activity <- d_vis %>%
select(-date) %>%
group_by(AppID) %>%
summarise(across(c(generalV:smokeV), ~sum(.x, na.rm = TRUE)))
# 1 rec per participant per day in CAT
d_cat <- d_all %>%
select(AppID, date, catscore) %>%
group_by(AppID, date) %>%
summarise(catscore = mean(catscore, na.rm = TRUE)) %>%
drop_na(catscore)
# 1 rec per participant per day in Symptoms
d_symp <- d_all %>%
select(AppID, date, symptomscore) %>%
group_by(AppID, date) %>%
summarise(symptomscore = mean(symptomscore, na.rm = TRUE)) %>%
drop_na(symptomscore)
# All Days
d_day <- d_per %>%
select(AppID, date1, date4) %>%
mutate(date4 = ifelse(is.na(date4), date1+90, date4),
date4 = as_date(date4)) %>%
pivot_longer(cols = -1,
values_to = 'date') %>%
group_by(AppID) %>%
complete(date = seq(from = min(date), to = max(date), by = 1)) %>%
mutate(day = 1:n()) %>%
ungroup() %>%
left_join(d_cat) %>%
left_join(d_symp)
# Create Visit (months) data
d_group <- tribble(~day, ~group,
1, 'B',
2:31, 'M1',
32:62, 'M2',
63:100, 'M3') %>%
unnest()
# Get Means by Visit (month)
d_group <- d_day %>%
left_join(d_group) %>%
group_by(AppID, group) %>%
summarise(across(c(catscore, symptomscore), ~mean(.x, na.rm = TRUE))) %>%
mutate(across(c(catscore, symptomscore), ~ifelse(is.nan(.x), NA, .x)))
# CHECK Imputed
d_group_i <- d_group %>%
group_by(AppID) %>%
rename(cat = catscore,
symp = symptomscore) %>%
fill(cat, .direction = 'downup') %>%
mutate(cat_ch = cat - cat[1],
symp_ch = symp - symp[1]) %>%
filter(group != "Baseline")
d_group_i <- d_group_i %>%
pivot_wider(id_cols = AppID,
names_from = group,
values_from = c(cat_ch, symp_ch))
# Merge and export
d_1rec <- d_per %>%
left_join(d_vis_activity) %>%
left_join(d_group_i) %>%
ungroup() %>%
arrange(match(AppID, c(18,16,6,3,10,4,20,5,19,13,2,11,8,14,15,1,12,7,9,17,21,35,36,37,45,46,47,50,57))) %>%
mutate(severity = str_to_title(severity) %>% as.factor(),
sitekey = as.factor(sitekey),
sex = str_sub(sex,1,1) %>% as.factor(),
smokstatus = str_to_title(smokstatus) %>% as.factor(),
activated = as.factor(activated),
age = as.numeric(age),
activated = factor(activated, labels = c("N","Y")),
AppID = str_glue("ID-{AppID}")
) %>%
select(-starts_with("date"), -nvisit) %>%
rename(site = sitekey,
sev = severity,
dx_copd = durationofcopd,
smoke = smokstatus) %>%
rename(cat_B = cat_ch_B,
cat_1 = cat_ch_M1,
cat_2 = cat_ch_M2,
cat_3 = cat_ch_M3,
symp_B = symp_ch_B,
symp_1 = symp_ch_M1,
symp_2 = symp_ch_M2,
symp_3 = symp_ch_M3) %>%
mutate(across(c(dx_copd,cat_B,cat_1,cat_2,cat_3,symp_B,symp_1,symp_2,symp_3),
~round(.x, digits = 2) %>%
as.character() %>%
as.numeric())) %>%
as.data.frame()
```
```{r lineup}
#devtools::install_github("datavisyn/lineup_htmlwidget")
library(lineupjs)
lineup(d_1rec,
height = "950px",
width = "1750px",
options = list(rowHeight = 25,
labelRotation = 45),
ranking = lineupRanking(columns = c('_aggregate','AppID','activated','site','sev', 'sex', 'smoke','age','dx_copd','Video'),
Video = list(type = 'weightedSum',
columns = c("prV", "generalV", "inhalerV", "mindV", "smokeV"),
weights = c(0.2, 0.2, 0.2, 0.2, 0.2),
label = "Video"),
sortBy = "Video:desc"),
ranking1 = lineupRanking(columns = c("cat_3","cat_2"),
sortBy = "cat_3:desc")
)
```
```{r}
pacman::p_load(sessioninfo, details)
session_info()%>%
details(
summary = 'Current session info',
open = FALSE
)
```
```{=html}
Video
LineUp InfoVis Demonstration Video
VIDEO
Publications
LineUp: Visual Analysis of Multi-Attribute Rankings
Paper
Paper Website
Samuel Gratzl, Alexander Lex, Nils Gehlenborg, Hanspeter Pfister, and Marc Streit
IEEE Transactions on Visualization and Computer Graphics (InfoVis '13), 19(12), pp. 2277-2286,
doi:10.1109/TVCG.2013.173 , 2013.
```
#### Links
- Github:
- Help:
- Website:
- Apps:
- App Github