tol_large = 1e-10 test_that("OR : 2x2", { skip_on_cran() df <- subset(df.OR.multi, factor == "n-3 fatty acids") mcv = metaConvert::es_from_2x2(n_cases_exp = df$n_cases_exp, n_controls_exp = df$n_controls_exp, n_cases_nexp = df$n_cases_nexp, n_controls_nexp = df$n_controls_nexp) df.agg.mfr <- metafor::escalc(yi = mcv$logor, sei = mcv$logor_se, data = df) df.agg.subgroups <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="groups" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "ID", weighted = TRUE) df.agg.outcomes <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="outcomes" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "CS", weighted = FALSE, rho = 0.5) df.mfr <- rbind(df.agg.mfr[is.na(df.agg.mfr$multiple_es), ], df.agg.subgroups, df.agg.outcomes) df.umb = subset(df, select=-c(value,ci_lo,ci_up)) umb = umbrella(df.umb, r = 0.5, mult.level=TRUE) df.agg.umb = umb[[1]]$x df.mfr <- df.mfr[order(df.mfr$author, df.mfr$year), ] df.agg.umb <- df.agg.umb[order(df.agg.umb$author, df.agg.umb$year), ] expect_equal(df.agg.umb$value, as.numeric(as.character(df.mfr$yi)), tolerance = 1e-10) expect_equal(df.agg.umb$se, sqrt(df.mfr$vi), tolerance = 1e-10) }) # Multiple groups / outcomes: effect size estimates test_that("OR : value SE", { skip_on_cran() df <- subset(df.OR.multi, factor == "n-3 fatty acids", select = -c(n_cases_exp, n_controls_exp)) df$se = with(df, (log(ci_up) - log(ci_lo)) / (2*qnorm(.975))) df.agg.mfr <- metafor::escalc(yi = log(value), sei = se, data = df) df.agg.subgroups <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="groups" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "ID", weighted = TRUE) df.agg.outcomes <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="outcomes" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "CS", weighted = FALSE, rho = 0.5) df.mfr <- rbind(df.agg.mfr[is.na(df.agg.mfr$multiple_es), ], df.agg.subgroups, df.agg.outcomes) umb = umbrella(df, r = 0.5, mult.level=TRUE) df.agg.umb = umb[[1]]$x df.mfr <- df.mfr[order(df.mfr$author, df.mfr$year), ] df.agg.umb <- df.agg.umb[order(df.agg.umb$author, df.agg.umb$year), ] expect_equal(df.agg.umb$value, as.numeric(as.character(df.mfr$yi)), tolerance = 1e-10) expect_equal(df.agg.umb$se, sqrt(df.mfr$vi), tolerance = 1e-10) }) test_that("RR : 2x2", { skip_on_cran() df <- subset(df.OR.multi, factor == "n-3 fatty acids") df$measure = "RR" mcv = metaConvert::es_from_2x2(n_cases_exp = df$n_cases_exp, n_controls_exp = df$n_controls_exp, n_cases_nexp = df$n_cases_nexp, n_controls_nexp = df$n_controls_nexp) df.agg.mfr <- metafor::escalc(yi = mcv$logrr, sei = mcv$logrr_se, data = df) df.agg.subgroups <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="groups" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "ID", weighted = TRUE) df.agg.outcomes <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="outcomes" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "CS", weighted = FALSE, rho = 0.5) df.mfr <- rbind(df.agg.mfr[is.na(df.agg.mfr$multiple_es), ], df.agg.subgroups, df.agg.outcomes) df.umb = subset(df, select=-c(value,ci_lo,ci_up)) umb = umbrella(df.umb, r = 0.5, mult.level=TRUE) df.agg.umb = umb[[1]]$x df.mfr <- df.mfr[order(df.mfr$author, df.mfr$year), ] df.agg.umb <- df.agg.umb[order(df.agg.umb$author, df.agg.umb$year), ] expect_equal(df.agg.umb$value, as.numeric(as.character(df.mfr$yi)), tolerance = 1e-10) expect_equal(df.agg.umb$se, sqrt(df.mfr$vi), tolerance = 1e-10) }) test_that("RR : value SE", { skip_on_cran() df <- subset(df.OR.multi, factor == "n-3 fatty acids") df$measure = "RR" dfRR = df mcv = metaConvert::es_from_2x2(n_cases_exp = df$n_cases_exp, n_controls_exp = df$n_controls_exp, n_cases_nexp = df$n_cases_nexp, n_controls_nexp = df$n_controls_nexp) df$value = exp(mcv$logrr) df$se = mcv$logrr_se df.agg.mfr <- metafor::escalc(yi = mcv$logrr, sei = mcv$logrr_se, data = df) df.agg.subgroups <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="groups" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "ID", weighted = TRUE) df.agg.outcomes <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="outcomes" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "CS", weighted = FALSE, rho = 0.5) df.mfr <- rbind(df.agg.mfr[is.na(df.agg.mfr$multiple_es), ], df.agg.subgroups, df.agg.outcomes) df.umb= subset(df, select=-c(ci_lo,ci_up,n_cases_exp, n_controls_exp)) umb = umbrella(df.umb, r = 0.5, mult.level=TRUE) df.agg.umb = umb[[1]]$x df.mfr <- df.mfr[order(df.mfr$author, df.mfr$year), ] df.agg.umb <- df.agg.umb[order(df.agg.umb$author, df.agg.umb$year), ] expect_equal(df.agg.umb$value, as.numeric(as.character(df.mfr$yi)), tolerance = 1e-10) expect_equal(df.agg.umb$se, sqrt(df.mfr$vi), tolerance = 1e-10) }) test_that("HR : value SE", { skip_on_cran() df <- subset(df.OR.multi, factor == "n-3 fatty acids") df$measure = "HR" dfRR = df mcv = metaConvert::es_from_2x2(n_cases_exp = df$n_cases_exp, n_controls_exp = df$n_controls_exp, n_cases_nexp = df$n_cases_nexp, n_controls_nexp = df$n_controls_nexp) df$value = exp(mcv$logrr) df$se = mcv$logrr_se df.agg.mfr <- metafor::escalc(yi = mcv$logrr, sei = mcv$logrr_se, data = df) df.agg.subgroups <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="groups" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "ID", weighted = TRUE) df.agg.outcomes <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="outcomes" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "CS", weighted = FALSE, rho = 0.5) df.mfr <- rbind(df.agg.mfr[is.na(df.agg.mfr$multiple_es), ], df.agg.subgroups, df.agg.outcomes) df.umb= subset(df, select=-c(ci_lo,ci_up,n_cases_exp, n_controls_exp)) umb = umbrella(df.umb, r = 0.5, mult.level=TRUE) df.agg.umb = umb[[1]]$x df.mfr <- df.mfr[order(df.mfr$author, df.mfr$year), ] df.agg.umb <- df.agg.umb[order(df.agg.umb$author, df.agg.umb$year), ] expect_equal(df.agg.umb$value, as.numeric(as.character(df.mfr$yi)), tolerance = 1e-10) expect_equal(df.agg.umb$se, sqrt(df.mfr$vi), tolerance = 1e-10) }) test_that("SMD : value SE", { skip_on_cran() dfSMD <- subset(df.SMD, factor == "Pharmacological", select=-c(mean_cases, mean_controls)) dfSMD$author[2] = dfSMD$author[3] <- dfSMD$author[1] dfSMD$year[2] = dfSMD$year[3] <- dfSMD$year[1] dfSMD$multiple_es = NA dfSMD$multiple_es[1:3] <- "outcomes" dfSMD$measure = "G" dfSMD$author[5] = dfSMD$author[6] <- dfSMD$author[7] dfSMD$year[5] = dfSMD$year[6] <- dfSMD$year[7] dfSMD$multiple_es[5:7] <- "groups" df.agg.mfr <- metafor::escalc(yi = dfSMD$value, sei = dfSMD$se, data = dfSMD) df.agg.subgroups <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="groups" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "ID", weighted = TRUE) df.agg.outcomes <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="outcomes" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "CS", weighted = FALSE, rho = 0.5) df.mfr <- rbind(df.agg.mfr[is.na(df.agg.mfr$multiple_es), ], df.agg.subgroups, df.agg.outcomes) df.umb= subset(dfSMD, select=-c(ci_lo,ci_up)) umb = umbrella(df.umb, r = 0.5, mult.level=TRUE) df.agg.umb = umb[[1]]$x df.mfr <- df.mfr[order(df.mfr$author, df.mfr$year), ] df.agg.umb <- df.agg.umb[order(df.agg.umb$author, df.agg.umb$year), ] expect_equal(df.agg.umb$value, as.numeric(as.character(df.mfr$yi)), tolerance = 1e-10) expect_equal(df.agg.umb$se, sqrt(df.mfr$vi), tolerance = 1e-10) }) test_that("MD : value SE", { skip_on_cran() dfMD <- subset(df.SMD, factor == "Pharmacological", select=-c(mean_cases, mean_controls)) dfMD$author[2] = dfMD$author[3] <- dfMD$author[1] dfMD$year[2] = dfMD$year[3] <- dfMD$year[1] dfMD$multiple_es = NA dfMD$multiple_es[1:3] <- "outcomes" dfMD$measure = "MD" dfMD$author[5] = dfMD$author[6] <- dfMD$author[7] dfMD$year[5] = dfMD$year[6] <- dfMD$year[7] dfMD$multiple_es[5:7] <- "groups" df.agg.mfr <- metafor::escalc(yi = dfMD$value, sei = dfMD$se, data = dfMD) df.agg.subgroups <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="groups" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "ID", weighted = TRUE) df.agg.outcomes <- metafor::aggregate.escalc( df.agg.mfr[df.agg.mfr$multiple_es=="outcomes" & !is.na(df.agg.mfr$multiple_es), ], cluster = author, struct = "CS", weighted = FALSE, rho = 0.5) df.mfr <- rbind(df.agg.mfr[is.na(df.agg.mfr$multiple_es), ], df.agg.subgroups, df.agg.outcomes) df.umb = subset(dfMD, select=-c(ci_lo,ci_up)) umb = umbrella(df.umb, r = 0.5, mult.level=TRUE) df.agg.umb = umb[[1]]$x_md df.mfr <- df.mfr[order(df.mfr$author, df.mfr$year), ] df.agg.umb <- df.agg.umb[order(df.agg.umb$author, df.agg.umb$year), ] expect_equal(df.agg.umb$value, as.numeric(as.character(df.mfr$yi)), tolerance = 1e-10) expect_equal(df.agg.umb$se, sqrt(df.mfr$vi), tolerance = 1e-10) })