tol_large = 1e-10 tol_med = 1e-6 tol_limit = 1e-2 tol_obs = 1e-1 tol_dif = 5e-1 tol_force = 1 test_that("esb.test produced same results for different inputs: SMD", { skip_on_cran() x <- subset(df.SMD, factor == "Pharmacological", select = -c(value, se, ci_lo, ci_up)) res = umbrella(x, verbose=FALSE, method.var = "REML")[[1]] df_mfr = metafor::escalc(m1i = mean_cases, m2i = mean_controls, sd1i = sd_cases, sd2i = sd_controls, n1i = n_cases, n2i = n_controls, data = x, measure = "SMD", vtype = "LS2") rma <- metafor::rma.uni(yi = yi, vi = vi, data = df_mfr, method = "REML") meta1 <- meta::metacont(n_cases, mean_cases, sd_cases, n_controls, mean_controls, sd_controls, method.tau = "REML", data = x, sm = "SMD", method.smd = "Hedges") meta2 <- meta::metacont(n_cases, mean_cases, sd_cases, n_controls, mean_controls, sd_controls, method.tau = "REML", data = x, sm = "SMD", method.smd = "Cohen") esb.df.tess <- esb.test(x, input = "dataframe", measure = "G", method.esb = "TESS", seed = 4321, true_effect = "largest") esb.df.psst <- esb.test(x, input = "dataframe", measure = "G", method.esb = "PSST", seed = 4321, true_effect = "largest") umb.psst <- umbrella(x, seed = 4321, method.esb = "PSST", true_effect = "largest") umb.tess <- umbrella(x, seed = 4321, method.esb = "TESS", true_effect = "largest") meta.df.tess1 <- esb.test(meta1, input = "meta", method.esb = "TESS", seed = 4321, true_effect = "largest") meta.df.psst1 <- esb.test(meta1, input = "meta", method.esb = "PSST", seed = 4321, true_effect = "largest") meta.df.tess2 <- esb.test(meta2, input = "meta", method.esb = "TESS", seed = 4321, true_effect = "largest") meta.df.psst2 <- esb.test(meta2, input = "meta", method.esb = "PSST", seed = 4321, true_effect = "largest") rma.df.tess <- esb.test(rma, input = "rma", n_cases = x$n_cases, method.esb = "TESS", seed = 4321, true_effect = "largest") rma.df.psst <- esb.test(rma, input = "rma", n_cases = x$n_cases, method.esb = "PSST", seed = 4321, true_effect = "largest") # meta expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(meta.df.tess1$Esig), tolerance = 1e-3) expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(meta.df.tess2$Esig), tolerance = 1e-3) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(meta.df.tess1$p.value), tolerance = 1e-3) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(meta.df.tess2$p.value), tolerance = 1e-3) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(meta.df.psst1$Esig), tolerance = 1e-3) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(meta.df.psst2$Esig), tolerance = 1e-3) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(meta.df.psst1$p.value), tolerance = 1e-3) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(meta.df.psst2$p.value), tolerance = 5e-3) # rma expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(rma.df.tess$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(rma.df.tess$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(rma.df.psst$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(rma.df.psst$p.value), tolerance = 1e-10) # umbrella expect_equal(.as_numeric(umb.tess[[1]]$esb$Esig), .as_numeric(esb.df.tess$Esig), tolerance = 1e-10) expect_equal(.as_numeric(umb.tess[[1]]$esb$p.value), .as_numeric(esb.df.tess$p.value), tolerance = 1e-10) expect_equal(.as_numeric(umb.psst[[1]]$esb$Esig), .as_numeric(esb.df.psst$Esig), tolerance = 1e-10) expect_equal(.as_numeric(umb.psst[[1]]$esb$p.value), .as_numeric(esb.df.psst$p.value), tolerance = 1e-10) }) test_that("esb.test produced same results for generic inputs: SMD", { skip_on_cran() df <- df.SMD[df.SMD$factor == "Surgical", ] res_mcv = metaConvert::es_from_means_sd( mean_exp = df$mean_cases, mean_nexp =df$mean_controls, mean_sd_exp =df$sd_cases, mean_sd_nexp=df$sd_controls, n_exp =df$n_cases, n_nexp=df$n_controls) df$value = res_mcv$g df$se = res_mcv$g_se df$measure = "G" metasmd1 <- meta::metagen(TE = value, seTE = se , method.tau = "REML", data = df, sm = "SMD") metasmd2 <- meta::metagen(TE = value, seTE = se, n.e = n_cases, n.c = n_controls, method.tau = "REML", data = df, sm = "SMD") rmasmd <- metafor::rma.uni(yi = value, sei = se, ni = n_cases + n_controls, data = df, method = "REML", measure = "SMD") esb.df.tess <- esb.test(df, input = "dataframe", measure = "SMD", method.esb = "TESS", seed = 4321, true_effect = "largest") esb.df.psst <- esb.test(df, input = "dataframe", measure = "SMD", method.esb = "PSST", seed = 4321, true_effect = "largest") meta.df.tess1 <- esb.test(metasmd1, input = "meta", n_cases = df$n_cases, n_controls = df$n_controls, method.esb = "TESS", seed = 4321, true_effect = "largest") meta.df.psst1 <- esb.test(metasmd1, input = "meta", n_cases = df$n_cases, n_controls = df$n_controls, method.esb = "PSST", seed = 4321, true_effect = "largest") meta.df.tess2 <- esb.test(metasmd2, input = "meta", method.esb = "TESS", seed = 4321, true_effect = "largest") meta.df.psst2 <- esb.test(metasmd2, input = "meta", method.esb = "PSST", seed = 4321, true_effect = "largest") rma.df.tess1 <- esb.test(rmasmd, input = "rma", n_cases = df$n_cases, method.esb = "TESS", seed = 4321, true_effect = "largest") rma.df.tess2 <- esb.test(rmasmd, input = "rma", n_controls = df$n_controls, method.esb = "TESS", seed = 4321, true_effect = "largest") rma.df.psst1 <- esb.test(rmasmd, input = "rma", n_cases = df$n_cases, method.esb = "PSST", seed = 4321, true_effect = "largest") rma.df.psst2 <- esb.test(rmasmd, input = "rma", n_controls = df$n_controls, method.esb = "PSST", seed = 4321, true_effect = "largest") umb.psst <- umbrella(df, seed = 4321, method.esb = "PSST", true_effect = "largest") umb.tess <- umbrella(df, seed = 4321, method.esb = "TESS", true_effect = "largest") # meta expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(meta.df.tess1$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(meta.df.tess2$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(meta.df.tess1$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(meta.df.tess2$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(meta.df.psst1$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(meta.df.psst2$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(meta.df.psst1$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(meta.df.psst2$p.value), tolerance = 1e-10) # rma expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(rma.df.tess1$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(rma.df.tess1$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(rma.df.tess2$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(rma.df.tess2$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(rma.df.psst1$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(rma.df.psst1$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(rma.df.psst2$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(rma.df.psst2$p.value), tolerance = 1e-10) # umbrella expect_equal(.as_numeric(umb.psst[[1]]$esb$Esig), .as_numeric(esb.df.psst$Esig), tolerance = 1e-10) expect_equal(.as_numeric(umb.psst[[1]]$esb$p.value), .as_numeric(esb.df.psst$p.value), tolerance = 1e-10) expect_equal(.as_numeric(umb.tess[[1]]$esb$Esig), .as_numeric(esb.df.tess$Esig), tolerance = 1e-10) expect_equal(.as_numeric(umb.tess[[1]]$esb$p.value), .as_numeric(esb.df.tess$p.value), tolerance = 1e-10) }) test_that("esb.test produced same results for different inputs: OR", { skip_on_cran() df <- subset(df.OR, factor == "ASD", select = -c(value, ci_lo, ci_up)) rmaor <- metafor::rma.uni(ai = n_cases_exp, bi = n_cases_nexp, ci = n_controls_exp, di = n_controls_nexp, data = df, method = "REML", measure = "OR", digits=12) metaor <- meta::metabin(event.e = n_cases_exp, n.e = n_exp, event.c = n_cases_nexp, n.c = n_nexp, data = df, sm = "OR", method.tau = "REML", digits=12) rmaor <- metafor::rma.uni(ai = n_cases_exp, bi = n_controls_exp, ci = n_cases_nexp, di = n_controls_nexp, n1i = n_cases, n2i = n_controls, data = df, method = "REML", measure = "OR", digits=12) esb.df.tess <- esb.test(df, input = "dataframe", measure = "OR", method.esb = "TESS", true_effect = "largest", seed = 4321) esb.df.psst <- esb.test(df, input = "dataframe", measure = "OR", method.esb = "PSST", true_effect = "largest", seed = 4321) meta.df.tess <- esb.test(metaor, input = "meta", method.esb = "TESS", true_effect = "largest", seed = 4321) meta.df.psst <- esb.test(metaor, input = "meta", method.esb = "PSST", true_effect = "largest", seed = 4321) rma.df.tess <- esb.test(rmaor, input = "rma", n_cases = df$n_cases, method.esb = "TESS", true_effect = "largest", seed = 4321) rma.df.psst <- esb.test(rmaor, input = "rma", n_cases = df$n_cases, method.esb = "PSST", true_effect = "largest", seed = 4321) umb.psst <- umbrella(df, seed = 4321,method.esb = "PSST", true_effect = "largest") umb.tess <- umbrella(df, seed = 4321,method.esb = "TESS", true_effect = "largest") # all(round(rmaor$yi, 10) == round(umb.psst[[1]]$x$value, 10)) # all(round(rmaor$vi, 10) == round(umb.psst[[1]]$x$se^2, 10)) # rma expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(rma.df.tess$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(rma.df.tess$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(rma.df.psst$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(rma.df.psst$p.value), tolerance = 1e-10) # umbrella expect_equal(.as_numeric(umb.psst[[1]]$esb$Esig), .as_numeric(esb.df.psst$Esig), tolerance = 1e-10) expect_equal(.as_numeric(umb.psst[[1]]$esb$p.value), .as_numeric(esb.df.psst$p.value), tolerance = 1e-10) expect_equal(.as_numeric(umb.tess[[1]]$esb$Esig), .as_numeric(esb.df.tess$Esig), tolerance = 1e-10) expect_equal(.as_numeric(umb.tess[[1]]$esb$p.value), .as_numeric(esb.df.tess$p.value), tolerance = 1e-10) # meta expect_equal(.as_numeric(esb.df.tess$Esig), .as_numeric(meta.df.tess$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(meta.df.tess$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$Esig), .as_numeric(meta.df.psst$Esig), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(meta.df.psst$p.value), tolerance = 1e-10) expect_equal(.as_numeric(rma.df.psst$Esig), .as_numeric(meta.df.psst$Esig), tolerance = 1e-10) expect_equal(.as_numeric(rma.df.psst$p.value), .as_numeric(meta.df.psst$p.value), tolerance = 1e-10) }) test_that("esb.test produced same results for generic inputs: OR", { skip_on_cran() df <- df.OR[df.OR$factor == "ASD", ] df$se = with(df, (log(ci_up)-log(ci_lo))/(2*qnorm(.975))) df = subset(df, select=-c(n_cases_exp, n_cases_nexp,n_controls_exp, n_controls_nexp)) metaor <- meta::metagen(TE = log(df$value), seTE = df$se, data = df, sm = "OR", method.tau = "REML") rmaor <- metafor::rma.uni(yi = log(df$value), sei = df$se, data = df, method = "REML", measure = "OR") esb.df.tess <- esb.test(df, input = "dataframe", measure = "OR", method.esb = "TESS", true_effect = "largest",seed = 4321) esb.df.psst <- esb.test(df, input = "dataframe", measure = "OR", method.esb = "PSST", true_effect = "largest",seed = 4321) meta.df.tess <- esb.test(metaor, n_cases = df$n_cases, n_controls = df$n_controls, input = "meta", method.esb = "TESS", true_effect = "largest", seed = 4321) meta.df.psst <- esb.test(metaor, input = "meta", n_cases = df$n_cases, n_controls = df$n_controls, method.esb = "PSST", true_effect = "largest", seed = 4321) rma.df.tess <- esb.test(rmaor, input = "rma", n_cases = df$n_cases, n_controls = df$n_controls, method.esb = "TESS", true_effect = "largest", seed = 4321) rma.df.psst <- esb.test(rmaor, input = "rma", n_cases = df$n_cases, n_controls = df$n_controls, method.esb = "PSST", true_effect = "largest", seed = 4321) umb.psst <- umbrella(df, seed = 4321, method.esb = "PSST",true_effect = "largest") umb.tess <- umbrella(df, method.esb = "TESS", true_effect = "largest", seed = 4321) # meta expect_equal(.as_numeric(esb.df.tess$statistic), .as_numeric(meta.df.tess$statistic), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(meta.df.tess$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$statistic), .as_numeric(meta.df.psst$statistic), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(meta.df.psst$p.value), tolerance = 1e-10) # rma expect_equal(.as_numeric(esb.df.tess$statistic), .as_numeric(rma.df.tess$statistic), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.tess$p.value), .as_numeric(rma.df.tess$p.value), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$statistic), .as_numeric(rma.df.psst$statistic), tolerance = 1e-10) expect_equal(.as_numeric(esb.df.psst$p.value), .as_numeric(rma.df.psst$p.value), tolerance = 1e-10) # umbrella expect_equal(.as_numeric(umb.psst[[1]]$esb$statistic), .as_numeric(esb.df.psst$statistic), tolerance = 1e-10) expect_equal(.as_numeric(umb.psst[[1]]$esb$p.value), .as_numeric(esb.df.psst$p.value), tolerance = 1e-10) # umbrella expect_equal(.as_numeric(umb.tess[[1]]$esb$statistic), .as_numeric(esb.df.tess$statistic), tolerance = 1e-10) expect_equal(.as_numeric(umb.tess[[1]]$esb$p.value), .as_numeric(esb.df.tess$p.value), tolerance = 1e-10) }) test_that("esb.test produced correct results with reversed inputs", { skip_on_cran() df <- df.SMD[df.SMD$factor == "Surgical", ] df$reverse_es <- NA; df$reverse_es[1:5] <- "reverse" gen <- .quiet(esb.test(df, input = "dataframe", measure = "SMD", seed = 4321, method.esb = "PSST", true_effect = "largest")) umb <- .quiet(umbrella(df, seed = 4321, method.esb = "PSST", true_effect = "largest")) expect_equal(.as_numeric(gen$statistic), .as_numeric(umb[[1]]$esb$statistic), tolerance = 1e-10) expect_equal(.as_numeric(gen$p.value), .as_numeric(umb[[1]]$esb$p.value), tolerance = 1e-10) }) test_that("esb.test produced correct results with multilevel data", { skip_on_cran() df <- subset(df.OR.multi, factor == "Vitamin D") gen <- esb.test(df, input = "dataframe", measure = "OR", seed = 4321, method.esb = "PSST", true_effect = "largest") umb <- umbrella(df, mult.level = TRUE, seed = 4321, method.esb = "PSST", true_effect = "largest") expect_equal(.as_numeric(gen$statistic), .as_numeric(umb[[1]]$esb$statistic), tolerance = 1e-10) expect_equal(.as_numeric(gen$p.value), .as_numeric(umb[[1]]$esb$p.value), tolerance = 1e-10) }) # G/SMD input ----------------------- test_that("SMD/G/SMC", { df.test.smd = subset(df.SMD, factor == "Pharmacological")[, 1:9] df.test.smc = df.test.smd df.test.smc$measure = "SMC" df.test.g = df.test.smc df.test.g$measure = "G" ur_smc = umbrella(df.test.smc, method.esb = "TESSPSST", true_effect = "UWLS", verbose=FALSE) ur_g = umbrella(df.test.g, method.esb = "TESSPSST", true_effect = "UWLS", verbose=FALSE) ur_smd = umbrella(df.test.smd, method.esb = "TESSPSST", true_effect = "UWLS", verbose=FALSE) esb_smc = esb.test(df.test.smc, method.esb = "TESSPSST", true_effect = "UWLS", input = "dataframe") esb_g = esb.test(df.test.g, method.esb = "TESSPSST", true_effect = "UWLS", input = "dataframe") esb_smd = esb.test(df.test.smd, method.esb = "TESSPSST", true_effect = "UWLS", input = "dataframe") expect_equal(ur_smc[[1]]$esb$p.value, esb_smc$p.value, tolerance = 1e-10) expect_equal(ur_g[[1]]$esb$p.value, esb_g$p.value, tolerance = 1e-10) expect_equal(ur_smd[[1]]$esb$p.value, esb_smd$p.value, tolerance = 1e-10) expect_equal(ur_smd[[1]]$esb$p.value, ur_g[[1]]$esb$p.value, tolerance = 5e-3) expect_equal(ur_smc[[1]]$esb$p.value, ur_smd[[1]]$esb$p.value, tolerance = 1e-10) expect_equal(ur_smc[[1]]$esb$p.value, ur_smd[[1]]$esb$p.value, tolerance = 1e-10) }) # TES metafor ----------------------------------------------------------------------------------------------------- # test_that("esb.test produced correct results compared to metafor: SMD", { # skip_on_cran() # theta = 0.3 # df <- subset(df.SMD, factor == "Pharmacological") # # meta <- metafor::rma.uni(m1i = mean_cases, m2i = mean_controls, # sd1i = sd_cases, sd2i = sd_controls, # n1i = n_cases, n2i = n_controls, # data = df, method = "REML", measure = "SMD") # # df$value = .as_numeric(meta$yi) # df$se = sqrt(.as_numeric(meta$vi)) # # df <- subset(df, select = -c(ci_lo, ci_up, mean_cases, mean_controls)) # tes.chi <- .quiet(metafor::tes(x = df$value, sei = df$se, theta = theta, # test = "chi2", alternative = "two.sided", tes.alternative = "greater")) # tes.psst <- .quiet(metafor::tes(x = df$value, sei = df$se, theta = theta, # test = "binom", alternative = "two.sided", tes.alternative = "greater")) # # # esb.chi <- suppressWarnings( # .quiet(esb.test(df, # measure = "SMD", input = "dataframe", # method.esb = "TESS", # true_effect = theta, seed = 4321))) # # esb.bin <- suppressWarnings( # .quiet(esb.test(df, # measure = "SMD", input = "dataframe", # method.esb = "PSST", # true_effect = theta, seed = 4321))) # # expect_equal(.as_numeric(esb.bin$power), tes.psst$power, tolerance = 0.005) # expect_equal(.as_numeric(esb.bin$mean_power), mean(tes.psst$power), tolerance = 0.005) # expect_equal(.as_numeric(esb.bin$SS), tes.psst$O) # expect_equal(.as_numeric(esb.bin$Esig), tes.psst$E, tolerance = 0.005) # expect_equal(.as_numeric(esb.bin$k), tes.psst$k) # # expect_equal(.as_numeric(esb.chi$power), tes.chi$power, tolerance = 0.005) # expect_equal(.as_numeric(esb.chi$mean_power), mean(tes.chi$power), tolerance = 0.005) # expect_equal(.as_numeric(esb.chi$SS), tes.chi$O) # expect_equal(.as_numeric(esb.chi$Esig), tes.chi$E, tolerance = 0.005) # expect_equal(.as_numeric(esb.chi$k), tes.chi$k) # # expect_equal(.as_numeric(binom.test(tes.psst$O, tes.psst$k, mean(tes.psst$power), alternative = "greater")$p.value), # .as_numeric(tes.psst$pval)) # # expect_equal(.as_numeric(prop.test(tes.chi$O, tes.chi$k, p = mean(tes.chi$power), alternative = "greater", correct = FALSE)$p.value), # .as_numeric(tes.chi$pval), tolerance = 1e-10) # # expect_equal(.as_numeric(esb.bin$p.value), .as_numeric(tes.psst$pval), tolerance = 0.05) # expect_equal(.as_numeric(esb.chi$p.value), .as_numeric(tes.chi$pval), tolerance = 0.05) # }) # test_that("esb.test produced correct results compared to metafor: OR", { # skip_on_cran() # theta = 0.5 # df <- subset(df.OR, factor == "ADHD") # df$value <- with(df, .estimate_or_from_n(n_cases_exp, n_cases_nexp, n_controls_exp, n_controls_nexp)$value) # df$se <- with(df, .estimate_or_from_n(n_cases_exp, n_cases_nexp, n_controls_exp, n_controls_nexp)$se) # df <- subset(df, select = -c(ci_lo, ci_up, n_cases_exp, n_controls_exp)) # # tes.chi <- .quiet(metafor::tes(x = log(df$value), sei = df$se, theta = theta, test = "chi2", # alternative = "two.sided", tes.alternative = "greater")) # tes.psst <- .quiet(metafor::tes(x = log(df$value), sei = df$se, theta = theta, test = "binom", # alternative = "two.sided", tes.alternative = "greater")) # # # esb.chi <- suppressWarnings( # .quiet(esb.test(df, # measure = "OR", input = "dataframe", # method.esb = "TESS", # true_effect = exp(theta), seed = 4321))) # # esb.bin <- suppressWarnings( # .quiet(esb.test(df, # measure = "OR", input = "dataframe", # method.esb = "PSST", # true_effect = exp(theta), seed = 4321))) # # expect_equal(.as_numeric(esb.bin$power), tes.psst$power, tolerance = 0.05) # expect_equal(.as_numeric(esb.bin$mean_power), mean(tes.psst$power), tolerance = 0.05) # expect_equal(.as_numeric(esb.bin$SS), tes.psst$O) # expect_equal(.as_numeric(esb.bin$Esig), tes.psst$E, tolerance = 0.05) # expect_equal(.as_numeric(esb.bin$k), tes.psst$k) # # expect_equal(.as_numeric(esb.chi$power), tes.chi$power, tolerance = 0.05) # expect_equal(.as_numeric(esb.chi$mean_power), mean(tes.chi$power), tolerance = 0.05) # expect_equal(.as_numeric(esb.chi$SS), tes.chi$O) # expect_equal(.as_numeric(esb.chi$Esig), tes.chi$E, tolerance = 0.05) # expect_equal(.as_numeric(esb.chi$k), tes.chi$k) # # expect_equal(.as_numeric(binom.test(tes.psst$O, tes.psst$k, mean(tes.psst$power), alternative = "greater")$p.value), # .as_numeric(tes.psst$pval)) # # expect_equal(.as_numeric(prop.test(tes.chi$O, tes.chi$k, p = mean(tes.chi$power), alternative = "greater", correct = FALSE)$p.value), # .as_numeric(tes.chi$pval)) # # expect_equal(.as_numeric(esb.bin$p.value), .as_numeric(tes.psst$pval), tolerance = 0.05) # expect_equal(.as_numeric(esb.chi$p.value), .as_numeric(tes.chi$pval), tolerance = 0.05) # }) ###################### # test pess tess test_that("TESS/PSST", { TESS_PESS = function(d, sed, tau2, n_cases, n_controls, measure ) { HetVar = tau2 k = length(d) t = d/sed Precision=1/sed Precision_sq=1/sed^2 reg = lm(t ~ 0 + Precision) UWLS = as.numeric(reg$coefficients) zz=((1.96*sed-UWLS)/(sed^2+HetVar)^.5) Esigtot = sum(1-pnorm(zz)) if (measure == "SMD") { SS = .two_tail(pt(d / sed, n_cases + n_controls - 2)) < .05 } else { SS = .two_tail(pnorm(d/sed)) < .05 } SStot = sum(SS) Pss = SStot/k ESS=(SStot-Esigtot)/k Pe = Esigtot/k #Eq. 5, PSST PSST=(Pss-Pe)/(Pe*(1-Pe)/k)^.5 #Eq. 6, TESS TESS= (ESS-.05)/(.0475/k)^.5 #Logical of whether PSST and TESS are #statistically significant given one-tailed #test and alpha = 0.05 PSST_Sig = 1 - pnorm(PSST) TESS_Sig = 1 - pnorm(TESS) return(list(SS = SStot, Pss = Pss, ESS = ESS, Esig = Esigtot, Pe = Pe, UWLS = UWLS, power = 1-pnorm(zz), PSST = PSST, TESS= TESS, PSST_Sig = PSST_Sig, TESS_Sig = TESS_Sig)) } # R --------------------------------------------- df = subset(df.R, factor == "gestational_diabetes") df$measure = "Z" df$se = sqrt(1/(df$n_sample - 3)) umb.PSST = umbrella(df, true_effect = "UWLS", method.esb = "PSST", verbose = FALSE) umb.TESS = umbrella(df, true_effect = "UWLS", method.esb = "TESS", verbose = FALSE) umb.TESSPSST = umbrella(df, true_effect = "UWLS", method.esb = "TESSPSST", verbose = FALSE) STAN = TESS_PESS(d = df$value, sed = df$se, tau2 = umb.PSST[[1]]$heterogeneity$tau2, measure = "R") expect_equal(umb.PSST[[1]]$esb$p.value, STAN$PSST_Sig, tolerance = 1e-10) expect_equal(umb.TESS[[1]]$esb$p.value, STAN$TESS_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value.TESS, STAN$TESS_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value.PSST, STAN$PSST_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value, min(STAN$TESS_Sig, STAN$PSST_Sig), tolerance = 1e-10) # SMD --------------------------------------------- df = subset(df.SMD, factor == "Pharmacological") df2=subset(df, select=-c(mean_cases, mean_controls)) umb.PSST = umbrella(df2, true_effect = "UWLS", method.esb = "PSST", verbose = FALSE) umb.TESS = umbrella(df2, true_effect = "UWLS", method.esb = "TESS", verbose = FALSE) umb.TESSPSST = umbrella(df2, true_effect = "UWLS", method.esb = "TESSPSST", verbose = FALSE) value = metaConvert::es_from_hedges_g(hedges_g = df2$value, n_exp = df2$n_cases, n_nexp=df2$n_controls) STAN = TESS_PESS(d = df2$value, sed = with(df2, sqrt(1/n_cases + 1/n_controls)), n_cases = df2$n_cases, n_controls = df2$n_controls, tau2 = umb.PSST[[1]]$heterogeneity$tau, measure = "SMD") expect_equal(umb.PSST[[1]]$esb$p.value, STAN$PSST_Sig, tolerance = 1e-10) expect_equal(umb.TESS[[1]]$esb$p.value, STAN$TESS_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value.TESS, STAN$TESS_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value.PSST, STAN$PSST_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value, min(STAN$TESS_Sig, STAN$PSST_Sig), tolerance = 1e-10) # OR --------------------------------------------- df = subset(df.OR, factor == "ADHD") df$se = with(df, sqrt(1 / n_cases_exp + 1 / n_cases_nexp + 1 / n_controls_exp + 1 / n_controls_nexp)) df2=df umb.PSST = umbrella(df2, true_effect = "UWLS", method.esb = "PSST", verbose = FALSE) umb.TESS = umbrella(df2, true_effect = "UWLS", method.esb = "TESS", verbose = FALSE) umb.TESSPSST = umbrella(df2, true_effect = "UWLS", method.esb = "TESSPSST", verbose = FALSE) STAN = TESS_PESS(d = log(df2$value), sed = df2$se, n_cases = df2$n_cases, tau2 = umb.PSST[[1]]$heterogeneity$tau, measure = "OR") expect_equal(umb.PSST[[1]]$esb$p.value, STAN$PSST_Sig, tolerance = 1e-10) expect_equal(umb.TESS[[1]]$esb$p.value, STAN$TESS_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value.TESS, STAN$TESS_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value.PSST, STAN$PSST_Sig, tolerance = 1e-10) expect_equal(umb.TESSPSST[[1]]$esb$p.value, min(STAN$TESS_Sig, STAN$PSST_Sig), tolerance = 1e-10) })