---
title: "activAnalyzer"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{activAnalyzer}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
The activAnalyzer package was primarily built for working through a Shiny app. The procedure for using the app is explained in the related [user's guide](https://github.com/pydemull/activAnalyzer/blob/master/inst/guide/user_guide_en.pdf). The functions used in this app can also be used to analyze data outside the app, as shown below.
## Loading packages
```{r setup, warning=FALSE, message=FALSE}
library(activAnalyzer)
library(magrittr)
library(ggplot2)
library(patchwork)
library(dplyr)
```
## Getting file
```{r}
file <- system.file("extdata", "acc.agd", package = "activAnalyzer")
```
## Preparing dataset
```{r, warning=FALSE, message=FALSE}
mydata <- prepare_dataset(data = file)
```
## Getting nonwear/wear time marks
```{r, message = FALSE}
mydata_with_wear_marks <-
mydata %>%
mark_wear_time(
to_epoch = 60,
cts = "vm",
frame = 90,
allowanceFrame = 2,
streamFrame = 30
)
```
```{r, include=FALSE}
height_factor <- nlevels(as.factor(mydata_with_wear_marks$date)) * 0.80
```
## Viewing data with nonwear/wear time marks
```{r, fig.height = height_factor, fig.width=7, fig.align="center"}
#| fig.alt: >
#| Plot with nonwear/wear time marks
plot_data(data = mydata_with_wear_marks, metric = "vm")
```
## Viewing data with nonwear/wear time marks and with a zoom in on the figure
```{r, fig.height = height_factor, fig.width=7, fig.align="center"}
#| fig.alt: >
#| Plot with nonwear/wear time marks and with a zoom in on the figure
plot_data(
data = mydata_with_wear_marks,
metric = "vm",
zoom_from = "16:00:00",
zoom_to = "18:00:00"
)
```
## Getting activity intensity marks
```{r, warning = FALSE, message = FALSE}
mydata_with_intensity_marks <-
mark_intensity(
data = mydata_with_wear_marks,
col_axis = "vm",
equation = "Sasaki et al. (2011) [Adults]",
sed_cutpoint = 200,
mpa_cutpoint = 2690,
vpa_cutpoint = 6167,
age = 32,
weight = 67,
sex = "male"
)
```
## Viewing data with activity intensity marks
```{r, fig.height = height_factor, fig.width=7, fig.align="center"}
#| fig.alt: >
#| Plot with activity intensity marks
plot_data_with_intensity(
mydata_with_intensity_marks,
metric = "vm",
valid_wear_time_start = "00:00:00",
valid_wear_time_end = "23:59:59"
)
```
## Viewing data with activity intensity marks and grey bands to highlight the daily period considered for analysis
```{r, fig.height = height_factor, fig.width=7, fig.align="center"}
#| fig.alt: >
#| Plot with activity intensity marks and grey bands to highlight the daily period considered for analysis
plot_data_with_intensity(
mydata_with_intensity_marks,
metric = "vm",
valid_wear_time_start = "07:00:00",
valid_wear_time_end = "22:00:00"
)
```
## Viewing data with activity intensity marks and a zoom in on the figure
```{r, fig.height = height_factor, fig.width=7, fig.align="center"}
#| fig.alt: >
#| Plot with activity intensity marks and a zoom in on the figure
plot_data_with_intensity(
mydata_with_intensity_marks,
metric = "vm",
zoom_from = "13:00:00",
zoom_to = "16:30:00"
)
```
## Getting activity metrics by day
```{r, message = FALSE}
results_by_day <-
mydata_with_intensity_marks %>%
recap_by_day(
age = 32,
weight = 67,
sex = "male",
valid_wear_time_start = "07:00:00",
valid_wear_time_end = "22:00:00",
start_first_bin = 0,
start_last_bin = 10000,
bin_width = 500
)
```
## Computing means of the metrics using the valid days
```{r, eval}
mean_results <-
results_by_day$df_all_metrics %>%
average_results(minimum_wear_time = 10, fun = "mean")
```
## Computing medians of the metrics using the valid days
```{r}
median_results <-
results_by_day$df_all_metrics %>%
average_results(minimum_wear_time = 10, fun = "median")
```
## Showing activity volume metrics
### Results by day: Tabular view
```{r}
results_by_day$df_all_metrics %>%
dplyr::select(date:total_steps) %>%
reactable::reactable(striped = TRUE, defaultColDef = reactable::colDef(align = "center", minWidth = 180))
```
### Results by day: Graphical view
```{r, fig.height=10, fig.width = 17, warning=FALSE, message=FALSE}
#| fig.alt: >
#| Graphical view of the results by day for the activity volume metrics
create_fig_res_by_day(
results_by_day$df_all_metrics,
minimum_wear_time_for_analysis = 10,
start_day_analysis = "00:00:00",
end_day_analysis = "23:59:00",
metrics = "volume",
epoch_label = "60s"
) + theme(plot.margin = margin(1, 1, 1, 1, "cm"))
```
### Means | Medians computed using valid days
```{r}
create_flextable_summary(
results_summary_means = mean_results,
results_summary_medians = median_results,
metrics = "volume",
epoch_label = "60s"
)
```
### Comparisons with norms and recommendations
```{r, fig.height=9, fig.width = 17, warning=FALSE, message=FALSE, fig.align="center"}
#| fig.alt: >
#| Comparisons with norms and recommendations
# PAL
g_pal <- create_fig_pal(score = mean_results[["pal"]], "en") + theme(plot.margin = margin(2, 1, 0.5, 1, "cm"))
# Steps
g_steps <- create_fig_steps(score = mean_results[["total_steps"]], "en") + theme(plot.margin = margin(0, 1, 0.5, 1, "cm"))
# MVPA
g_mvpa <- create_fig_mvpa(score = mean_results[["minutes_MVPA"]], "en") + theme(plot.margin = margin(0, 1, 0, 1, "cm"))
# SED
g_sed <- create_fig_sed(score = mean_results[["minutes_SED"]], "en") + theme(plot.margin = margin(0, 1, 0, 1, "cm"))
# MVPA/SED ratio
g_ratio <- create_fig_ratio_mvpa_sed(score = mean_results[["ratio_mvpa_sed"]], "en") + theme(plot.margin = margin(0, 1, 1, 1, "cm"))
# Whole figure
(g_pal + theme(legend.position = "top")) / g_steps / (g_mvpa | g_sed | g_ratio) +
plot_layout(heights = c(0.8, 0.7, 1.5)) & theme(legend.justification = "center")
```
## Showing step accumulation metrics
### Results by day: Tabular view
```{r}
results_by_day$df_all_metrics %>%
dplyr::select(date, max_steps_60min:peak_steps_1min) %>%
reactable::reactable(striped = TRUE, defaultColDef = reactable::colDef(align = "center", minWidth = 180))
```
### Results by day: Graphical view
```{r, fig.height=7, fig.width = 17, warning=FALSE, message=FALSE}
#| fig.alt: >
#| Graphical view of the results by day for the step accumulation metrics
create_fig_res_by_day(
results_by_day$df_all_metrics,
minimum_wear_time_for_analysis = 10,
start_day_analysis = "00:00:00",
end_day_analysis = "23:59:00",
metrics = "step_acc",
epoch_label = "60s"
) + theme(plot.margin = margin(1, 1, 1, 1, "cm"))
```
### Means | Medians computed using valid days
```{r}
create_flextable_summary(
results_summary_means = mean_results,
results_summary_medians = median_results,
metrics = "step_acc",
epoch_label = "60s"
)
```
## Showing intensity gradient and MX metrics
### Distribution of time spent in intensity bins
```{r, fig.width = 15, fig.height = 10}
#| fig.alt: >
#| Distribution of time spent in intensity bins | Bar plot
results_by_day$p_band
```
```{r, fig.width = 15, fig.height = 10, message = FALSE}
#| fig.alt: >
#| Distribution of time spent in intensity bins | Log-log plot
results_by_day$p_log
```
### Results by day: Tabular view
```{r}
results_by_day$df_all_metrics %>%
dplyr::select(date, ig:M5) %>%
reactable::reactable(striped = TRUE, defaultColDef = reactable::colDef(align = "center", minWidth = 180))
```
### Results by day: Graphical view
```{r, fig.height=7, fig.width = 17, warning=FALSE, message=FALSE}
#| fig.alt: >
#| Graphical view of the results by day for the intensity gradient and MX metrics
create_fig_res_by_day(
results_by_day$df_all_metrics,
minimum_wear_time_for_analysis = 10,
start_day_analysis = "00:00:00",
end_day_analysis = "23:59:00",
metrics = "int_distri",
epoch_label = "60s"
) + theme(plot.margin = margin(1, 1, 1, 1, "cm"))
```
### Means | Medians computed using valid days
```{r}
create_flextable_summary(
results_summary_means = mean_results,
results_summary_medians = median_results,
metrics = "int_distri",
epoch_label = "60s"
)
```
### Radar view based on the means of valid days
```{r, fig.align = "center", out.width='50%', out.height='50%', fig.width=8, fig.height=8}
#| fig.alt: >
#| Radar plot for the MX metrics
create_fig_mx_summary(
data = mean_results,
labels = NULL,
mpa_cutpoint = 2690,
vpa_cutpoint = 6167
)
```
## Showing sedentary behaviour accumulation metrics based on valid days
### Getting results
```{r}
accum_metrics_sed <-
compute_accumulation_metrics(
data = mydata_with_intensity_marks,
behaviour = "sed",
dates = c("2021-04-07", "2021-04-08", "2021-04-09", "2021-04-10", "2021-04-11")
)
```
### Temporal distribution of sedentary bouts
```{r, fig.height = height_factor/0.75*0.85, fig.width=7, fig.align="center"}
#| fig.alt: >
#| Temporal distribution of sedentary bouts
accum_metrics_sed$p_breaks
```
### Alpha coefficient, median bout duration (MBD), usual bout duration (UBD), and Gini index
```{r, out.width='100%', out.height='60%', fig.height=11, fig.width=11, fig.align="center"}
#| fig.alt: >
#| Alpha coefficient, median bout duration (MBD), usual bout duration (UBD), and Gini index related to sedentary behaviour
p1 <- accum_metrics_sed$p_alpha + guides(color = "none", fill = "none")
p2 <- accum_metrics_sed$p_MBD + guides(color = "none", fill = "none")
p3 <- accum_metrics_sed$p_UBD
p4 <- accum_metrics_sed$p_gini
(p1 | p2) / (p3 | p4) + plot_layout(guides = "collect") & theme(legend.position = 'bottom')
```
## Showing physical activity accumulation metrics based on valid days
### Getting results
```{r}
accum_metrics_pa <-
compute_accumulation_metrics(
mydata_with_intensity_marks,
behaviour = "pa",
dates = c("2021-04-07", "2021-04-08", "2021-04-09", "2021-04-10", "2021-04-11")
)
```
### Temporal distribution of physical activity bouts
```{r, fig.height = height_factor/0.75*0.85, fig.width=7, fig.align="center"}
#| fig.alt: >
#| Temporal distribution of physical activity bouts
accum_metrics_pa$p_breaks
```
### Alpha coefficient, median bout duration (MBD), usual bout duration (UBD), and Gini index
```{r, out.width='100%', out.height='60%', fig.height=11, fig.width=11, fig.align="center"}
#| fig.alt: >
#| Alpha coefficient, median bout duration (MBD), usual bout duration (UBD), and Gini index related to physical activity
p1 <- accum_metrics_pa$p_alpha + guides(color = "none", fill = "none")
p2 <- accum_metrics_pa$p_MBD + guides(color = "none", fill = "none")
p3 <- accum_metrics_pa$p_UBD
p4 <- accum_metrics_pa$p_gini
(p1 | p2) / (p3 | p4) + plot_layout(guides = "collect") & theme(legend.position = 'bottom')
```