tests/testthat/testISRates.R

#test calculations
test_that("isrates and CIs calculate correctly",{

  expect_equal(data.frame(select(calculate_ISRate(select(test_ISR_ownref,-refcount,-refpop), count, pop,
                                  x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop),1:7,9:10)),
               data.frame(select(slice(test_ISR_results,1:3),1:7,10:11)),
               ignore_attr = TRUE,info="test default")

  expect_equal(data.frame(select(calculate_ISRate(select(test_ISR_ownref,-count, -refcount,-refpop), total_count, pop,
                                   x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop,
                                   observed_totals = test_ISR_lookup), 1:7,9:10)),
               data.frame(select(slice(test_ISR_results,1:3),1:7,10:11)),
               ignore_attr = TRUE,info="test default with observed_totals")

  expect_equal(data.frame(select(calculate_ISRate(select(test_ISR_ownref,-refcount,-refpop), count, pop, confidence = c(0.95,0.998),
                                         x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop),1:9,11:12)),
               data.frame(slice(test_ISR_results,1:3)),
               ignore_attr = TRUE,info="test full output with 2 CIs")

  expect_equal(data.frame(select(calculate_ISRate(test_ISR_ownref, count, pop, refcount, refpop,
                                         refpoptype="field", type="standard"), 1:7)),
               data.frame(select(slice(test_ISR_results,1:3),1:7)),
               ignore_attr = TRUE,info="test default with own ref data by col name")

  expect_equal(data.frame(calculate_ISRate(select(test_ISR_ownref,-refcount,-refpop), count, pop,
                                  test_ISR_ownref$refcount[1:19], test_ISR_ownref$refpop[1:19], type="standard")),
               data.frame(select(slice(test_ISR_results,1:3),1:7)),
               ignore_attr = TRUE,info="test default with own ref data as vector")

  expect_equal(data.frame(calculate_ISRate(test_err2, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, type="standard")),
               data.frame(select(slice(test_ISR_results,13:14),1:7)),
               ignore_attr = TRUE,info="test zero population")

  expect_equal(data.frame(calculate_ISRate(select(test_ISR_ownref,-refcount,-refpop), count, pop, type="standard",
                       x_ref = c(10303,2824,NA,3615,3641,3490,3789,3213,3031,2771,3089,3490,3595,4745,5514,7125,5694,6210,5757),
                       n_ref = c(50520,57173,60213,54659,44345,50128,62163,67423,62899,55463,60479,49974,44140,40888,37239,30819,18136,15325,13918))),
               data.frame(select(slice(test_ISR_results,1:3),1:7)),
               ignore_attr = TRUE,info="test ref as specified vector")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, type="standard")),
               data.frame(select(slice(test_ISR_results,1:3),1:7)),
               ignore_attr = TRUE,info="test standard")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, confidence = c(0.95,0.998), type="standard")),
               data.frame(select(slice(test_ISR_results,1:3),1:9)),
               ignore_attr = TRUE,info="test standard 2 CIs")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, type="value")),
               data.frame(select(slice(test_ISR_results,1:3),1,5)),
               ignore_attr = TRUE,info="test value")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, confidence = c(0.95,0.998),  type="value")),
               data.frame(select(slice(test_ISR_results,1:3),1,5)),
               ignore_attr = TRUE,info="test value 2 CIs")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, type="lower")),
               data.frame(select(slice(test_ISR_results,1:3),1,6)),
               ignore_attr = TRUE,info="test lower")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, confidence = c(0.95,0.998),  type="lower")),
               data.frame(select(slice(test_ISR_results,1:3),1,6,8)),
               ignore_attr = TRUE,info="test lower 2 CIs")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop,type="upper")),
               data.frame(select(slice(test_ISR_results,1:3),1,7)),
               ignore_attr = TRUE,info="test upper")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, confidence = c(0.95,0.998), type="upper")),
               data.frame(select(slice(test_ISR_results,1:3),1,7,9)),
               ignore_attr = TRUE,info="test upper 2 CIs")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, type="standard", x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop,confidence = 99.8)),
               data.frame(select(slice(test_ISR_results,1:3),1:5,8:9)),
               ignore_attr = TRUE,info="test confidence")

  expect_equal(data.frame(calculate_ISRate(test_multiarea, count, pop, type="standard", x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop, multiplier=1000)),
               data.frame(select(slice(test_ISR_results,4:6),1:7)),
               ignore_attr = TRUE,info="test multiplier")

  expect_equal(data.frame(select(calculate_ISRate(select(test_ISR_ownref,-refcount,-refpop), count, pop, confidence = c(0.95,0.998),
                                  x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop),1:7)),
               data.frame(select(slice(test_ISR_results,1:3),1:7)),
               ignore_attr = TRUE,info="test two CIS 95%")

  expect_equal(data.frame(select(calculate_ISRate(test_multiarea, count, pop, type="standard", x_ref = test_ISR_refdata$refcount,
                                  n_ref = test_ISR_refdata$refpop,confidence = c(0.95, 0.998)),1:5,8,9)),
               data.frame(select(slice(test_ISR_results,1:3),1:5,8:9)),
               ignore_attr = TRUE,info="test two CIs 99.8")

  expect_equal(data.frame(select(ungroup(calculate_ISRate(select(test_ISR_ownref,-refcount,-refpop), count, pop, confidence = c(0.95,0.998),
                                         x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop)),10)),
               data.frame(confidence = rep("95%, 99.8%",3), stringsAsFactors=FALSE),
               ignore_attr = TRUE,info="test two CIS metadata")

})




# test error handling

test_that("isrates - errors are generated when invalid arguments are used",{

  expect_error(calculate_ISRate(test_multiarea, count, pop),
               "function calculate_ISRate requires at least 5 arguments: data, x, n, x_ref and n_ref",info="error invalid number of arguments")

  expect_error(calculate_ISRate(test_err1, count, pop, x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop),
               "numerators must all be greater than or equal to zero",info="error numerators < 0")

  expect_error(calculate_ISRate(test_err3, count, pop, x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop),
               "denominators must all be greater than or equal to zero",info="error denominator < 0")

  expect_error(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop, confidence = 0.74),
               "confidence level must be between 90 and 100 or between 0.9 and 1",info="error confidence < 0.9")

  expect_error(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop, confidence = 3),
               "confidence level must be between 90 and 100 or between 0.9 and 1",info="error confidence between 1 and 90")

  expect_error(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop, confidence = 1000),
               "confidence level must be between 90 and 100 or between 0.9 and 1",info="error confidence >100")

  expect_error(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop, type="combined"),
               "type must be one of value, lower, upper, standard or full",info="error invalid type")

  expect_error(calculate_ISRate(filter(test_multiarea,count < 100), count, pop, x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop),
               "data must contain the same number of rows for each group",info="error num rows per group")

  expect_error(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount[1:18], n_ref = test_ISR_refdata$refpop),
               "x_ref length must equal number of rows in each group within data",info="error x_ref length")

  expect_error(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount, n_ref = test_ISR_refdata$refpop[2:19]),
              "n_ref length must equal number of rows in each group within data",info="error n_ref length")

  expect_error(calculate_ISRate(test_ISR_ownref, count, pop, test_ISR_ownref$refcount, test_ISR_ownref$refpop[1:19]),
               "x_ref length must equal number of rows in each group within data",info="error x_ref length in data")

  expect_error(calculate_ISRate(test_ISR_ownref, count, pop, test_ISR_ownref$refcount[1:19], test_ISR_ownref$refpop),
               "n_ref length must equal number of rows in each group within data",info="error n_ref length in data")

  expect_error(calculate_ISRate(test_multiarea, count, pop, test_ISR_ownref$refcount[1:19], test_ISR_ownref$refpop, refpoptype = "column"),
               "valid values for refpoptype are vector and field",info="error invalid refpoptype")

  expect_error(calculate_ISRate(test_ISR_ownref, count, pop, ref_count, refpop, refpoptype = "field"),
               "x_ref is not a field name from data",info="error x_ref not a field name")

  expect_error(calculate_ISRate(test_ISR_ownref, count, pop, refcount, ref_pop, refpoptype = "field"),
               "n_ref is not a field name from data",info="error n_ref not a field name")

  expect_error(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                       n_ref = test_ISR_refdata$refpop, confidence = c(0.95, 0.998, 0.98)),
               "a maximum of two confidence levels can be provided",info="error max two CIs")

  expect_error(calculate_ISRate(test_multiarea, count, pop, x_ref = test_ISR_refdata$refcount,
                       n_ref = test_ISR_refdata$refpop, confidence = c(0.95, 0.98)),
               "two confidence levels can only be produced if they are specified as 0.95 and 0.998",
               info="error invalid number of arguments")

})
publichealthengland/PHEindicatormethods documentation built on Dec. 15, 2024, 3:18 p.m.