
Sensor drift detection
drift_detect.RdDetects potential sensor drift by comparing rolling window statistics (mean or standard deviation) to their long-term baseline. Returns a logical matrix indicating time points where the rolling statistic deviates beyond a threshold.
Usage
drift_detect(data, cols = NULL, window = 30, threshold = 3,
method = c("mean", "sd"), group = NULL,
date_col = NULL, verbose = FALSE)Arguments
- data
A data frame, matrix, or numeric vector.
- cols
Column indices or names of numeric variables. If
NULL, all numeric columns are used.- window
Window size for rolling statistics.
- threshold
Threshold in units of standard deviation. Values with absolute z-score above this are flagged as drift.
- method
Rolling statistic to use:
"mean"or"sd".- group
Optional grouping column for group-wise detection.
- date_col
Optional time column (not required for calculation).
- verbose
Logical; if
TRUE, prints progress message.
Value
A logical matrix with rows corresponding to observations and columns to the selected variables. TRUE indicates suspected drift.
Examples
drift_detect(data[1:500, c(1, 4, 17:19)], cols = 3:5, window = 50, threshold = 3)
#> 3.98 4.47 5.01
#> [1,] NA NA NA
#> [2,] NA NA NA
#> [3,] NA NA NA
#> [4,] FALSE FALSE FALSE
#> [5,] FALSE FALSE FALSE
#> [6,] FALSE FALSE FALSE
#> [7,] FALSE FALSE FALSE
#> [8,] FALSE FALSE FALSE
#> [9,] FALSE FALSE FALSE
#> [10,] FALSE FALSE FALSE
#> [11,] FALSE FALSE FALSE
#> [12,] FALSE FALSE FALSE
#> [13,] FALSE FALSE FALSE
#> [14,] FALSE FALSE FALSE
#> [15,] FALSE FALSE FALSE
#> [16,] FALSE FALSE FALSE
#> [17,] FALSE FALSE FALSE
#> [18,] FALSE FALSE FALSE
#> [19,] FALSE FALSE FALSE
#> [20,] FALSE FALSE FALSE
#> [21,] FALSE FALSE FALSE
#> [22,] FALSE FALSE FALSE
#> [23,] FALSE FALSE FALSE
#> [24,] FALSE FALSE FALSE
#> [25,] FALSE FALSE FALSE
#> [26,] FALSE FALSE FALSE
#> [27,] FALSE FALSE FALSE
#> [28,] FALSE FALSE FALSE
#> [29,] FALSE FALSE FALSE
#> [30,] FALSE FALSE FALSE
#> [31,] FALSE FALSE FALSE
#> [32,] FALSE FALSE FALSE
#> [33,] FALSE FALSE FALSE
#> [34,] FALSE FALSE FALSE
#> [35,] FALSE FALSE FALSE
#> [36,] FALSE FALSE FALSE
#> [37,] FALSE FALSE FALSE
#> [38,] FALSE FALSE FALSE
#> [39,] FALSE FALSE FALSE
#> [40,] FALSE FALSE FALSE
#> [41,] FALSE FALSE FALSE
#> [42,] FALSE FALSE FALSE
#> [43,] FALSE FALSE FALSE
#> [44,] FALSE FALSE FALSE
#> [45,] FALSE FALSE FALSE
#> [46,] FALSE FALSE FALSE
#> [47,] FALSE FALSE FALSE
#> [48,] FALSE FALSE FALSE
#> [49,] FALSE FALSE FALSE
#> [50,] FALSE FALSE FALSE
#> [51,] FALSE FALSE FALSE
#> [52,] FALSE FALSE FALSE
#> [53,] FALSE FALSE FALSE
#> [54,] FALSE FALSE FALSE
#> [55,] FALSE FALSE FALSE
#> [56,] FALSE FALSE FALSE
#> [57,] FALSE FALSE FALSE
#> [58,] FALSE FALSE FALSE
#> [59,] FALSE FALSE FALSE
#> [60,] FALSE FALSE FALSE
#> [61,] FALSE FALSE FALSE
#> [62,] FALSE FALSE FALSE
#> [63,] FALSE FALSE FALSE
#> [64,] FALSE FALSE FALSE
#> [65,] FALSE FALSE FALSE
#> [66,] FALSE FALSE FALSE
#> [67,] FALSE FALSE FALSE
#> [68,] FALSE FALSE FALSE
#> [69,] FALSE FALSE FALSE
#> [70,] FALSE FALSE FALSE
#> [71,] FALSE FALSE FALSE
#> [72,] FALSE FALSE FALSE
#> [73,] FALSE FALSE FALSE
#> [74,] FALSE FALSE FALSE
#> [75,] FALSE FALSE FALSE
#> [76,] FALSE FALSE FALSE
#> [77,] FALSE FALSE FALSE
#> [78,] FALSE FALSE FALSE
#> [79,] FALSE FALSE FALSE
#> [80,] FALSE FALSE FALSE
#> [81,] FALSE FALSE FALSE
#> [82,] FALSE FALSE FALSE
#> [83,] FALSE FALSE FALSE
#> [84,] FALSE FALSE FALSE
#> [85,] FALSE FALSE FALSE
#> [86,] FALSE FALSE FALSE
#> [87,] FALSE FALSE FALSE
#> [88,] FALSE FALSE FALSE
#> [89,] FALSE FALSE FALSE
#> [90,] FALSE FALSE FALSE
#> [91,] FALSE FALSE FALSE
#> [92,] FALSE FALSE FALSE
#> [93,] FALSE FALSE FALSE
#> [94,] FALSE FALSE FALSE
#> [95,] FALSE FALSE FALSE
#> [96,] FALSE FALSE FALSE
#> [97,] FALSE FALSE FALSE
#> [98,] FALSE FALSE FALSE
#> [99,] FALSE FALSE FALSE
#> [100,] FALSE FALSE FALSE
#> [101,] FALSE FALSE FALSE
#> [102,] FALSE FALSE FALSE
#> [103,] FALSE FALSE FALSE
#> [104,] FALSE FALSE FALSE
#> [105,] FALSE FALSE FALSE
#> [106,] FALSE FALSE FALSE
#> [107,] FALSE FALSE FALSE
#> [108,] FALSE FALSE FALSE
#> [109,] FALSE FALSE FALSE
#> [110,] FALSE FALSE FALSE
#> [111,] FALSE FALSE FALSE
#> [112,] FALSE FALSE FALSE
#> [113,] FALSE FALSE FALSE
#> [114,] FALSE FALSE FALSE
#> [115,] FALSE FALSE FALSE
#> [116,] FALSE FALSE FALSE
#> [117,] FALSE FALSE FALSE
#> [118,] FALSE FALSE FALSE
#> [119,] FALSE FALSE FALSE
#> [120,] FALSE FALSE FALSE
#> [121,] FALSE FALSE FALSE
#> [122,] FALSE FALSE FALSE
#> [123,] FALSE FALSE FALSE
#> [124,] FALSE FALSE FALSE
#> [125,] FALSE FALSE FALSE
#> [126,] FALSE FALSE FALSE
#> [127,] FALSE FALSE FALSE
#> [128,] FALSE FALSE FALSE
#> [129,] FALSE FALSE FALSE
#> [130,] FALSE FALSE FALSE
#> [131,] FALSE FALSE FALSE
#> [132,] FALSE FALSE FALSE
#> [133,] FALSE FALSE FALSE
#> [134,] FALSE FALSE FALSE
#> [135,] FALSE FALSE FALSE
#> [136,] FALSE FALSE FALSE
#> [137,] FALSE FALSE FALSE
#> [138,] FALSE FALSE FALSE
#> [139,] FALSE FALSE FALSE
#> [140,] FALSE FALSE FALSE
#> [141,] FALSE FALSE FALSE
#> [142,] FALSE FALSE FALSE
#> [143,] FALSE FALSE FALSE
#> [144,] FALSE FALSE FALSE
#> [145,] FALSE FALSE FALSE
#> [146,] FALSE FALSE FALSE
#> [147,] FALSE FALSE FALSE
#> [148,] FALSE FALSE FALSE
#> [149,] FALSE FALSE FALSE
#> [150,] FALSE FALSE FALSE
#> [151,] FALSE FALSE FALSE
#> [152,] FALSE FALSE FALSE
#> [153,] FALSE FALSE FALSE
#> [154,] FALSE FALSE FALSE
#> [155,] FALSE FALSE FALSE
#> [156,] FALSE FALSE FALSE
#> [157,] FALSE FALSE FALSE
#> [158,] FALSE FALSE FALSE
#> [159,] FALSE FALSE FALSE
#> [160,] FALSE FALSE FALSE
#> [161,] FALSE FALSE FALSE
#> [162,] FALSE FALSE FALSE
#> [163,] FALSE FALSE FALSE
#> [164,] FALSE FALSE FALSE
#> [165,] FALSE FALSE FALSE
#> [166,] FALSE FALSE FALSE
#> [167,] FALSE FALSE FALSE
#> [168,] FALSE FALSE FALSE
#> [169,] FALSE FALSE FALSE
#> [170,] FALSE FALSE FALSE
#> [171,] FALSE FALSE FALSE
#> [172,] FALSE FALSE FALSE
#> [173,] FALSE FALSE FALSE
#> [174,] FALSE FALSE FALSE
#> [175,] FALSE FALSE FALSE
#> [176,] FALSE FALSE FALSE
#> [177,] FALSE FALSE FALSE
#> [178,] FALSE FALSE FALSE
#> [179,] FALSE FALSE FALSE
#> [180,] FALSE FALSE FALSE
#> [181,] FALSE FALSE FALSE
#> [182,] FALSE FALSE FALSE
#> [183,] FALSE FALSE FALSE
#> [184,] FALSE FALSE FALSE
#> [185,] FALSE FALSE FALSE
#> [186,] FALSE FALSE FALSE
#> [187,] FALSE FALSE FALSE
#> [188,] FALSE FALSE FALSE
#> [189,] FALSE FALSE FALSE
#> [190,] FALSE FALSE FALSE
#> [191,] FALSE FALSE FALSE
#> [192,] FALSE FALSE FALSE
#> [193,] FALSE FALSE FALSE
#> [194,] FALSE FALSE FALSE
#> [195,] FALSE FALSE FALSE
#> [196,] FALSE FALSE FALSE
#> [197,] FALSE FALSE FALSE
#> [198,] FALSE FALSE FALSE
#> [199,] FALSE FALSE FALSE
#> [200,] FALSE FALSE FALSE
#> [201,] FALSE FALSE FALSE
#> [202,] FALSE FALSE FALSE
#> [203,] FALSE FALSE FALSE
#> [204,] FALSE FALSE FALSE
#> [205,] FALSE FALSE FALSE
#> [206,] FALSE FALSE FALSE
#> [207,] FALSE FALSE FALSE
#> [208,] FALSE FALSE FALSE
#> [209,] FALSE FALSE FALSE
#> [210,] FALSE FALSE FALSE
#> [211,] FALSE FALSE FALSE
#> [212,] FALSE FALSE FALSE
#> [213,] FALSE FALSE FALSE
#> [214,] FALSE FALSE FALSE
#> [215,] FALSE FALSE FALSE
#> [216,] FALSE FALSE FALSE
#> [217,] FALSE FALSE FALSE
#> [218,] FALSE FALSE FALSE
#> [219,] FALSE FALSE FALSE
#> [220,] FALSE FALSE FALSE
#> [221,] FALSE FALSE FALSE
#> [222,] FALSE FALSE FALSE
#> [223,] FALSE FALSE FALSE
#> [224,] FALSE FALSE FALSE
#> [225,] FALSE FALSE FALSE
#> [226,] FALSE FALSE FALSE
#> [227,] FALSE FALSE FALSE
#> [228,] FALSE FALSE FALSE
#> [229,] FALSE FALSE FALSE
#> [230,] FALSE FALSE FALSE
#> [231,] FALSE FALSE FALSE
#> [232,] FALSE FALSE FALSE
#> [233,] FALSE FALSE FALSE
#> [234,] FALSE FALSE FALSE
#> [235,] FALSE FALSE FALSE
#> [236,] FALSE FALSE FALSE
#> [237,] FALSE FALSE FALSE
#> [238,] FALSE FALSE FALSE
#> [239,] FALSE FALSE FALSE
#> [240,] FALSE FALSE FALSE
#> [241,] FALSE FALSE FALSE
#> [242,] FALSE FALSE FALSE
#> [243,] FALSE FALSE FALSE
#> [244,] FALSE FALSE FALSE
#> [245,] FALSE FALSE FALSE
#> [246,] FALSE FALSE FALSE
#> [247,] FALSE FALSE FALSE
#> [248,] FALSE FALSE FALSE
#> [249,] FALSE FALSE FALSE
#> [250,] FALSE FALSE FALSE
#> [251,] FALSE FALSE FALSE
#> [252,] FALSE FALSE FALSE
#> [253,] FALSE FALSE FALSE
#> [254,] FALSE FALSE FALSE
#> [255,] FALSE FALSE FALSE
#> [256,] FALSE FALSE FALSE
#> [257,] FALSE FALSE FALSE
#> [258,] FALSE FALSE FALSE
#> [259,] FALSE FALSE FALSE
#> [260,] FALSE FALSE FALSE
#> [261,] FALSE FALSE FALSE
#> [262,] FALSE FALSE FALSE
#> [263,] FALSE FALSE FALSE
#> [264,] FALSE FALSE FALSE
#> [265,] FALSE FALSE FALSE
#> [266,] FALSE FALSE FALSE
#> [267,] FALSE FALSE FALSE
#> [268,] FALSE FALSE FALSE
#> [269,] FALSE FALSE FALSE
#> [270,] FALSE FALSE FALSE
#> [271,] FALSE FALSE FALSE
#> [272,] FALSE FALSE FALSE
#> [273,] FALSE FALSE FALSE
#> [274,] FALSE FALSE FALSE
#> [275,] FALSE FALSE FALSE
#> [276,] FALSE FALSE FALSE
#> [277,] FALSE FALSE FALSE
#> [278,] FALSE FALSE FALSE
#> [279,] FALSE FALSE FALSE
#> [280,] FALSE FALSE FALSE
#> [281,] FALSE FALSE FALSE
#> [282,] FALSE FALSE FALSE
#> [283,] FALSE FALSE FALSE
#> [284,] FALSE FALSE FALSE
#> [285,] FALSE FALSE FALSE
#> [286,] FALSE FALSE FALSE
#> [287,] FALSE FALSE FALSE
#> [288,] FALSE FALSE FALSE
#> [289,] FALSE FALSE FALSE
#> [290,] FALSE FALSE FALSE
#> [291,] FALSE FALSE FALSE
#> [292,] FALSE FALSE FALSE
#> [293,] FALSE FALSE FALSE
#> [294,] FALSE FALSE FALSE
#> [295,] FALSE FALSE FALSE
#> [296,] FALSE FALSE FALSE
#> [297,] FALSE FALSE FALSE
#> [298,] FALSE FALSE FALSE
#> [299,] FALSE FALSE FALSE
#> [300,] FALSE FALSE FALSE
#> [301,] FALSE FALSE FALSE
#> [302,] FALSE FALSE FALSE
#> [303,] FALSE FALSE FALSE
#> [304,] FALSE FALSE FALSE
#> [305,] FALSE FALSE FALSE
#> [306,] FALSE FALSE FALSE
#> [307,] FALSE FALSE FALSE
#> [308,] FALSE FALSE FALSE
#> [309,] FALSE FALSE FALSE
#> [310,] FALSE FALSE FALSE
#> [311,] FALSE FALSE FALSE
#> [312,] FALSE FALSE FALSE
#> [313,] FALSE FALSE FALSE
#> [314,] FALSE FALSE FALSE
#> [315,] FALSE FALSE FALSE
#> [316,] FALSE FALSE FALSE
#> [317,] FALSE FALSE FALSE
#> [318,] FALSE FALSE FALSE
#> [319,] FALSE FALSE FALSE
#> [320,] FALSE FALSE FALSE
#> [321,] FALSE FALSE FALSE
#> [322,] FALSE FALSE FALSE
#> [323,] FALSE FALSE FALSE
#> [324,] FALSE FALSE FALSE
#> [325,] FALSE FALSE FALSE
#> [326,] FALSE FALSE FALSE
#> [327,] FALSE FALSE FALSE
#> [328,] FALSE FALSE FALSE
#> [329,] FALSE FALSE FALSE
#> [330,] FALSE FALSE FALSE
#> [331,] FALSE FALSE FALSE
#> [332,] FALSE FALSE FALSE
#> [333,] FALSE FALSE FALSE
#> [334,] FALSE FALSE FALSE
#> [335,] FALSE FALSE FALSE
#> [336,] FALSE FALSE FALSE
#> [337,] FALSE FALSE FALSE
#> [338,] FALSE FALSE FALSE
#> [339,] FALSE FALSE FALSE
#> [340,] FALSE FALSE FALSE
#> [341,] FALSE FALSE FALSE
#> [342,] FALSE FALSE FALSE
#> [343,] FALSE FALSE FALSE
#> [344,] FALSE FALSE FALSE
#> [345,] FALSE FALSE FALSE
#> [346,] FALSE FALSE FALSE
#> [347,] FALSE FALSE FALSE
#> [348,] FALSE FALSE FALSE
#> [349,] FALSE FALSE FALSE
#> [350,] FALSE FALSE FALSE
#> [351,] FALSE FALSE FALSE
#> [352,] FALSE FALSE FALSE
#> [353,] FALSE FALSE FALSE
#> [354,] FALSE FALSE FALSE
#> [355,] FALSE FALSE FALSE
#> [356,] FALSE FALSE FALSE
#> [357,] FALSE FALSE FALSE
#> [358,] FALSE FALSE FALSE
#> [359,] FALSE FALSE FALSE
#> [360,] FALSE FALSE FALSE
#> [361,] FALSE FALSE FALSE
#> [362,] FALSE FALSE FALSE
#> [363,] FALSE FALSE FALSE
#> [364,] FALSE FALSE FALSE
#> [365,] FALSE FALSE FALSE
#> [366,] FALSE FALSE FALSE
#> [367,] FALSE FALSE FALSE
#> [368,] FALSE FALSE FALSE
#> [369,] FALSE FALSE FALSE
#> [370,] FALSE FALSE FALSE
#> [371,] FALSE FALSE FALSE
#> [372,] FALSE FALSE FALSE
#> [373,] FALSE FALSE FALSE
#> [374,] FALSE FALSE FALSE
#> [375,] FALSE FALSE FALSE
#> [376,] FALSE FALSE FALSE
#> [377,] FALSE FALSE FALSE
#> [378,] FALSE FALSE FALSE
#> [379,] FALSE FALSE FALSE
#> [380,] FALSE FALSE FALSE
#> [381,] FALSE FALSE FALSE
#> [382,] FALSE FALSE FALSE
#> [383,] FALSE FALSE FALSE
#> [384,] FALSE FALSE FALSE
#> [385,] FALSE FALSE FALSE
#> [386,] FALSE FALSE FALSE
#> [387,] FALSE FALSE FALSE
#> [388,] FALSE FALSE FALSE
#> [389,] FALSE FALSE FALSE
#> [390,] FALSE FALSE FALSE
#> [391,] FALSE FALSE FALSE
#> [392,] FALSE FALSE FALSE
#> [393,] FALSE FALSE FALSE
#> [394,] FALSE FALSE FALSE
#> [395,] FALSE FALSE FALSE
#> [396,] FALSE FALSE FALSE
#> [397,] FALSE FALSE FALSE
#> [398,] FALSE FALSE FALSE
#> [399,] FALSE FALSE FALSE
#> [400,] FALSE FALSE FALSE
#> [401,] FALSE FALSE FALSE
#> [402,] FALSE FALSE FALSE
#> [403,] FALSE FALSE FALSE
#> [404,] FALSE FALSE FALSE
#> [405,] FALSE FALSE FALSE
#> [406,] FALSE FALSE FALSE
#> [407,] FALSE FALSE FALSE
#> [408,] FALSE FALSE FALSE
#> [409,] FALSE FALSE FALSE
#> [410,] FALSE FALSE FALSE
#> [411,] FALSE FALSE FALSE
#> [412,] FALSE FALSE FALSE
#> [413,] FALSE FALSE FALSE
#> [414,] FALSE FALSE FALSE
#> [415,] FALSE FALSE FALSE
#> [416,] FALSE FALSE FALSE
#> [417,] FALSE FALSE FALSE
#> [418,] FALSE FALSE FALSE
#> [419,] FALSE FALSE FALSE
#> [420,] FALSE FALSE FALSE
#> [421,] FALSE FALSE FALSE
#> [422,] FALSE FALSE FALSE
#> [423,] FALSE FALSE FALSE
#> [424,] FALSE FALSE FALSE
#> [425,] FALSE FALSE FALSE
#> [426,] FALSE FALSE FALSE
#> [427,] FALSE FALSE FALSE
#> [428,] FALSE FALSE FALSE
#> [429,] FALSE FALSE FALSE
#> [430,] FALSE FALSE FALSE
#> [431,] FALSE FALSE FALSE
#> [432,] FALSE FALSE FALSE
#> [433,] FALSE FALSE FALSE
#> [434,] FALSE FALSE FALSE
#> [435,] FALSE FALSE FALSE
#> [436,] FALSE FALSE FALSE
#> [437,] FALSE FALSE FALSE
#> [438,] FALSE FALSE FALSE
#> [439,] FALSE FALSE FALSE
#> [440,] FALSE FALSE FALSE
#> [441,] FALSE FALSE FALSE
#> [442,] FALSE FALSE FALSE
#> [443,] FALSE FALSE FALSE
#> [444,] FALSE FALSE FALSE
#> [445,] FALSE FALSE FALSE
#> [446,] FALSE FALSE FALSE
#> [447,] FALSE FALSE FALSE
#> [448,] FALSE FALSE FALSE
#> [449,] FALSE FALSE FALSE
#> [450,] FALSE FALSE FALSE
#> [451,] FALSE FALSE FALSE
#> [452,] FALSE FALSE FALSE
#> [453,] FALSE FALSE FALSE
#> [454,] FALSE FALSE FALSE
#> [455,] FALSE FALSE FALSE
#> [456,] FALSE FALSE FALSE
#> [457,] FALSE FALSE FALSE
#> [458,] FALSE FALSE FALSE
#> [459,] FALSE FALSE FALSE
#> [460,] FALSE FALSE FALSE
#> [461,] FALSE FALSE FALSE
#> [462,] FALSE FALSE FALSE
#> [463,] FALSE FALSE FALSE
#> [464,] FALSE FALSE FALSE
#> [465,] FALSE FALSE FALSE
#> [466,] FALSE FALSE FALSE
#> [467,] FALSE FALSE FALSE
#> [468,] FALSE FALSE FALSE
#> [469,] FALSE FALSE FALSE
#> [470,] FALSE FALSE FALSE
#> [471,] FALSE FALSE FALSE
#> [472,] FALSE FALSE FALSE
#> [473,] FALSE FALSE FALSE
#> [474,] FALSE FALSE FALSE
#> [475,] FALSE FALSE FALSE
#> [476,] FALSE FALSE FALSE
#> [477,] FALSE FALSE FALSE
#> [478,] FALSE FALSE FALSE
#> [479,] FALSE FALSE FALSE
#> [480,] FALSE FALSE FALSE
#> [481,] FALSE FALSE FALSE
#> [482,] FALSE FALSE FALSE
#> [483,] FALSE FALSE FALSE
#> [484,] FALSE FALSE FALSE
#> [485,] FALSE FALSE FALSE
#> [486,] FALSE FALSE FALSE
#> [487,] FALSE FALSE FALSE
#> [488,] FALSE FALSE FALSE
#> [489,] FALSE FALSE FALSE
#> [490,] FALSE FALSE FALSE
#> [491,] FALSE FALSE FALSE
#> [492,] FALSE FALSE FALSE
#> [493,] FALSE FALSE FALSE
#> [494,] FALSE FALSE FALSE
#> [495,] FALSE FALSE FALSE
#> [496,] FALSE FALSE FALSE
#> [497,] FALSE FALSE FALSE
#> [498,] FALSE FALSE FALSE
#> [499,] FALSE FALSE FALSE
#> [500,] FALSE FALSE FALSE