nodist/timings.md

fromo timings

To prevent performance regressions, compare them here, including benchmarks against other packages:

library(fromo)
library(RollingWindow)
library(roll)
library(RcppRoll)
library(microbenchmark)
library(moments)
library(RcppParallel)
# keep this constant for comparison
setThreadOptions(numThreads = 2)

print(Sys.info())
##                                        sysname                                        release                                        version 
##                                        "Linux"                            "4.4.0-137-generic" "#163-Ubuntu SMP Mon Sep 24 13:14:43 UTC 2018" 
##                                       nodename                                        machine                                          login 
##                                 "2d2df85a7b70"                                       "x86_64"                                      "unknown" 
##                                           user                                 effective_user 
##                                       "docker"                                       "docker"
print(sessionInfo())
## R version 3.5.2 (2018-12-20)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Debian GNU/Linux buster/sid
## 
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.8.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.8.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8   
##  [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] utils   methods base   
## 
## other attached packages:
##  [1] RcppParallel_4.4.2   RcppRoll_0.3.0       roll_1.1.2           RollingWindow_0.2    microbenchmark_1.4-6 moments_0.14         dplyr_0.7.8         
##  [8] ggplot2_3.1.0        knitr_1.21           fromo_0.1.3.6796    
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.0       bindr_0.1.1      magrittr_1.5     grDevices_3.5.2  tidyselect_0.2.5 munsell_0.5.0    colorspace_1.3-2 R6_2.3.0         rlang_0.3.0.1   
## [10] stringr_1.3.1    plyr_1.8.4       tools_3.5.2      grid_3.5.2       gtable_0.2.0     xfun_0.4         withr_2.1.2      stats_3.5.2      lazyeval_0.2.1  
## [19] assertthat_0.2.0 tibble_1.4.2     crayon_1.3.4     bindrcpp_0.2.2   formatR_1.5      purrr_0.2.5      graphics_3.5.2   glue_1.3.0       evaluate_0.12   
## [28] stringi_1.2.4    compiler_3.5.2   pillar_1.3.1     scales_1.0.0     pkgconfig_2.0.2
set.seed(12345)
x <- rnorm(1e+05)
xpos <- runif(length(x)) + 1
xm <- matrix(x, ncol = 1)
xmps <- matrix(xpos, ncol = 1)
w <- runif(length(x))

dumbk <- function(x) {
    c(kurtosis(x) - 3, skewness(x), sd(x), mean(x), 
        length(x))
}

checkit <- microbenchmark(sum(x), mean(x), sd(x), skewness(x), 
    kurtosis(x), sd3(x), skew4(x), kurt5(x), dumbk(x))
print(checkit)
## Unit: microseconds
##         expr   min    lq  mean median    uq   max neval   cld
##       sum(x)    76    76    78     76    77   105   100 a    
##      mean(x)   153   154   158    155   156   249   100 a    
##        sd(x)   312   315   565    322   339 23243   100 ab   
##  skewness(x)  6867  6892  6949   6900  6946  7532   100   c  
##  kurtosis(x)  6763  6798  6991   6805  6854 19361   100   c  
##       sd3(x)   684   686   694    689   696   736   100  b   
##     skew4(x)  6701  6715  6809   6725  6779  9134   100   c  
##     kurt5(x) 12305 12333 12437  12349 12456 13447   100    d 
##     dumbk(x) 14147 14195 14596  14213 14283 31997   100     e
resdf <- checkit
gc()
##           used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 1747239   93    3.5e+06  186  2.3e+06  124
## Vcells 3588564   27    2.2e+07  168  3.4e+07  262
# weights
slow_sd <- function(x, w) {
    n0 <- length(x)
    mu <- weighted.mean(x, w = w)
    sg <- sqrt(sum(w * (x - mu)^2)/(n0 - 1))
    c(sg, mu, n0)
}
checkit <- microbenchmark(cent_moments(x, max_order = 4, 
    wts = w, na_rm = TRUE, normalize_wts = FALSE), 
    sd3(x, wts = w), slow_sd(x, w))
print(checkit)
## Unit: microseconds
##                                                                          expr   min    lq  mean median    uq   max neval cld
##  cent_moments(x, max_order = 4, wts = w, na_rm = TRUE, normalize_wts = FALSE) 14061 14257 14978  14651 15537 18682   100   c
##                                                               sd3(x, wts = w)  1007  1036  1095   1058  1133  1395   100 a  
##                                                                 slow_sd(x, w)   943  1024  1726   1757  1893  6646   100  b
resdf <- rbind(resdf, checkit)
gc()
##           used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 1748655   93    3.5e+06  186  2.3e+06  124
## Vcells 3594655   28    1.4e+07  107  3.4e+07  262
set.seed(12345)
x1 <- runif(10000)
x2 <- runif(length(x1))

checkit <- microbenchmark(as.centsums(x1, 1), as.centsums(x1, 
    2), as.centsums(x1, 3), as.centsums(x1, 4))
print(checkit)
## Unit: microseconds
##                expr  min   lq mean median   uq  max neval  cld
##  as.centsums(x1, 1)   74   75   77     77   79   84   100 a   
##  as.centsums(x1, 2)  111  113  118    116  119  274   100  b  
##  as.centsums(x1, 3)  729  735  754    749  764  914   100   c 
##  as.centsums(x1, 4) 1279 1322 1339   1330 1365 1433   100    d
resdf <- rbind(resdf, checkit)
gc()
##           used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 1749140   94    3.5e+06  186  2.3e+06  124
## Vcells 3618419   28    1.4e+07  107  3.4e+07  262
# join them together
max_ord <- 6L
obj1 <- as.centsums(x1, max_ord)
obj2 <- as.centsums(x2, max_ord)
obj3 <- as.centsums(c(x1, x2), max_ord)

checkit <- microbenchmark(c(obj1, obj2), obj3 %-% obj1)
print(checkit)
## Unit: microseconds
##           expr min lq mean median uq max neval cld
##  c(obj1, obj2)  14 15   17     15 15 190   100   b
##  obj3 %-% obj1  10 11   12     11 12  85   100  a
resdf <- rbind(resdf, checkit)
gc()
##           used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 1749819   94    3.5e+06  186  2.3e+06  124
## Vcells 3619708   28    1.4e+07  107  3.4e+07  262
max_ord <- 6L
rs1 <- cent_sums(x1, max_ord)
rs2 <- cent_sums(x2, max_ord)
rs3 <- cent_sums(c(x1, x2), max_ord)

checkit <- microbenchmark(join_cent_sums(rs1, rs2), 
    unjoin_cent_sums(rs3, rs2), unjoin_cent_sums(rs3, 
        rs1))
print(checkit)
## Unit: microseconds
##                        expr min  lq mean median  uq  max neval cld
##    join_cent_sums(rs1, rs2) 2.1 2.1  2.4    2.2 2.4 19.1   100   a
##  unjoin_cent_sums(rs3, rs2) 2.0 2.1  2.2    2.2 2.3  2.9   100   a
##  unjoin_cent_sums(rs3, rs1) 2.0 2.1  2.2    2.2 2.3  5.7   100   a
resdf <- rbind(resdf, checkit)
gc()
##           used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 1749898   94    3.5e+06  186  2.3e+06  124
## Vcells 3620471   28    1.4e+07  107  3.4e+07  262
set.seed(54321)
x1 <- matrix(rnorm(100 * 4), ncol = 4)
x2 <- matrix(rnorm(100 * 4), ncol = 4)

max_ord <- 2L

# join them together
mobj1 <- as.centcosums(x1, max_ord)
mobj2 <- as.centcosums(x2, max_ord)
mobj3 <- as.centcosums(rbind(x1, x2), max_ord)
alt3 <- c(mobj1, mobj2)
# unjoin them, with this one weird operator:
alt2 <- mobj3 %-% mobj1
alt1 <- mobj3 %-% mobj2

checkit <- microbenchmark(as.centcosums(x1, max_ord), 
    mobj3 %-% mobj1)
print(checkit)
## Unit: microseconds
##                        expr min lq mean median uq max neval cld
##  as.centcosums(x1, max_ord)  55 58   60     58 59 170   100   b
##             mobj3 %-% mobj1  17 18   19     18 19  34   100  a
resdf <- rbind(resdf, checkit)
gc()
##           used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 1750017   94    3.5e+06  186  2.3e+06  124
## Vcells 3601115   28    1.4e+07  107  3.4e+07  262
set.seed(4422)
x <- rnorm(10000)
xpos <- runif(length(x)) + 1
xm <- matrix(x, ncol = 1)
xmps <- matrix(xpos, ncol = 1)
w <- runif(length(x))

dumb_zscore <- function(x, window) {
    altz <- sapply(seq_along(x), function(iii) {
        rowi <- max(1, iii - window + 1)
        xrang <- x[rowi:iii]
        (x[iii] - mean(xrang))/sd(xrang)
    }, simplify = TRUE)
}

# run fun on each wins sized window...
silly_fun <- function(x, wins, fun, ...) {
    xout <- rep(NA, length(x))
    for (iii in seq_along(x)) {
        xout[iii] <- fun(x[max(1, iii - wins + 1):iii], 
            ...)
    }
    xout
}

wins <- 250

checkit <- microbenchmark(silly_fun(x, wins, sum, na.rm = FALSE), 
    silly_fun(x, wins, mean, na.rm = FALSE), running_sum(x, 
        wins), running_mean(x, wins), roll::roll_sum(xm, 
        wins), roll::roll_mean(xm, wins), roll::roll_sd(xm, 
        wins), RollingWindow::RollingSum(x, wins, na_method = "ignore"), 
    RollingWindow::RollingSum(x, wins), RollingWindow::RollingMean(x, 
        wins), RollingWindow::RollingStd(x, wins), 
    RcppRoll::roll_sum(xm, n = wins, align = "right", 
        fill = NA), RcppRoll::roll_mean(xm, n = wins, 
        align = "right", fill = NA), RcppRoll::roll_sd(xm, 
        n = wins, align = "right", fill = NA), running_sd(x, 
        wins, na_rm = FALSE, restart_period = 50000L), 
    running_sd(x, wins, na_rm = TRUE, restart_period = 1000L), 
    running_sd3(x, wins), running_skew(x, wins), running_skew4(x, 
        wins), running_kurt(x, wins), running_kurt5(x, 
        wins), running_tstat(x, wins), running_zscored(x, 
        wins), running_sharpe(x, wins), running_apx_median(x, 
        wins), running_centered(x, wins), running_scaled(x, 
        wins))
print(checkit)
## Unit: microseconds
##                                                           expr   min    lq  mean median    uq    max neval     cld
##                         silly_fun(x, wins, sum, na.rm = FALSE) 17074 18585 23216  20422 25782 118441   100      f 
##                        silly_fun(x, wins, mean, na.rm = FALSE) 45077 48352 52609  51511 55202  78306   100       g
##                                           running_sum(x, wins)    72    78   150     82    88   6792   100 a      
##                                          running_mean(x, wins)    69    76    82     78    86    123   100 a      
##                                       roll::roll_sum(xm, wins)    94   111   136    123   146    591   100 a      
##                                      roll::roll_mean(xm, wins)   102   117   139    135   156    203   100 a      
##                                        roll::roll_sd(xm, wins)   360   404   442    433   468    651   100 a      
##       RollingWindow::RollingSum(x, wins, na_method = "ignore")   251   280   381    301   328   7353   100 a      
##                             RollingWindow::RollingSum(x, wins)   113   135   220    155   185   6095   100 a      
##                            RollingWindow::RollingMean(x, wins)   146   167   251    183   217   5747   100 a      
##                             RollingWindow::RollingStd(x, wins)   228   260   287    280   311    364   100 a      
##   RcppRoll::roll_sum(xm, n = wins, align = "right", fill = NA)  1645  1741  1864   1833  1944   2720   100  b     
##  RcppRoll::roll_mean(xm, n = wins, align = "right", fill = NA)  1649  1742  1854   1809  1945   2686   100  b     
##    RcppRoll::roll_sd(xm, n = wins, align = "right", fill = NA)  7964  8422  9973   8737  9353  17622   100    d   
##    running_sd(x, wins, na_rm = FALSE, restart_period = 50000L)   118   126   134    133   140    171   100 a      
##      running_sd(x, wins, na_rm = TRUE, restart_period = 1000L)   147   154   165    162   172    219   100 a      
##                                           running_sd3(x, wins)   302   320   398    332   347   6436   100 a      
##                                          running_skew(x, wins)  5068  5228  5516   5370  5743   7533   100   c    
##                                         running_skew4(x, wins)  5109  5359  5574   5522  5839   7166   100   c    
##                                          running_kurt(x, wins)  8217  8566  9025   8791  9352  15300   100    d   
##                                         running_kurt5(x, wins)  8758  9105  9555   9383  9952  13361   100    d   
##                                         running_tstat(x, wins)   357   378   397    392   413    470   100 a      
##                                       running_zscored(x, wins)   325   342   363    354   375    515   100 a      
##                                        running_sharpe(x, wins)   325   341   362    358   377    463   100 a      
##                                    running_apx_median(x, wins) 17657 18354 19319  19005 20045  25674   100     e  
##                                      running_centered(x, wins)  1095  1153  1210   1187  1278   1584   100 ab     
##                                        running_scaled(x, wins)   321   338   360    354   374    476   100 a
resdf <- rbind(resdf, checkit)
gc()
##           used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 1757929   94    3.5e+06  186  3.5e+06  186
## Vcells 3181449   24    1.4e+07  107  3.4e+07  262
library(readr)
FAKE_IT <- FALSE
if (FAKE_IT) {
    resdf <- readr::read_csv("timings.csv")
    # print(resdf)
} else {
    readr::write_csv(resdf, "timings.csv")
}

performance regressions?

Can we see them here? load all the timing data to check.

library(magrittr)
library(dplyr)
library(readr)
library(tidyr)
library(knitr)

mysernum <- as.character(packageVersion("fromo"))
allt <- data.frame(fname = dir(".", "*.csv"), stringsAsFactors = FALSE) %>% 
    dplyr::filter(grepl("^timings_\\d.+\\d+.csv$", 
        fname)) %>% group_by(fname) %>% mutate(tims = list(readr::read_csv(fname))) %>% 
    ungroup() %>% tidyr::unnest() %>% mutate(sernum = gsub("^timings_(.+).csv$", 
    "\\1", fname)) %>% dplyr::select(-fname) %>% rbind(resdf %>% 
    dplyr::mutate(sernum = mysernum)) %>% group_by(sernum, 
    expr) %>% summarize(meantime = mean(time, na.rm = TRUE)) %>% 
    ungroup() %>% group_by(sernum) %>% mutate(sumx_time = median(ifelse(grepl("^sum\\(x\\)$", 
    expr), meantime, NA), na.rm = TRUE)) %>% ungroup() %>% 
    mutate(normalized = meantime/sumx_time) %>% arrange(sernum) %>% 
    group_by(expr) %>% mutate(first_norm = first(normalized), 
    last_norm = last(normalized)) %>% ungroup() %>% 
    mutate(relchange = normalized/first_norm, last_status = last_norm/first_norm) %>% 
    mutate(exgrp = ifelse(grepl("^(roll|RollingWindow|RcppRoll)::", 
        expr), "brand_x", ifelse(grepl("^running_", 
        expr), "running", "summarizing")))

library(ggplot2)
ph <- allt %>% dplyr::filter(!grepl("brand_x", exgrp)) %>% 
    ggplot(aes(sernum, normalized, group = expr, color = expr)) + 
    geom_line() + geom_point() + scale_y_log10() + 
    guides(colour = FALSE) + theme(axis.text.x = element_text(angle = -90, 
    hjust = 0)) + facet_grid(exgrp ~ ., scales = "free") + 
    labs(x = "release", y = "mean time taken, relative to sum(x)", 
        title = "fromo microbenchmark timings, lasagna")
print(ph)

plot of chunk all_timing_stats

ph <- allt %>% dplyr::filter(!grepl("brand_x", exgrp)) %>% 
    ggplot(aes(sernum, relchange, group = expr, color = expr)) + 
    geom_line() + geom_point() + scale_y_log10() + 
    guides(colour = FALSE) + theme(axis.text.x = element_text(angle = -90, 
    hjust = 0)) + facet_grid(exgrp ~ ., scales = "free") + 
    labs(x = "release", y = "normalized time taken, relative to first iteration", 
        title = "fromo microbenchmark timings, spaghetti")
print(ph)

plot of chunk all_timing_stats

ph <- allt %>% dplyr::filter(!grepl("brand_x", exgrp)) %>% 
    ggplot(aes(sernum, relchange)) + geom_boxplot(aes(group = sernum), 
    alpha = 0.7) + stat_summary(aes(group = "1", color = "mean"), 
    fun.y = mean, geom = "line") + scale_y_log10() + 
    theme(axis.text.x = element_text(angle = -90, hjust = 0)) + 
    facet_grid(exgrp ~ ., scales = "free") + labs(x = "release", 
    y = "normalized time taken, relative to first iteration", 
    color = "stat", title = "fromo microbenchmark timings, boxplots")
print(ph)

plot of chunk all_timing_stats

allt %>% dplyr::filter(!grepl("brand_x", exgrp)) %>% 
    select(expr, sernum, relchange, last_status) %>% 
    tidyr::spread(key = "sernum", value = "relchange") %>% 
    arrange(desc(last_status)) %>% select(-last_status) %>% 
    head(n = 50) %>% kable()

|expr | 0.1.3.3001| 0.1.3.3200| 0.1.3.3330| 0.1.3.3400| 0.1.3.4000| 0.1.3.4100| 0.1.3.4200| 0.1.3.4300| 0.1.3.4400| 0.1.3.4500| 0.1.3.4510| 0.1.3.5000| 0.1.3.5010| 0.1.3.5020| 0.1.3.6000| 0.1.3.6100| 0.1.3.6200| 0.1.3.6300| 0.1.3.6500| 0.1.3.6510| 0.1.3.6520| 0.1.3.6530| 0.1.3.6540| 0.1.3.6550| 0.1.3.6560| 0.1.3.6600| 0.1.3.6660| 0.1.3.6661| 0.1.3.6662| 0.1.3.6665| 0.1.3.6666| 0.1.3.6667| 0.1.3.6668| 0.1.3.6701| 0.1.3.6704| 0.1.3.6790| 0.1.3.6793| 0.1.3.6794| 0.1.3.6796| |:----------------------------------------------------------------------------|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:| |running_sum(x, wins) | 1| NA| NA| NA| 2.72| 2.18| 1.95| NA| 2.02| 2.53| 2.74| 2.45| 3.23| 3.72| 2.50| 2.70| 2.74| 2.74| 2.79| 2.74| 2.76| 2.76| 2.84| 2.70| 2.77| 3.31| 2.76| 2.74| 3.29| 3.14| 2.80| 3.10| 2.85| 3.17| 2.78| 1.96| 2.10| 2.02| 3.83| |running_centered(x, wins) | 1| 0.93| 0.91| 0.91| 1.01| 0.98| 0.92| NA| 0.94| 0.84| 0.91| 0.87| 1.08| 1.06| 0.94| 1.04| 0.95| 0.95| 1.56| 1.61| 1.94| 1.86| 2.03| 2.05| 2.02| 2.04| 1.96| 1.89| 1.82| 1.94| 2.03| 1.83| 1.80| 0.99| 1.45| 1.58| 1.74| 1.66| 2.03| |running_skew(x, wins) | NA| NA| NA| NA| NA| 1.00| 1.09| NA| 1.16| 1.05| 1.18| 1.04| 1.17| 1.18| 1.05| 1.18| 1.13| 1.13| 1.29| 1.29| 1.36| 1.35| 1.39| 1.38| 1.34| 1.39| 1.93| 1.93| 1.72| 1.75| 1.70| 1.19| 1.17| 1.04| 1.43| 1.60| 1.68| 1.65| 1.79| |running_kurt(x, wins) | NA| NA| NA| NA| NA| 1.00| 0.91| NA| 0.97| 0.85| 0.95| 0.86| 0.97| 0.96| 0.86| 0.96| 0.92| 0.92| 1.05| 1.02| 1.06| 1.08| 1.09| 1.08| 1.06| 1.09| 1.04| 1.03| 0.97| 0.95| 0.93| 0.95| 0.92| 0.86| 1.26| 1.43| 1.50| 1.43| 1.65| |running_kurt5(x, wins) | 1| 0.94| 0.91| 0.91| 1.01| 1.03| 0.93| NA| 1.00| 0.90| 0.98| 0.89| 1.13| 1.13| 1.01| 1.13| 1.09| 1.09| 1.13| 1.11| 1.11| 1.12| 1.09| 1.09| 1.10| 1.12| 1.05| 1.05| 0.96| 0.94| 0.92| 0.97| 0.94| 0.88| 1.26| 1.41| 1.45| 1.45| 1.61| |running_skew4(x, wins) | 1| 0.94| 0.89| 0.89| 1.02| 1.03| 0.92| NA| 0.97| 0.87| 0.96| 0.86| 1.17| 1.18| 1.04| 1.17| 1.13| 1.13| 1.15| 1.13| 1.16| 1.19| 1.19| 1.16| 1.13| 1.17| 1.62| 1.61| 1.41| 1.45| 1.40| 0.99| 0.98| 0.87| 1.18| 1.34| 1.40| 1.36| 1.49| |running_apx_median(x, wins) | 1| 0.92| 0.90| 0.90| 1.06| 1.09| 0.93| NA| 1.00| 0.89| 1.00| 0.88| 1.05| 1.05| 0.93| 1.05| 1.02| 1.02| 1.04| 1.00| 1.02| 1.03| 1.01| 1.01| 1.01| 1.04| 1.01| 1.01| 1.01| 1.08| 0.99| 1.08| 1.06| 1.06| 1.14| 1.25| 1.31| 1.27| 1.39| |sd(x) | 1| 1.02| 1.01| 1.01| 1.01| 1.01| 1.03| 0.99| 1.01| 1.02| 1.00| 1.02| 1.02| 1.02| 1.04| 1.02| 0.69| 0.69| 1.01| 0.99| 0.99| 1.00| 1.30| 1.49| 0.99| 1.04| 1.00| 1.03| 0.77| 0.75| 0.78| 0.73| 0.95| 0.75| 0.79| 0.74| 0.78| 0.74| 1.25| |sd3(x, wts = w) | 1| 0.94| 0.94| 0.94| 0.96| 0.97| 0.90| 0.90| 0.95| 0.90| 0.97| 0.83| 1.63| 1.56| 1.50| 1.54| 1.07| 1.07| 1.07| 1.05| 1.04| 1.06| 1.03| 1.10| 1.05| 0.97| 0.97| 0.92| 0.96| 0.94| 0.86| 0.93| 0.78| 0.81| 0.71| 0.79| 0.81| 0.79| 1.08| |as.centcosums(x1, max_ord) | 1| 0.93| 1.02| 1.02| 0.96| 1.24| 0.98| 1.02| 0.98| 0.87| 1.13| 0.85| 1.12| 1.16| 0.83| 0.93| 0.92| 0.92| 1.06| 0.91| 1.07| 0.93| 0.94| 0.96| 0.98| 0.95| 1.00| 0.86| 0.87| 0.91| 0.91| 0.92| 0.93| 0.88| 0.78| 0.91| 0.99| 0.92| 1.03| |sum(x) | 1| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| |mean(x) | 1| 1.02| 1.00| 1.00| 1.01| 1.01| 1.01| 1.01| 1.01| 1.06| 0.97| 1.03| 1.02| 1.00| 1.05| 1.02| 1.00| 1.00| 1.00| 0.98| 0.98| 0.99| 1.02| 1.01| 0.98| 1.01| 0.97| 1.02| 1.00| 1.01| 1.03| 0.97| 0.99| 1.00| 1.01| 0.98| 1.02| 0.98| 0.99| |unjoin_cent_sums(rs3, rs1) | 1| 1.21| 0.97| 0.97| 0.91| 1.34| 0.88| 0.99| 0.97| 0.99| 0.98| 0.85| 1.10| 1.19| 0.99| 1.11| 1.09| 1.09| 1.08| 1.04| 0.94| 1.05| 0.92| 1.20| 1.12| 1.00| 1.03| 0.90| 1.08| 0.99| 1.22| 1.00| 1.01| 1.06| 0.91| 0.96| 1.15| 1.00| 0.98| |join_cent_sums(rs1, rs2) | 1| 1.12| 0.96| 0.96| 1.02| 1.25| 1.12| 0.97| 1.10| 1.03| 1.05| 0.93| 1.02| 1.14| 1.01| 1.11| 1.16| 1.16| 1.11| 1.03| 1.13| 1.04| 1.06| 1.25| 1.05| 1.08| 1.15| 1.05| 1.16| 0.97| 1.18| 1.02| 1.03| 1.09| 0.90| 0.98| 1.11| 0.99| 0.98| |cent_moments(x, max_order = 4, wts = w, na_rm = TRUE, normalize_wts = FALSE) | 1| 0.93| 0.94| 0.94| 1.01| 1.07| 0.96| 0.95| 1.02| 0.96| 1.06| 0.91| 1.04| 1.01| 0.97| 1.00| 0.96| 0.96| 1.02| 1.00| 1.01| 1.03| 0.98| 1.04| 1.01| 1.03| 1.03| 1.00| 0.90| 0.86| 0.79| 0.86| 0.84| 0.87| 0.78| 0.87| 0.89| 0.86| 0.96| |mobj3 %-% mobj1 | 1| 0.93| 1.03| 1.03| 0.97| 1.30| 0.95| 1.04| 0.98| 0.88| 1.17| 0.83| 1.12| 1.14| 0.88| 0.89| 0.93| 0.93| 1.05| 0.91| 1.05| 0.92| 0.94| 0.99| 1.03| 0.93| 0.98| 0.84| 0.82| 0.89| 0.86| 0.86| 0.88| 0.83| 0.77| 0.84| 0.90| 0.85| 0.94| |kurt5(x) | 1| 1.02| 1.00| 1.00| 1.09| 1.10| 1.07| 1.06| 1.12| 1.09| 1.08| 1.08| 1.15| 1.16| 1.12| 1.14| 1.09| 1.09| 1.15| 1.12| 1.11| 1.12| 1.11| 1.14| 1.12| 1.14| 1.05| 1.04| 0.95| 0.92| 0.88| 0.98| 0.97| 0.99| 0.95| 0.98| 1.00| 0.96| 0.93| |kurtosis(x) | 1| 1.00| 1.00| 1.00| 1.06| 1.06| 1.03| 1.00| 1.05| 1.04| 1.03| 1.03| 1.04| 1.07| 1.04| 1.04| 1.04| 1.04| 1.05| 1.03| 1.01| 1.03| 1.06| 1.09| 1.05| 1.06| 1.05| 1.02| 0.92| 0.91| 0.90| 0.92| 0.92| 0.93| 0.95| 0.92| 0.95| 0.92| 0.91| |skew4(x) | 1| 1.01| 1.01| 1.01| 1.07| 1.07| 1.06| 1.05| 1.10| 1.08| 1.07| 1.09| 1.14| 1.14| 1.12| 1.13| 1.09| 1.09| 1.16| 1.14| 1.13| 1.13| 1.15| 1.16| 1.12| 1.15| 1.77| 1.76| 1.59| 1.55| 1.51| 1.01| 1.00| 1.01| 0.98| 1.00| 1.03| 0.99| 0.90| |dumbk(x) | 1| 1.03| 1.01| 1.01| 1.04| 1.04| 1.01| 0.99| 1.04| 1.02| 1.02| 1.02| 1.04| 1.04| 1.03| 1.03| 0.96| 0.96| 1.04| 1.02| 1.02| 1.02| 1.02| 1.04| 1.02| 1.05| 1.03| 1.02| 0.89| 0.89| 0.89| 0.89| 0.89| 0.90| 0.89| 0.90| 0.92| 0.89| 0.90| |skewness(x) | 1| 1.00| 1.00| 1.00| 1.06| 1.07| 1.04| 1.01| 1.06| 1.05| 1.03| 1.03| 1.06| 1.08| 1.06| 1.05| 0.98| 0.98| 1.08| 1.03| 1.03| 1.04| 1.04| 1.06| 1.03| 1.06| 1.04| 1.03| 0.90| 0.89| 0.88| 0.90| 0.89| 0.90| 0.88| 0.90| 0.92| 0.88| 0.89| |c(obj1, obj2) | 1| 1.29| 0.97| 0.97| 0.93| 0.98| 1.04| 0.87| 0.95| 0.85| 0.85| 0.81| 0.89| 0.88| 0.83| 0.96| 0.93| 0.93| 0.88| 1.01| 0.87| 0.91| 0.92| 0.90| 0.91| 1.01| 1.03| 0.94| 0.87| 0.89| 1.37| 0.90| 0.90| 0.92| 0.80| 0.84| 0.92| 0.87| 0.87| |as.centsums(x1, 4) | 1| 0.84| 0.86| 0.86| 0.92| 0.99| 0.91| 0.89| 0.93| 0.86| 0.90| 0.84| 0.95| 0.95| 0.96| 0.95| 0.92| 0.92| 0.96| 0.96| 0.97| 0.98| 1.00| 0.91| 0.97| 0.94| 0.93| 0.90| 0.82| 0.80| 0.70| 0.84| 0.84| 0.85| 0.75| 0.84| 0.83| 0.87| 0.85| |unjoin_cent_sums(rs3, rs2) | 1| 0.86| 0.75| 0.75| 0.87| 1.05| 0.95| 0.77| 0.78| 0.82| 0.84| 0.73| 0.81| 0.99| 0.78| 0.92| 0.93| 0.93| 0.86| 0.86| 0.81| 0.87| 0.84| 1.03| 0.83| 0.88| 1.05| 0.82| 0.92| 0.84| 1.08| 0.87| 0.83| 0.91| 0.72| 0.83| 0.92| 0.85| 0.85| |sd3(x) | 1| 1.03| 1.01| 1.01| 1.03| 1.03| 1.02| 1.00| 1.02| 1.01| 0.99| 1.00| 1.77| 1.80| 1.71| 1.76| 1.34| 1.34| 1.33| 1.30| 1.31| 1.31| 1.31| 1.35| 1.01| 1.01| 1.00| 0.99| 1.00| 0.98| 0.97| 1.00| 0.80| 0.83| 0.76| 0.82| 0.83| 0.81| 0.85| |obj3 %-% obj1 | 1| 1.53| 0.96| 0.96| 0.91| 0.97| 1.00| 0.87| 1.00| 0.85| 0.85| 0.79| 0.92| 0.95| 0.90| 0.90| 0.96| 0.96| 0.97| 1.02| 0.92| 0.91| 0.83| 0.90| 0.91| 0.98| 1.04| 0.86| 0.87| 0.89| 1.41| 0.88| 0.92| 0.89| 0.78| 0.84| 0.91| 0.86| 0.85| |as.centsums(x1, 2) | 1| 0.82| 0.81| 0.81| 0.81| 0.88| 0.80| 0.78| 0.81| 0.77| 0.78| 0.72| 1.38| 1.38| 1.41| 1.38| 0.98| 0.98| 0.99| 0.98| 0.99| 1.02| 0.99| 0.94| 0.83| 0.82| 0.83| 0.78| 0.79| 0.80| 0.71| 0.79| 0.80| 0.79| 0.72| 0.80| 0.78| 0.81| 0.83| |as.centsums(x1, 3) | 1| 0.85| 0.86| 0.86| 0.91| 0.96| 0.89| 0.87| 0.92| 0.84| 0.89| 0.83| 0.95| 0.95| 0.96| 0.94| 0.91| 0.91| 0.99| 0.97| 0.99| 1.00| 1.00| 0.93| 0.97| 0.96| 1.54| 1.46| 1.35| 1.31| 1.17| 0.84| 0.83| 0.83| 0.75| 0.84| 0.82| 0.85| 0.82| |silly_fun(x, wins, mean, na.rm = FALSE) | 1| 0.91| 0.89| 0.89| 0.94| 0.94| 0.88| NA| 0.92| 0.82| 0.90| 0.80| 0.92| 0.88| 0.79| 0.88| 0.76| 0.76| 0.88| 0.88| 0.87| 0.89| 0.88| 0.87| 0.89| 0.92| 0.86| 0.90| 0.66| 0.71| 0.59| 0.67| 0.64| 0.65| 0.59| 0.65| 0.66| 0.66| 0.72| |running_sum(x, wins, robust = FALSE) | NA| 1.00| 0.66| 0.66| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| |silly_fun(x, wins, sum, na.rm = FALSE) | 1| 0.92| 0.90| 0.90| 0.90| 0.90| 0.82| NA| 0.87| 0.77| 0.87| 0.76| 0.86| 0.88| 0.76| 0.83| 0.67| 0.67| 0.86| 0.84| 0.84| 0.85| 0.87| 0.86| 0.84| 0.86| 0.82| 0.86| 0.49| 0.60| 0.49| 0.54| 0.53| 0.53| 0.46| 0.51| 0.56| 0.55| 0.60| |running_sd3(x, wins) | NA| NA| NA| NA| 1.00| 1.04| 0.86| NA| 0.95| 0.78| 0.88| 0.80| 2.14| 2.03| 1.88| 2.05| 2.03| 2.03| 1.56| 1.46| 1.85| 1.60| 1.76| 1.69| 1.44| 1.59| 1.43| 1.35| 1.47| 1.47| 1.22| 1.33| 1.23| 0.53| 0.40| 0.46| 0.47| 0.46| 0.59| |running_tstat(x, wins) | 1| 0.92| 0.94| 0.94| 0.99| 1.01| 0.82| NA| 0.86| 0.80| 0.90| 0.76| 1.23| 1.23| 1.10| 1.14| 1.18| 1.18| 1.13| 1.13| 1.43| 1.50| 1.48| 1.44| 1.33| 1.28| 1.28| 1.35| 1.19| 1.38| 1.16| 1.31| 1.21| 0.55| 0.44| 0.50| 0.52| 0.51| 0.55| |running_scaled(x, wins) | 1| 0.94| 0.91| 0.91| 0.98| 1.03| 0.88| NA| 0.92| 0.79| 0.88| 0.79| 1.19| 1.19| 1.08| 1.19| 1.15| 1.15| 1.15| 1.15| 1.53| 1.47| 1.48| 1.53| 1.27| 1.40| 1.31| 1.31| 1.14| 1.25| 1.09| 1.20| 1.12| 0.72| 0.41| 0.46| 0.48| 0.47| 0.51| |running_sharpe(x, wins) | 1| 0.99| 0.90| 0.90| 0.98| 1.02| 0.84| NA| 0.90| 0.79| 0.88| 0.77| 1.20| 1.19| 1.05| 1.11| 1.13| 1.13| 1.11| 1.08| 1.55| 1.42| 1.40| 1.44| 1.28| 1.31| 1.29| 1.34| 1.12| 1.29| 1.11| 1.26| 1.19| 0.52| 0.40| 0.45| 0.47| 0.46| 0.51| |running_zscored(x, wins) | 1| 0.90| 0.88| 0.88| 1.01| 0.98| 0.80| NA| 0.89| 0.77| 0.84| 0.78| 1.20| 1.17| 1.02| 1.14| 1.10| 1.10| 1.15| 1.09| 1.47| 1.41| 1.44| 1.42| 1.28| 1.29| 1.25| 1.26| 1.09| 1.29| 1.07| 1.20| 1.12| 0.51| 0.39| 0.44| 0.47| 0.44| 0.49| |running_sum(x, wins, robust = TRUE) | NA| 1.00| 0.48| 0.48| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| NA| |slow_sd(x, w) | 1| 0.94| 0.89| 0.89| 0.47| 0.49| 0.48| 0.47| 0.48| 0.47| 0.55| 0.44| 0.48| 0.47| 0.49| 0.46| 0.54| 0.54| 0.48| 0.47| 0.46| 0.46| 0.45| 0.49| 0.46| 0.49| 0.47| 0.46| 0.42| 0.41| 0.39| 0.39| 0.40| 0.40| 0.37| 0.40| 0.43| 0.41| 0.45| |running_mean(x, wins) | 1| 0.92| 0.59| 0.59| 0.46| 0.47| 0.53| NA| 0.56| 0.66| 0.72| 0.52| 0.59| 0.59| 0.53| 0.70| 0.59| 0.59| 0.81| 0.77| 0.60| 0.71| 0.63| 0.70| 0.59| 0.62| 0.71| 0.60| 0.60| 0.64| 0.54| 0.60| 0.59| 0.60| 0.53| 0.80| 1.14| 0.82| 0.45| |as.centsums(x1, 1) | 1| 0.81| 0.82| 0.82| 0.85| 0.92| 0.85| 0.81| 0.87| 0.83| 0.85| 0.77| 0.87| 0.85| 0.93| 0.87| 0.35| 0.35| 0.36| 0.35| 0.36| 0.36| 0.36| 0.34| 0.35| 0.36| 0.35| 0.34| 0.34| 0.34| 0.31| 0.34| 0.34| 0.34| 0.30| 0.34| 0.33| 0.35| 0.35| |running_sd(x, wins, na_rm = TRUE, restart_period = 1000L) | NA| NA| NA| NA| 1.00| 1.03| 0.87| NA| 0.87| 0.76| 0.87| 0.75| 1.17| 1.08| 1.07| 0.96| 0.89| 0.89| 1.20| 1.24| 1.69| 1.79| 1.71| 1.64| 1.51| 1.52| 1.48| 1.61| 1.24| 1.41| 1.20| 1.31| 1.29| 0.43| 0.29| 2.34| 2.49| 2.49| 0.34| |running_sd(x, wins, na_rm = FALSE, restart_period = 50000L) | NA| NA| NA| NA| 1.00| 1.03| 0.86| NA| 0.90| 0.85| 0.92| 0.83| 1.07| 1.06| 1.07| 1.02| 1.00| 1.00| 1.30| 1.35| 1.94| 2.04| 1.90| 1.90| 1.77| 1.74| 1.73| 1.81| 1.50| 1.71| 1.43| 1.55| 1.52| 0.42| 0.28| 0.31| 0.33| 0.32| 0.33|

allt %>% dplyr::filter(!grepl("brand_x", exgrp)) %>% 
    select(-sernum, -relchange, -meantime, -sumx_time, 
        -normalized) %>% distinct(expr, .keep_all = TRUE) %>% 
    arrange(desc(last_status)) %>% head(n = 20) %>% 
    kable()

|expr | first_norm| last_norm| last_status|exgrp | |:----------------------------------------------------------------------------|----------:|---------:|-----------:|:-----------| |running_sum(x, wins) | 0.51| 1.94| 3.83|running | |running_centered(x, wins) | 7.68| 15.58| 2.03|running | |running_skew(x, wins) | 39.66| 71.05| 1.79|running | |running_kurt(x, wins) | 70.61| 116.25| 1.65|running | |running_kurt5(x, wins) | 76.25| 123.07| 1.61|running | |running_skew4(x, wins) | 48.07| 71.80| 1.49|running | |running_apx_median(x, wins) | 179.28| 248.85| 1.39|running | |sd(x) | 5.82| 7.27| 1.25|summarizing | |sd3(x, wts = w) | 13.06| 14.10| 1.08|summarizing | |as.centcosums(x1, max_ord) | 0.75| 0.77| 1.03|summarizing | |sum(x) | 1.00| 1.00| 1.00|summarizing | |mean(x) | 2.07| 2.04| 0.99|summarizing | |unjoin_cent_sums(rs3, rs1) | 0.03| 0.03| 0.98|summarizing | |join_cent_sums(rs1, rs2) | 0.03| 0.03| 0.98|summarizing | |cent_moments(x, max_order = 4, wts = w, na_rm = TRUE, normalize_wts = FALSE) | 200.65| 192.94| 0.96|summarizing | |mobj3 %-% mobj1 | 0.26| 0.24| 0.94|summarizing | |kurt5(x) | 173.12| 160.21| 0.93|summarizing | |kurtosis(x) | 98.46| 90.06| 0.91|summarizing | |skew4(x) | 97.66| 87.71| 0.90|summarizing | |dumbk(x) | 209.85| 188.01| 0.90|summarizing |



shabbychef/fromo documentation built on April 11, 2021, 11:03 p.m.