#' @title Specifications test-get_pvalue.R
#' @section Last updated by: Tim Treis (tim.treis@@outlook.de)
#' @section Last update date: 2022-02-09T15:22:32
#'
#' @section List of tested specifications
#' T1. The function accepts a `survfit` object
#' T1.1. No error when a `survfit` object is passed to the function with at least 2 strata
#' TT1.2 An error when a `survfit` object is passed to the function with 1 strata
#' TT1.3 An error when a non-`survfit` object is passed to the function
#' T2. The functions tests the null hypothesis of no difference between two or more survival curves using the G-rho family of tests
#' T2.1 The function supports the Log-Rank test by setting ptype = 'Log-Rank'
#' T2.2 The function supports the Wilcoxon test by setting ptype = 'Wilcoxon'
#' T2.3 The function supports the Tarone-Ware test by setting ptype = 'Tarone-Ware'
#' T2.4 The function calculates the default ptype when ptype = 'All'
#' T2.5 The function supports the use of a custom `rho` in the calculation
#' T2.6 The function supports the use of a custom `rho` in the calculation when ptype = `All`
#' T2.7 The function accepts a vector for ptype, containing multiple requests eg c('Tarone-Ware', 'Log-Rank', 'Custom')
#' T2.8 An error when ptype includes 'Custom' but rho is not specified
#' T2.9 An error when a non-supported ptype is requested
#' T3. The functions returns the results of the test statistic, degrees of freedom and the p-value of the null hypothesis when requested
#' T3.1 No error when the test statistic is requested
#' T3.2 No error when the degrees of freedom is requested
#' T3.3 No error when the p-value is requested
#' T3.4 An error when an unsupported argument is used in statlist
#' T4. The output object provides the requested information
#' T4.1 The output object is a data.frame
#' T4.2 The summary statistics are available via the columns of the output object
#' T4.3 Each test statistic and associated calculations are available via the rows of the output object
#' T4.4 The statistical tests are ordered in line with the order defined in ptype
#' T4.5 The associated calculations of the statistical tests are ordered in line with the order defined in the statlist
#' T4.6 The Chisq statistic has the same precision as the pvalue
#' T5. Piped datasets still return accurate results
#' T5.1 P-values are accurate when a filtered data frame is piped
#' T6. Function works with `survival::survfit()` objects
#' T6.1 Function works with `survival::survfit()` objects
#' T6.2 Function messages users appropriately when data is piped, and p-value cannot be calculated
# Requirement T1 ----------------------------------------------------------
testthat::context("get_pvalue - T1. The function accepts a `survfit` object")
testthat::test_that("T1.1. No error when a `survfit` object is passed to the function with at least 2 strata", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_error(visR::get_pvalue(survfit_object), NA)
})
testthat::test_that("TT1.2 An error when a `survfit` object is passed to the function with 1 strata", {
survfit_object <- visR::estimate_KM(adtte, strata = "STUDYID")
testthat::expect_error(visR::get_pvalue(survfit_object))
})
testthat::test_that("TT1.3 An error when a non-`survfit` object is passed to the function", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
class(survfit_object) <- "blah"
testthat::expect_error(visR::get_pvalue(survfit_object))
})
# Requirement T2 ---------------------------------------------------------------
testthat::context("get_pvalue - T2. The functions tests the null hypothesis of no difference between two or more survival curves using the G-rho family of tests")
testthat::test_that("T2.1 The function supports the Log-Rank test by setting ptype = 'Log-Rank'", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_equal(
visR::get_pvalue(survfit_object, ptype = "Log-Rank"),
get_pvalue_ref1
)
})
testthat::test_that("T2.2 The function supports the Wilcoxon test by setting ptype = 'Wilcoxon'", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_equal(
visR::get_pvalue(survfit_object, ptype = "Wilcoxon"),
get_pvalue_ref2
)
})
testthat::test_that("T2.3 The function supports the Tarone-Ware test by setting ptype = 'Tarone-Ware'", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_equal(
visR::get_pvalue(survfit_object, ptype = "Tarone-Ware"),
get_pvalue_ref3
)
})
testthat::test_that("T2.4 The function calculates the default ptype when ptype = 'All'", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_equal(
visR::get_pvalue(survfit_object, ptype = "All"),
get_pvalue_ref[1:3, ]
)
})
testthat::test_that("T2.5 The function supports the use of a custom `rho` in the calculation", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_equal(
visR::get_pvalue(survfit_object,
ptype = "Custom",
rho = 2.4
),
get_pvalue_ref4
)
})
testthat::test_that("T2.6 The function supports the use of a custom `rho` in the calculation when ptype = `All`", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_equal(
visR::get_pvalue(survfit_object,
ptype = "All",
rho = 2.4
),
get_pvalue_ref
)
})
testthat::test_that("T2.7 The function accepts a vector for ptype, containing multiple requests eg c('Tarone-Ware', 'Log-Rank', 'Custom')", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_equal(
visR::get_pvalue(survfit_object,
ptype = c(
"Log-Rank",
"Tarone-Ware",
"Custom"
),
rho = 2.4
),
get_pvalue_ref134
)
})
testthat::test_that("T2.8 An error when ptype includes 'Custom' but rho is not specified", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_error(visR::get_pvalue(survfit_object, ptype = "Custom"))
})
testthat::test_that("T2.9 An error when a non-supported ptype is requested", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_error(visR::get_pvalue(survfit_object, ptype = "blah"))
})
# Requirement T3 ---------------------------------------------------------------
testthat::context("get_pvalue - T3. The functions returns the results of the test statistic, degrees of freedom and the p-value of the null hypothesis when requested")
testthat::test_that("T3.1 No error when the test statistic is requested", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_error(visR::get_pvalue(survfit_object, statlist = "test"), NA)
})
testthat::test_that("T3.2 No error when the degrees of freedom is requested", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_error(visR::get_pvalue(survfit_object, statlist = "df"), NA)
})
testthat::test_that("T3.3 No error when the p-value is requested", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_error(visR::get_pvalue(survfit_object, statlist = "pvalue"), NA)
})
testthat::test_that("T3.4 An error when an unsupported argument is used in statlist", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_error(visR::get_pvalue(survfit_object, statlist = "blah"))
})
# Requirement T4 ---------------------------------------------------------------
testthat::context("get_pvalue - T4. The output object provides the requested information")
testthat::test_that("T4.1 The output object is a data.frame", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_identical(
class(visR::get_pvalue(survfit_object,
statlist = "test"
)),
"data.frame"
)
})
testthat::test_that("T4.2 The summary statistics are available via the columns of the output object", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_identical(
colnames(visR::get_pvalue(survfit_object,
statlist = c("test", "df")
)),
c("Equality across strata", "df")
)
})
testthat::test_that("T4.3 Each test statistic and associated calculations are available via the rows of the output object", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_equal(nrow(visR::get_pvalue(survfit_object,
statlist = c("test", "df")
)), 3)
})
testthat::test_that("T4.4 The statistical tests are ordered in line with the order defined in ptype", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_identical(
visR::get_pvalue(survfit_object,
ptype = c("Wilcoxon", "Log-Rank")
)[, 1],
c("Wilcoxon", "Log-Rank")
)
})
testthat::test_that("T4.5 The associated calculations of the statistical tests are ordered in line with the order defined in the statlist", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
testthat::expect_identical(
colnames(visR::get_pvalue(survfit_object,
statlist = c("df", "test")
)),
c("df", "Equality across strata")
)
})
testthat::test_that("T4.6 The Chisq statistic has the same precision as the pvalue", {
survfit_object <- visR::estimate_KM(adtte, strata = "TRTA")
totest <- visR::get_pvalue(survfit_object, statlist = c("Chisq", "pvalue"))
pvals_nchar_after_dot <- gsub(".+?\\.", "", totest[["p-value"]]) %>% nchar()
chisq_nchar_after_dot <- gsub(".+?\\.", "", totest[["Chisq"]]) %>% nchar()
testthat::expect_identical(pvals_nchar_after_dot, chisq_nchar_after_dot)
survfit_object <- visR::estimate_KM(adtte, strata = "SEX")
totest <- visR::get_pvalue(survfit_object, statlist = c("Chisq", "pvalue"))
pvals_nchar_after_dot <- gsub(".+?\\.", "", totest[["p-value"]]) %>% nchar()
chisq_nchar_after_dot <- gsub(".+?\\.", "", totest[["Chisq"]]) %>% nchar()
testthat::expect_identical(pvals_nchar_after_dot, chisq_nchar_after_dot)
})
# Requirement T5 ---------------------------------------------------------------
testthat::context("get_pvalue - T5. Piped datasets still return accurate results")
testthat::test_that("T5.1 P-values are accurate when a filtered data frame is piped", {
# testing the p-value is correct when filtered data is piped to estimate_KM()
survfit_p <-
adtte %>%
dplyr::filter(SEX == "F", AGE < 60) %>%
visR::estimate_KM(strata = "TRTA") %>%
get_pvalue(ptype = "Log-Rank") %>%
dplyr::pull(`p-value`)
survdiff_p <-
survival::survdiff(
survival::Surv(AVAL, 1 - CNSR) ~ TRTA,
data =
adtte %>%
dplyr::filter(SEX == "F", AGE < 60)
) %>%
{
pchisq(.$chisq, length(.$n) - 1, lower.tail = FALSE)
} %>%
visR:::.pvalformat()
testthat::expect_equal(survfit_p, survdiff_p)
})
# Requirement T6 ---------------------------------------------------------------
testthat::context("get_pvalue - T6. Function works with `survival::survfit()` objects")
testthat::test_that("T6.1 Function works with `survival::survfit()` objects", {
expect_error(
survival::survfit(survival::Surv(time, status) ~ sex, data = survival::lung) %>%
get_pvalue(),
NA
)
})
testthat::test_that("T6.2 Function messages users appropriately when data is piped, and p-value cannot be calculated", {
expect_error(
survival::lung %>%
survfit(Surv(time, status) ~ sex, data = .) %>%
get_pvalue(),
"*estimate_KM*" # error message includes reference to `estimate_KM()` function.
)
})
# END OF CODE -------------------------------------------------------------
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.