cgmguru: Examples Gallery

Overview

This vignette renders and runs the example scripts provided in the package’s /inst/examples/ directory, so you can see inputs, outputs, and typical workflows in one HTML document.

If you are viewing this from RStudio Help, use the “Open in Browser” button for the best experience.

Notes


GRID

source(file.path(examples_dir, "grid.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > grid_result <- grid(example_data_5_subject, gap = 15, 
#> +     threshold = 130)
#> 
#> > print(grid_result$episode_counts)
#> # A tibble: 5 × 2
#>   id        episode_counts
#>   <chr>              <int>
#> 1 Subject 1             10
#> 2 Subject 2             22
#> 3 Subject 3              7
#> 4 Subject 4             18
#> 5 Subject 5             42
#> 
#> > print(grid_result$episode_start)
#> # A tibble: 99 × 4
#>    id        time                   gl indices
#>    <chr>     <dttm>              <dbl>   <int>
#>  1 Subject 1 2015-06-11 15:30:07   143     966
#>  2 Subject 1 2015-06-11 17:10:07   157     985
#>  3 Subject 1 2015-06-11 22:00:06   135    1038
#>  4 Subject 1 2015-06-11 22:25:06   162    1043
#>  5 Subject 1 2015-06-12 07:40:04   160    1154
#>  6 Subject 1 2015-06-13 16:34:59   132    1415
#>  7 Subject 1 2015-06-14 17:39:55   176    1676
#>  8 Subject 1 2015-06-16 19:14:47   166    2222
#>  9 Subject 1 2015-06-18 14:29:40   187    2720
#> 10 Subject 1 2015-06-18 18:19:39   132    2765
#> # ℹ 89 more rows
#> 
#> > print(grid_result$grid_vector)
#> # A tibble: 13,866 × 1
#>     grid
#>    <int>
#>  1     0
#>  2     0
#>  3     0
#>  4     0
#>  5     0
#>  6     0
#>  7     0
#>  8     0
#>  9     0
#> 10     0
#> # ℹ 13,856 more rows
#> 
#> > sensitive_result <- grid(example_data_5_subject, gap = 10, 
#> +     threshold = 120)
#> 
#> > large_grid <- grid(example_data_hall, gap = 15, threshold = 130)
#> 
#> > print(paste("Detected", sum(large_grid$episode_counts$episode_counts), 
#> +     "episodes"))
#> [1] "Detected 79 episodes"
#> 
#> > print(large_grid$episode_start)
#> # A tibble: 79 × 4
#>    id          time                   gl indices
#>    <chr>       <dttm>              <dbl>   <int>
#>  1 1636-69-001 2014-02-04 07:47:05   138     336
#>  2 1636-69-001 2014-02-04 17:42:03   138     455
#>  3 1636-69-001 2014-02-05 08:41:59   137     635
#>  4 1636-69-001 2015-03-29 14:33:30   137     786
#>  5 1636-69-001 2015-03-30 10:53:25   132     979
#>  6 1636-69-001 2015-03-31 09:18:19   143    1202
#>  7 1636-69-001 2015-03-31 13:58:18   136    1258
#>  8 1636-69-001 2015-04-01 16:58:12   132    1581
#>  9 1636-69-026 2015-11-24 14:37:18   142    2011
#> 10 1636-69-026 2015-11-24 23:32:16   139    2118
#> # ℹ 69 more rows
#> 
#> > print(large_grid$grid_vector)
#> # A tibble: 34,890 × 1
#>     grid
#>    <int>
#>  1     0
#>  2     0
#>  3     0
#>  4     0
#>  5     0
#>  6     0
#>  7     0
#>  8     0
#>  9     0
#> 10     0
#> # ℹ 34,880 more rows

Detect all events

source(file.path(examples_dir, "detect_all_events.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > all_events <- detect_all_events(example_data_5_subject, 
#> +     reading_minutes = 5)
#> 
#> > print(all_events)
#> # A tibble: 40 × 6
#>    id        type  level    total_episodes avg_ep_per_day avg_episode_duration…¹
#>    <chr>     <chr> <chr>             <int>          <dbl>                  <dbl>
#>  1 Subject 1 hypo  lv1                   1           0.08                      0
#>  2 Subject 1 hypo  lv2                   0           0                         0
#>  3 Subject 1 hypo  extended              0           0                         0
#>  4 Subject 1 hypo  lv1_excl              1           0.08                      0
#>  5 Subject 1 hyper lv1                  14           1.1                       0
#>  6 Subject 1 hyper lv2                   2           0.16                      0
#>  7 Subject 1 hyper extended              0           0                         0
#>  8 Subject 1 hyper lv1_excl             12           0.95                      0
#>  9 Subject 2 hypo  lv1                   0           0                         0
#> 10 Subject 2 hypo  lv2                   0           0                         0
#> # ℹ 30 more rows
#> # ℹ abbreviated name: ¹​avg_episode_duration_below_54
#> 
#> > large_all_events <- detect_all_events(example_data_hall, 
#> +     reading_minutes = 5)
#> 
#> > print(paste("Total event types analyzed:", nrow(large_all_events)))
#> [1] "Total event types analyzed: 152"
#> 
#> > hyperglycemia_events <- all_events[all_events$type == 
#> +     "hyper", ]
#> 
#> > hypoglycemia_events <- all_events[all_events$type == 
#> +     "hypo", ]
#> 
#> > print("Hyperglycemia events:")
#> [1] "Hyperglycemia events:"
#> 
#> > print(hyperglycemia_events)
#> # A tibble: 20 × 6
#>    id        type  level    total_episodes avg_ep_per_day avg_episode_duration…¹
#>    <chr>     <chr> <chr>             <int>          <dbl>                  <dbl>
#>  1 Subject 1 hyper lv1                  14           1.1                       0
#>  2 Subject 1 hyper lv2                   2           0.16                      0
#>  3 Subject 1 hyper extended              0           0                         0
#>  4 Subject 1 hyper lv1_excl             12           0.95                      0
#>  5 Subject 2 hyper lv1                  17           1.02                      0
#>  6 Subject 2 hyper lv2                  18           1.08                      0
#>  7 Subject 2 hyper extended              9           0.54                      0
#>  8 Subject 2 hyper lv1_excl              0           0                         0
#>  9 Subject 3 hyper lv1                   8           1.39                      0
#> 10 Subject 3 hyper lv2                   4           0.69                      0
#> 11 Subject 3 hyper extended              2           0.35                      0
#> 12 Subject 3 hyper lv1_excl              4           0.69                      0
#> 13 Subject 4 hyper lv1                  13           1.01                      0
#> 14 Subject 4 hyper lv2                   0           0                         0
#> 15 Subject 4 hyper extended              0           0                         0
#> 16 Subject 4 hyper lv1_excl             13           1.01                      0
#> 17 Subject 5 hyper lv1                  34           3.21                      0
#> 18 Subject 5 hyper lv2                  17           1.6                       0
#> 19 Subject 5 hyper extended             10           0.94                      0
#> 20 Subject 5 hyper lv1_excl             17           1.6                       0
#> # ℹ abbreviated name: ¹​avg_episode_duration_below_54
#> 
#> > print("Hypoglycemia events:")
#> [1] "Hypoglycemia events:"
#> 
#> > print(hypoglycemia_events)
#> # A tibble: 20 × 6
#>    id        type  level    total_episodes avg_ep_per_day avg_episode_duration…¹
#>    <chr>     <chr> <chr>             <int>          <dbl>                  <dbl>
#>  1 Subject 1 hypo  lv1                   1           0.08                      0
#>  2 Subject 1 hypo  lv2                   0           0                         0
#>  3 Subject 1 hypo  extended              0           0                         0
#>  4 Subject 1 hypo  lv1_excl              1           0.08                      0
#>  5 Subject 2 hypo  lv1                   0           0                         0
#>  6 Subject 2 hypo  lv2                   0           0                         0
#>  7 Subject 2 hypo  extended              0           0                         0
#>  8 Subject 2 hypo  lv1_excl              0           0                         0
#>  9 Subject 3 hypo  lv1                   1           0.17                      0
#> 10 Subject 3 hypo  lv2                   0           0                         0
#> 11 Subject 3 hypo  extended              0           0                         0
#> 12 Subject 3 hypo  lv1_excl              1           0.17                      0
#> 13 Subject 4 hypo  lv1                   2           0.16                      5
#> 14 Subject 4 hypo  lv2                   0           0                         0
#> 15 Subject 4 hypo  extended              0           0                         0
#> 16 Subject 4 hypo  lv1_excl              2           0.16                      0
#> 17 Subject 5 hypo  lv1                   1           0.09                      0
#> 18 Subject 5 hypo  lv2                   0           0                         0
#> 19 Subject 5 hypo  extended              0           0                         0
#> 20 Subject 5 hypo  lv1_excl              1           0.09                      0
#> # ℹ abbreviated name: ¹​avg_episode_duration_below_54

Detect hyperglycemic events

source(file.path(examples_dir, "detect_hyperglycemic_events.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > hyper_lv1 <- detect_hyperglycemic_events(example_data_5_subject, 
#> +     start_gl = 180, dur_length = 15, end_length = 15, end_gl = 180)
#> 
#> > print(hyper_lv1$events_total)
#> # A tibble: 5 × 3
#>   id        total_events avg_ep_per_day
#>   <chr>            <int>          <dbl>
#> 1 Subject 1           14           1.1 
#> 2 Subject 2           17           1.02
#> 3 Subject 3            8           1.39
#> 4 Subject 4           13           1.01
#> 5 Subject 5           34           3.21
#> 
#> > hyper_lv2 <- detect_hyperglycemic_events(example_data_5_subject, 
#> +     start_gl = 250, dur_length = 15, end_length = 15, end_gl = 250)
#> 
#> > print(hyper_lv2$events_total)
#> # A tibble: 5 × 3
#>   id        total_events avg_ep_per_day
#>   <chr>            <int>          <dbl>
#> 1 Subject 1            2           0.16
#> 2 Subject 2           18           1.08
#> 3 Subject 3            4           0.69
#> 4 Subject 4            0           0   
#> 5 Subject 5           17           1.6 
#> 
#> > hyper_extended <- detect_hyperglycemic_events(example_data_5_subject)
#> 
#> > large_hyper <- detect_hyperglycemic_events(example_data_hall, 
#> +     start_gl = 180, dur_length = 15, end_length = 15, end_gl = 180)
#> 
#> > print(paste("Total hyperglycemic events:", sum(large_hyper$events_total$total_events)))
#> [1] "Total hyperglycemic events: 47"
#> 
#> > if (nrow(hyper_lv1$events_detailed) > 0) {
#> +     first_subject <- hyper_lv1$events_detailed$id[1]
#> +     subject_events <- hyper_lv1$events_detailed[hyper_lv1$events_detailed$id == 
#> +         first_subject, ]
#> +     head(subject_events)
#> + }
#> # A tibble: 6 × 7
#>   id        start_time          start_glucose end_time            end_glucose
#>   <chr>     <dttm>                      <dbl> <dttm>                    <dbl>
#> 1 Subject 1 2015-06-11 15:45:07           194 2015-06-11 17:10:07         157
#> 2 Subject 1 2015-06-11 17:25:07           195 2015-06-11 20:05:06         142
#> 3 Subject 1 2015-06-11 22:35:06           187 2015-06-12 00:05:06         151
#> 4 Subject 1 2015-06-12 07:50:04           181 2015-06-12 09:35:04         164
#> 5 Subject 1 2015-06-13 17:04:59           181 2015-06-13 18:40:00         155
#> 6 Subject 1 2015-06-13 19:44:59           223 2015-06-13 20:49:58         158
#> # ℹ 2 more variables: start_indices <int>, end_indices <int>

Detect hypoglycemic events

source(file.path(examples_dir, "detect_hypoglycemic_events.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > hypo_lv1 <- detect_hypoglycemic_events(example_data_5_subject, 
#> +     start_gl = 70, dur_length = 15, end_length = 15)
#> 
#> > print(hypo_lv1$events_total)
#> # A tibble: 5 × 3
#>   id        total_events avg_ep_per_day
#>   <chr>            <int>          <dbl>
#> 1 Subject 1            1           0.08
#> 2 Subject 2            0           0   
#> 3 Subject 3            1           0.17
#> 4 Subject 4            2           0.16
#> 5 Subject 5            1           0.09
#> 
#> > hypo_lv2 <- detect_hypoglycemic_events(example_data_5_subject, 
#> +     start_gl = 54, dur_length = 15, end_length = 15)
#> 
#> > hypo_extended <- detect_hypoglycemic_events(example_data_5_subject)
#> 
#> > large_hypo <- detect_hypoglycemic_events(example_data_hall, 
#> +     start_gl = 70, dur_length = 15, end_length = 15)
#> 
#> > print(paste("Total hypoglycemic events:", sum(large_hypo$events_total$total_events)))
#> [1] "Total hypoglycemic events: 45"
#> 
#> > cat("Level 1 events:", sum(hypo_lv1$events_total$total_events), 
#> +     "\n")
#> Level 1 events: 5 
#> 
#> > cat("Level 2 events:", sum(hypo_lv2$events_total$total_events), 
#> +     "\n")
#> Level 2 events: 0

Excursion

source(file.path(examples_dir, "excursion.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > excursion_result <- excursion(example_data_5_subject, 
#> +     gap = 15)
#> 
#> > print(paste("Excursion vector length:", length(excursion_result$excursion_vector)))
#> [1] "Excursion vector length: 1"
#> 
#> > print(excursion_result$episode_counts)
#> # A tibble: 5 × 2
#>   id        episode_counts
#>   <chr>              <int>
#> 1 Subject 1              9
#> 2 Subject 2             14
#> 3 Subject 3             11
#> 4 Subject 4             17
#> 5 Subject 5             34
#> 
#> > excursion_30min <- excursion(example_data_5_subject, 
#> +     gap = 30)
#> 
#> > large_excursion <- excursion(example_data_hall, gap = 15)
#> 
#> > print(paste("Excursion vector length in larger dataset:", 
#> +     length(large_excursion$excursion_vector)))
#> [1] "Excursion vector length in larger dataset: 1"
#> 
#> > print(paste("Total episodes:", sum(large_excursion$episode_counts$episode_counts)))
#> [1] "Total episodes: 111"

Local maxima

source(file.path(examples_dir, "find_local_maxima.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > maxima_result <- find_local_maxima(example_data_5_subject)
#> 
#> > print(paste("Found", nrow(maxima_result$local_maxima_vector), 
#> +     "local maxima"))
#> [1] "Found 1602 local maxima"
#> 
#> > large_maxima <- find_local_maxima(example_data_hall)
#> 
#> > print(paste("Found", nrow(large_maxima$local_maxima_vector), 
#> +     "local maxima in larger dataset"))
#> [1] "Found 4991 local maxima in larger dataset"
#> 
#> > head(maxima_result$local_maxima_vector)
#> # A tibble: 6 × 1
#>   local_maxima
#>          <int>
#> 1            8
#> 2           23
#> 3           24
#> 4           65
#> 5           70
#> 6           77
#> 
#> > head(maxima_result$merged_results)
#> # A tibble: 6 × 3
#>   id        time                   gl
#>   <chr>     <dttm>              <dbl>
#> 1 Subject 1 2015-06-06 18:05:27   159
#> 2 Subject 1 2015-06-06 20:15:27   174
#> 3 Subject 1 2015-06-06 20:20:26   174
#> 4 Subject 1 2015-06-07 01:20:26    88
#> 5 Subject 1 2015-06-07 01:45:25    92
#> 6 Subject 1 2015-06-07 02:20:25    92

Max after hours

source(file.path(examples_dir, "find_max_after_hours.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > start_indices <- seq(1, nrow(example_data_5_subject), 
#> +     by = 100)
#> 
#> > start_points <- data.frame(start_indices = start_indices)
#> 
#> > max_after <- find_max_after_hours(example_data_5_subject, 
#> +     start_points, hours = 2)
#> 
#> > print(paste("Found", length(max_after$max_indices), 
#> +     "maximum points"))
#> [1] "Found 1 maximum points"
#> 
#> > max_after_1h <- find_max_after_hours(example_data_5_subject, 
#> +     start_points, hours = 1)
#> 
#> > large_start_indices <- seq(1, nrow(example_data_hall), 
#> +     by = 200)
#> 
#> > large_start_points <- data.frame(start_indices = large_start_indices)
#> 
#> > large_max_after <- find_max_after_hours(example_data_hall, 
#> +     large_start_points, hours = 2)
#> 
#> > print(paste("Found", length(large_max_after$max_indices), 
#> +     "maximum points in larger dataset"))
#> [1] "Found 1 maximum points in larger dataset"

Max before hours

source(file.path(examples_dir, "find_max_before_hours.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > start_indices <- seq(1, nrow(example_data_5_subject), 
#> +     by = 100)
#> 
#> > start_points <- data.frame(start_indices = start_indices)
#> 
#> > max_before <- find_max_before_hours(example_data_5_subject, 
#> +     start_points, hours = 2)
#> 
#> > print(paste("Found", length(max_before$max_indices), 
#> +     "maximum points"))
#> [1] "Found 1 maximum points"
#> 
#> > max_before_1h <- find_max_before_hours(example_data_5_subject, 
#> +     start_points, hours = 1)
#> 
#> > large_start_indices <- seq(1, nrow(example_data_hall), 
#> +     by = 200)
#> 
#> > large_start_points <- data.frame(start_indices = large_start_indices)
#> 
#> > large_max_before <- find_max_before_hours(example_data_hall, 
#> +     large_start_points, hours = 2)
#> 
#> > print(paste("Found", length(large_max_before$max_indices), 
#> +     "maximum points in larger dataset"))
#> [1] "Found 1 maximum points in larger dataset"

Min after hours

source(file.path(examples_dir, "find_min_after_hours.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > start_indices <- seq(1, nrow(example_data_5_subject), 
#> +     by = 100)
#> 
#> > start_points <- data.frame(start_indices = start_indices)
#> 
#> > min_after <- find_min_after_hours(example_data_5_subject, 
#> +     start_points, hours = 2)
#> 
#> > print(paste("Found", length(min_after$min_indices), 
#> +     "minimum points"))
#> [1] "Found 1 minimum points"
#> 
#> > min_after_1h <- find_min_after_hours(example_data_5_subject, 
#> +     start_points, hours = 1)
#> 
#> > large_start_indices <- seq(1, nrow(example_data_hall), 
#> +     by = 200)
#> 
#> > large_start_points <- data.frame(start_indices = large_start_indices)
#> 
#> > large_min_after <- find_min_after_hours(example_data_hall, 
#> +     large_start_points, hours = 2)
#> 
#> > print(paste("Found", length(large_min_after$min_indices), 
#> +     "minimum points in larger dataset"))
#> [1] "Found 1 minimum points in larger dataset"

Min before hours

source(file.path(examples_dir, "find_min_before_hours.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > start_indices <- seq(1, nrow(example_data_5_subject), 
#> +     by = 100)
#> 
#> > start_points <- data.frame(start_indices = start_indices)
#> 
#> > min_before <- find_min_before_hours(example_data_5_subject, 
#> +     start_points, hours = 2)
#> 
#> > print(paste("Found", length(min_before$min_indices), 
#> +     "minimum points"))
#> [1] "Found 1 minimum points"
#> 
#> > min_before_1h <- find_min_before_hours(example_data_5_subject, 
#> +     start_points, hours = 1)
#> 
#> > large_start_indices <- seq(1, nrow(example_data_hall), 
#> +     by = 200)
#> 
#> > large_start_points <- data.frame(start_indices = large_start_indices)
#> 
#> > large_min_before <- find_min_before_hours(example_data_hall, 
#> +     large_start_points, hours = 2)
#> 
#> > print(paste("Found", length(large_min_before$min_indices), 
#> +     "minimum points in larger dataset"))
#> [1] "Found 1 minimum points in larger dataset"

Maxima + GRID combined

source(file.path(examples_dir, "maxima_grid.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > maxima_result <- maxima_grid(example_data_5_subject, 
#> +     threshold = 130, gap = 60, hours = 2)
#> 
#> > print(maxima_result$episode_counts)
#> # A tibble: 5 × 2
#>   id        episode_counts
#>   <chr>              <int>
#> 1 Subject 1              8
#> 2 Subject 2             18
#> 3 Subject 3              7
#> 4 Subject 4             16
#> 5 Subject 5             39
#> 
#> > print(maxima_result$results)
#> # A tibble: 88 × 8
#>    id        grid_time       grid_gl maxima_time maxima_glucose time_to_peak_min
#>    <chr>     <dttm>            <dbl> <dttm>               <dbl>            <dbl>
#>  1 Subject 1 2015-06-11 15:…     143 2015-06-11…            276               40
#>  2 Subject 1 2015-06-11 22:…     135 2015-06-11…            209               50
#>  3 Subject 1 2015-06-12 07:…     160 2015-06-12…            210               40
#>  4 Subject 1 2015-06-13 16:…     132 2015-06-13…            202               60
#>  5 Subject 1 2015-06-14 17:…     176 2015-06-14…            227               45
#>  6 Subject 1 2015-06-16 19:…     166 2015-06-16…            208               65
#>  7 Subject 1 2015-06-18 14:…     187 2015-06-18…            212               20
#>  8 Subject 1 2015-06-18 18:…     132 2015-06-18…            183               35
#>  9 Subject 2 2015-02-24 20:…     140 2015-02-24…            222               85
#> 10 Subject 2 2015-02-25 19:…     173 2015-02-25…            273              125
#> # ℹ 78 more rows
#> # ℹ 2 more variables: grid_index <int>, maxima_index <int>
#> 
#> > sensitive_maxima <- maxima_grid(example_data_5_subject, 
#> +     threshold = 120, gap = 30, hours = 1)
#> 
#> > print(sensitive_maxima$episode_counts)
#> # A tibble: 5 × 2
#>   id        episode_counts
#>   <chr>              <int>
#> 1 Subject 1             10
#> 2 Subject 2             19
#> 3 Subject 3             10
#> 4 Subject 4             20
#> 5 Subject 5             40
#> 
#> > print(sensitive_maxima$results)
#> # A tibble: 99 × 8
#>    id        grid_time       grid_gl maxima_time maxima_glucose time_to_peak_min
#>    <chr>     <dttm>            <dbl> <dttm>               <dbl>            <dbl>
#>  1 Subject 1 2015-06-11 15:…     143 2015-06-11…            276               40
#>  2 Subject 1 2015-06-11 17:…     157 2015-06-11…            267               55
#>  3 Subject 1 2015-06-11 21:…     125 2015-06-11…            209               60
#>  4 Subject 1 2015-06-12 07:…     160 2015-06-12…            210               40
#>  5 Subject 1 2015-06-13 16:…     124 2015-06-13…            202               65
#>  6 Subject 1 2015-06-14 17:…     176 2015-06-14…            228               95
#>  7 Subject 1 2015-06-16 19:…     166 2015-06-16…            208               65
#>  8 Subject 1 2015-06-18 13:…     126 2015-06-18…            183               55
#>  9 Subject 1 2015-06-18 14:…     187 2015-06-18…            212               20
#> 10 Subject 1 2015-06-18 18:…     132 2015-06-18…            183               35
#> # ℹ 89 more rows
#> # ℹ 2 more variables: grid_index <int>, maxima_index <int>
#> 
#> > large_maxima <- maxima_grid(example_data_hall, threshold = 130, 
#> +     gap = 60, hours = 2)
#> 
#> > print(large_maxima$episode_counts)
#> # A tibble: 18 × 2
#>    id           episode_counts
#>    <chr>                 <int>
#>  1 1636-69-001               8
#>  2 1636-69-026               7
#>  3 1636-69-032               2
#>  4 1636-69-090               3
#>  5 1636-69-091               1
#>  6 1636-70-1005              8
#>  7 1636-70-1010              2
#>  8 2133-004                  5
#>  9 2133-015                  4
#> 10 2133-017                  2
#> 11 2133-018                 12
#> 12 2133-019                  2
#> 13 2133-021                 10
#> 14 2133-024                  1
#> 15 2133-027                  1
#> 16 2133-035                  1
#> 17 2133-036                  2
#> 18 2133-039                  5
#> 
#> > print(large_maxima$results)
#> # A tibble: 76 × 8
#>    id          grid_time     grid_gl maxima_time maxima_glucose time_to_peak_min
#>    <chr>       <dttm>          <dbl> <dttm>               <dbl>            <dbl>
#>  1 1636-69-001 2014-02-04 0…     138 2014-02-04…            194               30
#>  2 1636-69-001 2014-02-04 1…     138 2014-02-04…            225               60
#>  3 1636-69-001 2014-02-05 0…     137 2014-02-05…            196               45
#>  4 1636-69-001 2015-03-29 1…     137 2015-03-29…            250               65
#>  5 1636-69-001 2015-03-30 1…     132 2015-03-30…            181               45
#>  6 1636-69-001 2015-03-31 0…     143 2015-03-31…            177               20
#>  7 1636-69-001 2015-03-31 1…     136 2015-03-31…            169               30
#>  8 1636-69-001 2015-04-01 1…     132 2015-04-01…            165               50
#>  9 1636-69-026 2015-11-24 1…     142 2015-11-24…            182               40
#> 10 1636-69-026 2015-11-24 2…     139 2015-11-25…            171               35
#> # ℹ 66 more rows
#> # ℹ 2 more variables: grid_index <int>, maxima_index <int>

Ordering utility

source(file.path(examples_dir, "orderfast.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > set.seed(123)
#> 
#> > shuffled <- example_data_5_subject[sample(seq_len(nrow(example_data_5_subject)), 
#> +     replace = FALSE), ]
#> 
#> > baseline <- orderfast(example_data_5_subject)
#> 
#> > ordered_shuffled <- orderfast(shuffled)
#> 
#> > print(paste("Identical after ordering:", identical(baseline, 
#> +     ordered_shuffled)))
#> [1] "Identical after ordering: TRUE"
#> 
#> > head(baseline[, c("id", "time", "gl")])
#>          id                time  gl
#> 1 Subject 1 2015-06-06 16:50:27 153
#> 2 Subject 1 2015-06-06 17:05:27 137
#> 3 Subject 1 2015-06-06 17:10:27 128
#> 4 Subject 1 2015-06-06 17:15:28 121
#> 5 Subject 1 2015-06-06 17:25:27 120
#> 6 Subject 1 2015-06-06 17:45:27 138
#> 
#> > head(ordered_shuffled[, c("id", "time", "gl")])
#>          id                time  gl
#> 1 Subject 1 2015-06-06 16:50:27 153
#> 2 Subject 1 2015-06-06 17:05:27 137
#> 3 Subject 1 2015-06-06 17:10:27 128
#> 4 Subject 1 2015-06-06 17:15:28 121
#> 5 Subject 1 2015-06-06 17:25:27 120
#> 6 Subject 1 2015-06-06 17:45:27 138
#> 
#> > ordered_large <- orderfast(example_data_hall)
#> 
#> > print(paste("Ordered", nrow(ordered_large), "rows in larger dataset"))
#> [1] "Ordered 34890 rows in larger dataset"

Start finder

source(file.path(examples_dir, "start_finder.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > binary_vector <- c(0, 0, 1, 1, 0, 1, 0, 0, 1, 1)
#> 
#> > df <- data.frame(episode_starts = binary_vector)
#> 
#> > start_points <- start_finder(df)
#> 
#> > print(paste("Start indices:", paste(start_points$start_indices, 
#> +     collapse = ", ")))
#> [1] "Start indices: 3, 6, 9"
#> 
#> > grid_result <- grid(example_data_5_subject, gap = 15, 
#> +     threshold = 130)
#> 
#> > grid_starts <- start_finder(grid_result$grid_vector)
#> 
#> > print(paste("GRID episode starts:", length(grid_starts$start_indices)))
#> [1] "GRID episode starts: 99"
#> 
#> > large_grid <- grid(example_data_hall, gap = 15, threshold = 130)
#> 
#> > large_starts <- start_finder(large_grid$grid_vector)
#> 
#> > print(paste("GRID episode starts in larger dataset:", 
#> +     length(large_starts$start_indices)))
#> [1] "GRID episode starts in larger dataset: 79"

Transform dataframe

source(file.path(examples_dir, "transform_df.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
#> 
#> > library(cgmguru)
#> 
#> > library(iglu)
#> 
#> > data(example_data_5_subject)
#> 
#> > data(example_data_hall)
#> 
#> > threshold <- 130
#> 
#> > gap <- 60
#> 
#> > hours <- 2
#> 
#> > grid_result <- grid(example_data_5_subject, gap = gap, 
#> +     threshold = threshold)
#> 
#> > mod_grid <- mod_grid(example_data_5_subject, start_finder(grid_result$grid_vector), 
#> +     hours = hours, gap = gap)
#> 
#> > mod_grid_maxima <- find_max_after_hours(example_data_5_subject, 
#> +     start_finder(mod_grid$mod_grid_vector), hours = hours)
#> 
#> > local_maxima <- find_local_maxima(example_data_5_subject)
#> 
#> > final_maxima <- find_new_maxima(example_data_5_subject, 
#> +     mod_grid_maxima$max_indices, local_maxima$local_maxima_vector)
#> 
#> > transform_maxima <- transform_df(grid_result$episode_start, 
#> +     final_maxima)
#> 
#> > final_between_maxima <- detect_between_maxima(example_data_5_subject, 
#> +     transform_maxima)
#> 
#> > hall_threshold <- 130
#> 
#> > hall_gap <- 60
#> 
#> > hall_hours <- 2
#> 
#> > hall_grid_result <- grid(example_data_hall, gap = hall_gap, 
#> +     threshold = hall_threshold)
#> 
#> > hall_mod_grid <- mod_grid(example_data_hall, start_finder(hall_grid_result$grid_vector), 
#> +     hours = hall_hours, gap = hall_gap)
#> 
#> > hall_mod_grid_maxima <- find_max_after_hours(example_data_hall, 
#> +     start_finder(hall_mod_grid$mod_grid_vector), hours = hall_hours)
#> 
#> > hall_local_maxima <- find_local_maxima(example_data_hall)
#> 
#> > hall_final_maxima <- find_new_maxima(example_data_hall, 
#> +     hall_mod_grid_maxima$max_indices, hall_local_maxima$local_maxima_vector)
#> 
#> > hall_transform_maxima <- transform_df(hall_grid_result$episode_start, 
#> +     hall_final_maxima)
#> 
#> > hall_final_between_maxima <- detect_between_maxima(example_data_hall, 
#> +     hall_transform_maxima)

Function reference and help

For detailed function documentation with additional runnable @examples, see the package reference:

help(package = "cgmguru")

You can also open the package vignettes index:

browseVignettes("cgmguru")