# load data from google spreadsheet
library(RCurl)
library(bitops)
library(metafor)
library(Formula)
my_data <- read.csv("~/Desktop/Dropbox/DrSc UABC/Colaborations/Juan Quispe/Basilar Artery/basilarArteryDataCollector/R_meta_analysis_example_data - Sheet1.csv", dec=",")
my_data

Calculating effect sizes

my_data <- escalc(n1i = n_controls, n2i = n_patients, m1i = mean_controls, m2i = mean_patients, 
    sd1i = sd_controls, sd2i = sd_patients, data = my_data, measure = "SMD", 
    append = TRUE)

Calculating random-effects meta-analysis

ma_model_1 <- rma(yi, vi, data = my_data)
summary(ma_model_1)

Random-Effects Model (k = 12; tau^2 estimator: REML)

  logLik  deviance       AIC       BIC      AICc 
-24.4650   48.9300   52.9300   53.7258   54.4300   

tau^2 (estimated amount of total heterogeneity): 4.8657 (SE = 2.1341)
tau (square root of estimated tau^2 value):      2.2058
I^2 (total heterogeneity / total variability):   98.76%
H^2 (total variability / sampling variability):  80.64

Test for Heterogeneity:
Q(df = 11) = 604.6327, p-val < .0001

Model Results:

estimate      se    zval    pval   ci.lb   ci.ub 
  1.4446  0.6459  2.2366  0.0253  0.1787  2.7105  * 

---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

A summary effect size of **1.4446 represents de differences between patients and controls. With it being statistically significant with p = 0.0253.

Forest-plot of results

forest(ma_model_1, slab = paste(my_data$study, as.character(my_data$year), sep = ", "))

Examples of Forest-Plot Visualizations

Using databases available in the R package ‘metaviz’.

Database Mozart:

metaviz::mozart

Variation I

library(metaviz)
viz_forest(x = mozart[1:10, c("d", "se")], study_labels = mozart[1:10, c("study_name")],
           summary_label = "Summary effect", xlab = "Cohen d")

Variation II

viz_forest(x = mozart[1:10, c("d", "se")], study_labels = mozart[1:10, c("study_name")],
           summary_label = "Summary effect", xlab = "Cohen d", variant = "thick", method = "FE")

Subgroup Analysis

viz_forest(x = mozart[1:10, c("d", "se")], 
           group = mozart[1:10, "rr_lab"], 
           study_labels = mozart[1:10, "study_name"], 
           summary_label = c("Summary (rr_lab = no)", "Summary (rr_lab = yes)"), 
           xlab = "Cohen d",
           col = "Darkblue")

           #variant = "thick")

Tables and Subgroups in one Visualization

study_table <- data.frame(
  name = exrehab[, "study_name"],
  eventsT = paste(exrehab$ai, "/", exrehab$ai + exrehab$bi, sep = ""),
  eventsC = paste(exrehab$ci, "/", exrehab$ci + exrehab$di, sep = ""))
summary_table <- data.frame(
    name = "Summary",
    eventsT = paste(sum(exrehab$ai), "/", sum(exrehab$ai + exrehab$bi), sep = ""),
    eventsC = paste(sum(exrehab$ci), "/", sum(exrehab$ci + exrehab$di), sep = ""))
viz_forest(x = exrehab[, c("logrr", "logrr_se")], variant = "classic",
           col = "Greys", xlab = "logRR", annotate_CI = T,
           study_table = study_table,
           summary_table = summary_table,
           table_headers = c("ID", "Events (T)", "Events (C)"))

LS0tCnRpdGxlOiAiTWV0YS1BbmFseXNpcyBFeGFtcGxlIgphdXRob3I6ICJHZW5lciBKIEF2aWxlcy1Sb2RyaWd1ZXoiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY29kZV9mb2xkaW5nOiBoaWRlCi0tLQoKPCEtLSBSZWZlcmVuY2VzCmh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9tZXRhdml6L3ZpZ25ldHRlcy9tZXRhdml6Lmh0bWwKCmh0dHBzOi8vcnN0dWRpby1wdWJzLXN0YXRpYy5zMy5hbWF6b25hd3MuY29tLzEwOTEzXzU4NTg3NjJlYzg0YjQ1OGQ4OWIwZjRhNGU2ZGQ1ZTgxLmh0bWwKCi0tPgoKYGBge3J9CiMgbG9hZCBkYXRhIGZyb20gZ29vZ2xlIHNwcmVhZHNoZWV0CmxpYnJhcnkoUkN1cmwpCmxpYnJhcnkoYml0b3BzKQpsaWJyYXJ5KG1ldGFmb3IpCmxpYnJhcnkoRm9ybXVsYSkKCgpteV9kYXRhIDwtIHJlYWQuY3N2KCJ+L0Rlc2t0b3AvRHJvcGJveC9EclNjIFVBQkMvQ29sYWJvcmF0aW9ucy9KdWFuIFF1aXNwZS9CYXNpbGFyIEFydGVyeS9iYXNpbGFyQXJ0ZXJ5RGF0YUNvbGxlY3Rvci9SX21ldGFfYW5hbHlzaXNfZXhhbXBsZV9kYXRhIC0gU2hlZXQxLmNzdiIsIGRlYz0iLCIpCgpteV9kYXRhCmBgYAoKCiMjIENhbGN1bGF0aW5nIGVmZmVjdCBzaXplcwpgYGB7cn0KbXlfZGF0YSA8LSBlc2NhbGMobjFpID0gbl9jb250cm9scywgbjJpID0gbl9wYXRpZW50cywgbTFpID0gbWVhbl9jb250cm9scywgbTJpID0gbWVhbl9wYXRpZW50cywgCiAgICBzZDFpID0gc2RfY29udHJvbHMsIHNkMmkgPSBzZF9wYXRpZW50cywgZGF0YSA9IG15X2RhdGEsIG1lYXN1cmUgPSAiU01EIiwgCiAgICBhcHBlbmQgPSBUUlVFKQpgYGAKCgojIyBDYWxjdWxhdGluZyByYW5kb20tZWZmZWN0cyBtZXRhLWFuYWx5c2lzCmBgYHtyfQptYV9tb2RlbF8xIDwtIHJtYSh5aSwgdmksIGRhdGEgPSBteV9kYXRhKQpzdW1tYXJ5KG1hX21vZGVsXzEpCmBgYAoKQSBzdW1tYXJ5IGVmZmVjdCBzaXplIG9mICoqKjEuNDQ0NiogcmVwcmVzZW50cyBkZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBhdGllbnRzIGFuZCBjb250cm9scy4gV2l0aCBpdCBiZWluZyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IHdpdGggKnAgPSAqIDAuMDI1My4KCiMjIEZvcmVzdC1wbG90IG9mIHJlc3VsdHMKYGBge3J9CmZvcmVzdChtYV9tb2RlbF8xLCBzbGFiID0gcGFzdGUobXlfZGF0YSRzdHVkeSwgYXMuY2hhcmFjdGVyKG15X2RhdGEkeWVhciksIHNlcCA9ICIsICIpKQpgYGAKCiMjIEV4YW1wbGVzIG9mIEZvcmVzdC1QbG90IFZpc3VhbGl6YXRpb25zCgpVc2luZyBkYXRhYmFzZXMgYXZhaWxhYmxlIGluIHRoZSBSIHBhY2thZ2UgWydtZXRhdml6J10oaHR0cHM6Ly9yZHJyLmlvL2NyYW4vbWV0YXZpei9tYW4vbWV0YXZpei1wYWNrYWdlLmh0bWwpLgoKIyMjIERhdGFiYXNlICpNb3phcnQqOgpgYGB7cn0KbWV0YXZpejo6bW96YXJ0CmBgYAoKKipWYXJpYXRpb24gSSoqCmBgYHtyfQpsaWJyYXJ5KG1ldGF2aXopCgp2aXpfZm9yZXN0KHggPSBtb3phcnRbMToxMCwgYygiZCIsICJzZSIpXSwgc3R1ZHlfbGFiZWxzID0gbW96YXJ0WzE6MTAsIGMoInN0dWR5X25hbWUiKV0sCiAgICAgICAgICAgc3VtbWFyeV9sYWJlbCA9ICJTdW1tYXJ5IGVmZmVjdCIsIHhsYWIgPSAiQ29oZW4gZCIpCgpgYGAKCioqVmFyaWF0aW9uIElJKioKYGBge3J9CnZpel9mb3Jlc3QoeCA9IG1vemFydFsxOjEwLCBjKCJkIiwgInNlIildLCBzdHVkeV9sYWJlbHMgPSBtb3phcnRbMToxMCwgYygic3R1ZHlfbmFtZSIpXSwKICAgICAgICAgICBzdW1tYXJ5X2xhYmVsID0gIlN1bW1hcnkgZWZmZWN0IiwgeGxhYiA9ICJDb2hlbiBkIiwgdmFyaWFudCA9ICJ0aGljayIsIG1ldGhvZCA9ICJGRSIpCmBgYAoKKipTdWJncm91cCBBbmFseXNpcyoqCmBgYHtyfQp2aXpfZm9yZXN0KHggPSBtb3phcnRbMToxMCwgYygiZCIsICJzZSIpXSwgCiAgICAgICAgICAgZ3JvdXAgPSBtb3phcnRbMToxMCwgInJyX2xhYiJdLCAKICAgICAgICAgICBzdHVkeV9sYWJlbHMgPSBtb3phcnRbMToxMCwgInN0dWR5X25hbWUiXSwgCiAgICAgICAgICAgc3VtbWFyeV9sYWJlbCA9IGMoIlN1bW1hcnkgKHJyX2xhYiA9IG5vKSIsICJTdW1tYXJ5IChycl9sYWIgPSB5ZXMpIiksIAogICAgICAgICAgIHhsYWIgPSAiQ29oZW4gZCIsCiAgICAgICAgICAgY29sID0gIkRhcmtibHVlIikKICAgICAgICAgICAjdmFyaWFudCA9ICJ0aGljayIpCmBgYAoKKipUYWJsZXMgYW5kIFN1Ymdyb3VwcyBpbiBvbmUgVmlzdWFsaXphdGlvbioqCmBgYHtyfQpzdHVkeV90YWJsZSA8LSBkYXRhLmZyYW1lKAogIG5hbWUgPSBleHJlaGFiWywgInN0dWR5X25hbWUiXSwKICBldmVudHNUID0gcGFzdGUoZXhyZWhhYiRhaSwgIi8iLCBleHJlaGFiJGFpICsgZXhyZWhhYiRiaSwgc2VwID0gIiIpLAogIGV2ZW50c0MgPSBwYXN0ZShleHJlaGFiJGNpLCAiLyIsIGV4cmVoYWIkY2kgKyBleHJlaGFiJGRpLCBzZXAgPSAiIikpCgpzdW1tYXJ5X3RhYmxlIDwtIGRhdGEuZnJhbWUoCiAgICBuYW1lID0gIlN1bW1hcnkiLAogICAgZXZlbnRzVCA9IHBhc3RlKHN1bShleHJlaGFiJGFpKSwgIi8iLCBzdW0oZXhyZWhhYiRhaSArIGV4cmVoYWIkYmkpLCBzZXAgPSAiIiksCiAgICBldmVudHNDID0gcGFzdGUoc3VtKGV4cmVoYWIkY2kpLCAiLyIsIHN1bShleHJlaGFiJGNpICsgZXhyZWhhYiRkaSksIHNlcCA9ICIiKSkKCnZpel9mb3Jlc3QoeCA9IGV4cmVoYWJbLCBjKCJsb2dyciIsICJsb2dycl9zZSIpXSwgdmFyaWFudCA9ICJjbGFzc2ljIiwKICAgICAgICAgICBjb2wgPSAiR3JleXMiLCB4bGFiID0gImxvZ1JSIiwgYW5ub3RhdGVfQ0kgPSBULAogICAgICAgICAgIHN0dWR5X3RhYmxlID0gc3R1ZHlfdGFibGUsCiAgICAgICAgICAgc3VtbWFyeV90YWJsZSA9IHN1bW1hcnlfdGFibGUsCiAgICAgICAgICAgdGFibGVfaGVhZGVycyA9IGMoIklEIiwgIkV2ZW50cyAoVCkiLCAiRXZlbnRzIChDKSIpKQpgYGAKCgoK