tests/testthat/test-TURN.R

context("TURN calculations")


test_that("check calc_TURN", {

    l <- calc_TURN(TUR_dat, return_means = TRUE)
    national_turn <- l$df

    # make sure not creating all NAs--test only applies if test
    # dataset doesn't have NAs
    expect_equal(sum(is.na(national_turn$Y_prime_3wma)), 0)

    # Y_prime means should all be the same
    test1 <- national_turn %>%
        filter(!InstrumentVersion %in% c("all", "all_adj")) %>%
            group_by(InstrumentVersion) %>%
            summarize(mean = mean(Y_prime, na.rm = TRUE))

    expect_equal(min(test1$mean), max(test1$mean))

    means <- l$means
    # putting gap in date
    state_turn <- calc_TURN(TUR_dat[TUR_dat$date != "2018-01-01", ],
                            vars(InstrumentVersion, Region),
                           site_info = get_site_info(rp_raw),
                           means = means)
    # running this because arrange_epidate has built in check for
    # consecutive dates
    state_turn %>%
        group_by(InstrumentVersion, Region) %>%
        arrange_epidate()

    # really more of a check on arrange_epidate
    expect_error(state_turn %>%
                     filter(lubridate::month(epidate) != 5) %>%
                     group_by(InstrumentVersion, Region) %>%
                     arrange_epidate())

    # missing dates shouldn't cause problems
    test <- TUR_dat %>% filter(!date %in% c(max(date) - (7:25))) %>%
        calc_TURN() %>%
        filter(Y > 0, is.na(Y_prime_3wma))

    expect_equal(nrow(test), 0)

})


# calc_path_TURN -------------------------------------------------------------


test_that("check calc_path_TURN", {

    # list of national turn and means by instrument (means should be
    #    calculated at national level)
    national_list <- calc_TURN(TUR_dat, return_means = TRUE)
    means <- national_list$means
    # national TURN
    TURN_national <- national_list$df

    # regional (state) TURN
    site_info <- get_site_info(rp_raw)
    TURN_region <- calc_TURN(TUR_dat,
                             group_vars = vars(InstrumentVersion, Region),
                             site_info = site_info,
                             means = means)

    # calculate TURN for each pathogen -- national
    path_TURN_national <- calc_path_TURN(df = path_dat,
                   TURN_df = TURN_national,
                   means = means)

    # calculate TURN for each pathogen -- national
    path_TURN_region <- calc_path_TURN(df = path_dat,
                   TURN_df = TURN_region,
                   means = means,
                   group_vars = vars(InstrumentVersion, Region),
                   site_info = site_info,
                   run_check = TRUE)

    # no co-detections
    path_dat_ncd <- pre_process(rp_raw) %>%
        calc_count_by_site_inst()

    # should run
    path_TURN_region_ncd <- calc_path_TURN(df = path_dat_ncd,
                                       TURN_df = TURN_region,
                                       means = means,
                                       group_vars = vars(InstrumentVersion, Region),
                                       site_info = site_info,
                                       run_check = FALSE)

    # when no co-detections should throw error
    expect_error(calc_path_TURN(df = path_dat_ncd,
                                 TURN_df = TURN_region,
                                 means = means,
                                 group_vars = vars(InstrumentVersion, Region),
                                 site_info = site_info,
                                 run_check = TRUE))
    # creating a month when there is data for 'all' but not for specific
    # instrument versions
    path_dat2 <- path_dat %>%
        filter(!(InstrumentVersion %in% c("FA2.0", "Torch") & date > "2018-01-01"),
               !(InstrumentVersion =="FA1.5" & date < "2018-02-01"))

    expect_error(calc_path_TURN(df = path_dat2,
                                TURN_df = TURN_region,
                                means = means,
                                group_vars = vars(InstrumentVersion, Region),
                                site_info = site_info))

    # shouldn't throw an error
    calc_path_TURN(df = path_dat2,
                   TURN_df = TURN_region,
                   means = means,
                   group_vars = vars(InstrumentVersion, Region),
                   site_info = site_info,
                   add_path_dates = TRUE)

    # expect error b/ some instrument versions removed for some dates for
    # path data
    expect_error(calc_path_TURN(df = path_dat2,
                                TURN_df = TURN_region,
                                means = means,
                                group_vars = vars(InstrumentVersion, Region),
                                site_info = site_info,
                                add_path_dates = TRUE,
                                run_check = TRUE))

})


# calc_det_rate ----------------------------------------------------------


test_that("check calc_det_rate()", {

    ############## Generating data ################
    national_list <- calc_TURN(TUR_dat, return_means = TRUE)
    means <- national_list$means
    # national TURN
    TURN_national <- national_list$df

    # calculate TURN for each pathogen -- national
    path_turn_national <- calc_path_TURN(df = path_dat,
                                         TURN_df = TURN_national,
                                         means = means)

    # check if percent detections sume to 100
    check <- calc_det_rate(path_turn_national) %>%
        group_by(epidate) %>%
        summarize(total = sum(det_rate))

    expect_equal(check$total, rep(100, nrow(check)))

})

# clean_TURN_output ----------------------------------------------------------


test_that("check clean_TURN_output", {

    ############## Generating data ################
    national_list <- calc_TURN(TUR_dat, return_means = TRUE)
    means <- national_list$means
    # national TURN
    TURN_national <- national_list$df

    # calculate TURN for each pathogen -- national
    path_turn_national <- calc_path_TURN(df = path_dat,
                                         TURN_df = TURN_national,
                                         means = means)

    ###############################################
    ##### creating cleaner/simple dataframe #######

    clean1 <- clean_TURN_output(TURN_national)
    clean2 <- clean_TURN_output(path_turn_national, is_path = TRUE)

    expect_equal(clean1$TURN,
                 TURN_national$Y_prime_3wma[TURN_national$InstrumentVersion == "all_adj"])

    expect_equal(clean2$path_TURN,
                 path_turn_national$path_Y_prime_3wma[path_turn_national$InstrumentVersion == "all_adj"])

})


# calc_n_sites ------------------------------------------------------------

test_that("calc_n_sites", {

    all <- calc_n_sites(TUR_dat)
    expect_equal(unique(all$n_sites), 7)

    expect_error(calc_n_sites(TUR_dat, group_vars = vars(epiweek)))

    df <- filter(TUR_dat, !lubridate::month(date) %in% 5:6)
    all2 <- calc_n_sites(df)
    all3 <- calc_n_sites(df, window = 11)

    # b/gap
    expect_equal(min(all2$n_sites), 0)

    # wider window should bridge gap
    expect_equal(min(all3$n_sites), 7)

    region_count <- get_site_info(rp_raw) %>%
        inner_join(TUR_dat, by = "SiteID") %>%
        calc_n_sites(vars(Region)) %>%
        pull(n_sites) %>%
        unique() %>%
        sort()
    expect_equal(region_count, c(1, 3))
})
MartinHoldrege/turnr documentation built on May 16, 2020, 10:39 a.m.