-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.Rmd
176 lines (121 loc) · 7.26 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
---
title: "Detecting life-threatening patterns in Point-of-care ECG using efficient memory and processor power."
author: "Francisco Bischoff"
date: "on `r format(Sys.time(), '%B %d, %Y')`"
bibliography: [./papers/references.bib]
link-citations: true
csl: ./thesis/csl/ama.csl
editor_options:
markdown:
mode: markdown
output: github_document
always_allow_html: true
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
knitr::opts_knit$set(progress = TRUE, verbose = TRUE)
suppressPackageStartupMessages(library(tibble))
suppressPackageStartupMessages(library(kableExtra))
```
<!-- badges: start -->
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/franzbischoff/false.alarm/tree/develop) [![Launch binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/franzbischoff/false.alarm/master?urlpath=rstudio)
[![Read Thesis](https://img.shields.io/badge/read-thesis__down-brightgreen)](https://franzbischoff.github.io/false.alarm/)
[![](https://zenodo.org/badge/261530912.svg)](https://zenodo.org/badge/latestdoi/261530912)
[![Project Status: WIP](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip)
[![R-CMD-check](https://github.com/franzbischoff/false.alarm/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/franzbischoff/false.alarm/actions/workflows/R-CMD-check.yaml)
[![codecov](https://codecov.io/gh/franzbischoff/false.alarm/branch/develop/graph/badge.svg?token=w7AmbwhNvn)](https://codecov.io/gh/franzbischoff/false.alarm)
[![CodeQL](https://github.com/franzbischoff/false.alarm/actions/workflows/codeql-analysis.yaml/badge.svg?branch=master)](https://github.com/github/codeql-action/)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/franzbischoff/false.alarm.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/franzbischoff/false.alarm/context:cpp)
<!-- badges: end -->
# Abstract
Currently, Point-of-Care (POC) ECG monitoring works either as plot devices or alarms for abnormal cardiac rhythms using
predefined normal trigger ranges and some rhythm analysis, which raises the problem of false alarms. In comparison,
complex 12-derivation ECG machines are not suitable to use as simple monitors and are used with strict techniques for
formal diagnostics. We aim to identify, on streaming data, life-threatening hearth electric patterns to reduce the
number of false alarms, using low CPU and memory maintaining robustness. The study design is comparable to a diagnostic
study, where high accuracy is essential. Physionet's 2015 challenge yielded very good algorithms for reducing false
alarms. However, none of the authors reported benchmarks, memory usage, robustness test, or context invariance that
could assure its implementation on real monitors to reduce alarm fatigue indeed. We expect to identify the obstacles of
detecting life-threatening ECG changes within memory, space, and CPU constraints and to reduce ECG monitor's false
alarms using the proposed methodology, and assess the feasibility of implementing the algorithm in the real world and
other settings than ICU monitors.
The research team is well experienced in time-series and has studied the Matrix Profile since its beginning, being
founders of the Matrix Profile Foundation whose goal is to have a concise and stable cross-language API for developing
with the Matrix Profile technology. [@Bischoff2019a; @VanBenschoten2020]
# Related Works
The CinC/Physionet Challenge 2015 produced several papers aiming to reduce false alarms on their dataset. On the
following table it is listed the five life-threatening alarms present in their dataset.
```{r alarms, echo=FALSE}
alarms <- tribble(
~Alarm, ~Definition,
"Asystole", "No QRS for at least 4 seconds",
"Extreme Bradycardia", "Heart rate lower than 40 bpm for 5 consecutive beats",
"Extreme Tachycardia", "Heart rate higher than 140 bpm for 17 consecutive beats",
"Ventricular Tachycardia", "5 or more ventricular beats with heart rate higher than 100 bpm",
"Ventricular Flutter/Fibrillation", "Fibrillatory, flutter, or oscillatory waveform for at least 4 seconds"
)
kbl(alarms, booktabs = TRUE, caption = "Definition of the 5 alarm types used in CinC/Physionet Challenge 2015 challenge.", align = "ll") |>
kable_styling(full_width = TRUE) |>
column_spec(1, width = "5cm") |>
row_spec(0, bold = TRUE)
```
# About the ongoing project
The document submitted for approval is
[here](https://github.com/franzbischoff/false.alarm/blob/master/protocol/Protocol.pdf).
To follow the thesis timeline you can access the full Gantt chart at Zenhub. Click
[here](https://app.zenhub.com/workspaces/phd-thesis-5eb2ce34f5f30b3aed0a35af/roadmap) (you need a github account, but
that's it).
# Reproducible Research[@krystalli_2019]
This thesis will follow the compendium principles:
![](docs/figure/compendium_principles.png)
![](docs/figure/compendium_principles2.png)
## Following Standards
Aiming to create secure materials that are [FAIR](https://www.nature.com/articles/sdata201618) *findable, accessible,
interoperable, reusable*
### Research Data Management
- [**RDM
checklist**](http://www.dcc.ac.uk/sites/default/files/documents/resource/DMP/DMP_Checklist_2013.pdf)[@dcc_2013]
- Anticipate **data products** as part of your thesis **outputs**
- Think about what technologies to use
### Missing values are a fact of life
- Usually, best solution is to **leave blank**
- **`NA`** or **`NULL`** are also good options
- **NEVER use `0`**. Avoid numbers like **`-999`**
- Don't make up your own code for missing values
### Raw data are sacrosanct
- Don't, not even with a barge pole, not for one second, touch or otherwise edit the raw data files. Do an
manipulations in script
### Three principles for good (file) names
#### Machine readable
- Regular expression and globbing friendly
- Avoid spaces, punctuation, accented characters, case sensitivity
- Easy to compute on
- Deliberate use of delimiters
- Deliberate use of `"-"` and `"_"` allows recovery of metadata from the filenames:
- `"_"` underscore used to delimit units of metadata I want to access later
- `"-"` hyphen used to delimit words so our eyes don't bleed
#### Human readable
- Borrowing the concept from [slugs](https://en.wikipedia.org/wiki/Clean_URL#Slug) from semantic URLs
#### Play well with default ordering
- Put something numeric first
- Use the ISO 8601 standard for dates
- Left pad other numbers with zeros
# License
<center>
[![Creative Commons
License](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)](https://creativecommons.org/licenses/by-nc-sa/4.0/)
</center>
This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
License](https://creativecommons.org/licenses/by-nc-sa/4.0/).
# Package dependencies
<center>
```{r dependency_plot, echo = FALSE, fig.width = 16, fig.height = 10, message = FALSE, warning = FALSE, fig.path = "man/figures/"}
devtools::source_gist("3b83243dfdfa73e459935112f3f783e3", filename = "plot_dependencies.R", sha1 = "a0ff78da8ddf58a4129abb89498abb90ca91738b", quiet = TRUE)
plot_dependencies()
```
</center>
# References