From 0d3e9e62bffb2ceb0a369d811bd874edbba20705 Mon Sep 17 00:00:00 2001
From: SamCH93 <samuel.pawel@gmail.com>
Date: Thu, 4 May 2023 15:50:08 +0200
Subject: [PATCH] Make command to extract code, last polish of MS

---
 data/preprocess-rpcb-data.R |   2 +-
 paper/Makefile              |   4 +
 paper/rsabsence.R           | 380 ++++++++++++++++++++++++++++++++++++
 paper/rsabsence.Rnw         |  43 +---
 rsabsence.pdf               | Bin 309327 -> 309295 bytes
 5 files changed, 391 insertions(+), 38 deletions(-)
 create mode 100755 paper/rsabsence.R
 mode change 100755 => 100644 rsabsence.pdf

diff --git a/data/preprocess-rpcb-data.R b/data/preprocess-rpcb-data.R
index 06cda7b..80bf782 100755
--- a/data/preprocess-rpcb-data.R
+++ b/data/preprocess-rpcb-data.R
@@ -156,7 +156,7 @@ datClean2 %>%
     geom_hline(yintercept = 0, lty = 2, alpha = 0.9, linewidth = 0.4) +
     geom_vline(xintercept = 0, lty = 2, alpha = 0.9, linewidth = 0.4) +
     geom_point(aes(fill = rsig), shape = 21, size = 2) +
-    geom_rug(aes(color = rsig), size = 0.3, show.legend = FALSE) +
+    geom_rug(aes(color = rsig), linewidth = 0.3, show.legend = FALSE) +
     labs(x = "Original effect estimate (SMD)",
          y = "Replication effect estimate (SMD)",
          fill = "") +
diff --git a/paper/Makefile b/paper/Makefile
index 3df9c3d..c7f3aa5 100755
--- a/paper/Makefile
+++ b/paper/Makefile
@@ -23,6 +23,10 @@ pdf2:
 	pdflatex $(FILE)
 	pdflatex $(FILE)
 
+## extract the R code from Rnw file
+code:
+	Rscript -e "knitr::purl('$(FILE).Rnw')" --vanilla
+
 ## clean
 clean:  
 	-rm $(FILE).aux  $(FILE).blg  $(FILE).log  $(FILE).tex  $(FILE).bbl \
diff --git a/paper/rsabsence.R b/paper/rsabsence.R
new file mode 100755
index 0000000..ec52a89
--- /dev/null
+++ b/paper/rsabsence.R
@@ -0,0 +1,380 @@
+## ----"setup", include = FALSE-------------------------------------------------
+## knitr options
+library(knitr)
+opts_chunk$set(fig.height = 4,
+               echo = FALSE,
+               warning = FALSE,
+               message = FALSE,
+               cache = FALSE,
+               eval = TRUE)
+
+## should sessionInfo be printed at the end?
+Reproducibility <- TRUE
+
+## packages
+library(ggplot2) # plotting
+library(gridExtra) # combining ggplots
+library(dplyr) # data manipulation
+library(reporttools) # reporting of p-values
+
+## not show scientific notation for small numbers
+options("scipen" = 10)
+
+## the replication Bayes factor under normality
+BFr <- function(to, tr, so, sr) {
+    bf <- dnorm(x = tr, mean = 0, sd = so) /
+        dnorm(x = tr, mean = to, sd = sqrt(so^2 + sr^2))
+    return(bf)
+}
+## function to format Bayes factors
+formatBF. <- function(BF) {
+    if (is.na(BF)) {
+        BFform <- NA
+    } else if (BF > 1) {
+        if (BF > 1000) {
+            BFform <- "> 1000"
+        } else {
+            BFform <- as.character(signif(BF, 2))
+        }
+    } else {
+        if (BF < 1/1000) {
+            BFform <- "< 1/1000"
+        } else {
+            BFform <- paste0("1/", signif(1/BF, 2))
+        }
+    }
+    if (!is.na(BFform) && BFform == "1/1") {
+        return("1")
+    } else {
+        return(BFform)
+    }
+}
+formatBF <- Vectorize(FUN = formatBF.)
+
+## Bayes factor under normality with unit-information prior under alternative
+BF01 <- function(estimate, se, null = 0, unitvar = 4) {
+    bf <- dnorm(x = estimate, mean = null, sd = se) /
+        dnorm(x = estimate, mean = null, sd = sqrt(se^2 + unitvar))
+    return(bf)
+}
+
+
+## ----"data"-------------------------------------------------------------------
+## data
+rpcbRaw <- read.csv(file = "../data/rpcb-effect-level.csv")
+rpcb <- rpcbRaw %>%
+    mutate(
+        ## recompute one-sided p-values based on normality
+        ## (in direction of original effect estimate)
+        zo = smdo/so,
+        zr = smdr/sr,
+        po1 = pnorm(q = abs(zo), lower.tail = FALSE),
+        pr1 = pnorm(q = abs(zr), lower.tail = ifelse(sign(zo) < 0, TRUE, FALSE)),
+        ## compute some other quantities
+        c = so^2/sr^2, # variance ratio
+        d = smdr/smdo, # relative effect size
+        po2 = 2*(1 - pnorm(q = abs(zo))), # two-sided original p-value
+        pr2 = 2*(1 - pnorm(q = abs(zr))), # two-sided replication p-value
+        sm = 1/sqrt(1/so^2 + 1/sr^2), # standard error of fixed effect estimate
+        smdm = (smdo/so^2 + smdr/sr^2)*sm^2, # fixed effect estimate
+        pm2 = 2*(1 - pnorm(q = abs(smdm/sm))), # two-sided fixed effect p-value
+        Q = (smdo - smdr)^2/(so^2 + sr^2), # Q-statistic
+        pQ = pchisq(q = Q, df = 1, lower.tail = FALSE), # p-value from Q-test
+        BForig = BF01(estimate = smdo, se = so), # unit-information BF for original
+        BForigformat = formatBF(BF = BForig),
+        BFrep = BF01(estimate = smdr, se = sr), # unit-information BF for replication
+        BFrepformat = formatBF(BF = BFrep)
+    )
+
+rpcbNull <- rpcb %>%
+    filter(resulto == "Null")
+
+## 2 examples
+study1 <- "(20, 1, 1)" # evidence of absence
+study2 <- "(29, 2, 2)" # absence of evidence
+plotDF1 <- rpcbNull %>%
+    filter(id %in% c(study1, study2)) %>%
+    mutate(label = ifelse(id == study1,
+                          "Goetz et al. (2011)\nEvidence of absence",
+                          "Dawson et al. (2011)\nAbsence of evidence"))
+conflevel <- 0.95
+
+
+## ----"2-example-studies", fig.height = 3--------------------------------------
+## create plot showing two example study pairs with null results
+ggplot(data = plotDF1) +
+    facet_wrap(~ label) +
+    geom_hline(yintercept = 0, lty = 2, alpha = 0.3) +
+    geom_pointrange(aes(x = "Original", y = smdo,
+                        ymin = smdo - qnorm(p = (1 + conflevel)/2)*so,
+                        ymax = smdo + qnorm(p = (1 + conflevel)/2)*so), fatten = 3) +
+    geom_pointrange(aes(x = "Replication", y = smdr,
+                        ymin = smdr - qnorm(p = (1 + conflevel)/2)*sr,
+                        ymax = smdr + qnorm(p = (1 + conflevel)/2)*sr), fatten = 3) +
+    geom_text(aes(x = 1.05, y = 2.5,
+                  label = paste("italic(n) ==", no)), col = "darkblue",
+              parse = TRUE, size = 3.8, hjust = 0) +
+    geom_text(aes(x = 2.05, y = 2.5,
+                  label = paste("italic(n) ==", nr)), col = "darkblue",
+              parse = TRUE, size = 3.8, hjust = 0) +
+    geom_text(aes(x = 1.05, y = 3,
+                  label = paste("italic(p) ==", formatPval(po))), col = "darkblue",
+              parse = TRUE, size = 3.8, hjust = 0) +
+    geom_text(aes(x = 2.05, y = 3,
+                  label = paste("italic(p) ==", formatPval(pr))), col = "darkblue",
+              parse = TRUE, size = 3.8, hjust = 0) +
+    labs(x = "", y = "Standardized mean difference") +
+    theme_bw() +
+    theme(panel.grid.minor = element_blank(),
+          panel.grid.major.x = element_blank(),
+          strip.text = element_text(size = 12, margin = margin(4), vjust = 1.5),
+          strip.background = element_rect(fill = alpha("tan", 0.4)),
+          axis.text = element_text(size = 12))
+
+
+## ----"plot-null-findings-rpcb", fig.height = 8.25, fig.width = "0.95\\linewidth"----
+## compute TOST p-values
+## Wellek (2010): strict - 0.36 # liberal - .74
+# Cohen: small - 0.3 # medium - 0.5 # large - 0.8
+## 80-125% convention for AUC and Cmax FDA/EMA
+## 1.3 for oncology OR/HR -> log(1.3)*sqrt(3)/pi = 0.1446
+margin <- 0.74
+conflevel <- 0.9
+rpcbNull$ptosto <- with(rpcbNull, pmax(pnorm(q = smdo, mean = margin, sd = so,
+                                             lower.tail = TRUE),
+                                       pnorm(q = smdo, mean = -margin, sd = so,
+                                             lower.tail = FALSE)))
+rpcbNull$ptostr <- with(rpcbNull, pmax(pnorm(q = smdr, mean = margin, sd = sr,
+                                             lower.tail = TRUE),
+                                       pnorm(q = smdr, mean = -margin, sd = sr,
+                                             lower.tail = FALSE)))
+## highlight the studies from Goetz and Dawson
+ex1 <- "(20, 1, 1)"
+ind1 <- which(rpcbNull$id == ex1)
+ex2 <- "(29, 2, 2)"
+ind2 <- which(rpcbNull$id == ex2)
+rpcbNull$id <- ifelse(rpcbNull$id == ex1,
+                      "(20, 1, 1) - Goetz et al. (2011)", rpcbNull$id)
+rpcbNull$id <- ifelse(rpcbNull$id == ex2,
+                      "(29, 2, 2) - Dawson et al. (2011)", rpcbNull$id)
+
+## create plots of all study pairs with null results in original study
+ggplot(data = rpcbNull) +
+    ## order in ascending original paper order and label with id variable
+    facet_wrap(~ paper + experiment + effect + id,
+               labeller = label_bquote(.(id)), scales = "free", ncol = 3) +
+    geom_hline(yintercept = 0, lty = 2, alpha = 0.25) +
+    ## equivalence margin
+    geom_hline(yintercept = c(-margin, margin), lty = 3, col = 2, alpha = 0.9) +
+    ## ## also show the 95% CIs
+    ## geom_linerange(aes(x = "Original", y = smdo,
+    ##                   ymin = smdo - qnorm(p = (1 + 0.95)/2)*so,
+    ##                   ymax = smdo + qnorm(p = (1 + 0.95)/2)*so), size = 0.2, alpha = 0.6) +
+    ## geom_linerange(aes(x = "Replication", y = smdr,
+    ##                   ymin = smdr - qnorm(p = (1 + 0.95)/2)*sr,
+    ##                   ymax = smdr + qnorm(p = (1 + 0.95)/2)*sr), size = 0.2, alpha = 0.6) +
+    ## 90% CIs
+    geom_pointrange(aes(x = "Original", y = smdo,
+                        ymin = smdo - qnorm(p = (1 + conflevel)/2)*so,
+                        ymax = smdo + qnorm(p = (1 + conflevel)/2)*so),
+                    size = 0.5, fatten = 1.5) +
+    geom_pointrange(aes(x = "Replication", y = smdr,
+                        ymin = smdr - qnorm(p = (1 + conflevel)/2)*sr,
+                        ymax = smdr + qnorm(p = (1 + conflevel)/2)*sr),
+                    size = 0.5, fatten = 1.5) +
+    annotate(geom = "ribbon", x = seq(0, 3, 0.01), ymin = -margin, ymax = margin,
+             alpha = 0.05, fill = 2) +
+    labs(x = "", y = "Standardized mean difference") +
+    geom_text(aes(x = 1.05, y = pmax(smdo + 2.5*so, smdr + 2.5*sr, 1.1*margin),
+                  label = paste("italic(n) ==", no)), col = "darkblue",
+              parse = TRUE, size = 2.3, hjust = 0, vjust = 2) +
+    geom_text(aes(x = 2.05, y = pmax(smdo + 2.5*so, smdr + 2.5*sr, 1.1*margin),
+                  label = paste("italic(n) ==", nr)), col = "darkblue",
+              parse = TRUE, size = 2.3, hjust = 0, vjust = 2) +
+    geom_text(aes(x = 1.05, y = pmax(smdo + 2.5*so, smdr + 2.5*sr, 1.1*margin),
+                  label = paste("italic(p)",
+                                ifelse(po < 0.0001, "", "=="),
+                                formatPval(po))), col = "darkblue",
+              parse = TRUE, size = 2.3, hjust = 0) +
+    geom_text(aes(x = 2.05, y = pmax(smdo + 2.5*so, smdr + 2.5*sr, 1.1*margin),
+                  label = paste("italic(p)",
+                                ifelse(pr < 0.0001, "", "=="),
+                                formatPval(pr))), col = "darkblue",
+              parse = TRUE, size = 2.3, hjust = 0) +
+    geom_text(aes(x = 1.05, y = pmax(smdo + 2.5*so, smdr + 2.5*sr, 1.1*margin),
+                  label = paste("italic(p)['TOST']",
+                                ifelse(ptosto < 0.0001, "", "=="),
+                                formatPval(ptosto))),
+              col = "darkblue", parse = TRUE, size = 2.3, hjust = 0, vjust = 3) +
+    geom_text(aes(x = 2.05, y = pmax(smdo + 2.5*so, smdr + 2.5*sr, 1.1*margin),
+                  label = paste("italic(p)['TOST']",
+                                ifelse(ptostr < 0.0001, "", "=="),
+                                formatPval(ptostr))),
+              col = "darkblue", parse = TRUE, size = 2.3, hjust = 0, vjust = 3) +
+    geom_text(aes(x = 1.05, y = pmax(smdo + 2.5*so, smdr + 2.5*sr, 1.1*margin),
+                  label = paste("BF['01']", ifelse(BForig <= 1/1000, "", "=="),
+                                BForigformat)), col = "darkblue", parse = TRUE,
+              size = 2.3, hjust = 0, vjust = 4.5) +
+    geom_text(aes(x = 2.05, y = pmax(smdo + 2.5*so, smdr + 2.5*sr, 1.1*margin),
+                  label = paste("BF['01']", ifelse(BFrep <= 1/1000, "", "=="),
+                                BFrepformat)), col = "darkblue", parse = TRUE,
+              size = 2.3, hjust = 0, vjust = 4.5) +
+    coord_cartesian(x = c(1.1, 2.4)) +
+    theme_bw() +
+    theme(panel.grid.minor = element_blank(),
+          panel.grid.major = element_blank(),
+          strip.text = element_text(size = 8, margin = margin(3), vjust = 2),
+          strip.background = element_rect(fill = alpha("tan", 0.4)),
+          axis.text = element_text(size = 8))
+
+
+## ----"successes-RPCB"---------------------------------------------------------
+ntotal <- nrow(rpcbNull)
+
+## successes non-significance criterion
+nullSuccesses <- sum(rpcbNull$po > 0.05 & rpcbNull$pr > 0.05)
+
+## success equivalence testing criterion
+equivalenceSuccesses <- sum(rpcbNull$ptosto <= 0.05 & rpcbNull$ptostr <= 0.05)
+ptosto1 <- rpcbNull$ptosto[ind1]
+ptostr1 <- rpcbNull$ptostr[ind1]
+ptosto2 <- rpcbNull$ptosto[ind2]
+ptostr2 <- rpcbNull$ptostr[ind2]
+
+## success BF criterion
+bfSuccesses <- sum(rpcbNull$BForig > 3 & rpcbNull$BFrep > 3)
+BForig1 <- rpcbNull$BForig[ind1]
+BFrep1 <- rpcbNull$BFrep[ind1]
+BForig2 <- rpcbNull$BForig[ind2]
+BFrep2 <- rpcbNull$BFrep[ind2]
+
+
+## ----"sensitivity", fig.height = 6.5------------------------------------------
+## compute number of successful replications as a function of the equivalence margin
+marginseq <- seq(0.01, 4.5, 0.01)
+alphaseq <- c(0.01, 0.05, 0.1)
+sensitivityGrid <- expand.grid(m = marginseq, a = alphaseq)
+equivalenceDF <- lapply(X = seq(1, nrow(sensitivityGrid)), FUN = function(i) {
+    m <- sensitivityGrid$m[i]
+    a <- sensitivityGrid$a[i]
+    rpcbNull$ptosto <- with(rpcbNull, pmax(pnorm(q = smdo, mean = m, sd = so,
+                                                 lower.tail = TRUE),
+                                           pnorm(q = smdo, mean = -m, sd = so,
+                                                 lower.tail = FALSE)))
+    rpcbNull$ptostr <- with(rpcbNull, pmax(pnorm(q = smdr, mean = m, sd = sr,
+                                                 lower.tail = TRUE),
+                                           pnorm(q = smdr, mean = -m, sd = sr,
+                                                 lower.tail = FALSE)))
+    successes <- sum(rpcbNull$ptosto <= a & rpcbNull$ptostr <= a)
+    data.frame(margin = m, alpha = a,
+               successes = successes, proportion = successes/nrow(rpcbNull))
+}) %>%
+    bind_rows()
+
+## plot number of successes as a function of margin
+nmax <- nrow(rpcbNull)
+bks <- c(0, 3, 6, 9, 11, 15)
+labs <- paste0(bks, " (", round(bks/nmax*100, 0), "%)")
+rpcbSuccesses <- 11
+marbks <- c(0, margin, 1, 2, 3, 4)
+plotA <- ggplot(data = equivalenceDF,
+                aes(x = margin, y = successes,
+                    color = factor(alpha, ordered = TRUE, levels = rev(alphaseq)))) +
+    facet_wrap(~ 'italic("p")["TOST"] <= alpha ~ "in original and replication study"',
+               labeller = label_parsed) +
+    geom_vline(xintercept = margin, lty = 3, alpha = 0.4) +
+    annotate(geom = "segment", x = margin + 0.25, xend = margin + 0.01, y = 2, yend = 2,
+             arrow = arrow(type = "closed", length = unit(0.02, "npc")), alpha = 0.9,
+             color = "darkgrey") +
+    annotate(geom = "text", x = margin + 0.28, y = 2, color = "darkgrey",
+             label = "margin used in main analysis",
+             size = 3, alpha = 0.9, hjust = 0) +
+    geom_hline(yintercept = rpcbSuccesses, lty = 2, alpha = 0.4) +
+    annotate(geom = "segment", x = 0.1, xend = 0.1, y = 13, yend = 11.2,
+             arrow = arrow(type = "closed", length = unit(0.02, "npc")), alpha = 0.9,
+             color = "darkgrey") +
+    annotate(geom = "text", x = -0.04, y = 13.5, color = "darkgrey",
+             label = "non-significance criterion successes",
+             size = 3, alpha = 0.9, hjust = 0) +
+    geom_step(alpha = 0.8, linewidth = 0.8) +
+    scale_y_continuous(breaks = bks, labels = labs) +
+    scale_x_continuous(breaks = marbks) +
+    coord_cartesian(xlim = c(0, max(equivalenceDF$margin))) +
+    labs(x = bquote("Equivalence margin" ~ Delta),
+         y = "Successful replications",
+         color = bquote("threshold" ~ alpha)) +
+    theme_bw() +
+    theme(panel.grid.minor = element_blank(),
+          panel.grid.major = element_blank(),
+          strip.background = element_rect(fill = alpha("tan", 0.4)),
+          strip.text = element_text(size = 12),
+          legend.position = c(0.85, 0.25),
+          plot.background = element_rect(fill = "transparent", color = NA),
+          legend.box.background = element_rect(fill = "transparent", colour = NA))
+
+## compute number of successful replications as a function of the prior scale
+priorsdseq <- seq(0, 40, 0.1)
+bfThreshseq <- c(3, 6, 10)
+sensitivityGrid2 <- expand.grid(s = priorsdseq, thresh = bfThreshseq)
+bfDF <- lapply(X = seq(1, nrow(sensitivityGrid2)), FUN = function(i) {
+    priorsd <- sensitivityGrid2$s[i]
+    thresh <- sensitivityGrid2$thresh[i]
+    rpcbNull$BForig <- with(rpcbNull, BF01(estimate = smdo, se = so, unitvar = priorsd^2))
+    rpcbNull$BFrep <- with(rpcbNull, BF01(estimate = smdr, se = sr, unitvar = priorsd^2))
+    successes <- sum(rpcbNull$BForig >= thresh & rpcbNull$BFrep >= thresh)
+    data.frame(priorsd = priorsd, thresh = thresh,
+               successes = successes, proportion = successes/nrow(rpcbNull))
+}) %>%
+    bind_rows()
+
+## plot number of successes as a function of prior sd
+priorbks <- c(0, 2, 10, 20, 30, 40)
+plotB <- ggplot(data = bfDF,
+                aes(x = priorsd, y = successes, color = factor(thresh, ordered = TRUE))) +
+    facet_wrap(~ '"BF"["01"] >= gamma ~ "in original and replication study"',
+               labeller = label_parsed) +
+    geom_vline(xintercept = 2, lty = 3, alpha = 0.4) +
+    geom_hline(yintercept = rpcbSuccesses, lty = 2, alpha = 0.4) +
+    annotate(geom = "segment", x = 7, xend = 2 + 0.2, y = 0.5, yend = 0.5,
+             arrow = arrow(type = "closed", length = unit(0.02, "npc")), alpha = 0.9,
+             color = "darkgrey") +
+    annotate(geom = "text", x = 7.5, y = 0.5, color = "darkgrey",
+             label = "standard deviation used in main analysis",
+             size = 3, alpha = 0.9, hjust = 0) +
+    annotate(geom = "segment", x = 0.5, xend = 0.5, y = 13, yend = 11.2,
+             arrow = arrow(type = "closed", length = unit(0.02, "npc")), alpha = 0.9,
+             color = "darkgrey") +
+    annotate(geom = "text", x = 0.05, y = 13.5, color = "darkgrey",
+             label = "non-significance criterion successes",
+             size = 3, alpha = 0.9, hjust = 0) +
+    geom_step(alpha = 0.8, linewidth = 0.8) +
+    scale_y_continuous(breaks = bks, labels = labs, limits = c(0, nmax)) +
+    scale_x_continuous(breaks = priorbks) +
+    coord_cartesian(xlim = c(0, max(bfDF$priorsd))) +
+    labs(x = "Prior standard deviation",
+         y = "Successful replications ",
+         color = bquote("threshold" ~ gamma)) +
+    theme_bw() +
+    theme(panel.grid.minor = element_blank(),
+          panel.grid.major = element_blank(),
+          strip.background = element_rect(fill = alpha("tan", 0.4)),
+          strip.text = element_text(size = 12),
+          legend.position = c(0.85, 0.25),
+          plot.background = element_rect(fill = "transparent", color = NA),
+          legend.box.background = element_rect(fill = "transparent", colour = NA))
+
+grid.arrange(plotA, plotB, ncol = 1)
+
+
+## ----"interesting-study"------------------------------------------------------
+studyInteresting <- filter(rpcbNull, id == "(48, 2, 4)")
+noInteresting <- studyInteresting$no
+nrInteresting <- studyInteresting$nr
+
+
+
+
+## ----"sessionInfo2", echo = Reproducibility, results = Reproducibility--------
+cat(paste(Sys.time(), Sys.timezone(), "\n"))
+sessionInfo()
+
diff --git a/paper/rsabsence.Rnw b/paper/rsabsence.Rnw
index 744da7c..714edba 100755
--- a/paper/rsabsence.Rnw
+++ b/paper/rsabsence.Rnw
@@ -247,42 +247,14 @@ rpcb <- rpcbRaw %>%
 rpcbNull <- rpcb %>%
     filter(resulto == "Null")
 
-## check the sample sizes
-## paper 5 (https://osf.io/q96yj) - 1 Cohen's d - sample size correspond to forest plot
-## paper 9 (https://osf.io/yhq4n) - 3 Cohen's w- sample size do not correspond at all
-## paper 15 (https://osf.io/ytrx5) - 1 r - sample size correspond to forest plot
-## paper 19 (https://osf.io/465r3) - 2 Cohen's dz - sample size correspond to forest plot
-## paper 20 (https://osf.io/acg8s) - 1 r and 1 Cliff's delta - sample size correspond to forest plot
-## paper 21 (https://osf.io/ycq5g) - 1 Cohen's d - sample size correspond to forest plot
-## paper 24 (https://osf.io/pcuhs) - 2 Cohen's d - sample size correspond to forest plot
-## paper 28 (https://osf.io/gb7sr/) - 3 Cohen's d - sample size correspond to forest plot
-## paper 29 (https://osf.io/8acw4) - 1 Cohen's d - sample size do not correspond, seem to be double
-## paper 41 (https://osf.io/qnpxv) - 1 Hazard ratio - sample size correspond to forest plot
-## paper 47 (https://osf.io/jhp8z) - 2 r - sample size correspond to forest plot
-## paper 48 (https://osf.io/zewrd) - 1 r - sample size do not correspond to forest plot for original study
-
 ## 2 examples
-## some evidence for absence of effect https://doi.org/10.7554/eLife.45120 I
-## can't find the replication effect like reported in the data set :( let's take
-## it at face value we are not data detectives
-## https://iiif.elifesciences.org/lax/45120%2Felife-45120-fig4-v1.tif/full/1500,/0/default.jpg
-study1 <- "(20, 1, 1)"
-## absence of evidence
-study2 <- "(29, 2, 2)"
-## https://iiif.elifesciences.org/lax/25306%2Felife-25306-fig5-v2.tif/full/1500,/0/default.jpg
+study1 <- "(20, 1, 1)" # evidence of absence
+study2 <- "(29, 2, 2)" # absence of evidence
 plotDF1 <- rpcbNull %>%
     filter(id %in% c(study1, study2)) %>%
     mutate(label = ifelse(id == study1,
                           "Goetz et al. (2011)\nEvidence of absence",
                           "Dawson et al. (2011)\nAbsence of evidence"))
-## ## RH: this data is really a mess. turns out for Dawson n represents the group
-## ## size (n = 6 in https://osf.io/8acw4) while in Goetz it is the sample size of
-## ## the whole experiment (n = 34 and 61 in https://osf.io/acg8s). in study 2 the
-## ## so multiply by 2 to have the total sample size, see Figure 5A
-## ## https://doi.org/10.7554/eLife.25306.012
-## plotDF1$no[plotDF1$id == study2] <- plotDF1$no[plotDF1$id == study2]*2
-## plotDF1$nr[plotDF1$id == study2] <- plotDF1$nr[plotDF1$id == study2]*2
-
 conflevel <- 0.95
 @
 
@@ -627,9 +599,6 @@ effect estimates even lie outside the equivalence margin.
 
 
 
-% We chose the margin $\Delta = \Sexpr{margin}$ primarily for illustrative
-% purposes and because effect sizes in preclinical research are typically much
-% larger than in clinical research.
 The post-hoc specification of equivalence margins is controversial. Ideally, the
 margin should be specified on a case-by-case basis in a pre-registered protocol
 before the studies are conducted by researchers familiar with the subject
@@ -656,7 +625,7 @@ replications as a function of the margin $\Delta$ and for different TOST
 proposed by \citet{Hauck1986}. We see that for realistic margins between $0$ and
 $1$, the proportion of replication successes remains below $50\%$ for the
 conventional $\alpha = 0.05$ level. To achieve a success rate of
-$11/15 = \Sexpr{round(11/15*100, 1)}\%$, as was achieved with the
+$11/15 = \Sexpr{round(11/15*100, 0)}\%$, as was achieved with the
 non-significance criterion from the RPCB, unrealistic margins of $\Delta > 2$
 are required, highlighting the paucity of evidence provided by these studies.
 Changing the success criterion to a more lenient level ($\alpha = 0.1$) or a
@@ -892,18 +861,18 @@ deviations larger than the unit-information standard deviation of $2$, as this
 corresponds to the assumption of very large effect sizes under the alternatives.
 However, to achieve replication success for a larger proportion of replications
 than the observed
-$\Sexpr{bfSuccesses}/\Sexpr{ntotal} = \Sexpr{round(bfSuccesses/ntotal*100, 1)}\%$,
+$\Sexpr{bfSuccesses}/\Sexpr{ntotal} = \Sexpr{round(bfSuccesses/ntotal*100, 0)}\%$,
 unreasonably large prior standard deviations have to be specified. For instance,
 a standard deviation of roughly $5$ is required to achieve replication success
 in $50\%$ of the replications at a lenient Bayes factor threshold of
 $\gamma = 3$. The standard deviation needs to be almost $20$ so that the same
-success rate $11/15 = \Sexpr{round(11/15*100, 1)}\%$ as with the
+success rate $11/15 = \Sexpr{round(11/15*100, 0)}\%$ as with the
 non-significance criterion is achieved. The necessary standard deviations are
 even higher for stricter Bayes factor threshold, such as $\gamma = 6$ or
 $\gamma = 10$.
 
 
-<< >>=
+<< "interesting-study" >>=
 studyInteresting <- filter(rpcbNull, id == "(48, 2, 4)")
 noInteresting <- studyInteresting$no
 nrInteresting <- studyInteresting$nr
diff --git a/rsabsence.pdf b/rsabsence.pdf
old mode 100755
new mode 100644
index 964b30c0c38966696683489c029888239df95dde..7e2e8680c4a3b98936af4777beb42470e9824070
GIT binary patch
delta 11497
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
SgCv3H<l=y*q7qk>fd5}vnGRzB

delta 11574
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

-- 
GitLab