summaryrefslogtreecommitdiff
path: root/inst/bin/strats
blob: 13e59940edfe71013b4f19a46dde9ce2aae8725d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env Rscript

files <- commandArgs (trailingOnly = TRUE)

`%>%` <- magrittr::`%>%`

for (f in files) {
    n_train <- basename (f)
    splits <- strsplit (n_train, ".", fixed = TRUE)[[1]]
    if (length (splits) != 2) {
        cat (sprintf ("Skipping file %s.\n", f), file = stderr ())
        next
    }
    n_train <- splits[1]
    n_train <- as.numeric (rev (strsplit (n_train, "_", fixed = TRUE)[[1]])[1])
    if (is.na (n_train)) {
        cat (sprintf ("Skipping file %s.\n", f), file = stderr ())
        next
    }
    data <- as.matrix (readr::read_csv (f, col_names = FALSE))
    n <- nrow (data)
    if (ncol (data) == 1) {
        data <- cbind (data, data ^ 2, c (data[n], data[1:(n - 1)]))
    }
    data <- scale (data)
    dependency <- exp (-0.1 * 1:100)
    T_normal <- data[seq_len (n_train),, drop = FALSE]
    T <- data[n_train - 1 + seq_len (nrow (data) - n_train),, drop = FALSE]
    if (nrow (T_normal) > 1000) {
        i <- ceiling (nrow (T_normal) * ((1:1000) / 1000))
        T_normal <- T_normal[i,, drop = FALSE]
    }
    tuning <- (strats::strats_tune (T, dependency, T_normal)
        %>% dplyr::arrange (error))
    alpha <- tuning$alpha[1]
    beta <- tuning$beta[1]
    gamma <- tuning$gamma[1]
    model <- strats::strats (T, alpha, beta, gamma, dependency, T_normal)
    cat (sprintf ("%s: %s (%g, %g, %g)\n", f,
                  model$anomalies$observation[1],
                  alpha, beta, gamma))
}