From 56718b8b0b0c7fcc5dbe108f5a3b3857bb206b0a Mon Sep 17 00:00:00 2001 From: Francisco Bischoff Date: Fri, 23 Jun 2023 06:01:07 +0100 Subject: [PATCH] classifier --- .devcontainer/Dockerfile | 2 +- README.Rmd | 6 +- _contrast_profile_ex/.gitignore | 5 + _contrast_profile_ex/meta/meta | 498 ++++++++++++++++++++ _targets.yaml | 5 + analysis/index.Rmd | 2 +- analysis/regime_optimize.Rmd | 15 +- analysis/report.Rmd | 18 +- analysis/score_classifier.qmd | 453 ++++++++++++++++++ analysis/shiny/app.R | 10 +- analysis/shiny_land/app.R | 10 +- analysis/shiny_ventricular/app.R | 10 +- analysis/shiny_vtachy/app.R | 10 +- beam search.mmd | 17 + papers/aime2021/aime2021.Rmd | 12 +- papers/epia2022/epia2022.Rmd | 4 +- presentations/MEDCIDS21/MEDCIDS21-10min.Rmd | 32 +- presentations/MEDCIDS21/MEDCIDS21.Rmd | 32 +- presentations/Report/Midterm-Report.Rmd | 7 +- protocol/FirstReport.Rmd | 8 +- protocol/Protocol.Rmd | 17 +- protocol/SecondReport.Rmd | 18 +- scripts/_classifier.R | 11 +- scripts/_contrast_profile.R | 13 +- scripts/_contrast_profile_ex.R | 424 +++++++++++++++++ scripts/classification/pan_contrast.R | 168 +++++-- scripts/helpers/create_shiny_dataset.R | 42 +- scripts/helpers/interactions.R | 129 +++++ thesis/002-materials-and-methods.Rmd | 17 +- thesis/stuffs2.Rmd | 6 +- thesis/stuffs3.Rmd | 12 +- 31 files changed, 1817 insertions(+), 196 deletions(-) create mode 100644 _contrast_profile_ex/.gitignore create mode 100644 _contrast_profile_ex/meta/meta create mode 100644 analysis/score_classifier.qmd create mode 100644 beam search.mmd create mode 100644 scripts/_contrast_profile_ex.R create mode 100644 scripts/helpers/interactions.R diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 38ce3a0..ece639e 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -84,7 +84,7 @@ RUN echo "C.UTF-8 en_US.UTF-8 UTF-8" >> /etc/locale.gen \ && locale-gen en_US.utf8 \ && /usr/sbin/update-locale LANG=en_US.UTF-8 -ENV R_BASE_VERSION 4.2.1 +ENV R_BASE_VERSION 4.3.0 ENV RENV_PATHS_ROOT "${HOME_WORK}/.cache/R/renv" ENV RENV_PATHS_LIBRARY_ROOT "${HOME_WORK}/.cache/R/renv/library" ENV TZ UTC diff --git a/README.Rmd b/README.Rmd index 0c9611f..78b3d2d 100644 --- a/README.Rmd +++ b/README.Rmd @@ -73,9 +73,9 @@ alarms <- tribble( "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") %>% +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) ``` diff --git a/_contrast_profile_ex/.gitignore b/_contrast_profile_ex/.gitignore new file mode 100644 index 0000000..a8c51cd --- /dev/null +++ b/_contrast_profile_ex/.gitignore @@ -0,0 +1,5 @@ +* +!.gitignore +!meta +meta/* +!meta/meta diff --git a/_contrast_profile_ex/meta/meta b/_contrast_profile_ex/meta/meta new file mode 100644 index 0000000..e19b154 --- /dev/null +++ b/_contrast_profile_ex/meta/meta @@ -0,0 +1,498 @@ +name|type|data|command|depend|seed|path|time|size|bytes|format|repository|iteration|parent|children|seconds|warnings|error +.Random.seed|object|fbe882969501c735||||||||||||||| +"%|||%"|function|031bda8ec980931b||||||||||||||| +"%||NA%"|function|ef771f7e0b2b61dc||||||||||||||| +activity|function|514ba81c8efb42b6||||||||||||||| +ampl|function|22bb8917cc3362d0||||||||||||||| +analysis_split|stem|280806d638f6257a|3c9d74acfb239c7d|9fe8c079932d5cb0|1188165946||t19530.6896124422s|f1ea2081a4ca0bea|734755|rds|local|group||analysis_split_1210acf9*analysis_split_d7478d53|0.037|| +assessment_split|stem|52e78968a55834c2|1b41fd63223669d1|9fe8c079932d5cb0|-264140407||t19530.6896095486s|227a75896b1a57c9|734108|rds|local|group|||0.051|| +best_shapelets|pattern|9048e953c1526a3e|1c009d3ed0dd0292||-261715276||||43772|rds|local|list||best_shapelets_d9008992*best_shapelets_1b4be4f2|0.084|| +best_shapelets_1b4be4f2|branch|0ddbda491763cd62|1c009d3ed0dd0292|d30f89d8b3f2c411|-631355285||t19530.6961702823s|3381959778bde498|23065|rds|local|list|best_shapelets||0.039|| +best_shapelets_8af6b52c|branch||af821b2a2061fc7e|713037692fee6b1d|143699523||t19524.0978760455s||0|rds|local|list|best_shapelets||0.106||1m22mColumn 1 must be named.Use .name_repair to specify repair.1mCaused by error in repaired_names22m33m39m Names cant be empty.31m39m Empty name found at location 1. +best_shapelets_d9008992|branch|173cd1d0df1498f6|1c009d3ed0dd0292|f314d453af08f106|7945773||t19530.69616681s|7cf218cce386f5bd|20707|rds|local|list|best_shapelets||0.045|| +clean_pred|function|2f000150c7903a2e||||||||||||||| +clean_splits_data|function|62dff47d87f498a6||||||||||||||| +clean_truth|function|566b7692f08c8733||||||||||||||| +compl|function|1cc0810c2c8fe26b||||||||||||||| +complexity|function|5fe702a01cef2a6e||||||||||||||| +compute_arcs|function|1a4a6dc48008b78a||||||||||||||| +compute_companion_stats|function|76613610273412a9||||||||||||||| +compute_filters|function|7329a063b58bdd91||||||||||||||| +compute_floss|function|2b4de81bfe11e55d||||||||||||||| +compute_metrics_topk|function|7be1c2170ed3e678||||||||||||||| +compute_overall_metric|function|48f197ea760af3ee||||||||||||||| +compute_s_profile_with_stats|function|2d5c844d8e0e655f||||||||||||||| +compute_score_regimes|function|d6926f3b87fe56cf||||||||||||||| +compute_streaming_profile|function|358c55ef8991349d||||||||||||||| +const_classes|object|4471c27e60bf977b||||||||||||||| +const_sample_freq|object|71e695e858e0833c||||||||||||||| +const_signals|object|90e8be76eb583b77||||||||||||||| +contrast_profiles|pattern|8ea810d80feb870c|334467772a0e266e||-1929489330||||72541974|rds|local|list||contrast_profiles_abdeb381*contrast_profiles_a82e39cb|119.409|| +contrast_profiles_a82e39cb|branch|2497215cdf26af32|334467772a0e266e|5bb714e3c20da8e1|-1652393871||t19530.6910479256s|e23278cc435f1cf6|37327513|rds|local|list|contrast_profiles||58.355|self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.| +contrast_profiles_abdeb381|branch|1632ad0e3c814b87|334467772a0e266e|13039016b63cc2b6|881813762||t19530.6903450048s|149433ddef8a067d|35214461|rds|local|list|contrast_profiles||61.054|self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.. self_mp contains non finite values. This may happen for small windows.| +contrast_profiles_e327ff9d|branch||99a97d46b20453c6|f8db41fc6e0c9dbc|1788068980||t19524.0587254531s||0|rds|local|list|contrast_profiles||0.09|Unknown or uninitialised column splits.|Assertion on split failed. Must be of class list, not NULL. +contrastprofile_topk|function|07384bc0c436ef7a||||||||||||||| +dataset|stem|50b98d6e099df34f|aba3c22efecde197|ebe8dca02f56cdbb|914614260||t19524.0559056349s|5f270017c99e1c09|490195|rds|local|vector|||36.41|| +deriv|function|e067b65c68e2da0b||||||||||||||| +deriv2|function|b26f60bb778048b2||||||||||||||| +deriv3|function|388b2d63c0e892a5||||||||||||||| +dev_mode|object|df161ddba3dacc9e||||||||||||||| +ecg_kurtosis|function|224ebe1546bc6262||||||||||||||| +extract_regime_sample|function|8d677706b0893101||||||||||||||| +extract_regimes|function|e70966b5d9abe62e||||||||||||||| +f_score|function|38b2fb4e008f352a||||||||||||||| +f1_score|function|d838e7b2db57135e||||||||||||||| +file_paths|pattern|4ece567783d3eab4|6366b1271c1226a2||1115504559||||79512|file|local|vector||file_paths_2876b61a*file_paths_db2ef6dc*file_paths_b5d43bff*file_paths_a8e1ab4c*file_paths_a6e042e6*file_paths_bd025fd7*file_paths_3560dc8d*file_paths_060a8996*file_paths_4927cebe*file_paths_ef5ac6cb*file_paths_62c8531e*file_paths_8b4fa451*file_paths_5735c224*file_paths_ec348fc8*file_paths_ffda0a26*file_paths_a90a3c74*file_paths_eebc7ea2*file_paths_081e7a38*file_paths_dc10c68f*file_paths_0dcb6541*file_paths_e671d460*file_paths_1ea9aac5*file_paths_d1e5eae3*file_paths_c56cca5d*file_paths_7c04c436*file_paths_0f21ed25*file_paths_2f80bda8*file_paths_72ca2472*file_paths_5785cdae*file_paths_267d0116*file_paths_5074f025*file_paths_300e7415*file_paths_441471f0*file_paths_11138a72*file_paths_353b0ab3*file_paths_2cb4e2cc*file_paths_169d57bb*file_paths_76bd555c*file_paths_66c27cdf*file_paths_4fb2967e*file_paths_68de9217*file_paths_7acc3365*file_paths_5036ff2d*file_paths_62b306f2*file_paths_726efae3*file_paths_e79dd701*file_paths_22db335b*file_paths_2f53dcd4*file_paths_419f0940*file_paths_6266c3b9*file_paths_4a5c6285*file_paths_a8798048*file_paths_41eceaec*file_paths_08ae1571*file_paths_c3aeaf4e*file_paths_242ca260*file_paths_2263c056*file_paths_470c2f1e*file_paths_689ecdf7*file_paths_8547c325*file_paths_460df7ad*file_paths_ccaf9e2c*file_paths_a6404161*file_paths_cfab240e*file_paths_e4866885*file_paths_4d578643*file_paths_46b5c99c*file_paths_e08ce18e*file_paths_abb97947*file_paths_bc8a8bf5*file_paths_6f325885*file_paths_652812d3*file_paths_2ce456a3*file_paths_5d98da53*file_paths_fa39054a*file_paths_a5f34866*file_paths_73682890*file_paths_69ef4587*file_paths_5f73946c*file_paths_d1b8a70f*file_paths_74057262*file_paths_e73de766*file_paths_0bd5f99b*file_paths_707f3b3c*file_paths_00b525f2*file_paths_0bd409e2*file_paths_5d0aa06e*file_paths_3bee7ef2*file_paths_22c73d8d*file_paths_3e106138*file_paths_745edb17*file_paths_1bd6baad*file_paths_6afe2123*file_paths_c67aeef2*file_paths_4a94ed73*file_paths_b0c9dbb0*file_paths_a0a2c3b0*file_paths_d60b99a5*file_paths_7506cb1a*file_paths_8cb1f42d*file_paths_e4596992*file_paths_960f551a*file_paths_5bb49027*file_paths_a0d8a30e*file_paths_62f15c95*file_paths_210cca96*file_paths_e0615222*file_paths_7a385266*file_paths_d34ea9c4*file_paths_ba42f02f*file_paths_0e20ab41*file_paths_649720fe*file_paths_08e8b20d*file_paths_edd81848*file_paths_e251574d*file_paths_6c76377f*file_paths_63cdad4a*file_paths_d550e055*file_paths_b20179d9*file_paths_765daa51*file_paths_cd63fe86*file_paths_e039c520*file_paths_72359859*file_paths_e5e16646*file_paths_543214a6*file_paths_d89c9af5*file_paths_05f4082a*file_paths_5edf00db*file_paths_7dbe417b*file_paths_fdb82a50*file_paths_1587591b*file_paths_cc3d28b0*file_paths_71276b13*file_paths_1ce31940*file_paths_aef17277*file_paths_bca1a597*file_paths_45d55781*file_paths_1b2d1dad*file_paths_5fd2b386*file_paths_52318b63*file_paths_46a356fa*file_paths_ff0f7a71*file_paths_3aa7f574*file_paths_205cb9a1*file_paths_94f80e66*file_paths_286c13f9*file_paths_ff7ff6b1*file_paths_ffc0afe0*file_paths_da336c98*file_paths_da4a624d*file_paths_8cb1869e*file_paths_e5af516d*file_paths_7138492c*file_paths_1110d057*file_paths_2fa5afe1*file_paths_46ba8edd*file_paths_3d138b3d*file_paths_42fe92c7*file_paths_4612adc0*file_paths_4eff3d40*file_paths_087ddf77*file_paths_b316bbbc*file_paths_af73c7ce*file_paths_d75ade19*file_paths_35e3bdb5*file_paths_0004945c*file_paths_cec80678*file_paths_83b75e4f*file_paths_9b52b62c*file_paths_a6eaf035*file_paths_2c5cedaa*file_paths_d72da2a5*file_paths_9f5b38f5*file_paths_e5337f20*file_paths_95c4d8ca*file_paths_b3554df6*file_paths_56a73fd1*file_paths_ac7cad18*file_paths_7dc713b7*file_paths_95a97169*file_paths_f389df2b*file_paths_1f837240*file_paths_0ce147fd*file_paths_e27a826b*file_paths_e2a47796*file_paths_e16ed377*file_paths_c1b7af8c*file_paths_eea5b834*file_paths_437f657d*file_paths_ec38760b*file_paths_71c72441*file_paths_830d40c4*file_paths_886ed407*file_paths_2a62fd7b*file_paths_591adbdf*file_paths_24fc6005*file_paths_3f6f8253*file_paths_9c75fc9d*file_paths_c910008b*file_paths_196dce25*file_paths_91083aa3*file_paths_16e74629*file_paths_c3b76f9c*file_paths_45e260c4*file_paths_c5ceae97*file_paths_5bb500b3*file_paths_b234b142*file_paths_18e19b27*file_paths_8cbfdcce*file_paths_a248f3e8*file_paths_76e8c340*file_paths_d91525de*file_paths_ec527d32*file_paths_252664c4*file_paths_8e7ee986*file_paths_4fba17ed*file_paths_30d4b124*file_paths_a7ebb76c*file_paths_8c002a87*file_paths_aa0a6555*file_paths_df0798aa*file_paths_f1ab14ac*file_paths_cb97bcce*file_paths_ae843425*file_paths_9e2f2635*file_paths_71b5d530*file_paths_5c0b391e*file_paths_656bc7b6*file_paths_9f333d50*file_paths_a2980021*file_paths_872c57c7*file_paths_859341f2*file_paths_fd2741b5*file_paths_8eb34f70*file_paths_959ae160*file_paths_a1a2d715*file_paths_c99348d2*file_paths_87eca9ac*file_paths_873d1d9e*file_paths_bb725b40*file_paths_3e58f09a*file_paths_b597011d*file_paths_e54f67e3*file_paths_580ccada*file_paths_16b38bcf*file_paths_52c7ddfb*file_paths_dba8de99*file_paths_d7498ce2*file_paths_19e4b1d1*file_paths_22ad39db*file_paths_b9e9b81b*file_paths_83904bc3*file_paths_10d5f0ef*file_paths_555cb96c*file_paths_85dc430a*file_paths_4084fb00*file_paths_f6dfd6f4*file_paths_8f7ef2bb*file_paths_6ab42093*file_paths_6f76212c*file_paths_8c5cb5bb*file_paths_767c9984*file_paths_23d48af6*file_paths_aa142fdc*file_paths_c2c9668a*file_paths_92f5b2c9*file_paths_94827d18*file_paths_f04e1cd9*file_paths_8a056607*file_paths_aaad6f3a*file_paths_b6f683a6*file_paths_9313f17a*file_paths_09f8753e*file_paths_86e0c6dc*file_paths_eff80777*file_paths_ba106962*file_paths_9ec33709*file_paths_01cf93c2*file_paths_3428c260*file_paths_cdc50c9e*file_paths_4d8b8a1c*file_paths_8ccca06b*file_paths_ee3a1e01*file_paths_f52626c7*file_paths_a026300f*file_paths_aeb3f991*file_paths_e4d93860*file_paths_9188e65a*file_paths_a0440264*file_paths_d7d88744*file_paths_ead90fd3*file_paths_f024948b*file_paths_79510a66*file_paths_6ea59c63*file_paths_8bcbb382*file_paths_82595daa*file_paths_9c275298*file_paths_4376d410*file_paths_a01698ca*file_paths_edef1251*file_paths_75f7d04e*file_paths_547b5f3d*file_paths_81f6411b*file_paths_fa50e44a*file_paths_ad7b45f3*file_paths_6565abcb*file_paths_b93d9383*file_paths_221340fa*file_paths_ad39be57*file_paths_61d00623*file_paths_ec1fc070*file_paths_5058b40c*file_paths_0c072d54*file_paths_beecbf6d*file_paths_9e84b7af*file_paths_ede9b260*file_paths_9b7c43fe*file_paths_20694584*file_paths_43844339*file_paths_2320ac3e*file_paths_f0732ff1*file_paths_23515e22*file_paths_6d5c091b*file_paths_873d2cba*file_paths_cbd7afde*file_paths_68b3d69e*file_paths_28e1a66c*file_paths_feeed8de*file_paths_af357b90*file_paths_1bf6db59*file_paths_f759be49*file_paths_5944204b*file_paths_5c4e530d*file_paths_4b082bf6*file_paths_f9bd5ea5*file_paths_e0fe1124*file_paths_e5c851b2*file_paths_f62dde70*file_paths_298167e4*file_paths_a168d92b*file_paths_a482fb09|0.062|| +file_paths_0004945c|branch|3095d08b444fcd87|6366b1271c1226a2|969496a61213a66c|1979624761|/workspace/false.alarm/inst/extdata/physionet/v470s.hea|t18694.3749768519s|a747ae66a3258038|209|file|local|vector|file_paths||0|| +file_paths_00b525f2|branch|3ac750564f155c00|6366b1271c1226a2|553e49defca148bc|-1703957241|/workspace/false.alarm/inst/extdata/physionet/v283l.hea|t18694.3749768519s|ed0b2f97180e0b86|205|file|local|vector|file_paths||0|| +file_paths_01cf93c2|branch|6015baea92bcc19a|6366b1271c1226a2|cfe19db450305733|1382840900|/workspace/false.alarm/inst/extdata/physionet/v724s.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_05f4082a|branch|a79034abf2425746|6366b1271c1226a2|080cb31f1c32f8e2|-1414476191|/workspace/false.alarm/inst/extdata/physionet/v368s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_060a8996|branch|2a72b02daffb99da|6366b1271c1226a2|93156f4d760d0d12|-1464228313|/workspace/false.alarm/inst/extdata/physionet/v122s.hea|t18694.3749537037s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_081e7a38|branch|ab6a0075ccbd6770|6366b1271c1226a2|fa05093b84ac49fb|747568105|/workspace/false.alarm/inst/extdata/physionet/v141l.hea|t18694.3749537037s|155dcb23a3dc3cf4|236|file|local|vector|file_paths||0|| +file_paths_087ddf77|branch|d6833f5ae3cd5e03|6366b1271c1226a2|940d479fb5c2953d|-1856335|/workspace/false.alarm/inst/extdata/physionet/v459l.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0|| +file_paths_08ae1571|branch|1b88c61e57ed90b3|6366b1271c1226a2|596cfd0c50920815|-674035894|/workspace/false.alarm/inst/extdata/physionet/v212s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0.001|| +file_paths_08e8b20d|branch|d072f556685cf907|6366b1271c1226a2|dc24433d7944e24d|1259726564|/workspace/false.alarm/inst/extdata/physionet/v337l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_09f8753e|branch|6749639e267c40f2|6366b1271c1226a2|95ef864c14a46187|-1427234135|/workspace/false.alarm/inst/extdata/physionet/v713l.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0|| +file_paths_0bd409e2|branch|b09e3b07590c0cd5|6366b1271c1226a2|57d128f1babfc923|1380962911|/workspace/false.alarm/inst/extdata/physionet/v289l.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0|| +file_paths_0bd5f99b|branch|7406646407816700|6366b1271c1226a2|17ceedd7b21c3e5a|488659712|/workspace/false.alarm/inst/extdata/physionet/v280s.hea|t18694.3749768519s|458efa8352f0a1fc|195|file|local|vector|file_paths||0|| +file_paths_0c072d54|branch|fff4710a08937928|6366b1271c1226a2|7ed36f4ac6a71410|-2075369928|/workspace/false.alarm/inst/extdata/physionet/v795l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_0ce147fd|branch|3d9080cb879aadba|6366b1271c1226a2|cff16599bdd792e4|-524985769|/workspace/false.alarm/inst/extdata/physionet/v505l.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_0dcb6541|branch|306b18263f64272c|6366b1271c1226a2|ff3f74ea712d0686|-1586226632|/workspace/false.alarm/inst/extdata/physionet/v146s.hea|t18694.3749537037s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_0e20ab41|branch|2e8a95a2cc903fd2|6366b1271c1226a2|667fd66b6828742f|1780386829|/workspace/false.alarm/inst/extdata/physionet/v334s.hea|t18694.3749768519s|2721c650416a264a|204|file|local|vector|file_paths||0|| +file_paths_0f21ed25|branch|66e7002dbfbd7e6c|6366b1271c1226a2|bd7287277a7f3c01|-1634827863|/workspace/false.alarm/inst/extdata/physionet/v158s.hea|t18694.3749537037s|c3cbfe28e1565b13|202|file|local|vector|file_paths||0|| +file_paths_10d5f0ef|branch|07a293e83b4b6ea0|6366b1271c1226a2|b878bf80b6a6548e|343910280|/workspace/false.alarm/inst/extdata/physionet/v648s.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_1110d057|branch|bf645539a2f42b1a|6366b1271c1226a2|e2609ee71c49d4fd|-1537394469|/workspace/false.alarm/inst/extdata/physionet/v433l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_11138a72|branch|f331684bc4b02fde|6366b1271c1226a2|3aceaaa65bcba257|876873927|/workspace/false.alarm/inst/extdata/physionet/v176s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0.001|| +file_paths_1587591b|branch|7e6fc51c107cc087|6366b1271c1226a2|b5479d6b4f2ab72d|-1395472603|/workspace/false.alarm/inst/extdata/physionet/v373l.hea|t18694.3749768519s|4c877582db246f52|237|file|local|vector|file_paths||0|| +file_paths_169d57bb|branch|62071143c195e1ce|6366b1271c1226a2|66f7c058c0e90341|1529769552|/workspace/false.alarm/inst/extdata/physionet/v180s.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_16b38bcf|branch|027918a8f286f4fa|6366b1271c1226a2|aa8b454a8fff8d27|-374959817|/workspace/false.alarm/inst/extdata/physionet/v636s.hea|t18694.3749768519s|0eb7ad5ce87b6af8|200|file|local|vector|file_paths||0|| +file_paths_16e74629|branch|57a8d5ce6be2d7db|6366b1271c1226a2|3e60dfb8840b5e64|-1214095981|/workspace/false.alarm/inst/extdata/physionet/v549l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_18e19b27|branch|7f3b258dae1c4837|6366b1271c1226a2|25e342c82bb346cc|-1355733630|/workspace/false.alarm/inst/extdata/physionet/v566s.hea|t18694.3749768519s|0cf7d46830a37596|201|file|local|vector|file_paths||0|| +file_paths_196dce25|branch|7b15535d5d0a3ded|6366b1271c1226a2|d04da919febfa61d|904361470|/workspace/false.alarm/inst/extdata/physionet/v542s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_19e4b1d1|branch|b39291917718a569|6366b1271c1226a2|34070afd455f4a20|1500126634|/workspace/false.alarm/inst/extdata/physionet/v643l.hea|t18694.3749768519s|4b46e8ae20ede711|198|file|local|vector|file_paths||0.001|| +file_paths_1b2d1dad|branch|cf0f6503f175fee9|6366b1271c1226a2|26d18db8bfcf0333|-1331735873|/workspace/false.alarm/inst/extdata/physionet/v395l.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0|| +file_paths_1bd6baad|branch|138096dba25e2c47|6366b1271c1226a2|c91e9bb5fecf110e|-1264932025|/workspace/false.alarm/inst/extdata/physionet/v295l.hea|t18694.3749768519s|ed0b2f97180e0b86|205|file|local|vector|file_paths||0|| +file_paths_1bf6db59|branch|964055dc77ba7608|6366b1271c1226a2|0b0e0591ffef28a8|-1402238616|/workspace/false.alarm/inst/extdata/physionet/v830s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_1ce31940|branch|33310571ff3caa9a|6366b1271c1226a2|3ce6f5ecaf65f148|339123176|/workspace/false.alarm/inst/extdata/physionet/v380s.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0|| +file_paths_1ea9aac5|branch|d7a5b6ebe69d5243|6366b1271c1226a2|8058812877f1682a|2057483290|/workspace/false.alarm/inst/extdata/physionet/v148s.hea|t18694.3749537037s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_1f837240|branch|b868799604a690f5|6366b1271c1226a2|133b1198be9fe3e6|-319666877|/workspace/false.alarm/inst/extdata/physionet/v502s.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_205cb9a1|branch|0771268185e01409|6366b1271c1226a2|093de5023aaefc77|1515449394|/workspace/false.alarm/inst/extdata/physionet/v403l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_20694584|branch|5dc0d9a8c52e11bc|6366b1271c1226a2|ccedcbd3388f7a80|2041597841|/workspace/false.alarm/inst/extdata/physionet/v806s.hea|t18694.3749768519s|85f9d15331713ebb|203|file|local|vector|file_paths||0|| +file_paths_210cca96|branch|81e9aea12d7bf62b|6366b1271c1226a2|a30817353b592dc5|-1190273446|/workspace/false.alarm/inst/extdata/physionet/v325l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_221340fa|branch|7a9c5fcce14b205f|6366b1271c1226a2|b5b62ee686a37065|198302079|/workspace/false.alarm/inst/extdata/physionet/v783l.hea|t18694.3749768519s|2c02ccb1d6d3878b|191|file|local|vector|file_paths||0|| +file_paths_2263c056|branch|f9bc1dd892210980|6366b1271c1226a2|c1bd74c5b9ab17a0|-836007613|/workspace/false.alarm/inst/extdata/physionet/v221l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0.001|| +file_paths_22ad39db|branch|a1f2616263015d02|6366b1271c1226a2|2cec7c03db910d82|1771197356|/workspace/false.alarm/inst/extdata/physionet/v644s.hea|t18694.3749768519s|85f9d15331713ebb|203|file|local|vector|file_paths||0|| +file_paths_22c73d8d|branch|505085959c286bc7|6366b1271c1226a2|0b0d19c837ad3a6e|-452319874|/workspace/false.alarm/inst/extdata/physionet/v292s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_22db335b|branch|4268c8ecae5490f8|6366b1271c1226a2|78c8402454cbf900|1768737650|/workspace/false.alarm/inst/extdata/physionet/v202s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_2320ac3e|branch|a56917efb3e84684|6366b1271c1226a2|cb6961f917008ea4|-1644619639|/workspace/false.alarm/inst/extdata/physionet/v809l.hea|t18694.3749768519s|bd9cdb2e6c3ecc89|253|file|local|vector|file_paths||0|| +file_paths_23515e22|branch|d8474a62a3bad512|6366b1271c1226a2|7b84d048d683d4a4|1127881921|/workspace/false.alarm/inst/extdata/physionet/v813l.hea|t18694.3749768519s|bf1a1ce7cd804ab5|251|file|local|vector|file_paths||0|| +file_paths_23d48af6|branch|f3304701d8038761|6366b1271c1226a2|f94f6c88dfd80d7e|-1780108314|/workspace/false.alarm/inst/extdata/physionet/v676s.hea|t18694.3749768519s|24647c65900306d3|252|file|local|vector|file_paths||0|| +file_paths_242ca260|branch|25c32485dadd609f|6366b1271c1226a2|48409f20038669c6|-2127492340|/workspace/false.alarm/inst/extdata/physionet/v218s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_24fc6005|branch|b3a7f4e75c9aeac7|6366b1271c1226a2|e730b973b6af849c|572208163|/workspace/false.alarm/inst/extdata/physionet/v535l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_252664c4|branch|1cbdc9e00e6cae4c|6366b1271c1226a2|1f2c6b18ad095811|-664752343|/workspace/false.alarm/inst/extdata/physionet/v574s.hea|t18694.3749768519s|4b46e8ae20ede711|198|file|local|vector|file_paths||0.001|| +file_paths_267d0116|branch|9a2ad6c9191faad3|6366b1271c1226a2|22bf72d46e0e12ae|88882823|/workspace/false.alarm/inst/extdata/physionet/v164s.hea|t18694.3749537037s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_286c13f9|branch|6473cf4e1533ce42|6366b1271c1226a2|ac150fe7f3294def|1763326500|/workspace/false.alarm/inst/extdata/physionet/v405l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_2876b61a|branch|ba503ffd4d46389b|6366b1271c1226a2|87a2d458e4128b64|300333473|/workspace/false.alarm/inst/extdata/physionet/v100s.hea|t18694.3749537037s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_28e1a66c|branch|177623b34e32cf5d|6366b1271c1226a2|0c61e081f385b723|368004877|/workspace/false.alarm/inst/extdata/physionet/v826s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_298167e4|branch|c599ded887a1683e|6366b1271c1226a2|7351b2cb8c09960a|131685988|/workspace/false.alarm/inst/extdata/physionet/v845l.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_2a62fd7b|branch|b9e15a95ada8b050|6366b1271c1226a2|f18038545ab9b470|1427869289|/workspace/false.alarm/inst/extdata/physionet/v533l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_2c5cedaa|branch|f1b267bc6407092f|6366b1271c1226a2|3ea17e5b80dafcda|-1350164606|/workspace/false.alarm/inst/extdata/physionet/v476s.hea|t18694.3749768519s|9c4bb1876e1721ca|190|file|local|vector|file_paths||0|| +file_paths_2cb4e2cc|branch|beb7a35dff42a3b7|6366b1271c1226a2|6fc33436f96412b4|-234109251|/workspace/false.alarm/inst/extdata/physionet/v179l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0.001|| +file_paths_2ce456a3|branch|ae2c367e78ab496d|6366b1271c1226a2|5690e893cd6a86ba|-607248388|/workspace/false.alarm/inst/extdata/physionet/v254s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_2f53dcd4|branch|0dec431c5c119019|6366b1271c1226a2|fbf4859dba413275|-479663385|/workspace/false.alarm/inst/extdata/physionet/v204s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_2f80bda8|branch|0e19fd566025486a|6366b1271c1226a2|4bb37224f6e6936b|-173448695|/workspace/false.alarm/inst/extdata/physionet/v159l.hea|t18694.3749537037s|c3cbfe28e1565b13|202|file|local|vector|file_paths||0|| +file_paths_2fa5afe1|branch|a80d22e92aad513f|6366b1271c1226a2|058d40a90a264f2c|1159151272|/workspace/false.alarm/inst/extdata/physionet/v437l.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_300e7415|branch|3db65de94e76173e|6366b1271c1226a2|260af41282a10b28|-663096073|/workspace/false.alarm/inst/extdata/physionet/v168s.hea|t18694.3749537037s|60cf4163658a3202|243|file|local|vector|file_paths||0.001|| +file_paths_30d4b124|branch|39d4801242db6f51|6366b1271c1226a2|c1d8193d345dcb03|1915379674|/workspace/false.alarm/inst/extdata/physionet/v581l.hea|t18694.3749768519s|c3cbfe28e1565b13|202|file|local|vector|file_paths||0|| +file_paths_3428c260|branch|12c3097a30a14e1b|6366b1271c1226a2|9cac6a1995353556|1747187|/workspace/false.alarm/inst/extdata/physionet/v725l.hea|t18694.3749768519s|2721c650416a264a|204|file|local|vector|file_paths||0|| +file_paths_353b0ab3|branch|9a9492ec2b2e8e80|6366b1271c1226a2|e669aa2fc1e51dea|-1482901847|/workspace/false.alarm/inst/extdata/physionet/v177l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_3560dc8d|branch|aa55d909cc4be9ff|6366b1271c1226a2|5dfda1d6f8624da7|1815646965|/workspace/false.alarm/inst/extdata/physionet/v119l.hea|t18694.3749537037s|bd9cdb2e6c3ecc89|253|file|local|vector|file_paths||0|| +file_paths_35e3bdb5|branch|d4c1d615a86e02ee|6366b1271c1226a2|40835329bf13a8c5|313775722|/workspace/false.alarm/inst/extdata/physionet/v466s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0.001|| +file_paths_3aa7f574|branch|ea6e6cc7f0b4b9c2|6366b1271c1226a2|73370d4f85292af5|1618022645|/workspace/false.alarm/inst/extdata/physionet/v402s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_3bee7ef2|branch|0af09faea3c33b15|6366b1271c1226a2|3c2d18e315a69bbb|-849275014|/workspace/false.alarm/inst/extdata/physionet/v291l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_3d138b3d|branch|42f3c9e8c7be6443|6366b1271c1226a2|a5a48f452dc636ce|1284160380|/workspace/false.alarm/inst/extdata/physionet/v448s.hea|t18694.3749768519s|4b46e8ae20ede711|198|file|local|vector|file_paths||0|| +file_paths_3e106138|branch|3bebfa6d9aa5c11c|6366b1271c1226a2|308830110b84fbcd|-1804769913|/workspace/false.alarm/inst/extdata/physionet/v293l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_3e58f09a|branch|950a0753ef88de04|6366b1271c1226a2|161b7350a6f9d719|-674651192|/workspace/false.alarm/inst/extdata/physionet/v632s.hea|t18694.3749768519s|71e695e858e0833c|250|file|local|vector|file_paths||0.001|| +file_paths_3f6f8253|branch|b92b16c91f5dea05|6366b1271c1226a2|74173a3076a0023f|1598311581|/workspace/false.alarm/inst/extdata/physionet/v536s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_4084fb00|branch|6f31e43a11d8b9c3|6366b1271c1226a2|2068b0005abbb79f|1234398651|/workspace/false.alarm/inst/extdata/physionet/v655l.hea|t18694.3749768519s|e69b513f5fd59ef6|206|file|local|vector|file_paths||0.001|| +file_paths_419f0940|branch|b7d6c2a3007fb452|6366b1271c1226a2|e22c02c950629d0e|-897633321|/workspace/false.alarm/inst/extdata/physionet/v205l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0.001|| +file_paths_41eceaec|branch|1c2393a3e388ea25|6366b1271c1226a2|cbc07e8f76bca55a|-1117425589|/workspace/false.alarm/inst/extdata/physionet/v211l.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0|| +file_paths_42fe92c7|branch|15133bac1fec4642|6366b1271c1226a2|f12f149ec8544a48|1277088894|/workspace/false.alarm/inst/extdata/physionet/v452s.hea|t18694.3749768519s|0eb7ad5ce87b6af8|200|file|local|vector|file_paths||0|| +file_paths_4376d410|branch|67fb9867c82fd8ba|6366b1271c1226a2|1733960ef810dcc2|1588163885|/workspace/false.alarm/inst/extdata/physionet/v767l.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_437f657d|branch|ba6bc59ecb17e8bd|6366b1271c1226a2|be29d63e7869d952|-1696156130|/workspace/false.alarm/inst/extdata/physionet/v522s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_43844339|branch|ccfb2ecc3f3df621|6366b1271c1226a2|fcb42934551ece67|1685543312|/workspace/false.alarm/inst/extdata/physionet/v808s.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0|| +file_paths_441471f0|branch|7a3f8ce8bc783a2d|6366b1271c1226a2|54d4f73a992a632f|-380166615|/workspace/false.alarm/inst/extdata/physionet/v169l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0.001|| +file_paths_45d55781|branch|a6dab6f4b80f9959|6366b1271c1226a2|fd8a9a4c404b1350|-1402966502|/workspace/false.alarm/inst/extdata/physionet/v392s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_45e260c4|branch|7135da4f50305aa2|6366b1271c1226a2|cef523f391ddbabd|-1492286382|/workspace/false.alarm/inst/extdata/physionet/v552s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_460df7ad|branch|4ea88399740c9179|6366b1271c1226a2|580c689740ad9b7a|1594026443|/workspace/false.alarm/inst/extdata/physionet/v232s.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_4612adc0|branch|b5a2c191ad5dfd52|6366b1271c1226a2|1d877e51baefb7f9|366500383|/workspace/false.alarm/inst/extdata/physionet/v453l.hea|t18694.3749768519s|4704cb860dc3a9a3|193|file|local|vector|file_paths||0|| +file_paths_46a356fa|branch|97916a6a67a311dd|6366b1271c1226a2|9d08e3b2e9d8252c|363993826|/workspace/false.alarm/inst/extdata/physionet/v400s.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_46b5c99c|branch|246b84ddc80ee268|6366b1271c1226a2|b325e251e530429f|-974871133|/workspace/false.alarm/inst/extdata/physionet/v245l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_46ba8edd|branch|987649be6d16bf6e|6366b1271c1226a2|635ccd76d447f963|1302421114|/workspace/false.alarm/inst/extdata/physionet/v438s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0.001|| +file_paths_470c2f1e|branch|b373b6bca7ecd982|6366b1271c1226a2|63367e5f4c63ebda|-1873281493|/workspace/false.alarm/inst/extdata/physionet/v222s.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_4927cebe|branch|a0b7afb48110829b|6366b1271c1226a2|75dac121e1116399|-1741322961|/workspace/false.alarm/inst/extdata/physionet/v127l.hea|t18694.3749537037s|2721c650416a264a|204|file|local|vector|file_paths||0|| +file_paths_4a5c6285|branch|22426a2277612cdb|6366b1271c1226a2|595246de95b1fcba|-475577861|/workspace/false.alarm/inst/extdata/physionet/v207l.hea|t18694.3749768519s|bf1a1ce7cd804ab5|251|file|local|vector|file_paths||0|| +file_paths_4a94ed73|branch|96d25cd6c2fdf53c|6366b1271c1226a2|cffe2a4c504c1879|351566651|/workspace/false.alarm/inst/extdata/physionet/v303l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_4b082bf6|branch|13e2b9cb5ee857cc|6366b1271c1226a2|712211b9eca2cccc|-1128959007|/workspace/false.alarm/inst/extdata/physionet/v836s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0.001|| +file_paths_4d578643|branch|3e139c6fb74ca20f|6366b1271c1226a2|82549f5a46386620|-236468484|/workspace/false.alarm/inst/extdata/physionet/v244s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0.001|| +file_paths_4d8b8a1c|branch|0a4af3bdbd7b3779|6366b1271c1226a2|3c2ff761fe03244d|-299586438|/workspace/false.alarm/inst/extdata/physionet/v727l.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_4eff3d40|branch|36c9991417371b01|6366b1271c1226a2|a253a0202f3bee54|-1687371180|/workspace/false.alarm/inst/extdata/physionet/v454s.hea|t18694.3749768519s|0cf7d46830a37596|201|file|local|vector|file_paths||0|| +file_paths_4fb2967e|branch|a00c3038b3fc3997|6366b1271c1226a2|a4ca1b79a39af069|-8648592|/workspace/false.alarm/inst/extdata/physionet/v188s.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_4fba17ed|branch|bbf48a6a0b5a9a07|6366b1271c1226a2|cc4d912eea8c2bea|-1816425670|/workspace/false.alarm/inst/extdata/physionet/v579l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_5036ff2d|branch|5793aa68466c06d9|6366b1271c1226a2|9e729c159f1f992a|-1196373687|/workspace/false.alarm/inst/extdata/physionet/v198s.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0|| +file_paths_5058b40c|branch|3e681463008b0050|6366b1271c1226a2|ac515a5ee4538759|292906673|/workspace/false.alarm/inst/extdata/physionet/v793l.hea|t18694.3749768519s|24647c65900306d3|252|file|local|vector|file_paths||0|| +file_paths_5074f025|branch|93ba74d19c2456b7|6366b1271c1226a2|98a24ad0b0b64853|1094467040|/workspace/false.alarm/inst/extdata/physionet/v166s.hea|t18694.3749537037s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_52318b63|branch|448a865462410b18|6366b1271c1226a2|756b4d13b57ffa12|-312004286|/workspace/false.alarm/inst/extdata/physionet/v399l.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0|| +file_paths_52c7ddfb|branch|7e9dcbaf7f58b78b|6366b1271c1226a2|db2ad2bdd9710312|-445563884|/workspace/false.alarm/inst/extdata/physionet/v638s.hea|t18694.3749768519s|dd56a5971d025bfa|192|file|local|vector|file_paths||0|| +file_paths_543214a6|branch|9678e1cb603b35b3|6366b1271c1226a2|cb737d066c15b2b0|70718745|/workspace/false.alarm/inst/extdata/physionet/v366s.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0.001|| +file_paths_547b5f3d|branch|1880bf682ce1457d|6366b1271c1226a2|6b521b49f29d46af|1949380637|/workspace/false.alarm/inst/extdata/physionet/v773l.hea|t18694.3749768519s|dd56a5971d025bfa|192|file|local|vector|file_paths||0|| +file_paths_555cb96c|branch|1579e48eb5445525|6366b1271c1226a2|e9ebc09db44feb7f|-1187939376|/workspace/false.alarm/inst/extdata/physionet/v649l.hea|t18694.3749768519s|4c877582db246f52|237|file|local|vector|file_paths||0|| +file_paths_56a73fd1|branch|eed82dcb298c5788|6366b1271c1226a2|b3ad43171f0ef6d9|-141540865|/workspace/false.alarm/inst/extdata/physionet/v489l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_5735c224|branch|9a421137771ab4fe|6366b1271c1226a2|fdb46f46c19f7f5b|-1627368758|/workspace/false.alarm/inst/extdata/physionet/v133l.hea|t18694.3749537037s|1018763f8eb390c8|254|file|local|vector|file_paths||0.001|| +file_paths_5785cdae|branch|368c0c6cb0bb2d96|6366b1271c1226a2|919808d1805ec0c9|-375884588|/workspace/false.alarm/inst/extdata/physionet/v162s.hea|t18694.3749537037s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_580ccada|branch|e42b15f7880475ff|6366b1271c1226a2|2d4baf342290b579|-1764923281|/workspace/false.alarm/inst/extdata/physionet/v635l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_591adbdf|branch|5306741dc71495f0|6366b1271c1226a2|6a0778cb4da688a2|-551871980|/workspace/false.alarm/inst/extdata/physionet/v534s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_5944204b|branch|0f62fd724bbbd3d4|6366b1271c1226a2|40a5e49b61737d86|-23419258|/workspace/false.alarm/inst/extdata/physionet/v833l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_5bb49027|branch|787956b8723ef2dd|6366b1271c1226a2|3fe21f8caf888c4b|-24846876|/workspace/false.alarm/inst/extdata/physionet/v322s.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0|| +file_paths_5bb500b3|branch|e7953d61ce29a37a|6366b1271c1226a2|62e8d44a5450a6f1|1498123609|/workspace/false.alarm/inst/extdata/physionet/v559l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_5c0b391e|branch|64ecf1862462f14a|6366b1271c1226a2|5ef997d9313ffb1d|-1200650351|/workspace/false.alarm/inst/extdata/physionet/v611l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_5c4e530d|branch|9f14bb320c3f13a4|6366b1271c1226a2|3c1d8858de84cac9|671028891|/workspace/false.alarm/inst/extdata/physionet/v834s.hea|t18694.3749768519s|0cf7d46830a37596|201|file|local|vector|file_paths||0.001|| +file_paths_5d0aa06e|branch|67504929302c721c|6366b1271c1226a2|731afca88bbe481e|-746075787|/workspace/false.alarm/inst/extdata/physionet/v290s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_5d98da53|branch|88008ba1ec146f6d|6366b1271c1226a2|77c5b92428fc213f|-1290783421|/workspace/false.alarm/inst/extdata/physionet/v255l.hea|t18694.3749768519s|155dcb23a3dc3cf4|236|file|local|vector|file_paths||0|| +file_paths_5edf00db|branch|07afdab0d8f8dd5c|6366b1271c1226a2|fb9c55e3e0b77374|-859521681|/workspace/false.alarm/inst/extdata/physionet/v369l.hea|t18694.3749768519s|4b46e8ae20ede711|198|file|local|vector|file_paths||0|| +file_paths_5f73946c|branch|56dc31249f04d49c|6366b1271c1226a2|3bb838353665a3b1|1684393591|/workspace/false.alarm/inst/extdata/physionet/v262s.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0.001|| +file_paths_5fd2b386|branch|1a9d6c05ed8a7d21|6366b1271c1226a2|929924b6b7a8d769|1210621289|/workspace/false.alarm/inst/extdata/physionet/v398s.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0.001|| +file_paths_61d00623|branch|833f1216a24edbc6|6366b1271c1226a2|d6dc87262edf7123|651610617|/workspace/false.alarm/inst/extdata/physionet/v788s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0.001|| +file_paths_6266c3b9|branch|ffeac1f38ceaa9f1|6366b1271c1226a2|85239a1f6b8e1cde|-459013553|/workspace/false.alarm/inst/extdata/physionet/v206s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_62b306f2|branch|d837d895ae051c6d|6366b1271c1226a2|708b72a1e29a2d2f|-1823772370|/workspace/false.alarm/inst/extdata/physionet/v199l.hea|t18694.3749768519s|9c4bb1876e1721ca|190|file|local|vector|file_paths||0|| +file_paths_62c8531e|branch|b3d26e07b27fe9b9|6366b1271c1226a2|571b2a7c064aa6a5|-742656308|/workspace/false.alarm/inst/extdata/physionet/v131l.hea|t18694.3749537037s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_62f15c95|branch|f197a5333e19535b|6366b1271c1226a2|365e75b64342563d|284890826|/workspace/false.alarm/inst/extdata/physionet/v324s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_63cdad4a|branch|e3793d8cb1cdeb29|6366b1271c1226a2|1efd8d2ff04cecce|-355276587|/workspace/false.alarm/inst/extdata/physionet/v353l.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_649720fe|branch|da66c8a8125e2bb7|6366b1271c1226a2|cb4dd4e1b4626324|238042927|/workspace/false.alarm/inst/extdata/physionet/v336s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_652812d3|branch|47d224134230501d|6366b1271c1226a2|897afcba753def06|1929487948|/workspace/false.alarm/inst/extdata/physionet/v253l.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0.001|| +file_paths_6565abcb|branch|35b4c67d35eb212d|6366b1271c1226a2|c30bbee04655ed00|-843463792|/workspace/false.alarm/inst/extdata/physionet/v781l.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0|| +file_paths_656bc7b6|branch|56c843cff5e9de6f|6366b1271c1226a2|e341999930a5a38d|1882417100|/workspace/false.alarm/inst/extdata/physionet/v612s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_66c27cdf|branch|808e5d12173bedba|6366b1271c1226a2|2d7af77b7901f66d|-613957323|/workspace/false.alarm/inst/extdata/physionet/v182s.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_689ecdf7|branch|11136c02b75233c3|6366b1271c1226a2|fa82ccb29a1fd0d4|2047942224|/workspace/false.alarm/inst/extdata/physionet/v224s.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_68b3d69e|branch|75bddab8c44ce3a7|6366b1271c1226a2|99a3476676b811c6|-427881916|/workspace/false.alarm/inst/extdata/physionet/v823l.hea|t18694.3749768519s|bf1a1ce7cd804ab5|251|file|local|vector|file_paths||0|| +file_paths_68de9217|branch|4ca7cd84026109b2|6366b1271c1226a2|86f077d05bb75c59|-711253924|/workspace/false.alarm/inst/extdata/physionet/v194s.hea|t18694.3749768519s|e69b513f5fd59ef6|206|file|local|vector|file_paths||0|| +file_paths_69ef4587|branch|f9547126182cc6f8|6366b1271c1226a2|2f7c3440d0e3f0b8|1381267557|/workspace/false.alarm/inst/extdata/physionet/v259l.hea|t18694.3749768519s|c3cbfe28e1565b13|202|file|local|vector|file_paths||0|| +file_paths_6ab42093|branch|fdc5ed5ae4f9720c|6366b1271c1226a2|2e11b94de80d241d|-2143611944|/workspace/false.alarm/inst/extdata/physionet/v663l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_6afe2123|branch|f914e70828e3f4fa|6366b1271c1226a2|5b852a397f1a2523|74646295|/workspace/false.alarm/inst/extdata/physionet/v296s.hea|t18694.3749768519s|4704cb860dc3a9a3|193|file|local|vector|file_paths||0|| +file_paths_6c76377f|branch|21bfa9b7d6d9da62|6366b1271c1226a2|90aa28b81556bdaa|-953710377|/workspace/false.alarm/inst/extdata/physionet/v348s.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0|| +file_paths_6d5c091b|branch|684f190b412b88d3|6366b1271c1226a2|8e1e5a2cbac32863|1077895590|/workspace/false.alarm/inst/extdata/physionet/v814s.hea|t18694.3749768519s|c784844629387e6b|197|file|local|vector|file_paths||0|| +file_paths_6ea59c63|branch|33eb35cf7c27608a|6366b1271c1226a2|17e63a5d9829feb0|536665018|/workspace/false.alarm/inst/extdata/physionet/v761l.hea|t18694.3749768519s|76d5158c9904ac60|264|file|local|vector|file_paths||0|| +file_paths_6f325885|branch|426096b88d2f1dc2|6366b1271c1226a2|3de28dd5da93812a|-1158115086|/workspace/false.alarm/inst/extdata/physionet/v250s.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_6f76212c|branch|6609948be614adc7|6366b1271c1226a2|58b01d886af23d79|-1134857189|/workspace/false.alarm/inst/extdata/physionet/v666s.hea|t18694.3749768519s|c784844629387e6b|197|file|local|vector|file_paths||0|| +file_paths_707f3b3c|branch|ff63c9fc458d81e3|6366b1271c1226a2|ecb314c34c467ce4|-1427754290|/workspace/false.alarm/inst/extdata/physionet/v282s.hea|t18694.3749768519s|3c187ffa31a31952|199|file|local|vector|file_paths||0|| +file_paths_71276b13|branch|acf917e5c8cc59ac|6366b1271c1226a2|4b1bf2e36f3b8bd5|1512972089|/workspace/false.alarm/inst/extdata/physionet/v375l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_7138492c|branch|fe200f5d75b388c3|6366b1271c1226a2|7661629a15cd4ff1|-1874242428|/workspace/false.alarm/inst/extdata/physionet/v432s.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_71b5d530|branch|14f706b4ce87abd3|6366b1271c1226a2|15e102a40546cae9|447059056|/workspace/false.alarm/inst/extdata/physionet/v609l.hea|t18694.3749768519s|4704cb860dc3a9a3|193|file|local|vector|file_paths||0|| +file_paths_71c72441|branch|b0447ee4d20c55da|6366b1271c1226a2|4b47ee527b59d8b4|-437941033|/workspace/false.alarm/inst/extdata/physionet/v525l.hea|t18694.3749768519s|e102fd4cf0167a36|208|file|local|vector|file_paths||0|| +file_paths_72359859|branch|9c544f93c1e9da69|6366b1271c1226a2|9dec83909141451a|1365731187|/workspace/false.alarm/inst/extdata/physionet/v364s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_726efae3|branch|4cc271209daad4e5|6366b1271c1226a2|a7ae101ab9e90c3a|-180026060|/workspace/false.alarm/inst/extdata/physionet/v200s.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0.001|| +file_paths_72ca2472|branch|52e4df6ace9e7387|6366b1271c1226a2|72b7f17a86b1cb86|1736705184|/workspace/false.alarm/inst/extdata/physionet/v160s.hea|t18694.3749537037s|60cf4163658a3202|243|file|local|vector|file_paths||0.001|| +file_paths_73682890|branch|88ef896591da91b9|6366b1271c1226a2|9a854ffe938f2fda|-646439379|/workspace/false.alarm/inst/extdata/physionet/v258s.hea|t18694.3749768519s|dd56a5971d025bfa|192|file|local|vector|file_paths||0|| +file_paths_74057262|branch|944a9df86e8af5df|6366b1271c1226a2|fd2bc02b540ea61e|1595279652|/workspace/false.alarm/inst/extdata/physionet/v274s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_745edb17|branch|9e7f29836d527b77|6366b1271c1226a2|0cde68ec0c579360|1331790181|/workspace/false.alarm/inst/extdata/physionet/v294s.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0|| +file_paths_7506cb1a|branch|071a1928bde2166e|6366b1271c1226a2|37c0c376ae588c38|-1809406243|/workspace/false.alarm/inst/extdata/physionet/v316s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0.001|| +file_paths_75f7d04e|branch|d9b5eef805a4c000|6366b1271c1226a2|5c375223948a0450|749878272|/workspace/false.alarm/inst/extdata/physionet/v772s.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_765daa51|branch|568401d3a0c3c53d|6366b1271c1226a2|dab3c91491e1e7e6|-972412785|/workspace/false.alarm/inst/extdata/physionet/v359l.hea|t18694.3749768519s|71e695e858e0833c|250|file|local|vector|file_paths||0|| +file_paths_767c9984|branch|40232af5b35c55de|6366b1271c1226a2|19289a6f58321a0d|-930937250|/workspace/false.alarm/inst/extdata/physionet/v674s.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_76bd555c|branch|63ea3a15f07045a9|6366b1271c1226a2|194d8a89686a9e2e|-1323595898|/workspace/false.alarm/inst/extdata/physionet/v181l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_76e8c340|branch|9df0a7df9052cf24|6366b1271c1226a2|ddabb197cfa988e6|745818884|/workspace/false.alarm/inst/extdata/physionet/v570s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_79510a66|branch|a4012199fb0cfafb|6366b1271c1226a2|96627f50a6ac69d6|-1214712692|/workspace/false.alarm/inst/extdata/physionet/v759l.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_7a385266|branch|c738ba0d52941175|6366b1271c1226a2|9412527176f5991b|829017750|/workspace/false.alarm/inst/extdata/physionet/v327l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0.001|| +file_paths_7acc3365|branch|ad1ba16ee360478e|6366b1271c1226a2|64876bb2860ed1be|-1657126975|/workspace/false.alarm/inst/extdata/physionet/v197l.hea|t18694.3749768519s|81a1853ddabe4117|256|file|local|vector|file_paths||0|| +file_paths_7c04c436|branch|e8be782787604541|6366b1271c1226a2|b4b431f2db6fa3ad|-1046140483|/workspace/false.alarm/inst/extdata/physionet/v155l.hea|t18694.3749537037s|155dcb23a3dc3cf4|236|file|local|vector|file_paths||0|| +file_paths_7dbe417b|branch|a004edb34a316070|6366b1271c1226a2|6f4243c591ba863a|473002143|/workspace/false.alarm/inst/extdata/physionet/v370s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_7dc713b7|branch|ca6ac32610c7269e|6366b1271c1226a2|9b07089b47c6d38a|-637665646|/workspace/false.alarm/inst/extdata/physionet/v492s.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_81f6411b|branch|eb42b3d9b1056997|6366b1271c1226a2|24e7a6743de0ac4e|-556341805|/workspace/false.alarm/inst/extdata/physionet/v774s.hea|t18694.3749768519s|7109262deedf9325|229|file|local|vector|file_paths||0|| +file_paths_82595daa|branch|14875a9f96515171|6366b1271c1226a2|3d28461b4455eeeb|491779964|/workspace/false.alarm/inst/extdata/physionet/v765l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_830d40c4|branch|0924bed422925c13|6366b1271c1226a2|051c3e3384becae0|1336523739|/workspace/false.alarm/inst/extdata/physionet/v531l.hea|t18694.3749768519s|a2ec227a551ed8f0|231|file|local|vector|file_paths||0|| +file_paths_83904bc3|branch|06dfd3b9b62a33e4|6366b1271c1226a2|8b9ba7527d80c11e|540928376|/workspace/false.alarm/inst/extdata/physionet/v647l.hea|t18694.3749768519s|85f9d15331713ebb|203|file|local|vector|file_paths||0|| +file_paths_83b75e4f|branch|7da632e898183507|6366b1271c1226a2|42309ab04e5bfef3|1042598045|/workspace/false.alarm/inst/extdata/physionet/v472s.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0.001|| +file_paths_8547c325|branch|5a530ef25167360f|6366b1271c1226a2|b7c5121e953891d0|-1434615444|/workspace/false.alarm/inst/extdata/physionet/v230s.hea|t18694.3749768519s|155dcb23a3dc3cf4|236|file|local|vector|file_paths||0.001|| +file_paths_859341f2|branch|1e5fa62020b340da|6366b1271c1226a2|ace184fc249e00ce|1989712123|/workspace/false.alarm/inst/extdata/physionet/v620s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0.001|| +file_paths_85dc430a|branch|26d8c55ee4f1b11f|6366b1271c1226a2|6e476e06dc382301|2107846562|/workspace/false.alarm/inst/extdata/physionet/v652s.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0.001|| +file_paths_86e0c6dc|branch|f13643506b71d59a|6366b1271c1226a2|b438a01a53a51c81|-1669576587|/workspace/false.alarm/inst/extdata/physionet/v714s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_872c57c7|branch|9cc9c9bb12ee8797|6366b1271c1226a2|7630fb03b0b09e3d|-405022827|/workspace/false.alarm/inst/extdata/physionet/v619l.hea|t18694.3749768519s|b7e15d70da794704|235|file|local|vector|file_paths||0|| +file_paths_873d1d9e|branch|f792459accf920cc|6366b1271c1226a2|0a6440eb445668b0|-914704687|/workspace/false.alarm/inst/extdata/physionet/v629l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_873d2cba|branch|8272021d2d607bc3|6366b1271c1226a2|d91c184edf1703a6|1406613420|/workspace/false.alarm/inst/extdata/physionet/v815l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_87eca9ac|branch|c2016d4b400dd026|6366b1271c1226a2|869deeb9d99f8ea8|1971449619|/workspace/false.alarm/inst/extdata/physionet/v628s.hea|t18694.3749768519s|9c4bb1876e1721ca|190|file|local|vector|file_paths||0|| +file_paths_886ed407|branch|3841223d0bd7dac8|6366b1271c1226a2|4a4255c4e99d99bd|1426108504|/workspace/false.alarm/inst/extdata/physionet/v532s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0.001|| +file_paths_8a056607|branch|c2ed03264fef1ac4|6366b1271c1226a2|ba5fa831b7c41874|-738825795|/workspace/false.alarm/inst/extdata/physionet/v701l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_8b4fa451|branch|3a44d83fca6b508d|6366b1271c1226a2|fe0550794353b461|-318340951|/workspace/false.alarm/inst/extdata/physionet/v132s.hea|t18694.3749537037s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_8bcbb382|branch|3b614796025f2187|6366b1271c1226a2|01dda94018496080|612868203|/workspace/false.alarm/inst/extdata/physionet/v763l.hea|t18694.3749768519s|c784844629387e6b|197|file|local|vector|file_paths||0|| +file_paths_8c002a87|branch|0e561c17d4385212|6366b1271c1226a2|ecab9c26187ca770|1755995187|/workspace/false.alarm/inst/extdata/physionet/v585l.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_8c5cb5bb|branch|d2a95d62cd8db964|6366b1271c1226a2|7d45ace1e4d30efd|858397486|/workspace/false.alarm/inst/extdata/physionet/v671l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0.001|| +file_paths_8cb1869e|branch|20c5a8323fb5f490|6366b1271c1226a2|c1b3466eae153cb7|-996030040|/workspace/false.alarm/inst/extdata/physionet/v427l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0.001|| +file_paths_8cb1f42d|branch|b5a5914ba918072e|6366b1271c1226a2|a59bd97f9a7dad6f|2096113826|/workspace/false.alarm/inst/extdata/physionet/v317l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_8cbfdcce|branch|882929bf64dc9b25|6366b1271c1226a2|935d90b0ee605435|1039972160|/workspace/false.alarm/inst/extdata/physionet/v568s.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_8ccca06b|branch|3e7fe1e3f0c819b6|6366b1271c1226a2|09efd5ed02b9480d|710649921|/workspace/false.alarm/inst/extdata/physionet/v728s.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_8e7ee986|branch|8b30936dcdcc5b08|6366b1271c1226a2|71f3d4f86484b96d|776948632|/workspace/false.alarm/inst/extdata/physionet/v575l.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_8eb34f70|branch|de7e5bcfd295acc6|6366b1271c1226a2|a300b2ff8a541fc1|-2000207772|/workspace/false.alarm/inst/extdata/physionet/v623l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0.001|| +file_paths_8f7ef2bb|branch|13827980947605ae|6366b1271c1226a2|bbf870ac60d6eeca|-912317665|/workspace/false.alarm/inst/extdata/physionet/v660s.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_91083aa3|branch|a116950f2bcdf768|6366b1271c1226a2|8682355374ef0f51|-767626542|/workspace/false.alarm/inst/extdata/physionet/v548s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_9188e65a|branch|2914f300da23a4cb|6366b1271c1226a2|7ed7ac13e171ca1f|1934497093|/workspace/false.alarm/inst/extdata/physionet/v743l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_92f5b2c9|branch|e4a1d2e94679a1cf|6366b1271c1226a2|e6ea8c119abf3542|-1049079765|/workspace/false.alarm/inst/extdata/physionet/v687l.hea|t18694.3749768519s|4704cb860dc3a9a3|193|file|local|vector|file_paths||0|| +file_paths_9313f17a|branch|62066a1464d43d39|6366b1271c1226a2|12d8b671d8340630|-1356615418|/workspace/false.alarm/inst/extdata/physionet/v711l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0.001|| +file_paths_94827d18|branch|21029f100a590059|6366b1271c1226a2|20234eabc6ac425f|-1757736243|/workspace/false.alarm/inst/extdata/physionet/v692s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_94f80e66|branch|6660c03c7053961f|6366b1271c1226a2|a3544e26a9a1a7b1|401269667|/workspace/false.alarm/inst/extdata/physionet/v404s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0.001|| +file_paths_959ae160|branch|38012855d4655f39|6366b1271c1226a2|afa9bdeb63098ef0|402347038|/workspace/false.alarm/inst/extdata/physionet/v625l.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_95a97169|branch|503da77489a027bf|6366b1271c1226a2|8b2ad60a5dd1d9ff|1910299421|/workspace/false.alarm/inst/extdata/physionet/v498s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_95c4d8ca|branch|965ec17fa270ea79|6366b1271c1226a2|251b827cbd4aa210|77087472|/workspace/false.alarm/inst/extdata/physionet/v482s.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_960f551a|branch|7a6049ebf5b91374|6366b1271c1226a2|cc60c0dd0e12f81a|-152189974|/workspace/false.alarm/inst/extdata/physionet/v319l.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_9b52b62c|branch|29ec595b5e9efa92|6366b1271c1226a2|421c7ff911f41ec1|-1233927374|/workspace/false.alarm/inst/extdata/physionet/v473l.hea|t18694.3749768519s|4c877582db246f52|237|file|local|vector|file_paths||0|| +file_paths_9b7c43fe|branch|233b59b4d6a3237c|6366b1271c1226a2|014023419941491c|-142917067|/workspace/false.alarm/inst/extdata/physionet/v805l.hea|t18694.3749768519s|0eb7ad5ce87b6af8|200|file|local|vector|file_paths||0|| +file_paths_9c275298|branch|b8c277703890c996|6366b1271c1226a2|c29ddaa77234b376|-1011779279|/workspace/false.alarm/inst/extdata/physionet/v766s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_9c75fc9d|branch|f8dd98b8a9a86ed8|6366b1271c1226a2|74e12ce113a9300a|1810747489|/workspace/false.alarm/inst/extdata/physionet/v540s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_9e2f2635|branch|5beab299f845028f|6366b1271c1226a2|6df3571f02a0b80f|1385885104|/workspace/false.alarm/inst/extdata/physionet/v607l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0.001|| +file_paths_9e84b7af|branch|997324421f877c06|6366b1271c1226a2|59f454c80856686d|-1192634589|/workspace/false.alarm/inst/extdata/physionet/v803l.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_9ec33709|branch|a24afb67918a921b|6366b1271c1226a2|7148e8c3981f195d|-1338678078|/workspace/false.alarm/inst/extdata/physionet/v721l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_9f333d50|branch|230f53035840910f|6366b1271c1226a2|21c83be95e108745|733140065|/workspace/false.alarm/inst/extdata/physionet/v615l.hea|t18694.3749768519s|bd9cdb2e6c3ecc89|253|file|local|vector|file_paths||0|| +file_paths_9f5b38f5|branch|b8d679463a8f63c4|6366b1271c1226a2|4dbcb3f45e244495|1448800897|/workspace/false.alarm/inst/extdata/physionet/v480s.hea|t18694.3749768519s|24647c65900306d3|252|file|local|vector|file_paths||0|| +file_paths_a01698ca|branch|7e3d937f829614f4|6366b1271c1226a2|d292d44d96aa5ce1|963480967|/workspace/false.alarm/inst/extdata/physionet/v769l.hea|t18694.3749768519s|c3cbfe28e1565b13|202|file|local|vector|file_paths||0|| +file_paths_a026300f|branch|6d43b0847129374d|6366b1271c1226a2|82ceecc4472b53db|1874187861|/workspace/false.alarm/inst/extdata/physionet/v733l.hea|t18694.3749768519s|dd56a5971d025bfa|192|file|local|vector|file_paths||0|| +file_paths_a0440264|branch|4a021015ad6981f0|6366b1271c1226a2|9f268ecadf032e72|-1072881099|/workspace/false.alarm/inst/extdata/physionet/v748s.hea|t18694.3749768519s|0cf7d46830a37596|201|file|local|vector|file_paths||0|| +file_paths_a0a2c3b0|branch|d734a1708eb5ce8b|6366b1271c1226a2|83bff994b76a8636|-2112573698|/workspace/false.alarm/inst/extdata/physionet/v309l.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_a0d8a30e|branch|35a76f3889bfe7d4|6366b1271c1226a2|491cba80f1551f32|-1797786231|/workspace/false.alarm/inst/extdata/physionet/v323l.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_a168d92b|branch|fb53f655c94e97a2|6366b1271c1226a2|996878cb33adedc3|-1166005356|/workspace/false.alarm/inst/extdata/physionet/v846s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_a1a2d715|branch|a99e14d2ea978839|6366b1271c1226a2|7bda00ca361240bc|432766421|/workspace/false.alarm/inst/extdata/physionet/v626s.hea|t18694.3749768519s|2721c650416a264a|204|file|local|vector|file_paths||0|| +file_paths_a248f3e8|branch|e07a171b1bb22ebf|6366b1271c1226a2|785459382f5b66bf|-1791581094|/workspace/false.alarm/inst/extdata/physionet/v569l.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_a2980021|branch|6f27dc12fdd731a4|6366b1271c1226a2|8ad88f2e41454490|-593751160|/workspace/false.alarm/inst/extdata/physionet/v616s.hea|t18694.3749768519s|0eb7ad5ce87b6af8|200|file|local|vector|file_paths||0.001|| +file_paths_a482fb09|branch|c3921c76034a44e3|6366b1271c1226a2|3d7496b47a4f9ed5|2136142453|/workspace/false.alarm/inst/extdata/physionet/v848s.hea|t18694.3749768519s|458efa8352f0a1fc|195|file|local|vector|file_paths||0|| +file_paths_a5f34866|branch|c492a264df174f97|6366b1271c1226a2|633ad2b134545bd7|284718331|/workspace/false.alarm/inst/extdata/physionet/v257l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_a6404161|branch|5927538aeb03c37c|6366b1271c1226a2|40085fb7e865a7e4|-1016328209|/workspace/false.alarm/inst/extdata/physionet/v241l.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_a6e042e6|branch|69faa66f2340cbc9|6366b1271c1226a2|b6e15027a90be920|127936240|/workspace/false.alarm/inst/extdata/physionet/v113l.hea|t18694.3749537037s|dd56a5971d025bfa|192|file|local|vector|file_paths||0|| +file_paths_a6eaf035|branch|86debdc1e503038d|6366b1271c1226a2|930c7038d4f47589|2031196884|/workspace/false.alarm/inst/extdata/physionet/v475l.hea|t18694.3749768519s|253a8b79276e1ed4|185|file|local|vector|file_paths||0|| +file_paths_a7ebb76c|branch|4c025a7b9d25181b|6366b1271c1226a2|6b33fb33bd86385a|1979015673|/workspace/false.alarm/inst/extdata/physionet/v583l.hea|t18694.3749768519s|4c877582db246f52|237|file|local|vector|file_paths||0|| +file_paths_a8798048|branch|9f85889f06b8edaf|6366b1271c1226a2|f6f9b0605ef8b935|476318260|/workspace/false.alarm/inst/extdata/physionet/v210s.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0.001|| +file_paths_a8e1ab4c|branch|39c66dca462d9fdf|6366b1271c1226a2|392a07dd32493a8b|1828438512|/workspace/false.alarm/inst/extdata/physionet/v111l.hea|t18694.3749537037s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_a90a3c74|branch|f7269de263363cf4|6366b1271c1226a2|a3c1d23003d5003d|36260514|/workspace/false.alarm/inst/extdata/physionet/v139l.hea|t18694.3749537037s|9c4bb1876e1721ca|190|file|local|vector|file_paths||0|| +file_paths_aa0a6555|branch|c60b2110943646e4|6366b1271c1226a2|fd577806445a63c9|1318534104|/workspace/false.alarm/inst/extdata/physionet/v590s.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0|| +file_paths_aa142fdc|branch|fcdb5c4db9d5bb6f|6366b1271c1226a2|7bfac85ea475ad8b|-1671394216|/workspace/false.alarm/inst/extdata/physionet/v682s.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_aaad6f3a|branch|32fb08c4ae19de02|6366b1271c1226a2|b745588952cb9e0c|973047417|/workspace/false.alarm/inst/extdata/physionet/v704s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_abb97947|branch|c724eeeac1c0eb94|6366b1271c1226a2|5f40643d2b9a68ab|-381880034|/workspace/false.alarm/inst/extdata/physionet/v247l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_ac7cad18|branch|8090f9d65924e7c0|6366b1271c1226a2|8ff76a583164a49c|-438149747|/workspace/false.alarm/inst/extdata/physionet/v491l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0.001|| +file_paths_ad39be57|branch|65f559a88d9d6046|6366b1271c1226a2|9ca16d9e02c8efe3|-1799799970|/workspace/false.alarm/inst/extdata/physionet/v784s.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0.001|| +file_paths_ad7b45f3|branch|5a364a0bcc314347|6366b1271c1226a2|13fa7d0c1acb8270|-788535851|/workspace/false.alarm/inst/extdata/physionet/v779l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_ae843425|branch|4982f4da45e8da7b|6366b1271c1226a2|60e6f9befa342094|-2005263480|/workspace/false.alarm/inst/extdata/physionet/v601l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_aeb3f991|branch|6554363253fe6aa4|6366b1271c1226a2|c7e06afa5a815cd8|1030609859|/workspace/false.alarm/inst/extdata/physionet/v736s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_aef17277|branch|3da87645ffd0eaa4|6366b1271c1226a2|65b581c7849211e9|-1718962425|/workspace/false.alarm/inst/extdata/physionet/v381l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_af357b90|branch|db5148cc16e658b9|6366b1271c1226a2|415d4825ff405eff|-1570811466|/workspace/false.alarm/inst/extdata/physionet/v828s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_af73c7ce|branch|f732af6b9576a400|6366b1271c1226a2|faad006c0bc509ca|320227514|/workspace/false.alarm/inst/extdata/physionet/v463l.hea|t18694.3749768519s|9c4bb1876e1721ca|190|file|local|vector|file_paths||0|| +file_paths_b0c9dbb0|branch|11abf9bf94c778c1|6366b1271c1226a2|4f36918f17eca713|76179947|/workspace/false.alarm/inst/extdata/physionet/v307l.hea|t18694.3749768519s|253a8b79276e1ed4|185|file|local|vector|file_paths||0|| +file_paths_b20179d9|branch|61ae659170eb0388|6366b1271c1226a2|cff5a78d1fba92fb|294383738|/workspace/false.alarm/inst/extdata/physionet/v355l.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_b234b142|branch|d82a33f8f0a7f004|6366b1271c1226a2|aeb39a4cca445a2c|-2092201051|/workspace/false.alarm/inst/extdata/physionet/v564s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0.001|| +file_paths_b316bbbc|branch|1eba308693854fba|6366b1271c1226a2|90e37c395e51aa4c|-209979490|/workspace/false.alarm/inst/extdata/physionet/v460s.hea|t18694.3749768519s|036fa79c5dd9944c|238|file|local|vector|file_paths||0|| +file_paths_b3554df6|branch|985be399a7046613|6366b1271c1226a2|1602496423f38dbd|178008268|/workspace/false.alarm/inst/extdata/physionet/v483l.hea|t18694.3749768519s|4c877582db246f52|237|file|local|vector|file_paths||0|| +file_paths_b597011d|branch|1f3887afe5caeb26|6366b1271c1226a2|51f85d97c96848d0|163589789|/workspace/false.alarm/inst/extdata/physionet/v633l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_b5d43bff|branch|33d0f6bdac48db0b|6366b1271c1226a2|943b4ba1a89dd0b9|-1892648418|/workspace/false.alarm/inst/extdata/physionet/v102s.hea|t18694.3749537037s|60cf4163658a3202|243|file|local|vector|file_paths||0.001|| +file_paths_b6f683a6|branch|db64cf5aa97a2f28|6366b1271c1226a2|fcb9074fe418e850|1446723693|/workspace/false.alarm/inst/extdata/physionet/v710s.hea|t18694.3749768519s|e69b513f5fd59ef6|206|file|local|vector|file_paths||0|| +file_paths_b93d9383|branch|136ed9373ad6ab59|6366b1271c1226a2|8235b130892ab22e|1319525840|/workspace/false.alarm/inst/extdata/physionet/v782s.hea|t18694.3749768519s|0eb7ad5ce87b6af8|200|file|local|vector|file_paths||0|| +file_paths_b9e9b81b|branch|ec655241a619b2d1|6366b1271c1226a2|2c00b21957ccf455|10132530|/workspace/false.alarm/inst/extdata/physionet/v646s.hea|t18694.3749768519s|85f9d15331713ebb|203|file|local|vector|file_paths||0|| +file_paths_ba106962|branch|041695a469adb8ca|6366b1271c1226a2|fe108569363e7a4b|2045536393|/workspace/false.alarm/inst/extdata/physionet/v720s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_ba42f02f|branch|38f70a45a966041c|6366b1271c1226a2|408deafa38a2ab0f|-1730752183|/workspace/false.alarm/inst/extdata/physionet/v329l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_bb725b40|branch|335ec03cda44cc83|6366b1271c1226a2|a3094537da483e06|604734466|/workspace/false.alarm/inst/extdata/physionet/v630s.hea|t18694.3749768519s|a747ae66a3258038|209|file|local|vector|file_paths||0|| +file_paths_bc8a8bf5|branch|002bde584bc75d2d|6366b1271c1226a2|7c052709bcfb5205|1403013679|/workspace/false.alarm/inst/extdata/physionet/v248s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_bca1a597|branch|5d9df4b4f755c763|6366b1271c1226a2|237f6e9ed4341b23|-1676990437|/workspace/false.alarm/inst/extdata/physionet/v390s.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0.001|| +file_paths_bd025fd7|branch|6f43b269cc6faa88|6366b1271c1226a2|cffe10351127df9c|-2097420899|/workspace/false.alarm/inst/extdata/physionet/v115l.hea|t18694.3749537037s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0.001|| +file_paths_beecbf6d|branch|90dfeec691489bda|6366b1271c1226a2|ab4a3f791c5fd109|1692997039|/workspace/false.alarm/inst/extdata/physionet/v797l.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_c1b7af8c|branch|7167450f34204ba6|6366b1271c1226a2|90c1d6ac3be410a0|478447090|/workspace/false.alarm/inst/extdata/physionet/v518s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_c2c9668a|branch|7ce595f9741da1b0|6366b1271c1226a2|5fbd94096ce7506b|1407109805|/workspace/false.alarm/inst/extdata/physionet/v686s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_c3aeaf4e|branch|f7f4e3afffe90de9|6366b1271c1226a2|dc46125445f043b6|493171424|/workspace/false.alarm/inst/extdata/physionet/v217l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0.001|| +file_paths_c3b76f9c|branch|976b1929fc23cdcf|6366b1271c1226a2|50b35d25e6b7ac3e|1106994801|/workspace/false.alarm/inst/extdata/physionet/v551l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_c56cca5d|branch|1492597c11d6ad10|6366b1271c1226a2|4054ec53a3dc0d6a|1643678207|/workspace/false.alarm/inst/extdata/physionet/v154s.hea|t18694.3749537037s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_c5ceae97|branch|c853246614f343cc|6366b1271c1226a2|ba2810d6eaa6c946|-448952166|/workspace/false.alarm/inst/extdata/physionet/v557l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_c67aeef2|branch|b4f052cb84573dc5|6366b1271c1226a2|b72d264042b4a40f|-195792096|/workspace/false.alarm/inst/extdata/physionet/v298s.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_c910008b|branch|0f3d824865aa28dd|6366b1271c1226a2|47764143766123cb|441613568|/workspace/false.alarm/inst/extdata/physionet/v541l.hea|t18694.3749768519s|155dcb23a3dc3cf4|236|file|local|vector|file_paths||0|| +file_paths_c99348d2|branch|2b06cd67314a235b|6366b1271c1226a2|8e4b810f50f22eb7|312979558|/workspace/false.alarm/inst/extdata/physionet/v627l.hea|t18694.3749768519s|0918b9b2d7e26881|207|file|local|vector|file_paths||0.001|| +file_paths_cb97bcce|branch|3a6f30507dece0d8|6366b1271c1226a2|24687d91dd1db77f|-1987082599|/workspace/false.alarm/inst/extdata/physionet/v598s.hea|t18694.3749768519s|458efa8352f0a1fc|195|file|local|vector|file_paths||0|| +file_paths_cbd7afde|branch|ff93b07aa1aced10|6366b1271c1226a2|fe1c3b09db0a850c|-2005893576|/workspace/false.alarm/inst/extdata/physionet/v818s.hea|t18694.3749768519s|c784844629387e6b|197|file|local|vector|file_paths||0|| +file_paths_cc3d28b0|branch|066162e5baefb1e3|6366b1271c1226a2|134973eb3378ae46|-608378928|/workspace/false.alarm/inst/extdata/physionet/v374s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_ccaf9e2c|branch|56da9bca1547a334|6366b1271c1226a2|050fcfebd7db294e|-690630394|/workspace/false.alarm/inst/extdata/physionet/v233l.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_cd63fe86|branch|81c0127ff1331833|6366b1271c1226a2|4d467f1d5226e2c8|1751822356|/workspace/false.alarm/inst/extdata/physionet/v360s.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0.001|| +file_paths_cdc50c9e|branch|d36b01c9395d553a|6366b1271c1226a2|736cd82cdc813780|-742774081|/workspace/false.alarm/inst/extdata/physionet/v726s.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0.001|| +file_paths_cec80678|branch|7abe5ba1f81331a5|6366b1271c1226a2|5f0c1b83aed72d33|-884899769|/workspace/false.alarm/inst/extdata/physionet/v471l.hea|t18694.3749768519s|2c02ccb1d6d3878b|191|file|local|vector|file_paths||0|| +file_paths_cfab240e|branch|df4782d953d12413|6366b1271c1226a2|c15064bb51af95cc|1509852168|/workspace/false.alarm/inst/extdata/physionet/v242s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_d1b8a70f|branch|c7ba739e802dcb5b|6366b1271c1226a2|7651533eee4144b0|-521924257|/workspace/false.alarm/inst/extdata/physionet/v271l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0.001|| +file_paths_d1e5eae3|branch|086474a9ca79a46e|6366b1271c1226a2|c6f8a0adb94ab4c1|-713936516|/workspace/false.alarm/inst/extdata/physionet/v153l.hea|t18694.3749537037s|4c877582db246f52|237|file|local|vector|file_paths||0|| +file_paths_d34ea9c4|branch|f4761cac1a7a5cee|6366b1271c1226a2|418ad2ea1823571c|1206546794|/workspace/false.alarm/inst/extdata/physionet/v328s.hea|t18694.3749768519s|4c877582db246f52|237|file|local|vector|file_paths||0|| +file_paths_d550e055|branch|04a4d320631a86da|6366b1271c1226a2|7b5ba63c8e528785|1932874308|/workspace/false.alarm/inst/extdata/physionet/v354s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0.001|| +file_paths_d60b99a5|branch|5d805573f033dc3e|6366b1271c1226a2|f9b73883c04bb246|-2100231231|/workspace/false.alarm/inst/extdata/physionet/v312s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_d72da2a5|branch|ac840a433bf27595|6366b1271c1226a2|011c2a9ae26b35aa|1392448301|/workspace/false.alarm/inst/extdata/physionet/v479l.hea|t18694.3749768519s|bd9cdb2e6c3ecc89|253|file|local|vector|file_paths||0|| +file_paths_d7498ce2|branch|af0756e2f88710fb|6366b1271c1226a2|ff999272cfa92918|907499756|/workspace/false.alarm/inst/extdata/physionet/v641l.hea|t18694.3749768519s|71e695e858e0833c|250|file|local|vector|file_paths||0.001|| +file_paths_d75ade19|branch|25397619b7510d68|6366b1271c1226a2|743b4bb8608c41e4|-1239405145|/workspace/false.alarm/inst/extdata/physionet/v464s.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0|| +file_paths_d7d88744|branch|29ac8753f9aa21ac|6366b1271c1226a2|01ffdc7a5b02253c|444265581|/workspace/false.alarm/inst/extdata/physionet/v749l.hea|t18694.3749768519s|0eb7ad5ce87b6af8|200|file|local|vector|file_paths||0|| +file_paths_d89c9af5|branch|580b2b692123b3de|6366b1271c1226a2|2121f4bb9efdcb8b|250374149|/workspace/false.alarm/inst/extdata/physionet/v367l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_d91525de|branch|46ffc023a56141f2|6366b1271c1226a2|a2a5710b9f2e9653|2002782788|/workspace/false.alarm/inst/extdata/physionet/v571l.hea|t18694.3749768519s|24647c65900306d3|252|file|local|vector|file_paths||0|| +file_paths_da336c98|branch|435d649ead190ff2|6366b1271c1226a2|8e9975d5b25133aa|-1084382591|/workspace/false.alarm/inst/extdata/physionet/v423l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_da4a624d|branch|1860e5f2d0a276d2|6366b1271c1226a2|332aa46973bcbf08|1539783541|/workspace/false.alarm/inst/extdata/physionet/v426s.hea|t18694.3749768519s|0e833cdd3158622c|249|file|local|vector|file_paths||0|| +file_paths_db2ef6dc|branch|f781ee7f93525b98|6366b1271c1226a2|920147505e43aba3|1314753533|/workspace/false.alarm/inst/extdata/physionet/v101l.hea|t18694.3749537037s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_dba8de99|branch|be2052a3774002cc|6366b1271c1226a2|e7eeceb00e7e3e7d|-121859119|/workspace/false.alarm/inst/extdata/physionet/v640s.hea|t18694.3749768519s|4704cb860dc3a9a3|193|file|local|vector|file_paths||0|| +file_paths_dc10c68f|branch|b2fb9db13ac55e30|6366b1271c1226a2|3286417698de2b8a|2021525446|/workspace/false.alarm/inst/extdata/physionet/v143l.hea|t18694.3749537037s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_df0798aa|branch|e13ce7dd4b01ec8e|6366b1271c1226a2|0c442d6c1244948f|910960878|/workspace/false.alarm/inst/extdata/physionet/v596s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_e039c520|branch|3f4770d621821a8e|6366b1271c1226a2|78d38c8260f04b84|423707654|/workspace/false.alarm/inst/extdata/physionet/v361l.hea|t18694.3749768519s|bd9cdb2e6c3ecc89|253|file|local|vector|file_paths||0.001|| +file_paths_e0615222|branch|c60a0e2d35a4ba0f|6366b1271c1226a2|3cbf73d100714205|-1848326946|/workspace/false.alarm/inst/extdata/physionet/v326s.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_e08ce18e|branch|4e51e16a9743d19c|6366b1271c1226a2|89eb0b4e7eeccbf3|972766656|/workspace/false.alarm/inst/extdata/physionet/v246s.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_e0fe1124|branch|1ddebbeb6cf1c4f6|6366b1271c1226a2|2db8959758cddac5|-1124739954|/workspace/false.alarm/inst/extdata/physionet/v842s.hea|t18694.3749768519s|24647c65900306d3|252|file|local|vector|file_paths||0.001|| +file_paths_e16ed377|branch|89a79490a42cc26f|6366b1271c1226a2|8f58e645f6711d0d|268783282|/workspace/false.alarm/inst/extdata/physionet/v513l.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0.001|| +file_paths_e251574d|branch|6dc0fef183d6bd90|6366b1271c1226a2|3ad0c3087d9417fa|-149405597|/workspace/false.alarm/inst/extdata/physionet/v347l.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0|| +file_paths_e27a826b|branch|0afa8fa61d244aa8|6366b1271c1226a2|0202f28b22b99d9f|-823867717|/workspace/false.alarm/inst/extdata/physionet/v510s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_e2a47796|branch|c3ff620e5b970854|6366b1271c1226a2|073f6878e2d6658b|1653166055|/workspace/false.alarm/inst/extdata/physionet/v511l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_e4596992|branch|657b0639c1f82b2b|6366b1271c1226a2|2d4e4c527b3c984e|-273328343|/workspace/false.alarm/inst/extdata/physionet/v318s.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0.001|| +file_paths_e4866885|branch|f25c64e67a742761|6366b1271c1226a2|9c5d709c684fa806|-548108716|/workspace/false.alarm/inst/extdata/physionet/v243l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_e4d93860|branch|f027aeac90dd852a|6366b1271c1226a2|4daf818e9e1e9ab7|-1517768972|/workspace/false.alarm/inst/extdata/physionet/v738s.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_e5337f20|branch|0247aca5f31c4e1a|6366b1271c1226a2|fb835f519ec82885|-1140450030|/workspace/false.alarm/inst/extdata/physionet/v481l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_e54f67e3|branch|47bdfdd10248d6e6|6366b1271c1226a2|1c536a68a6d725b3|-1846705520|/workspace/false.alarm/inst/extdata/physionet/v634s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_e5af516d|branch|e5b8464e878734d1|6366b1271c1226a2|649bba9d1c63c93b|-1657238592|/workspace/false.alarm/inst/extdata/physionet/v431l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_e5c851b2|branch|ce1f27469d2c7f7f|6366b1271c1226a2|64576ebe26803991|-1064964390|/workspace/false.alarm/inst/extdata/physionet/v843l.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0|| +file_paths_e5e16646|branch|2bbdc5380132d9b9|6366b1271c1226a2|1711137f6eaca696|546773715|/workspace/false.alarm/inst/extdata/physionet/v365l.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0|| +file_paths_e671d460|branch|1301cdf9c661c0ab|6366b1271c1226a2|919a14b185016fe9|-400709228|/workspace/false.alarm/inst/extdata/physionet/v147l.hea|t18694.3749537037s|401cb8fa9737627f|244|file|local|vector|file_paths||0.001|| +file_paths_e73de766|branch|b32d095d0042842c|6366b1271c1226a2|343cf5723dfa6bcc|272781796|/workspace/false.alarm/inst/extdata/physionet/v275l.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_e79dd701|branch|3db024a441343ba9|6366b1271c1226a2|3e1ec8019cfd650a|-293282104|/workspace/false.alarm/inst/extdata/physionet/v201l.hea|t18694.3749768519s|322d63e04337946b|247|file|local|vector|file_paths||0|| +file_paths_ead90fd3|branch|4937db8ce445e1bf|6366b1271c1226a2|8d68fb09840e921e|1735762571|/workspace/false.alarm/inst/extdata/physionet/v756s.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_ec1fc070|branch|2167a568cc9d2cf6|6366b1271c1226a2|d477d7dd4e89117f|1868226681|/workspace/false.alarm/inst/extdata/physionet/v791l.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0|| +file_paths_ec348fc8|branch|e471bb987d0e88b1|6366b1271c1226a2|4f710bee422a4e07|441426715|/workspace/false.alarm/inst/extdata/physionet/v135l.hea|t18694.3749537037s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_ec38760b|branch|c068266597a5e03e|6366b1271c1226a2|41649a933368b85a|-297985809|/workspace/false.alarm/inst/extdata/physionet/v523l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_ec527d32|branch|ee3c507ec3f25202|6366b1271c1226a2|56a1eb34954d8168|-859550165|/workspace/false.alarm/inst/extdata/physionet/v573l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_edd81848|branch|a9f296bc73a7c519|6366b1271c1226a2|678431ac204b7c44|1130907664|/workspace/false.alarm/inst/extdata/physionet/v338s.hea|t18694.3749768519s|71e695e858e0833c|250|file|local|vector|file_paths||0.001|| +file_paths_ede9b260|branch|730ee01a1336ab61|6366b1271c1226a2|9573e94e067c7a68|-1839466559|/workspace/false.alarm/inst/extdata/physionet/v804s.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_edef1251|branch|32df43898c32615f|6366b1271c1226a2|ec02db7e357299b6|-1063337363|/workspace/false.alarm/inst/extdata/physionet/v770s.hea|t18694.3749768519s|401cb8fa9737627f|244|file|local|vector|file_paths||0|| +file_paths_ee3a1e01|branch|91f954b64097673e|6366b1271c1226a2|b39e0dfe64d2847e|1243813509|/workspace/false.alarm/inst/extdata/physionet/v729l.hea|t18694.3749768519s|a60e113d72b0b5b8|248|file|local|vector|file_paths||0|| +file_paths_eea5b834|branch|11103e28dafa4df3|6366b1271c1226a2|1f798cf6df7cd2fb|1735409146|/workspace/false.alarm/inst/extdata/physionet/v519l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_eebc7ea2|branch|fca9f0a343fc99f8|6366b1271c1226a2|dc13bfb4e12bf4ec|983189692|/workspace/false.alarm/inst/extdata/physionet/v140s.hea|t18694.3749537037s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_ef5ac6cb|branch|06335c98ee0d0461|6366b1271c1226a2|5ae7ead8277b1d54|-2138305517|/workspace/false.alarm/inst/extdata/physionet/v128s.hea|t18694.3749537037s|0cf7d46830a37596|201|file|local|vector|file_paths||0.001|| +file_paths_eff80777|branch|608b9cee6940dadd|6366b1271c1226a2|0b6f10bdff709d68|1151576548|/workspace/false.alarm/inst/extdata/physionet/v718s.hea|t18694.3749768519s|4c877582db246f52|237|file|local|vector|file_paths||0|| +file_paths_f024948b|branch|cf13294164504e90|6366b1271c1226a2|ae86236af8ac5d1f|-715120296|/workspace/false.alarm/inst/extdata/physionet/v758s.hea|t18694.3749768519s|81a1853ddabe4117|256|file|local|vector|file_paths||0|| +file_paths_f04e1cd9|branch|5bbebc22f79a8555|6366b1271c1226a2|e4da0e0746264eb7|1577862290|/workspace/false.alarm/inst/extdata/physionet/v696s.hea|t18694.3749768519s|2721c650416a264a|204|file|local|vector|file_paths||0|| +file_paths_f0732ff1|branch|331b6f03c2911ed3|6366b1271c1226a2|a594dd14471654bb|1386266902|/workspace/false.alarm/inst/extdata/physionet/v811l.hea|t18694.3749768519s|2721c650416a264a|204|file|local|vector|file_paths||0|| +file_paths_f1ab14ac|branch|ab79fa1260cf94b8|6366b1271c1226a2|cb74c62f3b7d1ced|-886045395|/workspace/false.alarm/inst/extdata/physionet/v597l.hea|t18694.3749768519s|c784844629387e6b|197|file|local|vector|file_paths||0|| +file_paths_f389df2b|branch|6159a3f821aa2819|6366b1271c1226a2|b2f8a7af22dc59f6|-74812853|/workspace/false.alarm/inst/extdata/physionet/v501l.hea|t18694.3749768519s|7979acc55d607f70|242|file|local|vector|file_paths||0|| +file_paths_f52626c7|branch|afebe431aaad9e40|6366b1271c1226a2|372b37bb1bc507f3|-2137900181|/workspace/false.alarm/inst/extdata/physionet/v732s.hea|t18694.3749768519s|55b9bd26e54ad190|246|file|local|vector|file_paths||0|| +file_paths_f62dde70|branch|94548537fe295e86|6366b1271c1226a2|b417fc6cd39fa7ae|732164789|/workspace/false.alarm/inst/extdata/physionet/v844s.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_f6dfd6f4|branch|12b84f05a332b8b1|6366b1271c1226a2|d8c78095beecadf0|-1939528106|/workspace/false.alarm/inst/extdata/physionet/v658s.hea|t18694.3749768519s|bf1a1ce7cd804ab5|251|file|local|vector|file_paths||0|| +file_paths_f759be49|branch|4c1d309885ded1a8|6366b1271c1226a2|067343415861a452|-2005037615|/workspace/false.alarm/inst/extdata/physionet/v831l.hea|t18694.3749768519s|d3c04794784e4c77|239|file|local|vector|file_paths||0|| +file_paths_f9bd5ea5|branch|d2a216dccd3918b4|6366b1271c1226a2|ab91225132241e50|-2100196097|/workspace/false.alarm/inst/extdata/physionet/v837l.hea|t18694.3749768519s|1018763f8eb390c8|254|file|local|vector|file_paths||0|| +file_paths_fa39054a|branch|f9cddd1969a14d9e|6366b1271c1226a2|61df7d8f2dbb6882|2069902438|/workspace/false.alarm/inst/extdata/physionet/v256s.hea|t18694.3749768519s|bed69d39d5d1de67|240|file|local|vector|file_paths||0|| +file_paths_fa50e44a|branch|eb7fdea2a87fc9aa|6366b1271c1226a2|d1100c45636c075a|2043312172|/workspace/false.alarm/inst/extdata/physionet/v775l.hea|t18694.3749768519s|1d5c59973993a867|194|file|local|vector|file_paths||0|| +file_paths_fd2741b5|branch|2301a78ffeb51727|6366b1271c1226a2|df523e3acc0d498e|579502024|/workspace/false.alarm/inst/extdata/physionet/v621l.hea|t18694.3749768519s|3a40abf18adc8861|196|file|local|vector|file_paths||0.001|| +file_paths_fdb82a50|branch|07413297741c307f|6366b1271c1226a2|67584030d7aad362|72630565|/workspace/false.alarm/inst/extdata/physionet/v371l.hea|t18694.3749768519s|60cf4163658a3202|243|file|local|vector|file_paths||0.001|| +file_paths_feeed8de|branch|97ed8a8616dca9ea|6366b1271c1226a2|6a7763510af729da|-695985334|/workspace/false.alarm/inst/extdata/physionet/v827l.hea|t18694.3749768519s|458efa8352f0a1fc|195|file|local|vector|file_paths||0.001|| +file_paths_ff0f7a71|branch|84775f2680e11ae0|6366b1271c1226a2|f61282e337988f36|1771485369|/workspace/false.alarm/inst/extdata/physionet/v401l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_ff7ff6b1|branch|25e3fa9f148f0f29|6366b1271c1226a2|806fed7bdb618c5e|29222995|/workspace/false.alarm/inst/extdata/physionet/v419l.hea|t18694.3749768519s|5447202e06fd19c7|241|file|local|vector|file_paths||0|| +file_paths_ffc0afe0|branch|fac2f46b4628d635|6366b1271c1226a2|a6c249a4ac83b415|1477393520|/workspace/false.alarm/inst/extdata/physionet/v421l.hea|t18694.3749768519s|90ab8049e3c26605|245|file|local|vector|file_paths||0|| +file_paths_ffda0a26|branch|51ba7cdb0ef65056|6366b1271c1226a2|a1edcd55df535155|-495783736|/workspace/false.alarm/inst/extdata/physionet/v136s.hea|t18694.3749537037s|60cf4163658a3202|243|file|local|vector|file_paths||0|| +file_paths_files|stem|a3579fc2766a451a|c44d358350220e73|8fb75deda0f036e8|1253326649||t19524.0505907795s|8ac1f95ab4ac6eb1|1137|rds|local|list||file_paths_files_3b5e1a7e*file_paths_files_56c74df7*file_paths_files_6fceec36*file_paths_files_23e8cfce*file_paths_files_61e33c7a*file_paths_files_a2613bdd*file_paths_files_94eeb1db*file_paths_files_ad79ea5b*file_paths_files_aac9341d*file_paths_files_1d9ba0af*file_paths_files_62f03846*file_paths_files_f0dfde3b*file_paths_files_3a85ab95*file_paths_files_52c18cf9*file_paths_files_49f9c0dd*file_paths_files_27013b43*file_paths_files_2cce3506*file_paths_files_ee17242a*file_paths_files_9455a4b3*file_paths_files_334cfb78*file_paths_files_62ade967*file_paths_files_6b20599b*file_paths_files_7935644c*file_paths_files_ef6cd99b*file_paths_files_ce9cea2c*file_paths_files_510c3801*file_paths_files_fc80e9be*file_paths_files_ca1961e3*file_paths_files_166e7360*file_paths_files_0b36a56e*file_paths_files_7aaefdc0*file_paths_files_0576f939*file_paths_files_aeb058ef*file_paths_files_5bb2da71*file_paths_files_b61ebdc9*file_paths_files_4850c2eb*file_paths_files_755f776d*file_paths_files_cf97a5e0*file_paths_files_ea929425*file_paths_files_788e3575*file_paths_files_d263da8c*file_paths_files_f4c8d058*file_paths_files_63c1c886*file_paths_files_883561bb*file_paths_files_5ee44673*file_paths_files_3360fde2*file_paths_files_817b31a9*file_paths_files_66062159*file_paths_files_afafed7c*file_paths_files_0921b528*file_paths_files_9b8e7380*file_paths_files_8cfd8b00*file_paths_files_6f8beacf*file_paths_files_c6901f53*file_paths_files_ff36f053*file_paths_files_d32ab7e4*file_paths_files_a600fcf1*file_paths_files_5bd7f2b8*file_paths_files_208bb119*file_paths_files_208dc814*file_paths_files_f67826ff*file_paths_files_557aa76f*file_paths_files_5921cdfb*file_paths_files_66fd57a3*file_paths_files_a4dcd7f7*file_paths_files_24353011*file_paths_files_a61dfc31*file_paths_files_151704f6*file_paths_files_4cef5442*file_paths_files_47029401*file_paths_files_9f7243c0*file_paths_files_f96aaa04*file_paths_files_27155af6*file_paths_files_daa9cfb9*file_paths_files_7a06d7d8*file_paths_files_d8c6017c*file_paths_files_43dbd4ab*file_paths_files_9d9f8c1c*file_paths_files_fbf988ef*file_paths_files_40d65579*file_paths_files_14b11ab5*file_paths_files_3709476f*file_paths_files_55d56a32*file_paths_files_80afc979*file_paths_files_7f49efc2*file_paths_files_b87a82d9*file_paths_files_26dcb664*file_paths_files_3ef0068a*file_paths_files_c53b10f0*file_paths_files_230dd575*file_paths_files_1482ad03*file_paths_files_ad68c252*file_paths_files_b9639b2e*file_paths_files_e0abd6d6*file_paths_files_b7079bc8*file_paths_files_c6560d0d*file_paths_files_f6795db4*file_paths_files_706f84b5*file_paths_files_20dc9ca9*file_paths_files_5a7c98c8*file_paths_files_cd7e602e*file_paths_files_d401576f*file_paths_files_f9dfd1b6*file_paths_files_95a4df81*file_paths_files_ba9b051b*file_paths_files_bd6d771b*file_paths_files_ab0e9911*file_paths_files_2aa61f7b*file_paths_files_74348713*file_paths_files_e5b579d5*file_paths_files_57aaf179*file_paths_files_56514a3f*file_paths_files_d955faa9*file_paths_files_8d090ff7*file_paths_files_f174ab0f*file_paths_files_64f26b9f*file_paths_files_5cab67a7*file_paths_files_7c1f30e0*file_paths_files_960efca1*file_paths_files_39624330*file_paths_files_422ea8db*file_paths_files_414ce8e8*file_paths_files_17c23e51*file_paths_files_c2c89a7a*file_paths_files_8413d7c4*file_paths_files_7002b8b8*file_paths_files_525de014*file_paths_files_1ccbe7b7*file_paths_files_cb243f10*file_paths_files_458d65ad*file_paths_files_6fcf8932*file_paths_files_9a485da0*file_paths_files_fd86fcf2*file_paths_files_3183d88d*file_paths_files_9c70cfd0*file_paths_files_7a28bd52*file_paths_files_838afdec*file_paths_files_6d5bc3b7*file_paths_files_a97ed9a9*file_paths_files_dbb6b388*file_paths_files_539d05a5*file_paths_files_9c6d63d8*file_paths_files_e49570eb*file_paths_files_f2a06d7c*file_paths_files_08344c59*file_paths_files_16f2ebac*file_paths_files_8ff3f074*file_paths_files_7f46be2e*file_paths_files_7be84ccb*file_paths_files_4b2c2df1*file_paths_files_5e306a7a*file_paths_files_ab9d0911*file_paths_files_acd14b69*file_paths_files_ae1cc359*file_paths_files_62a15172*file_paths_files_18bec3a0*file_paths_files_1071a04e*file_paths_files_0d4cf7df*file_paths_files_a6297f71*file_paths_files_18647459*file_paths_files_572acf8b*file_paths_files_e200a433*file_paths_files_5e08dc58*file_paths_files_3856cf07*file_paths_files_a007c58d*file_paths_files_3aa7ed88*file_paths_files_e5b83efc*file_paths_files_12432281*file_paths_files_0e807bdb*file_paths_files_6e95ede6*file_paths_files_2d2c112e*file_paths_files_c8a9106b*file_paths_files_87812541*file_paths_files_10d5332c*file_paths_files_9b82e553*file_paths_files_b3ba863e*file_paths_files_d65b6163*file_paths_files_b4600f4a*file_paths_files_6a12792f*file_paths_files_1ae3da6a*file_paths_files_f5818323*file_paths_files_26fedfc0*file_paths_files_e0eac99b*file_paths_files_f378ac4e*file_paths_files_44570783*file_paths_files_114de762*file_paths_files_bfc3d82c*file_paths_files_e0858ab1*file_paths_files_3233a255*file_paths_files_3f742d82*file_paths_files_fbfa1b82*file_paths_files_6d63a749*file_paths_files_dbf09f39*file_paths_files_3268fd15*file_paths_files_34f7821d*file_paths_files_14f5937e*file_paths_files_735fe84a*file_paths_files_abe072ce*file_paths_files_92d5f5fa*file_paths_files_4fa759b2*file_paths_files_b9171149*file_paths_files_411029f9*file_paths_files_15fafb5b*file_paths_files_75d9bcf8*file_paths_files_acb18409*file_paths_files_90d997f9*file_paths_files_d7d5edaf*file_paths_files_da2aed16*file_paths_files_6f027787*file_paths_files_45980140*file_paths_files_ad108a81*file_paths_files_f0aac116*file_paths_files_e787bf7d*file_paths_files_ed67f2f6*file_paths_files_b2fff344*file_paths_files_aaa9adac*file_paths_files_620221af*file_paths_files_ce60c827*file_paths_files_a370cbad*file_paths_files_f733b106*file_paths_files_08291f01*file_paths_files_7068e026*file_paths_files_74c2d488*file_paths_files_1c125051*file_paths_files_84c82078*file_paths_files_ec4f95e1*file_paths_files_671edac7*file_paths_files_1577ca30*file_paths_files_f4000824*file_paths_files_7cf0c026*file_paths_files_c182d537*file_paths_files_6dea48ce*file_paths_files_1b2eb205*file_paths_files_ad1f137d*file_paths_files_4c8fb353*file_paths_files_e16092d7*file_paths_files_61aeb782*file_paths_files_c0046e2b*file_paths_files_657de346*file_paths_files_301e5133*file_paths_files_8c3200ba*file_paths_files_add81d4b*file_paths_files_4fae6307*file_paths_files_5ed3e01c*file_paths_files_3550587d*file_paths_files_3c571661*file_paths_files_b0408bf4*file_paths_files_d7713892*file_paths_files_a5258e31*file_paths_files_9a92647c*file_paths_files_b18944ab*file_paths_files_309e265d*file_paths_files_2b9edfb9*file_paths_files_5cfa3480*file_paths_files_7d0a9970*file_paths_files_a7654673*file_paths_files_a1b44ea2*file_paths_files_8bdf7881*file_paths_files_0ddfd324*file_paths_files_c8098245*file_paths_files_db3046ba*file_paths_files_3784c4f7*file_paths_files_d96934bc*file_paths_files_d09c7932*file_paths_files_c0a80721*file_paths_files_7d2b01e8*file_paths_files_2dd77c78*file_paths_files_701af643*file_paths_files_be7818a2*file_paths_files_4e872f10*file_paths_files_3c4d38fb*file_paths_files_33995f8e*file_paths_files_81edc1aa*file_paths_files_1bce9f7b*file_paths_files_9c724826*file_paths_files_4adb42de*file_paths_files_ca5023d2*file_paths_files_cfef1697*file_paths_files_20cd0d80*file_paths_files_16f3e48f*file_paths_files_f02dd6e9*file_paths_files_e394c5d0*file_paths_files_a9b58e93*file_paths_files_b821c166*file_paths_files_3bfec5e8*file_paths_files_1a112e7d*file_paths_files_67b45d39*file_paths_files_87ea8615*file_paths_files_2b18b441*file_paths_files_7ceae9e0*file_paths_files_70961f98*file_paths_files_b60a0cbc*file_paths_files_f1905674*file_paths_files_18ca823e*file_paths_files_6dd075ba*file_paths_files_211f0aad*file_paths_files_6449d1ce*file_paths_files_51448af9*file_paths_files_ee6187c1*file_paths_files_c9a9d938*file_paths_files_37a06ab3*file_paths_files_edefef88*file_paths_files_5617280a*file_paths_files_0f32bb25*file_paths_files_2756656d*file_paths_files_78a005bc*file_paths_files_f75ee86d*file_paths_files_c624c7b4*file_paths_files_6d39cf0a*file_paths_files_c70da1f3*file_paths_files_3ca39fdc*file_paths_files_c0105ac0*file_paths_files_ee282895*file_paths_files_da6674ab*file_paths_files_968158dc*file_paths_files_1c0f3c6c*file_paths_files_4ab7acbb*file_paths_files_423fdf95*file_paths_files_709908fc*file_paths_files_da1ea099*file_paths_files_facc2c3c*file_paths_files_15ff919d*file_paths_files_d559678f*file_paths_files_f3980396*file_paths_files_6580a2ed*file_paths_files_90c55796*file_paths_files_aca3e228*file_paths_files_a6752cf6*file_paths_files_14455c55*file_paths_files_e3aa89f2*file_paths_files_cb11c2af*file_paths_files_f45962fa*file_paths_files_28380aee*file_paths_files_766edbae*file_paths_files_824f8b74*file_paths_files_4853a54b*file_paths_files_87dfe197*file_paths_files_cf683463*file_paths_files_eae0a60c*file_paths_files_6de8841c*file_paths_files_26808c2e|0|| +filter_best_solutions|function|32670694f6830d9f||||||||||||||| +filter_data|function|96623b0c421b9dd1||||||||||||||| +find_all_files|function|6463af0421144fad||||||||||||||| +find_shapelets|pattern|c6707fe2c86c8c6f|c8f0fdc057954dd2||-1129503597||||8048633|rds|local|list||find_shapelets_21e88cf5*find_shapelets_6852b839|199.679|| +find_shapelets_21e88cf5|branch|5b647f138f8e53cc|c8f0fdc057954dd2|c3ff81c56b681833|-957965849||t19530.692233613s|01d2592bc5ab26be|3978643|rds|local|list|find_shapelets||87.44|| +find_shapelets_49cb1ee5|branch|18710425632c69e5|030d76be38eacacc|daa5417852e0dff3|-763398733||t19530.6038711848s|d87576600223a83f|4758660|rds|local|list|find_shapelets||310.141|| +find_shapelets_4b79072b|branch||61ebafe7fa302917|58f228c3171f3a08|1963156974||t19524.0711582264s||0|rds|local|list|find_shapelets||0.117||operator is invalid for atomic vectors +find_shapelets_6852b839|branch|fc054da0ff414b85|c8f0fdc057954dd2|d1404198a41dd933|1164592160||t19530.6935397139s|e61edd702441e4a1|4069990|rds|local|list|find_shapelets||112.239|| +find_solutions|function|60abac63439ba648||||||||||||||| +fit_model|function|f07b8760be6f5b09||||||||||||||| +gamma_function|function|1429884f4efea59d||||||||||||||| +get_asym|function|1692ca9da0cd6287||||||||||||||| +get_exp_dist_series|function|8b8e871d320b6de5||||||||||||||| +get_file_annotations|function|ce0cb3b51c7394b8||||||||||||||| +get_file_info|function|d692a4d2eece7216||||||||||||||| +get_file_regimes|function|f56534db083333de||||||||||||||| +get_info|function|d3d6e9d6b0e323c6||||||||||||||| +get_params|function|5ccad002c497f550||||||||||||||| +get_signal_info|function|5d34bc34230cde80||||||||||||||| +get_topk_pan_contrast|function|d33be2d0256107ba||||||||||||||| +glue_fmt|function|efa455897e00bd14||||||||||||||| +hard_limit|function|3baca94a680fbd3a||||||||||||||| +hist_diff|function|6b97841c91905da0||||||||||||||| +initial_resample|stem|a47a18a0e2a34168|95b1e4ede178f41a|2114a7cf54dbcf46|-972821040||t19524.0562457017s|ba74f3fdd955851a|490369|rds|local|vector|||0.007|| +kneed|function|84fee1a8a058ff79||||||||||||||| +list_dfc|function|4104de6caa0e74b4||||||||||||||| +list_dfr|function|1e76dd23d1c426a7||||||||||||||| +lst_to_df|function|2403c1abc59eb49f||||||||||||||| +maximum|function|f9007408b97f6ce5||||||||||||||| +mobility|function|c20146f60c67eea0||||||||||||||| +omega_function|function|c69941a4232f9a9d||||||||||||||| +overlap_reward|function|bde83d74664dbafe||||||||||||||| +pbFinished|function|bc2502b7fd3a187f||||||||||||||| +plot_best_candidates|function|b6e76f662680e42b||||||||||||||| +plot_max_contrast|function|74688999c16c61fe||||||||||||||| +plot_pan_contrast|function|12ddc6ac8b213c01||||||||||||||| +plot_topk_contrasts|function|1142d85d9e4c6409||||||||||||||| +process_ts_in_file|function|5d50f331321cd7a9||||||||||||||| +read_and_prepare_ecgs|function|c9d5e722b7c178d3||||||||||||||| +read_ecg|function|5ff0b0c07689ef3a||||||||||||||| +read_ecg_csv|function|37ca65c1625b5755||||||||||||||| +read_ecg_with_atr|function|af525b0ff46cf3ab||||||||||||||| +reshape_ds_by_truefalse|function|00122e47789973df||||||||||||||| +rmssd_r|function|d94b973ed64cd2a9||||||||||||||| +score_by_segment|pattern|39303a0493a5d007|f1553d3ff971c3bc||-1653800725||||360619|rds|local|list||score_by_segment_289470d8*score_by_segment_c993f884|13.114|| +score_by_segment_289470d8|branch|17b66f1c0164c7fb|f1553d3ff971c3bc|804b58607944dc99|1589646323||t19530.691142023s|9155146f8f79cbb9|193475|rds|local|list|score_by_segment||7.34|| +score_by_segment_67b13b4e|branch|eaf643727a8b980f|dfb32833461b67eb|c0f976b2f6781a51|2129449300||t19530.6002727353s|507fcb6fdc85a6bd|56559|rds|local|list|score_by_segment||7.947|| +score_by_segment_c993f884|branch|34ed29116d53284c|f1553d3ff971c3bc|849ec2ef7595555f|-588623498||t19530.6912151708s|f4f7b0e4e6f07057|167144|rds|local|list|score_by_segment||5.774|| +score_by_segment_window|function|1b390036c1b44577||||||||||||||| +score_candidates|function|8d31d00234d38174||||||||||||||| +score_existence|function|28f698c43ad369e2||||||||||||||| +score_precision|function|06520f12f4e6a360||||||||||||||| +score_recall|function|f22e20043cbd06d5||||||||||||||| +score_recall_t|function|963983c1fb4eca0b||||||||||||||| +score_regimes|function|638a62b145cde2b8||||||||||||||| +score_regimes_precision|function|750133b7a87964d6||||||||||||||| +score_solutions|function|7b4d0386def41d3b||||||||||||||| +sd_r|function|edc210211e6db09c||||||||||||||| +skip_graphics|object|909013909b1f03d4||||||||||||||| +sprintf_transformer|function|2199f7feeee38815||||||||||||||| +test_classifiers_self|pattern|5816d884d48ce9af|aa1108f63f1f6791||1817600917||||33041|rds|local|list||test_classifiers_self_88343ce0*test_classifiers_self_0d402c0d|122.022|| +test_classifiers_self_0d402c0d|branch|abdcad7796047ba5|aa1108f63f1f6791|05b6cd534cd4b061|504432482||t19530.6949602859s|720a447f18066eb5|14914|rds|local|list|test_classifiers_self||58.524|| +test_classifiers_self_88343ce0|branch|89a27c0c4ec7ed4e|aa1108f63f1f6791|f8b49478c800b59e|1155594481||t19530.6942790026s|1948fe8b40f57e76|18127|rds|local|list|test_classifiers_self||63.498|| +testing_split|stem|d50d3b13a62f03d5|c15f1f750870070b|391ed944dfc56298|184895865||t19524.0978691601s|3db7e9e35ac20187|123790|rds|local|vector|||0.002|| +topk_distance_profiles|function|275ec9c8aa99e412||||||||||||||| +training_split|stem|77ba96cd3fc7b90d|74d47449a574137b|391ed944dfc56298|708679313||t19524.0562479008s|35e72503cf1ccc8c|366898|rds|local|vector|||0.001|| +turning_points|function|9903884c923a3261||||||||||||||| +validate_data|function|f852320347c36840||||||||||||||| +var_classes_exclude|object|da7e5646cbdfced7||||||||||||||| +var_classes_include|object|d0097917530c0ef9||||||||||||||| +var_dopar_cores|object|703a354a3d076f23||||||||||||||| +var_ez|object|ed77be4a2960536d||||||||||||||| +var_filter_w_size|object|887021b347b02e8f||||||||||||||| +var_floss_time_constraint|object|3767b7a207648d79||||||||||||||| +var_future_workers|object|d62de3d7487789a8||||||||||||||| +var_grid_search|object|7f5f4c6bbfa2ffd4||||||||||||||| +var_grid_size|object|42b194eec038fae9||||||||||||||| +var_head|object|f3582cdc107e111b||||||||||||||| +var_initial_split_prop|object|67615ff121ff99c8||||||||||||||| +var_limit_per_class|object|da7e5646cbdfced7||||||||||||||| +var_min_corr_neighbors|object|424c22bbe284b60d||||||||||||||| +var_mp_batch|object|887021b347b02e8f||||||||||||||| +var_mp_history|object|919c11223d984121||||||||||||||| +var_mp_threshold|object|37c1877282978f85||||||||||||||| +var_mp_time_constraint|object|3767b7a207648d79||||||||||||||| +var_num_neighbors|object|f3582cdc107e111b||||||||||||||| +var_num_shapelets|object|f3582cdc107e111b||||||||||||||| +var_pan_contrast|object|6c67b97be09c12b9||||||||||||||| +var_positive|object|909013909b1f03d4||||||||||||||| +var_regime_landmark|object|d62de3d7487789a8||||||||||||||| +var_regime_landmark_tune|object|4b0d6d13c3880101||||||||||||||| +var_regime_threshold|object|3f31db0a285bd7a0||||||||||||||| +var_regime_threshold_tune|object|14e65ccba7a92e01||||||||||||||| +var_save_pred|object|909013909b1f03d4||||||||||||||| +var_save_workflow|object|df161ddba3dacc9e||||||||||||||| +var_shapelet_sizes|object|2b623c1da12d1581||||||||||||||| +var_signals_exclude|object|16b6b94c1ea8dfe6||||||||||||||| +var_signals_include|object|c7057a3e6b525347||||||||||||||| +var_subset|object|14e1de7d1a909e46||||||||||||||| +var_tune_bayes_initial|object|0eb7ad5ce87b6af8||||||||||||||| +var_tune_bayes_iter|object|703a354a3d076f23||||||||||||||| +var_tune_bayes_no_improve|object|703a354a3d076f23||||||||||||||| +var_tune_sim_anneal_initial|object|0eb7ad5ce87b6af8||||||||||||||| +var_tune_sim_anneal_iter|object|703a354a3d076f23||||||||||||||| +var_tune_sim_anneal_no_improve|object|703a354a3d076f23||||||||||||||| +var_verbose|object|909013909b1f03d4||||||||||||||| +var_vfolds|object|a26c7eb00fbd604a||||||||||||||| +var_vfolds_repeats|object|a26c7eb00fbd604a||||||||||||||| +var_window_size|object|762e507151ccadf5||||||||||||||| +win_complex|function|b8c72aa4c85a0679||||||||||||||| +zero_cross_rate|function|135d3ba35c769dc1||||||||||||||| diff --git a/_targets.yaml b/_targets.yaml index ee7720c..ad39979 100644 --- a/_targets.yaml +++ b/_targets.yaml @@ -12,6 +12,11 @@ classifier: script: scripts/_classifier.R contrast_profile: + inherits: main + store: _contrast_profile_ex + script: scripts/_contrast_profile_ex.R + +contrast_profile_not: inherits: main store: _contrast_profile script: scripts/_contrast_profile.R diff --git a/analysis/index.Rmd b/analysis/index.Rmd index 0ff42fa..6d0e23b 100644 --- a/analysis/index.Rmd +++ b/analysis/index.Rmd @@ -58,7 +58,7 @@ Last Targets Run network: ```{r network, echo=FALSE, fig.width=10} library(magrittr) network <- readRDS(here("output/network.rds")) -network <- network %>% +network <- network |> visNetwork::visPhysics(hierarchicalRepulsion = list( springLength = 1, avoidOverlap = 0.5, diff --git a/analysis/regime_optimize.Rmd b/analysis/regime_optimize.Rmd index 74e087c..84e078c 100644 --- a/analysis/regime_optimize.Rmd +++ b/analysis/regime_optimize.Rmd @@ -71,12 +71,13 @@ my_graphics <- function(image_name, base_path = here::here("docs", "figure")) { } my_plot_html <- function(html, options) { - structure(paste0( - "
", html, "

(#", - options$fig.lp, options$label, ")", options$fig.cap, "

" - ), - class = "knit_asis" + structure( + paste0( + "
", html, "

(#", + options$fig.lp, options$label, ")", options$fig.cap, "

" + ), + class = "knit_asis" ) } @@ -1229,8 +1230,6 @@ my_plot_html(shap_html_test2, knitr::opts_current$get()) ```{r tests, eval=FALSE, echo=FALSE, out.width="80%", fig.cap="FLOSS pipeline."} - - # all_scores2 <- all_scores %>% dplyr::mutate(test = score_regimes_precision(truth, pred, 0, # window = 250, # delta_prec = "flat", diff --git a/analysis/report.Rmd b/analysis/report.Rmd index 1b9d598..a7ad826 100644 --- a/analysis/report.Rmd +++ b/analysis/report.Rmd @@ -217,8 +217,8 @@ kbl(alarms, align = "ll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` @@ -231,7 +231,6 @@ For comparison, on Table \@ref(tab:challenge) we collected the score of the five of the challenge [@plesinger2015; @kalidas2015; @couto2015; @fallet2015; @hoogantink2015]. ```{r challenge, echo=FALSE} - challenge <- tribble( ~Score, ~Authors, "81.39", "Filip Plesinger, Petr Klimes, Josef Halamek, Pavel Jurak", @@ -246,10 +245,10 @@ kbl(challenge, caption = "Challenge Results on real-time data. The scores were multiplied by 100.", align = "cl", position = "ht" -) %>% - row_spec(0, bold = TRUE) %>% - # column_spec(1, width = "5em") %>% - # column_spec(2, width = "30em") %>% +) |> + row_spec(0, bold = TRUE) |> + # column_spec(1, width = "5em") |> + # column_spec(2, width = "30em") |> kable_styling(full_width = TRUE) ``` @@ -317,8 +316,8 @@ kbl(criteria, align = "ll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` @@ -1034,7 +1033,6 @@ floss_data_1250 <- get_dist(0, 1250) ``` ```{r distributions, echo=FALSE, fig.cap="1D-IAC distributions for earlier temporal constraint (on Matrix Profile).", message=FALSE, warning=FALSE} - floss_dist <- ggplot(data_5000, aes(index, counts)) + geom_line(size = 0.1) + ggtitle("a) No constraint") + diff --git a/analysis/score_classifier.qmd b/analysis/score_classifier.qmd new file mode 100644 index 0000000..91a1ee0 --- /dev/null +++ b/analysis/score_classifier.qmd @@ -0,0 +1,453 @@ +--- +title: "Research Progress Report" +author: "Francisco Bischoff" +link-citations: true +indent: true +format: + html: + toc: true + number-sections: true + crossref: + fig-prefix: Fig. + number-depth: 3 + colorlinks: true + highlight-style: tango +# editor: +# render-on-save: true +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set( + echo = FALSE, fig.align = "center", autodep = TRUE, + fig.height = 5, fig.width = 10, + tidy = "styler", + tidy.opts = list(strict = TRUE) +) + +if (knitr::is_latex_output()) { + knitr::opts_chunk$set(dev = "pdf") +} else { + knitr::opts_chunk$set(dev = "svg") +} + +rlang::check_installed(c( + "here", "glue", "visNetwork", "tibble", "kableExtra", "gridExtra", + "ggplot2", "dplyr", "dbarts", "vip", "pdp", "patchwork", "fastshap", + "tune" +)) + +options(dplyr.summarise.inform = FALSE) + +library(here) +library(glue) +library(visNetwork) +library(tibble) +library(kableExtra) +library(patchwork) +library(ggplot2) + +surf_plot <- function() { + # library(rsm) + fit <- lm(mean ~ poly(window_size, mp_threshold, degree = 5), data = tree_data) + persp(fit, mp_threshold ~ window_size, zlab = "mean", zlim = c(0, 30)) +} + +lst_to_df <- function(lst, keep_attributes = TRUE) { + new_df <- dplyr::bind_rows(lst) + + if (keep_attributes) { + nc <- nrow(new_df) + attributes(new_df) <- attributes(lst[[1]]) + attr(new_df, "row.names") <- seq.int(1, nc) + } + + new_df$tar_group <- NULL + + return(new_df) +} + +train_models <- function(data, parallel = FALSE, v = 10, rep = 3, grid = 30, train = NULL, test = NULL) { + if (is.null(train) && is.null(test)) { + set.seed(616) + initial_sampling <- rsample::initial_split(data, prop = 3 / 4) + training_split <- rsample::training(initial_sampling) + testing_split <- rsample::testing(initial_sampling) + } else { + training_split <- train + testing_split <- test + } + + set.seed(616) + folds <- rsample::vfold_cv(training_split, v = v, rep = rep) + + model_spec <- parsnip::bart(trees = parsnip::tune()) %>% + parsnip::set_mode("regression") %>% + parsnip::set_engine("dbarts") + + model_set <- hardhat::extract_parameter_set_dials(model_spec) + + wflw <- workflows::workflow() %>% + workflows::add_model(model_spec) %>% + workflows::add_formula(fn ~ c_total + k_mean + cov_percent + red_percent + samples + k_m_total) + + if (parallel) { + doParallel::registerDoParallel(cores = parallelly::availableCores()) + } + + set.seed(2022) + tune_search <- wflw %>% + tune::tune_grid( + resamples = folds, + param_info = model_set, + grid = grid, + metrics = yardstick::metric_set(yardstick::rmse, yardstick::rsq), + control = tune::control_grid( + verbose = TRUE, + allow_par = parallel, + save_workflow = FALSE, + save_pred = TRUE, + parallel_over = "resamples" + ) + ) + + # uses the "one-standard error rule" (Breiman _et al._, 1984) that selects the most simple + # model that is within one standard error of the numerically optimal results. + tune_best <- tune_search %>% tune::select_best(metric = "rmse") # tune::select_by_one_std_err(trees, metric = "rsq") + + final_flow <- wflw %>% tune::finalize_workflow(tune_best) + + if (parallel) { + doParallel::stopImplicitCluster() + } + + return(list(model = final_flow, training_data = training_split, testing_data = testing_split)) +} + +check_interactions <- function(model, train_data, features, parallel = FALSE) { + if (parallel) { + doParallel::registerDoParallel(cores = parallelly::availableCores()) + } + # Quantify relative interaction strength + set.seed(2022) + interact <- suppressWarnings(vip::vint(model$fit$fit, + type = "regression", parallel = parallel, + feature_names = features, + train = train_data + )) + if (parallel) { + doParallel::stopImplicitCluster() + } + return(interact) +} + +shap_explain <- function(model, train_data, test_data, features, nsim = 20, parallel = FALSE) { + if (parallel) { + doParallel::registerDoParallel(cores = parallelly::availableCores()) + } + set.seed(2022) + shap <- fastshap::explain(model, + feature_names = features, + X = data.matrix(train_data), nsim = nsim, + pred_wrapper = function(object, newdata) { + pred <- predict(object, newdata) + pred$.pred + }, adjust = TRUE, + newdata = data.matrix(test_data), + .parallel = parallel + ) + if (parallel) { + doParallel::stopImplicitCluster() + } + return(shap) +} + +check_importance <- function(model, train_data, test_data, features, type = c("firm", "permute", "shap"), nsim = 20, parallel = FALSE) { + type <- match.arg(type) + + if (parallel) { + doParallel::registerDoParallel(cores = parallelly::availableCores()) + } + importances <- NULL + set.seed(2022) + if (type == "firm") { + importances <- vip::vip( + object = model, # fitted model + method = "firm", + feature_names = features, # names of features + pred.fun = function(object, newdata) { + pred <- predict(object, newdata) + return(pred$.pred) + }, + type = "regression", + parallel = parallel, + ice = TRUE, + train = train_data, + mapping = ggplot2::aes_string(fill = "Variable"), + aesthetics = list(color = "grey35", size = 0.8) + ) + } else if (type == "permute") { + importances <- vip::vip( + object = model, # fitted model + method = "permute", + target = "fn", + feature_names = features, # names of features + type = "ratio", + pred_wrapper = function(object, newdata) { + pred <- predict(object, newdata) + pred$.pred + }, + nsim = nsim, + metric = "rmse", + parallel = parallel, + keep = TRUE, + geom = "boxplot", + train = train_data, + mapping = ggplot2::aes_string(fill = "Variable"), + aesthetics = list(color = "grey35", size = 0.5) + ) + importances$layers[[1]]$data <- importances$layers[[1]]$data %>% + dplyr::filter(!grepl("int_.*", Variable)) # nolint + } else if (type == "shap") { + importances <- vip::vip( + object = model, # fitted model + method = "shap", + feature_names = features, # names of features + pred_wrapper = function(object, newdata) { + pred <- predict(object, newdata) + pred$.pred + }, + nsim = nsim, + train = as.data.frame(train_data), + newdata = as.data.frame(test_data), + parallel = parallel, + mapping = ggplot2::aes_string(fill = "Variable"), + aesthetics = list(color = "grey35", size = 0.8) + ) + } + + importances$data <- importances$data %>% + dplyr::filter(!grepl("int_.*", Variable)) # nolint + + if (parallel) { + doParallel::stopImplicitCluster() + } + return(importances) +} + +tkplot <- function(object, interactive = FALSE, res = 50) { + return() + ecg <- read_ecg_with_atr(here::here("inst/extdata/vtachyarrhythmias", object$record), resample_from = 250, resample_to = res) + value <- ecg[[1]]$ECG + prop <- 250 / res + mask <- seq.int(50, 100) + value[1:5] <- median(value[mask]) + value[(length(value) - 5):length(value)] <- median(value[mask]) + time <- seq(1, floor(length(value) * prop), length.out = length(value)) + data <- tibble::tibble(time = time, value = value) + min_data <- min(data$value) + max_data <- max(data$value) + truth <- clean_truth(floor(attr(ecg[[1]], "regimes") * prop), floor(length(value) * prop)) # object$truth[[1]] + preds <- object$pred[[1]] + + title <- glue::glue( + "Recording: {object$record} ", + "#truth: {length(truth)}, ", + "#preds: {length(preds)}, ", + "length: {floor(length(value)*prop)} ", + "FLOSS Score: {round(object$score, 3)}" + ) + + subtitle <- glue::glue( + "Parameters: ", + "MP window: {object$window_size}, ", + "Regime threshold: {object$regime_threshold}, ", + "Regime landmark: {object$regime_landmark}" + ) + + + plot <- data %>% + timetk::plot_time_series( + time, value, + .title = glue::glue(title, "
{subtitle}"), + .interactive = interactive, + .smooth = FALSE, + .line_alpha = 0.3, + .line_size = 0.2, + .plotly_slider = interactive + ) + + if (interactive) { + plot <- plot %>% + plotly::add_segments( + x = preds, xend = preds, y = min_data, + yend = max_data + (max_data - min_data) * 0.1, + line = list(width = 2.5, color = "#0108c77f"), + name = "Predicted" + ) %>% + plotly::add_segments( + x = truth, xend = truth, y = min_data, + yend = max_data, + line = list(width = 2.5, color = "#ff00007f"), + name = "Truth" + ) + } else { + plot <- plot + + ggplot2::geom_segment( + data = tibble::tibble(pre = preds), + ggplot2::aes( + x = pre, xend = pre, + y = min_data, yend = max_data + (max_data - min_data) * 0.1 + ), size = 1, color = "#0108c77f" + ) + + ggplot2::geom_segment( + data = tibble::tibble(tru = truth), + ggplot2::aes( + x = tru, xend = tru, + y = min_data, yend = max_data - (max_data - min_data) * 0.1 + ), size = 1, color = "#ff00007f" + ) + + ggplot2::theme_bw() + + ggplot2::theme( + legend.position = "none", + plot.margin = margin(0, 0, 0, 10) + ) + + ggplot2::labs(title = title, subtitle = subtitle, y = ggplot2::element_blank()) + } + plot +} + +pb_finished <- function(msg) { + RPushbullet::pbPost("note", "Alert", msg) + # RPushbullet::pbPost("note", "Alert", "Finished") +} + +# https://freakonometrics.hypotheses.org/64629 +# https://pacha.dev/blog/2022/08/23/entrevista-con-la-dra.-julia-silge/ +# https://www.jchau.org/2022/07/26/efficient-list-recursion-in-r-with-rrapply/ + +``` + +asd + +```{r modelbart, message=FALSE, cache=FALSE} +library(dplyr) +predictors_names <- c("c_total", "c_median", "c_mean", "c_sd", "cov_con_mean", "k_mean", "cov_mean", "cov_percent", "samples","red_percent", "fold") +predictors_names <- c("k_mean", "cov_percent", "c_total", "samples", "red_percent", "k_m_total")#, "fold") # fp +outcome_name <- "fp" + +false_positives <- readr::read_csv(file = here("tmp", "pan", "fp.csv")) +false_negatives <- readr::read_csv(file = here("tmp", "pan", "fn.csv")) + +# rt * w +# data <- tree_data %>% dplyr::filter(regime_landmark < 10, mean < 5) +# plotly::plot_ly(data, x = ~regime_threshold, y = ~regime_landmark, z = ~mean, color = ~sd) + +trained_model <- NULL +# Caching =========== +if (file.exists(here("tmp", "dbarts_fitted_vtds.rds"))) { + trained_model <- readRDS(here("tmp", "pan", "dbarts_fitted_vtds_s_fp.rds")) +} else { + trained_model <- train_models(false_negatives, parallel = TRUE, v = 5, rep = 1, grid = 30) + saveRDS(trained_model, file = here("tmp", "dbarts_fitted_vtds.rds")) +} + +train_data <- trained_model$training_data +testing_data <- trained_model$testing_data +set.seed(102) +best_fit <- generics::fit(trained_model$model, train_data) +pred <- predict(best_fit, testing_data)$.pred +# yardstick::rmse_vec(testing_data$fn, pred) +# yardstick::rsq_vec(testing_data$fn, pred) + +# Caching =========== +if (file.exists(here("tmp", "importances_vtds.rds"))) { + interactions <- readRDS(here("tmp", "importances_vtds.rds")) + importance_firm <- interactions$importance_firm + importance_perm <- interactions$importance_perm + importance_shap <- interactions$importance_shap + shap_html_test <- interactions$shap_html_test + shap_fastshap_all_test <- interactions$shap_fastshap_all_test + interactions <- interactions$interactions +} else { + + trdata <- train_data |> dplyr::slice_sample(n = 100) |> dplyr::select(c(all_of(predictors_names), "fp")) + + interactions <- vint(best_fit$fit$fit, predictors_names, data = trdata, type = "regression", n_jobs = 1) + +interactions_plot <- ggplot2::ggplot(interactions, ggplot2::aes( + x = reorder(Variables, Interaction), + y = Interaction, fill = Variables +)) + + ggplot2::geom_col(color = "grey35", size = 0.2) + + ggplot2::coord_flip() + + ggplot2::labs( + title = "Normal fit", + y = ggplot2::element_blank(), + x = ggplot2::element_blank() + ) + + # ggplot2::ylim(0, 1.2) + + ggplot2::theme_bw() + + ggplot2::theme(legend.position = "none") + + imp_fn <- readRDS(file = here("tmp", "pan", "importances_firm_s_fn.rds")) + + saveRDS(list( + importance_firm = importance_firm, + importance_firm2 = importance_firm2 + ), file = here("tmp", "pan", "importances_firm_s_fn2.rds")) + importance_firm <- check_importance(best_fit, testing_data, testing_data, predictors_names, + type = "firm", parallel = TRUE + ) + saveRDS(list( + interactions = interactions, + importance_firm = importance_firm + ), file = here("tmp", "importances_vtds.rds")) + importance_firm2 <- ggplot2::ggplot_build(importance_firm)$plot$data + + importance_perm <- check_importance(best_fit, testing_data, testing_data, predictors_names, + type = "permute", nsim = 100, parallel = TRUE + ) + importance_perm <- ggplot2::ggplot_build(importance_perm)$plot$data + importance_perm <- attr(importance_perm, "raw_scores") + importance_perm <- tibble::as_tibble(t(importance_perm)) %>% + dplyr::select(all_of(predictors_names)) %>% + tidyr::pivot_longer(everything(), names_to = "Variable", values_to = "Importance") + + importance_shap <- check_importance(best_fit, train_data, testing_data[, predictors_names], predictors_names, + type = "shap", nsim = 400, parallel = TRUE + ) + importance_shap <- ggplot2::ggplot_build(importance_shap)$plot$data + + # library(kernelshap) + # library(shapviz) + + # ds <- testing_data[, predictors_names] %>% dplyr::slice_sample(n = 200) + + # ks <- kernelshap( + # testing_data[, predictors_names], + # pred_fun = function(X) as.numeric(predict(best_fit, X)$.pred), + # bg_X = ds + # ) + + shap_fastshap_all_test <- shap_explain(best_fit, train_data[, predictors_names], testing_data[, predictors_names], + predictors_names, + nsim = 400, parallel = TRUE + ) + shap_html_test <- NA + # preds_test <- predict(best_fit, testing_data[, predictors_names]) + # shap_html_test <- fastshap::force_plot( + # object = shap_fastshap_all_test, feature_values = testing_data[, predictors_names], + # baseline = mean(preds_test$.pred), display = "html" + # ) + # shap_html_test <- stringr::str_remove(shap_html_test, "") + + saveRDS(list( + interactions = interactions, + importance_firm = importance_firm, + importance_perm = importance_perm, + importance_shap = importance_shap, + shap_fastshap_all_test = shap_fastshap_all_test, + shap_html_test = shap_html_test + ), file = here("tmp", "importances_vtds.rds")) +} +``` diff --git a/analysis/shiny/app.R b/analysis/shiny/app.R index c821d68..8e98640 100644 --- a/analysis/shiny/app.R +++ b/analysis/shiny/app.R @@ -109,7 +109,7 @@ server <- function(input, output) { dataset <<- readRDS(glue::glue("{input$filename}.rds")) scores <<- readRDS(glue::glue("{input$filename}_scores.rds")) data <- dataset - plot <- data$ecg %>% plot_time_series( + plot <- data$ecg |> plot_time_series( time, value, .title = glue::glue("FLOSS for {input$filename}"), .interactive = TRUE, @@ -119,7 +119,7 @@ server <- function(input, output) { .plotly_slider = TRUE ) - res <- scores %>% + res <- scores |> dplyr::arrange(score) valid_inputs <- list( @@ -152,7 +152,7 @@ server <- function(input, output) { scoreResult <- reactive({ wsize <- input$window_size # hack, dunno why this is necessary - res <- scores %>% dplyr::filter( + res <- scores |> dplyr::filter( window_size == input$window_size, time_constraint == input$time_constraint, round(mp_threshold * 100) == round(input$mp_threshold * 100), @@ -172,12 +172,12 @@ server <- function(input, output) { output$distPlot <- renderPlotly( - ecgRecord()$plot %>% plotly::add_segments( + ecgRecord()$plot |> plotly::add_segments( x = scoreResult()$pred[[1]], xend = scoreResult()$pred[[1]], y = ecgRecord()$min, yend = ecgRecord()$max * 1.1, line = list(width = 2.5, color = "#0108c77f"), name = "Predicted" - ) %>% plotly::add_segments( + ) |> plotly::add_segments( x = ecgRecord()$truth, xend = ecgRecord()$truth, y = ecgRecord()$min, yend = ecgRecord()$max, line = list(width = 2.5, color = "#ff00007f"), diff --git a/analysis/shiny_land/app.R b/analysis/shiny_land/app.R index bb8e5b5..1a58685 100644 --- a/analysis/shiny_land/app.R +++ b/analysis/shiny_land/app.R @@ -122,7 +122,7 @@ server <- function(input, output) { dataset <<- readRDS(glue::glue("{input$filename}.rds")) scores <<- readRDS(glue::glue("{input$filename}_scores.rds")) data <- dataset - plot <- data$ecg %>% plot_time_series( + plot <- data$ecg |> plot_time_series( time, value, .title = glue::glue("FLOSS for {input$filename}"), .interactive = TRUE, @@ -132,7 +132,7 @@ server <- function(input, output) { .plotly_slider = TRUE ) - res <- scores %>% + res <- scores |> dplyr::arrange(score) valid_inputs <- list( @@ -170,7 +170,7 @@ server <- function(input, output) { scoreResult <- reactive({ wsize <- input$window_size # hack, dunno why this is necessary - res <- scores %>% dplyr::filter( + res <- scores |> dplyr::filter( window_size == input$window_size, time_constraint == input$time_constraint, round(mp_threshold * 100) == round(input$mp_threshold * 100), @@ -191,12 +191,12 @@ server <- function(input, output) { output$distPlot <- renderPlotly( - ecgRecord()$plot %>% plotly::add_segments( + ecgRecord()$plot |> plotly::add_segments( x = scoreResult()$pred[[1]], xend = scoreResult()$pred[[1]], y = ecgRecord()$min, yend = ecgRecord()$max * 1.1, line = list(width = 2.5, color = "#0108c77f"), name = "Predicted" - ) %>% plotly::add_segments( + ) |> plotly::add_segments( x = ecgRecord()$truth, xend = ecgRecord()$truth, y = ecgRecord()$min, yend = ecgRecord()$max, line = list(width = 2.5, color = "#ff00007f"), diff --git a/analysis/shiny_ventricular/app.R b/analysis/shiny_ventricular/app.R index b1e83ef..8d02d9f 100644 --- a/analysis/shiny_ventricular/app.R +++ b/analysis/shiny_ventricular/app.R @@ -95,7 +95,7 @@ server <- function(input, output) { dataset <<- readRDS(glue::glue("{input$filename}.rds")) scores <<- readRDS(glue::glue("{input$filename}_scores.rds")) data <- dataset - plot <- data$ecg %>% plot_time_series( + plot <- data$ecg |> plot_time_series( time, value, .title = glue::glue("FLOSS for {input$filename}"), .interactive = TRUE, @@ -105,7 +105,7 @@ server <- function(input, output) { .plotly_slider = TRUE ) - res <- scores %>% + res <- scores |> dplyr::arrange(score) valid_inputs <- list( @@ -133,7 +133,7 @@ server <- function(input, output) { scoreResult <- reactive({ wsize <- input$window_size # hack, dunno why this is necessary - res <- scores %>% dplyr::filter( + res <- scores |> dplyr::filter( window_size == input$window_size, round(regime_landmark * 100) == round(input$regime_landmark * 100), round(regime_threshold * 100) == round(input$regime_threshold * 100), @@ -152,12 +152,12 @@ server <- function(input, output) { output$distPlot <- renderPlotly( - ecgRecord()$plot %>% plotly::add_segments( + ecgRecord()$plot |> plotly::add_segments( x = scoreResult()$pred[[1]], xend = scoreResult()$pred[[1]], y = ecgRecord()$min, yend = ecgRecord()$max * 1.1, line = list(width = 2.5, color = "#0108c77f"), name = "Predicted" - ) %>% plotly::add_segments( + ) |> plotly::add_segments( x = ecgRecord()$truth, xend = ecgRecord()$truth, y = ecgRecord()$min, yend = ecgRecord()$max, line = list(width = 2.5, color = "#ff00007f"), diff --git a/analysis/shiny_vtachy/app.R b/analysis/shiny_vtachy/app.R index b1e83ef..8d02d9f 100644 --- a/analysis/shiny_vtachy/app.R +++ b/analysis/shiny_vtachy/app.R @@ -95,7 +95,7 @@ server <- function(input, output) { dataset <<- readRDS(glue::glue("{input$filename}.rds")) scores <<- readRDS(glue::glue("{input$filename}_scores.rds")) data <- dataset - plot <- data$ecg %>% plot_time_series( + plot <- data$ecg |> plot_time_series( time, value, .title = glue::glue("FLOSS for {input$filename}"), .interactive = TRUE, @@ -105,7 +105,7 @@ server <- function(input, output) { .plotly_slider = TRUE ) - res <- scores %>% + res <- scores |> dplyr::arrange(score) valid_inputs <- list( @@ -133,7 +133,7 @@ server <- function(input, output) { scoreResult <- reactive({ wsize <- input$window_size # hack, dunno why this is necessary - res <- scores %>% dplyr::filter( + res <- scores |> dplyr::filter( window_size == input$window_size, round(regime_landmark * 100) == round(input$regime_landmark * 100), round(regime_threshold * 100) == round(input$regime_threshold * 100), @@ -152,12 +152,12 @@ server <- function(input, output) { output$distPlot <- renderPlotly( - ecgRecord()$plot %>% plotly::add_segments( + ecgRecord()$plot |> plotly::add_segments( x = scoreResult()$pred[[1]], xend = scoreResult()$pred[[1]], y = ecgRecord()$min, yend = ecgRecord()$max * 1.1, line = list(width = 2.5, color = "#0108c77f"), name = "Predicted" - ) %>% plotly::add_segments( + ) |> plotly::add_segments( x = ecgRecord()$truth, xend = ecgRecord()$truth, y = ecgRecord()$min, yend = ecgRecord()$max, line = list(width = 2.5, color = "#ff00007f"), diff --git a/beam search.mmd b/beam search.mmd new file mode 100644 index 0000000..94d7531 --- /dev/null +++ b/beam search.mmd @@ -0,0 +1,17 @@ +%%{ + init: { + "securityLevel": "loose", + "theme": "dark", + "fontFamily": "Fira Code Medium, Trebuchet MS, Verdana, Arial, Sans-Serif" + } +}%% + +graph TD; + A[Define the problem] --> B[Define the scoring function]; + B --> C[Initialize the set of candidate solutions]; + C --> D[Generate candidate solutions]; + D --> E[Score candidate solutions]; + E --> F[Select top-scoring candidate solutions]; + F --> G[Check for termination]; + G -->|Yes| H[Return the top-scoring solution]; + G -->|No| D; diff --git a/papers/aime2021/aime2021.Rmd b/papers/aime2021/aime2021.Rmd index d338ae9..3ac5983 100644 --- a/papers/aime2021/aime2021.Rmd +++ b/papers/aime2021/aime2021.Rmd @@ -110,9 +110,9 @@ alarms <- tribble( "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") %>% +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) ``` @@ -134,9 +134,9 @@ challenge <- tribble( 75.55, "Christoph Hoog Antink, Steffen Leonhardt" ) -kbl(challenge, booktabs = TRUE, caption = "Challenge Results on Streaming", align = "cl") %>% - kable_styling(full_width = TRUE) %>% - column_spec(2, width = "9cm") %>% +kbl(challenge, booktabs = TRUE, caption = "Challenge Results on Streaming", align = "cl") |> + kable_styling(full_width = TRUE) |> + column_spec(2, width = "9cm") |> row_spec(0, bold = TRUE) ``` diff --git a/papers/epia2022/epia2022.Rmd b/papers/epia2022/epia2022.Rmd index 0af13fe..bb2920b 100644 --- a/papers/epia2022/epia2022.Rmd +++ b/papers/epia2022/epia2022.Rmd @@ -183,8 +183,8 @@ kbl(alarms, caption = "Definition of the five alarm types used in CinC/Physionet Challenge 2015.", align = "ll", position = "ht" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` diff --git a/presentations/MEDCIDS21/MEDCIDS21-10min.Rmd b/presentations/MEDCIDS21/MEDCIDS21-10min.Rmd index db7c3a5..cb871f2 100644 --- a/presentations/MEDCIDS21/MEDCIDS21-10min.Rmd +++ b/presentations/MEDCIDS21/MEDCIDS21-10min.Rmd @@ -103,9 +103,9 @@ alarms <- tribble( "Ventricular Flutter/Fibrillation", "Fibrillatory, flutter, or oscillatory waveform for at least 4 seconds" ) -kbl(alarms, booktabs = TRUE, caption = paste("Table ", ref("tab:alarms"), "- 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") %>% +kbl(alarms, booktabs = TRUE, caption = paste("Table ", ref("tab:alarms"), "- 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) ``` @@ -127,9 +127,9 @@ challenge <- tribble( 75.55, "Christoph Hoog Antink, Steffen Leonhardt" ) -kbl(challenge, booktabs = TRUE, caption = paste("Table ", ref("tab:challenge"), "- Challenge Results on Streaming"), align = "cl") %>% - kable_styling(full_width = TRUE) %>% - column_spec(2, width = "9cm") %>% +kbl(challenge, booktabs = TRUE, caption = paste("Table ", ref("tab:challenge"), "- Challenge Results on Streaming"), align = "cl") |> + kable_styling(full_width = TRUE) |> + column_spec(2, width = "9cm") |> row_spec(0, bold = TRUE) ``` @@ -398,7 +398,6 @@ floss_data_1250 <- get_dist(0, 1250) ``` ```{r distributions, echo=FALSE, fig.cap=paste0("Fig. ", ref("fig:distributions"), ":  1D-IAC distributions for earlier temporal constraint (on Matrix Profile)")} - offset <- 120 floss_dist <- ggplot(data_5000, aes(index, counts)) + @@ -442,7 +441,6 @@ in its original form. See Fig. `r ref("fig:floss_dist")`. The theoretical distri to the constraint value. ```{r floss_dist, echo=FALSE, fig.cap=paste0("Fig. ", ref("fig:floss_dist"), ":  1D-IAC distributions for later temporal constraint (on FLOSS)")} - offset <- 120 floss_dist <- ggplot(floss_data_5000, aes(index, counts)) + @@ -501,7 +499,6 @@ floss_data <- tibble(time = seq_along(floss_data$cac), cac = floss_data$cac, iac ``` ```{r constraints, echo=FALSE, fig.cap=paste0("Fig. ", ref("fig:constraints"), ":  CAC and Regime detection using early and later IAC")} - landmark <- 5000 - 3 * 250 mp_cac_landmark <- mp_data$cac[landmark] floss_cac_landmark <- floss_data$cac[landmark] @@ -545,14 +542,15 @@ floss_arcs <- ggplot(floss_data, aes(time, arcs)) + gg <- gridExtra::grid.arrange(mp_constraint, floss_constraint, mp_arcs, floss_arcs, nrow = 2, newpage = TRUE, - bottom = grid::textGrob(paste( - "The plots on a) show above the Corrected Arc Count (CAC) and below the raw arc counts (black) and the\n", - "ideal arc count (IAC) (red) using the temporal constraint earlier on the Matrix Profile.\n", - "The plots on b) show above the Corrected Arc Count (CAC) and below the raw arc counts (black) and\n", - "the ideal arc count (IAC) (red) using the temporal constraint later on the FLOSS algorithm.\n", - "The red vertical line marks the point where the current algorithm watches for regime changes." - ), - just = "center", gp = grid::gpar(fontsize = 15) + bottom = grid::textGrob( + paste( + "The plots on a) show above the Corrected Arc Count (CAC) and below the raw arc counts (black) and the\n", + "ideal arc count (IAC) (red) using the temporal constraint earlier on the Matrix Profile.\n", + "The plots on b) show above the Corrected Arc Count (CAC) and below the raw arc counts (black) and\n", + "the ideal arc count (IAC) (red) using the temporal constraint later on the FLOSS algorithm.\n", + "The red vertical line marks the point where the current algorithm watches for regime changes." + ), + just = "center", gp = grid::gpar(fontsize = 15) ) ) ``` diff --git a/presentations/MEDCIDS21/MEDCIDS21.Rmd b/presentations/MEDCIDS21/MEDCIDS21.Rmd index 9812b42..d6a6d8c 100644 --- a/presentations/MEDCIDS21/MEDCIDS21.Rmd +++ b/presentations/MEDCIDS21/MEDCIDS21.Rmd @@ -99,9 +99,9 @@ alarms <- tribble( "Ventricular Flutter/Fibrillation", "Fibrillatory, flutter, or oscillatory waveform for at least 4 seconds" ) -kbl(alarms, booktabs = TRUE, caption = paste("Table ", ref("tab:alarms"), "- 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") %>% +kbl(alarms, booktabs = TRUE, caption = paste("Table ", ref("tab:alarms"), "- 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) ``` @@ -121,9 +121,9 @@ challenge <- tribble( 75.55, "Christoph Hoog Antink, Steffen Leonhardt" ) -kbl(challenge, booktabs = TRUE, caption = paste("Table ", ref("tab:challenge"), "- Challenge Results on Streaming"), align = "cl") %>% - kable_styling(full_width = TRUE) %>% - column_spec(2, width = "9cm") %>% +kbl(challenge, booktabs = TRUE, caption = paste("Table ", ref("tab:challenge"), "- Challenge Results on Streaming"), align = "cl") |> + kable_styling(full_width = TRUE) |> + column_spec(2, width = "9cm") |> row_spec(0, bold = TRUE) ``` @@ -372,7 +372,6 @@ floss_data_1250 <- get_dist(0, 1250) ``` ```{r distributions, echo=FALSE, fig.cap=paste0("Fig. ", ref("fig:distributions"), ": 1D-IAC distributions for earlier temporal constraint (on Matrix Profile)")} - offset <- 120 floss_dist <- ggplot(data_5000, aes(index, counts)) + @@ -416,7 +415,6 @@ in its original form. See Fig. `r ref("fig:floss_dist")`. The theoretical distri the constraint value. ```{r floss_dist, echo=FALSE, fig.cap=paste0("Fig. ", ref("fig:floss_dist"), ": 1D-IAC distributions for later temporal constraint (on FLOSS)")} - offset <- 120 floss_dist <- ggplot(floss_data_5000, aes(index, counts)) + @@ -477,7 +475,6 @@ floss_data <- tibble(time = seq_along(floss_data$cac), cac = floss_data$cac, iac ```{r constraints, echo=FALSE, fig.cap=paste0("Fig. ", ref("fig:constraints"), ": CAC and Regime detection using early and later IAC")} - landmark <- 5000 - 3 * 250 mp_cac_landmark <- mp_data$cac[landmark] floss_cac_landmark <- floss_data$cac[landmark] @@ -521,14 +518,15 @@ floss_arcs <- ggplot(floss_data, aes(time, arcs)) + gg <- gridExtra::grid.arrange(mp_constraint, floss_constraint, mp_arcs, floss_arcs, nrow = 2, newpage = TRUE, - bottom = grid::textGrob(paste( - "The plots on a) show above the Corrected Arc Count (CAC) and below the raw arc counts (black) and the\n", - "ideal arc count (IAC) (red) using the temporal constraint earlier on the Matrix Profile.\n", - "The plots on b) show above the Corrected Arc Count (CAC) and below the raw arc counts (black) and\n", - "the ideal arc count (IAC) (red) using the temporal constraint later on the FLOSS algorithm.\n", - "The red vertical line marks the point where the current algorithm watches for regime changes." - ), - just = "center", gp = grid::gpar(fontsize = 15) + bottom = grid::textGrob( + paste( + "The plots on a) show above the Corrected Arc Count (CAC) and below the raw arc counts (black) and the\n", + "ideal arc count (IAC) (red) using the temporal constraint earlier on the Matrix Profile.\n", + "The plots on b) show above the Corrected Arc Count (CAC) and below the raw arc counts (black) and\n", + "the ideal arc count (IAC) (red) using the temporal constraint later on the FLOSS algorithm.\n", + "The red vertical line marks the point where the current algorithm watches for regime changes." + ), + just = "center", gp = grid::gpar(fontsize = 15) ) ) ``` diff --git a/presentations/Report/Midterm-Report.Rmd b/presentations/Report/Midterm-Report.Rmd index 8117791..d4bdcee 100644 --- a/presentations/Report/Midterm-Report.Rmd +++ b/presentations/Report/Midterm-Report.Rmd @@ -109,7 +109,7 @@ alarms <- tribble( "Ventricular Flutter/Fibrillation", "Fibrillatory, flutter, or oscillatory waveform for at least 4 seconds" ) -kbl(alarms, booktabs = TRUE, caption = paste("Table ", ref("tab:alarms"), "- Definition of the 5 alarm types used in CinC/Physionet Challenge 2015 challenge."), align = "ll") %>% +kbl(alarms, booktabs = TRUE, caption = paste("Table ", ref("tab:alarms"), "- Definition of the 5 alarm types used in CinC/Physionet Challenge 2015 challenge."), align = "ll") |> kable_styling(full_width = TRUE) ``` @@ -131,8 +131,8 @@ challenge <- tribble( 75.55, "Christoph Hoog Antink, Steffen Leonhardt" ) -kbl(challenge, booktabs = TRUE, caption = paste("Table ", ref("tab:challenge"), "- Challenge Results on Streaming"), align = "cl") %>% - kable_styling(full_width = TRUE) %>% +kbl(challenge, booktabs = TRUE, caption = paste("Table ", ref("tab:challenge"), "- Challenge Results on Streaming"), align = "cl") |> + kable_styling(full_width = TRUE) |> column_spec(2, width = "9cm") ``` @@ -424,7 +424,6 @@ floss_data_1250 <- get_dist(0, 1250) ``` ```{r distributions, echo=FALSE, fig.cap=paste0("Fig. ", ref("fig:distributions"), ": 1D-Ideal Arc Counts (IAC) distributions for temporal constraint")} - offset <- 120 floss_dist <- ggplot(data_5000, aes(index, counts)) + diff --git a/protocol/FirstReport.Rmd b/protocol/FirstReport.Rmd index e855ffd..3c63bd4 100644 --- a/protocol/FirstReport.Rmd +++ b/protocol/FirstReport.Rmd @@ -212,8 +212,8 @@ kbl(alarms, align = "ll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` @@ -273,8 +273,8 @@ kbl(criteria, align = "ll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` diff --git a/protocol/Protocol.Rmd b/protocol/Protocol.Rmd index 83c1571..1d0cf21 100644 --- a/protocol/Protocol.Rmd +++ b/protocol/Protocol.Rmd @@ -196,7 +196,6 @@ Score = \frac{TP+TN}{TP+TN+FP+5*FN} (\#eq:score) The five-best scores (for real-time) in this challenge are described on Table \@ref(tab:challenge): ```{r challenge, echo=FALSE} - challenge <- tribble( ~Score, ~Authors, "81.39", "Filip Plesinger, Petr Klimes, Josef Halamek, Pavel Jurak", @@ -211,10 +210,10 @@ kbl(challenge, caption = "Challenge Results on real-time data. The scores were multiplied by 100.", align = "cl", position = "ht" -) %>% - row_spec(0, bold = TRUE) %>% - # column_spec(1, width = "5em") %>% - # column_spec(2, width = "30em") %>% +) |> + row_spec(0, bold = TRUE) |> + # column_spec(1, width = "5em") |> + # column_spec(2, width = "30em") |> kable_styling(full_width = FALSE) ``` @@ -400,8 +399,8 @@ kbl(miles, align = "ccll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = FALSE) ``` @@ -428,8 +427,8 @@ kbl(budgets, align = "lrlc", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = FALSE) ``` diff --git a/protocol/SecondReport.Rmd b/protocol/SecondReport.Rmd index e4636da..1048632 100644 --- a/protocol/SecondReport.Rmd +++ b/protocol/SecondReport.Rmd @@ -464,8 +464,8 @@ kbl(alarms, align = "ll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` @@ -478,7 +478,6 @@ For comparison, on Table \@ref(tab:challenge) we collected the score of the five of the challenge [@plesinger2015; @kalidas2015; @couto2015; @fallet2015; @hoogantink2015]. ```{r challenge, echo=FALSE} - challenge <- tribble( ~Score, ~Authors, "81.39", "Filip Plesinger, Petr Klimes, Josef Halamek, Pavel Jurak", @@ -493,10 +492,10 @@ kbl(challenge, caption = "Challenge Results on real-time data. The scores were multiplied by 100.", align = "cl", position = "ht" -) %>% - row_spec(0, bold = TRUE) %>% - # column_spec(1, width = "5em") %>% - # column_spec(2, width = "30em") %>% +) |> + row_spec(0, bold = TRUE) |> + # column_spec(1, width = "5em") |> + # column_spec(2, width = "30em") |> kable_styling(full_width = TRUE) ``` @@ -566,8 +565,8 @@ kbl(criteria, align = "ll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` @@ -1282,7 +1281,6 @@ floss_data_1250 <- get_dist(0, 1250) ``` ```{r distributions, echo=FALSE, fig.cap="1D-IAC distributions for earlier temporal constraint (on Matrix Profile)", message=FALSE, warning=FALSE} - floss_dist <- ggplot(data_5000, aes(index, counts)) + geom_line(size = 0.1) + ggtitle("a) No constraint") + diff --git a/scripts/_classifier.R b/scripts/_classifier.R index 3cf5c6d..c26fba0 100644 --- a/scripts/_classifier.R +++ b/scripts/_classifier.R @@ -303,11 +303,12 @@ list( cli::cli_alert_info("Finding solutions, fold {i}.") tune3 <- 10 solutions <- find_solutions(score_by_segment[[i]], - cov = 10, - n = 10, - rep = 10000, - red = tune3, - n_jobs = var_future_workers + min_cov = 10, + max_shapelets = 20, # this can be more than topk + rep = 5000, + max_red = 10, + max_k = tune3, + n_jobs = 6 ) if (length(solutions) == 0) { diff --git a/scripts/_contrast_profile.R b/scripts/_contrast_profile.R index 02b8ced..2dcc13c 100644 --- a/scripts/_contrast_profile.R +++ b/scripts/_contrast_profile.R @@ -317,13 +317,14 @@ list( res <- list() for (i in seq_len(var_vfolds)) { cli::cli_alert_info("Finding solutions, fold {i}.") - tune3 <- 10 + tune3 <- 10 # this could be tuned, but some trials shows that limiting to smaller K's doesn't increase the performance solutions <- find_solutions(score_by_segment[[i]], - cov = 10, - n = 20, - rep = 10000, - red = tune3, - n_jobs = var_future_workers + min_cov = 10, + max_shapelets = 20, # this can be more than topk + rep = 5000, + max_red = 10, + max_k = tune3, + n_jobs = 6 ) if (length(solutions) == 0) { diff --git a/scripts/_contrast_profile_ex.R b/scripts/_contrast_profile_ex.R new file mode 100644 index 0000000..d6b4f24 --- /dev/null +++ b/scripts/_contrast_profile_ex.R @@ -0,0 +1,424 @@ +# Sys.setenv(TAR_PROJECT = "classifier") + +# Errors: data_pos_neg_150_II +# data_pos_neg_150_PLETH, data_pos_neg_300_II, data_pos_neg_300_PLETH +# longer object length is not a multiple of shorter object length + +# TODO: change pipeline to nested resamplng + +# Load global config +source(here::here("scripts", "_globals.R"), local = .GlobalEnv, encoding = "UTF-8") # nolint +source(here::here("scripts", "classification", "pan_contrast.R"), local = .GlobalEnv, encoding = "UTF-8") # nolint +source(here::here("scripts", "helpers", "plot_contrast.R"), local = .GlobalEnv, encoding = "UTF-8") # nolint +source(here::here("scripts", "helpers", "pan_contrast_helpers.R"), local = .GlobalEnv, encoding = "UTF-8") # nolint + + +options(target_ds_path = here::here("inst", "extdata", "physionet")) # nolint +options(tidymodels.dark = TRUE) # nolint +options(progressr.enable = TRUE) # nolint + +#### Pipeline: variable definitions ---- +# signal sample frequency, this is a constant +const_sample_freq <- 250 +const_signals <- c("time", "I", "II", "III", "ABP", "PLETH", "RESP") +# const_classes <- c("asystole", "bradycardia", "tachycardia", "fibv", "vtachy") + +# var_resample_from <- 200 +# var_resample_to <- const_sample_freq + +# keep only the X filenames +# var_head <- 10 +# The subset that will be keep from the dataset (seq.int(240 * const_sample_freq + 1, 300 * const_sample_freq) means the last 60 seconds) +# var_subset <- seq.int(240 * const_sample_freq + 1, 300 * const_sample_freq) # last 60 secs +var_subset <- seq.int(290 * const_sample_freq + 1, 300 * const_sample_freq) # last 10 secs +var_limit_per_class <- NULL + +var_classes_include <- "vtachy" +var_classes_exclude <- NULL + +var_signals_include <- "II" +var_signals_exclude <- setdiff(const_signals, var_signals_include) + + + +#### Targets: Define targets options ---- +# readRenviron(".Renviron") +# source("renv/activate.R") +# renv::install(c("dplyr", "rlang", "rsample", "tidyr")) +# use renv::install(".") to update the rcpp functions + +tar_option_set( + tidy_eval = TRUE, + # library = "/workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.3/x86_64-pc-linux-gnu", + packages = c( + "here", "glue", "false.alarm", "dplyr", "rlang", "rsample", "tidyr", + "dials", "scales", "tibble", "parsnip", "yardstick", "purrr", "hardhat" + ), + format = "rds", + memory = "transient", + # debug = "find_shapelets", + garbage_collection = TRUE +) + +# var_shapelet_size <- c(120, 300, 1000) # c(30, 60, 120, 180, 300) # c(150, 300) +var_shapelet_sizes <- get_exp_dist_series(20, 400, 20) # c(20, 60, 100, 140, 180, 220, 260, 300) +var_positive <- TRUE # c(TRUE, FALSE) +var_num_shapelets <- 10 +var_num_neighbors <- 10 +var_min_corr_neighbors <- 0.85 +var_pan_contrast <- seq(20, 470, by = 50) + +############ +# tuning variables +# var_window_size_tune <- c(150L, 350L) +# var_window_size_tune <- c(25L, 26L) +# var_mp_threshold_tune <- c(0, 1) +# var_time_constraint_tune <- c(750L, 2000L) +# The subset that will be keep from the dataset (seq.int(290 * const_sample_freq + 1, 300 * const_sample_freq) means the last 10 seconds) +var_regime_threshold_tune <- c(0.05, 0.9) +var_regime_landmark_tune <- c(2, 10) +var_regime_landmark <- 3 +# which tune algorithm? +# tune_grid, tune_bayes, tune_sim_anneal, tune_race_anova, tune_race_win_loss +var_grid_search <- "tune_grid" +var_grid_size <- 1000 # grid and race_* / can be a previous search result +var_tune_bayes_iter <- 5 # bayes +var_tune_bayes_initial <- 200 # bayes / can be a previous search result +var_tune_bayes_no_improve <- 5 # bayes +var_tune_sim_anneal_iter <- var_tune_bayes_iter # anneal +var_tune_sim_anneal_initial <- var_tune_bayes_initial # anneal / can be a previous search result +var_tune_sim_anneal_no_improve <- var_tune_bayes_no_improve # anneal +# splits +# initial split, 3/4 will hold 25% of the data for final, independent, performance. +var_initial_split_prop <- 3 / 4 +var_vfolds <- 2 # for the inner resample +var_vfolds_repeats <- 2 # for the inner resample +# parallel +var_dopar_cores <- 5 # number of cores to use on tuning (inner resample) +var_future_workers <- 3 + +var_verbose <- TRUE +var_save_workflow <- FALSE +var_save_pred <- TRUE + + +# # All configurations used different CPUs while running the code. +# plan(multisession) # create top-level processes +# plan(multicore) # create child processes +future::plan(future.callr::callr, workers = var_future_workers) # create child processes with a child process + +tidymodels::tidymodels_prefer(quiet = TRUE) + + +# start debugme after loading all functions +# if (dev_mode) { +debugme::debugme() +# } + +# cat(.Random.seed) +# cat("\n\n\n\n") + + +#### Pipeline: Start ---- +list( + tar_files_input( + #### Pipeline: file_paths - Read files from directory ---- + file_paths, + find_all_files(here::here("inst", "extdata", "physionet"), + data_type = "alarm", + classes = var_classes_include + # limit_per_class = 10 + ) + ), + tar_target( + #### Pipeline: Import the last 10 seconds of all TRUE and FALSE alarms ---- + dataset, + { + temp <- read_and_prepare_ecgs(file_paths, + subset = var_subset, + limit_per_class = var_limit_per_class, + normalize = TRUE + ) + res <- reshape_ds_by_truefalse(temp, var_signals_include, all_signals = FALSE) + + aa <- round(runif(50, 1, 331)) + res$II <- res$II[aa, ] + res + # headers: file: filename; class: record class (fib, vfib, etc); values: the recording; alarm: true positive or false positive; + # class_alarm: classcolumn_alarmcolumn // class_alarm is a dummy variable, because the `rsample` package does + # not accept more than one variable for stratification. + } + ), + tar_target( + #### Pipeline: initial_resample - Tidy dataset and create the initial resample ---- + initial_resample, + { + rsample::initial_split(dataset[[1]], prop = var_initial_split_prop) + } + ), + tar_target( + #### Pipeline: testing_split - Create the final testing split for the outer loop ---- + testing_split, + { + # outer loop, this will be evaluated last + rsample::testing(initial_resample) # 5 + } + ), + tar_target( + #### Pipeline: training_split - Create the training split for the inner loop ---- + training_split, + { + # outer-inner loop, this will be cross-validated + rsample::training(initial_resample) # 15 + } + ), + tar_target( + #### Pipeline: analysis_split - Subset the training split into analysis split (training) ---- + analysis_split, + { + # use the same seed for analysis and assessment to avoid the creation of + # an intermediate redundant split + my_seed <- tar_meta(training_split, seed)$seed + set.seed(my_seed) + validation_split <- rsample::vfold_cv(training_split, var_vfolds, var_vfolds_repeats) + this_split <- NULL + for (i in seq_along(validation_split$splits)) { + this_split <- rsample::analysis(validation_split$splits[[i]]) |> + rsample::apparent() |> + dplyr::bind_rows(this_split) + } + + result <- NULL + for (i in seq_len(var_vfolds_repeats)) { + mask <- seq.int(var_vfolds * (i - 1) + 1, var_vfolds * i) + res <- rsample::manual_rset(this_split$splits[mask], id = glue_fmt("Fold{seq_len(var_vfolds):02d}")) |> + dplyr::mutate( + rep = glue("Repeat{i}") + ) + result <- dplyr::bind_rows(result, res) + } + + # group by repeats, so targets will create multiple branches + result <- result |> + dplyr::group_by(rep) |> + tar_group() + result + }, + iteration = "group" + ), + tar_target( + #### Pipeline: assessment_split - Subset the training split into assessment split (test) ---- + assessment_split, + { + # use the same seed for analysis and assessment to avoid the creation of + # an intermediate redundant split + my_seed <- tar_meta(training_split, seed)$seed + set.seed(my_seed) + validation_split <- rsample::vfold_cv(training_split, var_vfolds, var_vfolds_repeats) + this_split <- NULL + for (i in seq_along(validation_split$splits)) { + this_split <- rsample::assessment(validation_split$splits[[i]]) |> + rsample::apparent() |> + dplyr::bind_rows(this_split) + } + + result <- NULL + for (i in seq_len(var_vfolds_repeats)) { + mask <- seq.int(var_vfolds * (i - 1) + 1, var_vfolds * i) + res <- rsample::manual_rset(this_split$splits[mask], id = glue_fmt("Fold{seq_len(var_vfolds):02d}")) |> + dplyr::mutate( + rep = glue("Repeat{i}") + ) + result <- dplyr::bind_rows(result, res) + } + + # group by repeats, so targets will create multiple branches + result <- result |> + dplyr::group_by(rep) |> + tar_group() + result + }, + iteration = "group" + ), + ###### Inner Resample ###### + tar_target( + #### Pipeline: assessment_split - Subset the training split into assessment split (test) ---- + contrast_profiles, + { + shapelet_sizes <- var_shapelet_sizes + + class(analysis_split) <- c("manual_rset", "rset", class(analysis_split)) + + res <- list() + for (i in seq_len(var_vfolds)) { + fold <- rsample::get_rsplit(analysis_split, i) + res[[i]] <- contrastprofile_topk(fold, shapelet_sizes, var_num_shapelets, n_jobs = var_future_workers, TRUE) + } + + res + }, + pattern = map(analysis_split), + iteration = "list" + ), + + # strOptions(strict.width = "no", digits.d = 3, vec.len = 0.5, + # list.len = 3, deparse.lines = NULL, + # drop.deparse.attr = TRUE) + + + + # tar_target( + # #### Pipeline: analysis_fitted - Here we will conduct the parameter optimizations ---- + # analysis_fitted, + # { + # # source(here::here("scripts", "classification", "parsnip_model.R"), encoding = "UTF-8") + + # contrast_spec <- + # contrast_model( + # # coverage_quantiles = tune::tune(), # score_by_segment_window + # num_shapelets = tune::tune(), # find_solutions + # redundancy = tune::tune() # find_solutions + # ) |> + # parsnip::set_engine("contrast_profile") |> + # parsnip::set_mode("classification") + + # # filter_best_solutions + # }, + # pattern = map(contrast_profiles), + # iteration = "list" # thus the objects keep their attributes + # ), + tar_target( + #### Pipeline: score_by_segment - Preparation of the data: the model's data is the shapelets with metadata ---- + score_by_segment, + { + res <- list() + for (i in seq_len(var_vfolds)) { + cli::cli_alert_info("Scores by segment, fold {i}.") + # These parameter can be tuned on `recipes`. These default values seems to be good enough + tune1 <- 0.1 + tune2 <- 1 / 3 + score <- score_by_segment_window(contrast_profiles[[i]]$positive, + contrast_profiles[[i]]$negative, contrast_profiles[[i]]$pan, + quantiles = c(tune1, tune2) + ) + res[[i]] <- score + } + res + }, + pattern = map(contrast_profiles), + iteration = "list" + ), + tar_target( + #### Pipeline: find_shapelets - This is the model fit. ---- + find_shapelets, + { + # Here we can try: fitting all possible solutions and later score them and finally try + # to find which metadata is the best to filter the solutions + # Or, we can try to use some heuristics to find the best metadata for the solutions + # These parameters are tuned on `parsnip`/`tune` + # Currently the parameter `n` draws randomically 1 to `n` samples from the pan contrast profile + # We can try to use a fixed number of samples during the parameter optimization + res <- list() + for (i in seq_len(var_vfolds)) { + cli::cli_alert_info("Finding solutions, fold {i}.") + tune3 <- 10 # this could be tuned, but some trials shows that limiting to smaller K's doesn't increase the performance + solutions <- find_solutions(score_by_segment[[i]], + min_cov = 10, + max_shapelets = 20, # this can be more than topk + rep = 5000, + max_red = 10, + max_k = tune3, + n_jobs = 6 + ) + + if (length(solutions) == 0) { + res[i] <- list(NULL) + } else { + res[[i]] <- solutions + } + } + res + }, + pattern = map(score_by_segment), + iteration = "list" + ), + tar_target( + #### Pipeline: test_classifiers_self - This is the current score function. ---- + test_classifiers_self, + { + # With the results of this step, plus the fitted solutions, we need to find which + # metadata is the best to filter the solutions + class(analysis_split) <- c("manual_rset", "rset", class(analysis_split)) + + res <- list() + for (i in seq_len(var_vfolds)) { + fold <- rsample::get_rsplit(analysis_split, i) + res[[i]] <- list() + shapelets <- find_shapelets[[i]] + + # the `compute_metrics_topk` function may need testing on the `TRUE` criteria + # currently, if `ANY` shapelet matches, it is considered a positive + # as alternative we can try to use `ALL`, `HALF` or other criteria + res[[i]] <- compute_metrics_topk(fold, shapelets, 6, TRUE) + } + + res # list(fold = res, overall = overall) + + + # aa <- tibble::as_tibble(purrr::transpose(test_classifiers_self[[1]][[i]])) + # aa <- dplyr::mutate_all(aa, as.numeric) + # aa <- dplyr::bind_cols(find_shapelets[[1]][[i]], aa) |> + # dplyr::select(-data) |> + # dplyr::mutate(coverage = as.numeric(coverage), redundancy = as.numeric(redundancy)) + # bb <- dplyr::bind_rows(bb, aa) + # i <- i + 1 + # summary(bb) + # library(corrgram) + # corrgram(bb, + # order = FALSE, + # lower.panel = panel.ellipse, upper.panel = panel.cor, + # text.panel = panel.txt + # ) + # GGally::ggpairs(bb, aes(alpha = 0.05), lower = list(continuous = "smooth")) + }, + pattern = map(find_shapelets, analysis_split), + iteration = "list" + ), + tar_target( + best_shapelets, + { + # Here we test the solutions we chose on the assessment split + + res <- list() + for (i in seq_len(var_vfolds)) { + aa <- tibble::as_tibble(purrr::transpose(test_classifiers_self[[i]])) + aa <- dplyr::mutate_all(aa, as.numeric) + aa <- dplyr::bind_cols(find_shapelets[[i]], aa) |> + # dplyr::select(-data) |> ####### The final `model` we need is the shapelet + dplyr::mutate(across(!where(is.list), as.numeric)) + + sup_spec <- quantile(aa$specificity, 0.75, na.rm = TRUE) + sup_prec <- quantile(aa$precision, 0.75, na.rm = TRUE) + min_fp <- min(aa$fp, na.rm = TRUE) + min_fn <- min(aa$fn, na.rm = TRUE) + + aa <- aa |> + dplyr::filter( + precision > sup_prec, + specificity > sup_spec + ) |> + dplyr::arrange(fp, fn) |> + dplyr::slice_head(n = 10) + + res[[i]] <- aa + } + res + }, + pattern = map(test_classifiers_self, find_shapelets), + iteration = "list" + ) +) + +# tar_load(best_shapelets) + +# readr::write_csv(best_shapelets[[1]], file = here::here("tmp", glue::glue("metricse.csv"))) diff --git a/scripts/classification/pan_contrast.R b/scripts/classification/pan_contrast.R index 3904540..d291a70 100644 --- a/scripts/classification/pan_contrast.R +++ b/scripts/classification/pan_contrast.R @@ -32,7 +32,7 @@ # source("/workspace/false.alarm/scripts/helpers/pan_contrast_helpers.R", encoding = "UTF-8") # library(false.alarm) # score <- score_by_segment_window(res$positive, res$negative, res$pan) -# solutions <- find_solutions(score, cov = 18, n = 10, rep = 100000, red = 10, n_jobs = 2); View(solutions) +# solutions <- find_solutions(score, min_cov = 18, n = 10, rep = 100000, max_red = 10, n_jobs = 2); View(solutions) # jj <- filter_best_solutions(solutions, 2) # plt <- plot_best_candidates(jj$data[[1]], res) @@ -217,17 +217,35 @@ filter_best_solutions <- function( # n = max number of shapelets to use # rep = number of sampling repetitions -# red = maximum redundancy allowed -# cov = minimum coverage allowed - -find_solutions <- function(score, n = 5, rep = 2000, red = 5, cov = 17, n_jobs = 1) { +# max_red = maximum redundancy allowed +# min_cov = minimum coverage allowed + +# Beam search +#| graph TD; +#| A[Define the problem] --> B[Define the scoring function]; +#| B --> C[Initialize the set of candidate solutions]; +#| C --> D[Generate candidate solutions]; +#| D --> E[Score candidate solutions]; +#| E --> F[Select top-scoring candidate solutions]; +#| F --> G[Check for termination]; +#| G -->|Yes| H[Return the top-scoring solution]; +#| G -->|No| D; + + +# find_solutions +# seek high cov_percent(**) and lower red_percent for low FN +# seek for: lower red_percent(*), and samples(**) for low FP + +find_solutions <- function(score, max_shapelets = 5, rep = 2000, max_red = 5, min_cov = 17, max_k = 10, n_jobs = 1) { segments <- score$num_segments - if (cov > segments) { - cov <- segments + if (min_cov > segments) { + min_cov <- segments } + # Convert the score object into a data frame. Also limits the topk to max_k score <- score_candidates(score) + score <- score |> dplyr::filter(k <= max_k) if (n_jobs == 1) { future::plan(future::sequential) @@ -245,39 +263,78 @@ find_solutions <- function(score, n = 5, rep = 2000, red = 5, cov = 17, n_jobs = sols <- furrr::future_map(reps, function(i) { p() - samples <- round(runif(1, 1, n)) + + # sample the data + samples <- round(runif(1, 1, max_shapelets)) + + ## Generate candidate solutions ## --------------------------------------- some_rows <- dplyr::slice_sample(score, n = samples) + # get the size of the shapelets from the cov_idxs first row + # must match the segments variable n_cols <- length(some_rows$cov_idxs[[1]]) + checkmate::assert_true(n_cols == segments) + # reshape the cov_idxs into a matrix sample_data <- matrix(unlist(some_rows$cov_idxs), ncol = n_cols, byrow = TRUE) + + # computes the "pre" coverage using a colwise sum. If the column sum is zero, the + # selected shapelet is not detecting that segment of the data data_coverage <- apply(sample_data, 2, sum) + # computes the redundancy (rowwise) checking if the column sum is greater than 1. + # This means that the segment is detected by more than one shapelet redundancy <- sum(data_coverage > 1, na.rm = TRUE) - if (redundancy > red) { + # early exit if the redundancy is too high + if (redundancy > max_red) { return(NULL) } + # computes the coverage (rowwise) checking if the column sum is greater than 0. coverage <- sum(data_coverage > 0, na.rm = TRUE) - if (coverage < cov) { + # early exit if the coverage is too low + if (coverage < min_cov) { return(NULL) } cov_percent <- coverage / segments + + if (cov_percent < 0.5) { + return(NULL) + } + keep_rows <- list() + keep <- NULL - if (nrow(sample_data) > 2) { + ## Prune solutions efficiently ## --------------------------------------- + # We try to reduce redudancy only if more than two shapelets were sampled + nsamples <- nrow(sample_data) + if (nsamples > 2) { # test for rows of samples that don't zero the column sum and may be dropped - cc <- data_coverage - for (j in seq((nrow(sample_data) - 1), 2)) { - comb <- combn(seq_len(nrow(sample_data)), j) - - for (k in seq_len(ncol(comb))) { + cc <- data_coverage # this is just to make the code more readable + for (j in seq((nsamples - 1), 2)) { # iterates backwards from (nsamples - 1) to 2 + # creates a matrix with all combinations of the sequence of samples, taken j by j. + # we start by ommiting one index, than two, than three, etc. + comb <- combn(seq_len(nsamples), j) + + # the algorithm is pretty simple: for each combination of samples, check if the ommited + # indexes are zeroing the column sum. If it is not, then we can drop that indexes. + for (k in seq_len(ncol(comb))) { # iterates over the combination matrix, columnwise rr <- sample_data[comb[, k], , drop = FALSE] - rr <- apply(rr, 2, sum) - if (!any(rr[(rr & cc)] == cc[(rr & cc)])) { - keep <- setdiff(seq_len(nrow(sample_data)), comb[, k]) + rr <- apply(rr, 2, sum) # here we compute the new "pre" coverage + + # (rr & cc) is an efficient way to check if both arrays are > 0 columnwise + dd <- rr & cc + # then, we compare the column sums of the new "pre" coverage with the original + # if any of the columns have the same sum, we keep searching + # if not, we store the ommited indexes, since it is a combination that cannot be dropped + if (!any(rr[dd] == cc[dd])) { + keep <- setdiff(seq_len(nsamples), comb[, k]) keep_rows <- c(keep_rows, list(keep)) } } + + # if we found a combination that cannot be dropped, we can stop searching + # this combination is already the smallest combination that reduces redundancy and keeps coverage + # we can have more than one combination in this loop. Later, we will select the more appropriate if (length(keep_rows) > 0) { break } @@ -285,13 +342,12 @@ find_solutions <- function(score, n = 5, rep = 2000, red = 5, cov = 17, n_jobs = } if (length(keep_rows) == 1) { + # if we found only one combination that reduces redundancy, we keep only that combination some_rows <- some_rows[keep_rows[[1]], ] samples <- length(keep_rows[[1]]) - data_coverage <- apply(matrix(unlist(some_rows$cov_idxs), ncol = n_cols, byrow = TRUE), 2, sum) - redundancy <- sum(data_coverage > 1, na.rm = TRUE) - coverage <- sum(data_coverage > 0, na.rm = TRUE) - cov_percent <- coverage / segments } else if (length(keep_rows) > 1) { + # if we found more than one combination that reduces redundancy, we keep the combination + # that maximizes the score function new_rows <- NULL for (j in seq_len(length(keep_rows))) { temp <- dplyr::bind_cols(idx = j, some_rows[keep_rows[[j]], ]) @@ -301,23 +357,28 @@ find_solutions <- function(score, n = 5, rep = 2000, red = 5, cov = 17, n_jobs = new_rows <- new_rows |> dplyr::group_by(idx) |> dplyr::summarise( - sk = sum(k), mc = median(contrast, na.rm = TRUE), - sid = sum(unlist(cov_idxs)), - redun = sum(apply(matrix(unlist(cov_idxs), ncol = n_cols, byrow = TRUE), 2, sum) > 1) + k_mean = mean(k, na.rm = TRUE), c_total = sum(contrast, na.rm = TRUE), + c_mean = mean(contrast, na.rm = TRUE) ) new_rows <- new_rows |> - dplyr::arrange(sk, desc(mc), sid, redun) |> + dplyr::arrange(dplyr::desc(k_mean), dplyr::desc(c_total), c_mean) |> dplyr::slice_head(n = 1) new_idx <- new_rows |> dplyr::pull(idx) some_rows <- some_rows[keep_rows[[new_idx]], ] samples <- length(keep_rows[[new_idx]]) - data_coverage <- apply(matrix(unlist(some_rows$cov_idxs), ncol = n_cols, byrow = TRUE), 2, sum) - redundancy <- sum(data_coverage > 1, na.rm = TRUE) - coverage <- sum(data_coverage > 0, na.rm = TRUE) - cov_percent <- coverage / segments } + # else, keep the original sampled rows + + data_coverage <- apply(matrix(unlist(some_rows$cov_idxs), ncol = segments, byrow = TRUE), 2, sum) + redundancy <- sum(data_coverage > 1, na.rm = TRUE) + coverage <- sum(data_coverage > 0, na.rm = TRUE) + # normalize the coverage and redundancy by the number of segments to allow comparison + # between different folds. + cov_percent <- coverage / segments + red_percent <- redundancy / segments + list( c_total = sum(some_rows$contrast, na.rm = TRUE), @@ -330,6 +391,7 @@ find_solutions <- function(score, n = 5, rep = 2000, red = 5, cov = 17, n_jobs = coverage = coverage, cov_percent = cov_percent, redundancy = redundancy, + red_percent = red_percent, samples = samples, cand = some_rows ) }, .options = furrr::furrr_options(seed = 2023, scheduling = 1)) @@ -352,6 +414,43 @@ find_solutions <- function(score, n = 5, rep = 2000, red = 5, cov = 17, n_jobs = return(sols) } + +# The scoring function will try to minimize at first one of the "min" arguments +# minimizing fp will try to minimize the number of false positives +# minimizing fn will try to minimize the number of false negatives +# For minimizing FP, these variables have the following correlation/importance: +# - samples: 0.492/1.07 +# - red_percent: 0.192/0.490 +# - c_total: 0.470/0.247 +# - cov_percent: 0.260/0.173 +# For minimizing FN, these variables have the following correlation/importance: +# - cov_percent: -0.854 / 7.56 *** score +# - c_total: -0.244 / 2.64 +# - samples: -0.346 / 2.26 +# - red_percent: -0.402 / 1.79 +# - k_mean: -0.143 / 0.524 + +score_solutions <- function(object, min = c("fp", "fn")) { + checkmate::qassert(object, "L+") + checkmate::qassert(min, "S") + + min <- match.arg(min) + + if (min == "fp") { # hard + # minimize false positives + object <- object |> + dplyr::mutate( # 0.493 + score = c_total * 0.11609 + cov_percent * 0.04498 + red_percent * 0.09408 + samples * 0.52644 + ) + } else if (min == "fn") { + # minimize false negatives + object <- object |> + dplyr::mutate( # 0.5 + score = c_total * -0.64416 + cov_percent * -6.45624 + red_percent * -0.71958 + k_mean * -0.074932 + samples * -0.78196 + ) + } +} + list_dfr <- function(x) { x <- purrr::map(x, function(x) { x <- tibble::as_tibble(x) @@ -614,7 +713,7 @@ compute_metrics_topk <- function(fold, shapelets, n_jobs = 1, progress = FALSE) { p <- progressr::progressor(steps = nrow(shapelets)) - res <- foreach(i = seq_len(nrow(shapelets))) %dofuture% { + res <- foreach(i = seq_len(nrow(shapelets)), .options.future = list(seed = TRUE)) %dofuture% { shapelet <- shapelets[i, ] tp <- 0 @@ -666,6 +765,7 @@ compute_metrics_topk <- function(fold, shapelets, n_jobs = 1, progress = FALSE) precision <- tp / (tp + fp) recall <- tp / (tp + fn) specificity <- tn / (tn + fp) + FOR <- fn / (fn + tn) accuracy <- (tp + tn) / (tp + tn + fp + fn) f1 <- 2 * tp / (2 * tp + fp + fn) p4 <- (4 * tp * tn) / (4 * tp * tn + (tp + tn) * (fp + fn)) @@ -679,7 +779,7 @@ compute_metrics_topk <- function(fold, shapelets, n_jobs = 1, progress = FALSE) list( tp = tp, fp = fp, tn = tn, fn = fn, precision = precision, recall = recall, - specificity = specificity, + specificity = specificity, FOR = FOR, accuracy = accuracy, f1 = f1, p4 = p4, mcc = mcc, km = km, kappa = kappa ) @@ -698,7 +798,7 @@ compute_metrics_topk <- function(fold, shapelets, n_jobs = 1, progress = FALSE) # list_dfr(test_classifiers_self[[1]][[4]]), # list_dfr(test_classifiers_self[[1]][[5]])) # GGally::ggpairs(aaa[, 5:13]) -# aaa <- aaa %>% dplyr::mutate(fnr = fn / (tp + fn), fpr = fp / (fp + tn)) +# aaa <- aaa |> dplyr::mutate(fnr = fn / (tp + fn), fpr = fp / (fp + tn)) compute_overall_metric <- function(all_folds) { tp <- fp <- tn <- fn <- acc <- ff <- 0 diff --git a/scripts/helpers/create_shiny_dataset.R b/scripts/helpers/create_shiny_dataset.R index 0177529..069930d 100644 --- a/scripts/helpers/create_shiny_dataset.R +++ b/scripts/helpers/create_shiny_dataset.R @@ -28,19 +28,19 @@ lst_to_df <- function(lst, keep_attributes = TRUE) { # Using cached data analysis_fitted <- readRDS(here("output", "regime_outputs.rds")) all_fitted <- lst_to_df(analysis_fitted$fitted_models) -scores <- all_fitted %>% - dplyr::select(.predictions) %>% - tidyr::unnest(.predictions) %>% +scores <- all_fitted |> + dplyr::select(.predictions) |> + tidyr::unnest(.predictions) |> ## mp_threshold of 1 and time_constraint of 750 are unrealistic, so we filter them out - dplyr::filter(mp_threshold <= 0.9, time_constraint >= 800) %>% - dplyr::distinct(.id, window_size, time_constraint, mp_threshold, regime_threshold, .keep_all = TRUE) %>% - dplyr::mutate(truth = clean_truth(truth, .sizes), .pred = clean_pred(.pred)) %>% - dplyr::group_by(.id, window_size, time_constraint, mp_threshold, regime_threshold) %>% + dplyr::filter(mp_threshold <= 0.9, time_constraint >= 800) |> + dplyr::distinct(.id, window_size, time_constraint, mp_threshold, regime_threshold, .keep_all = TRUE) |> + dplyr::mutate(truth = clean_truth(truth, .sizes), .pred = clean_pred(.pred)) |> + dplyr::group_by(.id, window_size, time_constraint, mp_threshold, regime_threshold) |> dplyr::summarise( score = score_regimes(truth[[1]], .pred[[1]], 0), pred = .pred - ) %>% - dplyr::ungroup() %>% + ) |> + dplyr::ungroup() |> dplyr::rename(record = .id) saveRDS(scores, here::here("analysis", "shiny", "scores.rds")) @@ -62,7 +62,7 @@ for (data in dataset) { time <- seq(1, floor(length(value) * 5), length.out = length(value)) ecg <- tibble::tibble(time = time, value = value) all_data[[data]] <- list(ecg = ecg, truth = truth) - # ecg %>% plot_time_series(time, value, .smooth = FALSE, .interactive = TRUE) + # ecg |> plot_time_series(time, value, .smooth = FALSE, .interactive = TRUE) } saveRDS(all_data, here::here("analysis", "shiny", "dataset.rds")) @@ -92,20 +92,20 @@ for (data in dataset) { time <- seq(1, floor(length(value) * 5), length.out = length(value)) ecg <- tibble::tibble(time = time, value = value) all_data[[data]] <- list(ecg = ecg, truth = truth) - # ecg %>% plot_time_series(time, value, .smooth = FALSE, .interactive = TRUE) + # ecg |> plot_time_series(time, value, .smooth = FALSE, .interactive = TRUE) } saveRDS(all_data, here::here("analysis", "shiny_land", "dataset.rds")) a <- readRDS(here::here("analysis", "shiny", "scores.rds")) -a <- a %>% - # group_by(window_size, regime_threshold, regime_landmark) %>% - group_by(window_size, time_constraint, mp_threshold, regime_threshold) %>% - summarise(mean = mean(score), min = min(score), max = max(score), med = median(score), q25 = quantile(score, .25), q75 = quantile(score, .75), mm_diff = mean(score) - median(score)) %>% +a <- a |> + # group_by(window_size, regime_threshold, regime_landmark) |> + group_by(window_size, time_constraint, mp_threshold, regime_threshold) |> + summarise(mean = mean(score), min = min(score), max = max(score), med = median(score), q25 = quantile(score, .25), q75 = quantile(score, .75), mm_diff = mean(score) - median(score)) |> ungroup() a -# a <- a %>% mutate(mm_diff = abs(mean - med) < 2) +# a <- a |> mutate(mm_diff = abs(mean - med) < 2) library(plotly) conflict_prefer("layout", "plotly") @@ -123,10 +123,10 @@ pl_colorscale <- list( c(1, "rgba(0,0,230,0.05)") ) -fig <- a %>% - filter(mm_diff <= 1.0) %>% +fig <- a |> + filter(mm_diff <= 1.0) |> plot_ly() -fig <- fig %>% +fig <- fig |> add_trace( type = "splom", dimensions = list( @@ -156,7 +156,7 @@ fig <- fig %>% ) ) ) -fig <- fig %>% +fig <- fig |> layout( title = "FLOSS", hovermode = "closest", @@ -170,7 +170,7 @@ fig <- fig %>% yaxis2 = axis, yaxis3 = axis, yaxis4 = axis - ) %>% + ) |> style(diagonal = list(visible = FALSE), showupperhalf = FALSE) fig diff --git a/scripts/helpers/interactions.R b/scripts/helpers/interactions.R new file mode 100644 index 0000000..67b8053 --- /dev/null +++ b/scripts/helpers/interactions.R @@ -0,0 +1,129 @@ +#' Interaction effects - Borrowed from vip package +#' +#' Quantify the strength of two-way interaction effects using a simple +#' \emph{feature importance ranking measure} (FIRM) approach. For details, see +#' \href{https://arxiv.org/abs/1805.04755}{Greenwell et al. (2018)}. +#' +#' @param object A fitted model object (e.g., a \code{"randomForest"} object). +#' +#' @param feature_names Character string giving the names of the two features of +#' interest. +#' +#' @param parallel Logical indicating whether or not to run \code{partial} in +#' parallel using a backend provided by the \code{foreach} package. Default is +#' \code{FALSE}. +#' +#' @param paropts List containing additional options to be passed on to +#' \code{\link[foreach]{foreach}} when \code{parallel = TRUE}. +#' +#' @param ... Additional optional arguments to be passed on to +#' \code{\link[pdp]{partial}}. +#' +#' @details This function quantifies the strength of interaction between +#' features $X_1$ and $X_2$ by measuring the change in variance along slices of +#' the partial dependence of $X_1$ and $X_2$ on the target $Y$. See +#' \href{https://arxiv.org/abs/1805.04755}{Greenwell et al. (2018)} for +#' details and examples. +#' +#' @references +#' Greenwell, B. M., Boehmke, B. C., and McCarthy, A. J.: A Simple +#' and Effective Model-Based Variable Importance Measure. arXiv preprint +#' arXiv:1805.04755 (2018). +#' +#' @export +#' +#' @examples +#' \dontrun{ +#' # +#' # The Friedman 1 benchmark problem +#' # +#' +#' # Load required packages +#' library(gbm) +#' library(ggplot2) +#' library(mlbench) +#' +#' # Simulate training data +#' trn <- gen_friedman(500, seed = 101) # ?vip::gen_friedman +#' +#' # +#' # NOTE: The only interaction that actually occurs in the model from which +#' # these data are generated is between x.1 and x.2! +#' # +#' +#' # Fit a GBM to the training data +#' set.seed(102) # for reproducibility +#' fit <- gbm(y ~ ., +#' data = trn, distribution = "gaussian", n.trees = 1000, +#' interaction.depth = 2, shrinkage = 0.01, bag.fraction = 0.8, +#' cv.folds = 5 +#' ) +#' best_iter <- gbm.perf(fit, plot.it = FALSE, method = "cv") +#' +#' # Quantify relative interaction strength +#' all_pairs <- combn(paste0("x.", 1:10), m = 2) +#' res <- NULL +#' for (i in seq_along(all_pairs)) { +#' interact <- vint(fit, feature_names = all_pairs[, i], n.trees = best_iter) +#' res <- rbind(res, interact) +#' } +#' +#' # Plot top 20 results +#' top_20 <- res[1L:20L, ] +#' ggplot(top_20, aes(x = reorder(Variables, Interaction), y = Interaction)) + +#' geom_col() + +#' coord_flip() + +#' xlab("") + +#' ylab("Interaction strength") +#' } +vint <- function(object, feature_names, data, type, n_jobs = 1, ...) { + checkmate::qassert(feature_names, "S+") + + all_pairs <- utils::combn(feature_names, m = 2) # two by two + all_pairs <- purrr::array_tree(all_pairs, 2) + + cli::cli_alert_info("Computing the importances of {length(all_pairs)} combinations.") + + if (n_jobs == 1) { + future::plan(future::sequential) + } else { + future::plan(future::multisession, workers = n_jobs) + } + + progressr::with_progress( + { + p <- progressr::progressor(along = all_pairs) + + p("starting", amount = 0) + # computing partials + parts <- furrr::future_map(all_pairs, function(x, ...) { + pd <- pdp::partial(object, pred.var = x, ...) + p("computing partials") + pd + }, + train = data, type = type, + .options = furrr::furrr_options(seed = TRUE, scheduling = 1) + ) + }, + handlers = progressr::handler_progress(format = "[:bar] :percent :eta :message") + ) + + cli::cli_alert_info("Gathering statistics.") + # compute the sd of the partials + ints <- purrr::map_vec(parts, function(x) { + a <- mean(c( + stats::sd(tapply(x$yhat, INDEX = x[[1]], FUN = stats::sd)), + stats::sd(tapply(x$yhat, INDEX = x[[2]], FUN = stats::sd)) + )) + a + }) + + pairs <- purrr::transpose(all_pairs) + + res <- tibble::tibble( + "Variables" = paste0(pairs[[1]], "*", pairs[[2]]), + "Interaction" = ints + ) + + return(res) +} diff --git a/thesis/002-materials-and-methods.Rmd b/thesis/002-materials-and-methods.Rmd index 2984bba..62d9e3f 100644 --- a/thesis/002-materials-and-methods.Rmd +++ b/thesis/002-materials-and-methods.Rmd @@ -136,8 +136,8 @@ kbl(alarms, align = "ll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` @@ -150,7 +150,6 @@ For comparison, on Table \@ref(tab:challenge) we collected the score of the five of the challenge [@plesinger2015; @kalidas2015; @couto2015; @fallet2015; @hoogantink2015]. ```{r challenge, echo=FALSE} - challenge <- tribble( ~Score, ~Authors, "81.39", "Filip Plesinger, Petr Klimes, Josef Halamek, Pavel Jurak", @@ -165,10 +164,10 @@ kbl(challenge, caption = "Challenge Results on real-time data. The scores were multiplied by 100.", align = "cl", position = "ht" -) %>% - row_spec(0, bold = TRUE) %>% - # column_spec(1, width = "5em") %>% - # column_spec(2, width = "30em") %>% +) |> + row_spec(0, bold = TRUE) |> + # column_spec(1, width = "5em") |> + # column_spec(2, width = "30em") |> kable_styling(full_width = TRUE) ``` @@ -236,8 +235,8 @@ kbl(criteria, align = "ll", position = "ht", linesep = "\\addlinespace" -) %>% - row_spec(0, bold = TRUE) %>% +) |> + row_spec(0, bold = TRUE) |> kable_styling(full_width = TRUE) ``` diff --git a/thesis/stuffs2.Rmd b/thesis/stuffs2.Rmd index 75bffaf..65de6eb 100644 --- a/thesis/stuffs2.Rmd +++ b/thesis/stuffs2.Rmd @@ -108,9 +108,9 @@ tl nd for 20 4. Ne also the use of the `scale` parameter which is discussed on the next page. ```{r delaysboxplot, warnings=FALSE, messages=FALSE, fig.cap="Mean Delays by Airline", fig.width=6} -flights %>% - group_by(carrier) %>% - summarize(mean_dep_delay = mean(dep_delay)) %>% +flights |> + group_by(carrier) |> + summarize(mean_dep_delay = mean(dep_delay)) |> ggplot(aes(x = carrier, y = mean_dep_delay)) + geom_bar(position = "identity", stat = "identity", fill = "red") ``` diff --git a/thesis/stuffs3.Rmd b/thesis/stuffs3.Rmd index 19d42bd..32969f1 100644 --- a/thesis/stuffs3.Rmd +++ b/thesis/stuffs3.Rmd @@ -35,9 +35,9 @@ alarms <- tribble( "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") %>% +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) ``` @@ -59,9 +59,9 @@ challenge <- tribble( 75.55, "Christoph Hoog Antink, Steffen Leonhardt" ) -kbl(challenge, booktabs = TRUE, caption = "Challenge Results on Streaming", align = "cl") %>% - kable_styling(full_width = TRUE) %>% - column_spec(2, width = "9cm") %>% +kbl(challenge, booktabs = TRUE, caption = "Challenge Results on Streaming", align = "cl") |> + kable_styling(full_width = TRUE) |> + column_spec(2, width = "9cm") |> row_spec(0, bold = TRUE) ```