Reproducibility Guide: Meta-analysis on Psilocybin for Depression
This document provides a comprehensive walk-through of the meta-analysis investigating the efficacy of psilocybin for treating depression symptoms, using data extracted for the SYPRES project. The analysis includes both continuous (depression symptom severity scores) and dichotomous (response/remission rates) outcomes, along with extensive subgroup and sensitivity analyses.
Our database for this analysis can be accessed through the R package
metapsyData
. It can also be downloaded directly as a CSV file
here.
Documentation on metapsyData
is available
here.
The meta-analytic portion of this script primarily uses the R package
metapsyTools
. Documentation on metapsyTools
is available
here.
This walk-through has some code chunks hidden for clarity. Full source code for this analysis is available here.
Overview
This meta-analysis synthesizes evidence from randomized controlled trials examining the efficacy of psilocybin for treating depression. The analysis employs meta-analytic methods to provide robust estimates of treatment effects while accounting for study heterogeneity and potential biases.
Key Features of This Analysis
- Comprehensive outcome assessment: Both continuous (depression symptom severity) and dichotomous (response/remission) outcomes
- Time course analysis: Three-level hierarchical models to examine treatment effects over time
- Robustness testing: Extensive sensitivity and subgroup analyses
- Publication bias assessment: Multiple methods to evaluate potential bias
- Transparent reporting: Complete code and methodology documentation
Methods
Key statistical specifications:
- Effect size: Hedges’ g for continuous outcomes, log RR for dichotomous outcomes
- Heterogeneity estimator: REML for random-effects models
- Confidence intervals: Q-Profile method for heterogeneity, Knapp-Hartung adjustment for effect sizes
- Significance testing: Knapp-Hartung adjustment for small sample sizes
Quality Assessment
We conduct sensitivity analyses excluding studies with high risk of bias evaluated using the Cochrane Risk of Bias tool. Publication bias is evaluated using a funnel plot and Egger’s test.
Load Required Packages
We begin by loading the necessary R packages for data manipulation, meta-analysis, and visualization:
- Data manipulation:
readr
andtidyverse
for data loading and manipulation - Meta-analysis:
meta
andmetafor
for conducting meta-analytic calculations - Effect sizes:
esc
for effect size calculation utilities - Specialized tools:
metapsyTools
for specific meta-analysis functions anddmetar
for additional meta-analysis tools
library(readr)
library(tidyverse)
library(meta)
library(metafor)
library(esc)
library(metapsyTools)
library(dmetar)
library(gt)
Data Loading and Quality Checks
The raw data is loaded from a CSV file containing information extracted from multiple studies. Before proceeding with the analysis, we perform quality checks to ensure data integrity and identify potential issues.
# Load data
data <- read_csv("/Users/sps253/Documents/GIT/data-depression-psiloctr/data.csv")
# data <- read_csv("/Users/bsevchik/Documents/GitHub/metapsy_psilodep/data.csv")
# after release we will replace this with metapsyData load function
# Check data format with checkDataFormat
checkDataFormat(data)
# Check conflicts with checkConflicts
checkConflicts(data)
Data Preparation and Filtering
We prepare the data for analysis by applying several filters to create our primary analysis dataset:
- Primary outcomes: Select only the primary instrument and timepoint for each study
- Study design: Exclude post-crossover data to avoid double-counting
- Outcome type: Include only endpoint data (mean/SD or imputed mean/SD)
- Dosing: Exclude medium-dose arm (10 mg psilocybin) from multi-arm study (Goodwin 2022)
- Study exclusions: Remove specific studies (Krempien 2023, Carhart-Harris 2021) based on predefined criteria
The resulting data_main
dataframe contains the filtered data ready for
our primary meta-analysis.
data_main <- data %>%
filterPoolingData(
primary_instrument == "1",
primary_timepoint == "1",
is.na(post_crossover) | !Detect(post_crossover, "1"),
outcome_type == "msd" | outcome_type == "imsd",
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm1)) & Detect(multi_arm1, "10 mg")),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm2)) & Detect(multi_arm2, "10 mg")),
!Detect(study, "Krempien 2023"),
!Detect(study, "Carhart-Harris 2021")
)
Results
Primary Meta-Analysis
We conduct the main meta-analysis using the runMetaAnalysis
function
from metapsyTools
. This analysis pools all studies in our filtered
dataset to estimate the overall effect of psilocybin on depression
severity.
Key specifications: - Effect size: Hedges’ g (standardized mean difference) - Model: Random-effects meta-analysis using REML estimator - Adjustments: Knapp-Hartung adjustment for significance tests - Additional analyses: Outlier detection and influence analysis
The results include the pooled effect size, confidence intervals, heterogeneity statistics, and the meta-analysis model object.
main_results <- runMetaAnalysis(data_main,
# Specify models to run
which.run = c("overall", "outliers"),
which.influence = "overall",
which.outliers = "overall",
# Specify statistical parameters
es.measure = "g", # Hedges' g
method.tau = "REML",
method.tau.ci = "Q-Profile",
hakn = TRUE, # Knapp-Hartung adjustment
# Specify variables
study.var = "study",
arm.var.1 = "condition_arm1",
arm.var.2 = "condition_arm2",
measure.var = "instrument",
w1.var = "n_arm1",
w2.var = "n_arm2",
time.var = "time_weeks",
round.digits = 2
)
summary(main_results$model.overall)
## g 95%-CI %W(random)
## Back 2024 -1.4215 [-2.2271; -0.6160] 8.8
## Davis 2021 -2.4807 [-3.5637; -1.3976] 6.1
## Goodwin 2022 -0.7092 [-1.0308; -0.3876] 16.7
## Griffiths 2016 -1.2731 [-1.8827; -0.6635] 11.6
## Raison 2023 -0.8700 [-1.2941; -0.4459] 14.8
## Rieser 2025 -0.3806 [-1.0314; 0.2701] 11.0
## Rosenblat 2024 -0.1417 [-0.8599; 0.5765] 10.0
## Ross 2016 -0.7940 [-1.5967; 0.0086] 8.9
## vonRotz 2023 -0.9384 [-1.5120; -0.3648] 12.2
##
## Number of studies: k = 9
##
## g 95%-CI t p-value
## Random effects model (HK) -0.9119 [-1.3482; -0.4757] -4.82 0.0013
## Prediction interval [-1.8568; 0.0329]
##
## Quantifying heterogeneity:
## tau^2 = 0.1330 [0.0133; 1.4755]; tau = 0.3647 [0.1153; 1.2147]
## I^2 = 58.1% [12.2%; 80.0%]; H = 1.54 [1.07; 2.23]
##
## Test of heterogeneity:
## Q d.f. p-value
## 19.08 8 0.0144
##
## Details on meta-analytical method:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-Profile method for confidence interval of tau^2 and tau
## - Hartung-Knapp adjustment for random effects model (df = 8)
## - Prediction interval based on t-distribution (df = 7)
# Create simple forest plot of results
meta::forest(
main_results$model.overall,
sortvar = main_results$model.overall$data$year,
layout = "JAMA"
)
The primary meta-analysis on continuous outcomes in the 9 studies included in the main model showed a statistically significant reduction in depression scores with psilocybin treatment as compared to control conditions, with small to moderate between-study heterogeneity.
Publication Bias Assessment
We assess potential publication bias using both visual (funnel plot) and statistical (Egger’s test) methods.
# Run Egger's test
eggers.test(main_results$model.overall)
## Warning in eggers.test(main_results$model.overall): Your meta-analysis contains k = 9 studies. Egger's test may lack the
## statistical power to detect bias when the number of studies is small (i.e., k<10).
## Eggers' test of the intercept
## =============================
##
## intercept 95% CI t p
## -1.728 -4.54 - 1.08 -1.206 0.2671489
##
## Eggers' test does not indicate the presence of funnel plot asymmetry.
png(filename = file.path(basedir, "analysis/psilodep/paperfigs/SI_Fig_01.png"), res = 315, width = 2500, height = 1500)
funnel(main_results$model.overall,
studlab = TRUE, # can also use vector with study labels
cex.studlab = 0.7, # adjust size of study labels
cex = 0.7, # axis tick labels and point size
cex.axis = 0.7, # axis number label size
cex.lab = 0.7, # axis title (xlab, ylab) size
cex.main = 0.95, # main title size
xlim = c(-3, 0.2),
col = "steelblue",
pch = 19, # bold solid circle
bg = "white",
xlab = "Standardized Mean Difference (SMD)",
ylab = "Standard Error (SE)",
main = "Funnel Plot of Main Model Continuous Outcomes",
las = 1
)
dev.off()
Visual inspection of the
funnel plot reveals limited asymmetry, and the Egger’s test did not find
small study effects, implying minimal evidence of publication bias.
Three-level hierarchical effects (CHE) meta-analysis
We conduct a three-level correlated and hierarchical effects (CHE) meta-analysis to examine how the effect of psilocybin changes over time. This approach accounts for the hierarchical structure of the data (multiple timepoints within studies) and potential correlations between timepoints.
# Select data for the CHE meta-analysis
data_time <- data %>%
calculateEffectSizes() %>%
filter(
is.na(multi_arm1) | !str_detect(multi_arm1, "10 mg"),
is.na(multi_arm2) | !str_detect(multi_arm2, "10 mg"),
!str_detect(study, "Krempien 2023"),
!str_detect(study, "Carhart-Harris 2021")
) %>%
filterPoolingData(
primary_instrument == "1",
time_days > 0,
post_crossover == 0 | is.na(post_crossover),
outcome_type == "msd" | outcome_type == "imsd"
)
# Run meta-analysis
time_results <- runMetaAnalysis(data_time,
which.run = "threelevel.che",
# Specify statistical parameters
es.measure = "g", # Hedges' g
method.tau = "REML",
method.tau.ci = "Q-Profile",
hakn = TRUE, # Knapp-Hartung adjustment
# Specify variables
study.var = "study",
arm.var.1 = "condition_arm1",
arm.var.2 = "condition_arm2",
measure.var = "instrument",
w1.var = "n_arm1",
w2.var = "n_arm2",
time.var = "time_days",
round.digits = 2
)
time_results$model.threelevel.che
##
## Multivariate Meta-Analysis Model (k = 30; method: REML)
##
## Variance Components:
##
## estim sqrt nlvls fixed factor
## sigma^2.1 0.1339 0.3659 9 no study
## sigma^2.2 0.0422 0.2055 30 no study/es.id
##
## Test for Heterogeneity:
## Q(df = 29) = 81.6241, p-val < .0001
##
## Model Results:
##
## estimate se tval df pval ci.lb ci.ub
## -0.8984 0.1614 -5.5664 29 <.0001 -1.2285 -0.5683 ***
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The three-level CHE model reveals an overall significant decrease in depression scores under psilocybin compared to control conditions.
Meta-Regression
We perform meta-regression to examine the relationship between time since final dose and treatment effect.
reg <- metaRegression(time_results$model.threelevel.che, ~time_days)
reg
##
## Multivariate Meta-Analysis Model (k = 30; method: REML)
##
## Variance Components:
##
## estim sqrt nlvls fixed factor
## sigma^2.1 0.1253 0.3540 9 no study
## sigma^2.2 0.0445 0.2109 30 no study/es.id
##
## Test for Residual Heterogeneity:
## QE(df = 28) = 79.8894, p-val < .0001
##
## Test of Moderators (coefficient 2):
## F(df1 = 1, df2 = 28) = 0.3341, p-val = 0.5679
##
## Model Results:
##
## estimate se tval df pval ci.lb ci.ub
## intrcpt -0.9193 0.1642 -5.5971 28 <.0001 -1.2558 -0.5829 ***
## time_days 0.0009 0.0016 0.5780 28 0.5679 -0.0023 0.0041
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
png(filename = file.path(basedir, "analysis/psilodep/paperfigs/SI_Fig_02.png"), res = 315, width = 3000, height = 2200)
regplot(reg, mod = "time_days", xlab = "Time since final dose (days)", ylab = "Hedges' g")
dev.off()
Adding time since final
dose as a continuous predictor to our model reveals a large and
significant effect-size favoring psilocybin immediately following dosing
that was stable over time.
Subgroup and Sensitivity Analyses
We conduct comprehensive subgroup and sensitivity analyses to examine the robustness of our findings and explore potential moderators of treatment effects.
These analyses include:
Subgroup Analyses: - Depression as primary diagnosis - Study design (parallel vs. crossover) - Exclusion of open-label studies - Exclusion of high risk-of-bias studies
Sensitivity Analyses: - In multi-arm study (Goodwin 2022) replace high-dose intervention (25 mg) with medium-dose intervention (10 mg) - Expanded inclusion criteria - Clinician-rated vs. self-report outcomes - Exclusion of outlier studies - Fixed-effects model
# Build a dataframe for each subgroup and sensitivity analysis
data_dep <- data_main %>%
filterPoolingData(
diagnosis == "dep" | diagnosis == "trd"
)
data_excwl <- data_main %>%
filterPoolingData(
!Detect(condition_arm2, "wl"),
)
data_rob <- data_main %>%
filterPoolingData(
!Detect(rob, "High"),
)
data_parallel <- data_main %>%
filterPoolingData(
design == "parallel"
)
data_crossover <- data_main %>%
filterPoolingData(
design == "crossover"
)
data_expanded <- data %>%
filterPoolingData(
primary_instrument == "1",
primary_timepoint == "1",
outcome_type == "msd" | outcome_type == "imsd",
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm1)) & Detect(multi_arm1, "10 mg")),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm2)) & Detect(multi_arm2, "10 mg")),
!(Detect(study, "Krempien 2023") & (!is.na(multi_arm1)) & Detect(multi_arm1, "12 mg")),
!(Detect(study, "Krempien 2023") & (!is.na(multi_arm2)) & Detect(multi_arm2, "12 mg"))
)
data_outliers <- data_main %>%
filterPoolingData(
!Detect(study, "Davis 2021")
)
data_fixed <- data_main
data_g10 <- data %>%
filterPoolingData(
primary_instrument == "1",
primary_timepoint == "1",
is.na(post_crossover) | !Detect(post_crossover, "1"),
outcome_type == "msd" | outcome_type == "imsd",
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm1)) & Detect(multi_arm1, "25 mg")),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm2)) & Detect(multi_arm2, "25 mg")),
!Detect(study, "Krempien 2023"),
!Detect(study, "Carhart-Harris 2021")
)
data_clinician <- data %>%
filterPoolingData(
primary_timepoint == "1",
is.na(post_crossover) | !Detect(post_crossover, "1"),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm1)) & Detect(multi_arm1, "10 mg")),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm2)) & Detect(multi_arm2, "10 mg")),
!Detect(study, "Krempien 2023"),
!Detect(study, "Carhart-Harris 2021"),
rating == "clinician",
Detect(instrument_symptom, "depression"),
outcome_type != "response",
outcome_type != "remission",
outcome_type != "change"
) %>%
filterPriorityRule(instrument = c("madrs", "grid-ham-d"))
data_selfreport <- data %>%
filterPoolingData(
primary_timepoint == "1",
is.na(post_crossover) | !Detect(post_crossover, "1"),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm1)) & Detect(multi_arm1, "10 mg")),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm2)) & Detect(multi_arm2, "10 mg")),
!Detect(study, "Krempien 2023"),
!Detect(study, "Carhart-Harris 2021"),
rating == "self-report",
Detect(instrument_symptom, "depression"),
outcome_type != "response",
outcome_type != "remission",
outcome_type != "change" & outcome_type != "unknown"
) %>%
filterPriorityRule(instrument = c("bdi", "qids-sr", "hads-d", "smdds", "hads"))
Now we can use metapsyTools
for quickly looking at subgroup and
sensitivity results.
# Run the main "overall" model for comparison
main <- runMetaAnalysis(data_main,
# Specify statistical parameters
which.run = "overall", # inverse variance random effects
es.measure = "g", # Hedges' g
method.tau = "REML",
method.tau.ci = "Q-Profile",
hakn = TRUE, # Knapp-Hartung adjustment
# Specify variables
study.var = "study",
arm.var.1 = "condition_arm1",
arm.var.2 = "condition_arm2",
measure.var = "instrument",
w1.var = "n_arm1",
w2.var = "n_arm2",
time.var = "time_weeks",
round.digits = 2
)
# Use metapsyTools' replacement and rerun functions for quickly changing parameters
dep <- main # copy the main model
data(dep) <- data_dep # replace the dataframe in the new model
rerun(dep) # re-run the model
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .99 [-1.72; -0.26] 0.018 67.1 [21.8; 86.19] [-2.6; 0.62] 2.78
excwl <- main
data(excwl) <- data_excwl
rerun(excwl)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .84 [-1.1; -0.59] <0.001 9.56 [0; 73.6] [-1.1; -0.59] 3.32
rob <- main
data(rob) <- data_rob
rerun(rob)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .94 [-1.43; -0.44] 0.004 55.5 [0; 80.91] [-1.82; -0.06] 2.96
parallel <- main
data(parallel) <- data_parallel
rerun(parallel)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## 0.8 [-1.12; -0.48] 0.002 11.4 [0; 81.58] [-1.14; -0.45] 3.55
crossover <- main
data(crossover) <- data_crossover
rerun(crossover)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .12 [-2.64; 0.4] 0.101 78.1 [40.85; 91.88] [-5.19; 2.96] 2.44
expanded <- main
data(expanded) <- data_expanded
rerun(expanded)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .89 [-1.27; -0.51] <0.001 58.0 [20.39; 77.88] [-1.81; 0.04] 3.15
outliers <- main
data(outliers) <- data_outliers
rerun(outliers)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## 0.8 [-1.08; -0.52] <0.001 30.4 [0; 68.96] [-1.13; -0.47] 3.53
fixed <- main
method.tau(fixed) <- "FE" # for this sensitivity analysis, we keep data the same but change parameters
hakn(fixed) <- FALSE
rerun(fixed)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .85 [-1.03; -0.66] <0.001 58.1 [12.18; 79.98] [-1.86; 0.03] 3.32
g10 <- main
data(g10) <- data_g10
rerun(g10)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .86 [-1.37; -0.36] 0.004 73.8 [48.99; 86.54] [-2.17; 0.44] 3.24
clinician <- main
data(clinician) <- data_clinician
rerun(clinician)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .02 [-1.6; -0.44] 0.005 64.5 [19.95; 84.25] [-2.28; 0.24] 2.71
selfreport <- main
data(selfreport) <- data_selfreport
rerun(selfreport)
## Model results ------------------------------------------------
## Model k g g.ci p i2 i2.ci prediction.ci nnt
## .11 [-2.58; 0.35] 0.102 78.1 [47.31; 90.87] [-4.7; 2.47] 2.45
We summarize these subgroup and sensitivity analyses in Figure 3
below. Our series of
subgroup and sensitivity analyses produced results largely in line with
our main model results. Hedges’ g values did not differ greatly from the
main model, and 10/12 of the subgroup and sensitivity analyses produced
significant results. Heterogeneity changes substantially when excluding
open-label studies, excluding crossover studies, analyzing crossover
studies on their own, and looking exclusively at self-report outcomes.
Dichotomous Outcomes Analysis
In addition to continuous depression severity scores, we also analyze dichotomous outcomes including response and remission rates. These analyses provide complementary information about the clinical significance of psilocybin treatment.
Response Rate Analysis
We first analyze response rates, defined as the proportion of participants achieving a clinically meaningful reduction in depression symptoms.
# Get response data
data_response <- data %>%
filterPoolingData(
primary_instrument == "1",
primary_timepoint == "1",
outcome_type == "response",
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm1)) & Detect(multi_arm1, "10 mg")),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm2)) & Detect(multi_arm2, "10 mg")),
!Detect(study, "Krempien 2023")
)
data_response <- data_response[order(data_response$year), ]
# Run meta-analysis
response_results <- runMetaAnalysis(data_response,
which.run = "overall",
es.measure = "RR", # risk ratio
es.type = "raw",
method.tau = "PM",
method.tau.ci = "Q-Profile",
method.random.ci = "HK",
hakn = TRUE, # Knapp-Hartung adjustement
# Specify variables
study.var = "study",
arm.var.1 = "condition_arm1",
arm.var.2 = "condition_arm2",
measure.var = "instrument",
w1.var = "n_arm1",
w2.var = "n_arm2",
time.var = "time_weeks",
round.digits = 2
)
# Create simple forest plot of response results
meta::forest(
response_results$model.overall,
sortvar = response_results$model.overall$data$year,
xlab = "Log RR (95% CI)",
leftlabs = c("Study", "Log RR"),
layout = "JAMA"
)
Our meta-analysis shows statistically significant greater treatment response with psilocybin compared to control conditions.
Remission Rate Analysis
We also analyze remission rates, defined as the proportion of participants achieving full remission of depressive symptoms.
# Get remission data
data_remission <- data %>%
filterPoolingData(
primary_instrument == "1",
primary_timepoint == "1",
outcome_type == "remission",
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm1)) & Detect(multi_arm1, "10 mg")),
!(Detect(study, "Goodwin 2022") & (!is.na(multi_arm2)) & Detect(multi_arm2, "10 mg")),
!Detect(study, "Krempien 2023")
)
data_remission <- data_remission[order(data_remission$year), ]
# Run meta-analysis
remission_results <- runMetaAnalysis(data_remission,
which.run = "overall",
es.measure = "RR", # risk ratio
es.type = "raw",
method.tau = "PM",
method.tau.ci = "Q-Profile",
method.random.ci = "HK",
hakn = TRUE, # Knapp-Hartung adjustement
# Specify variables
study.var = "study",
arm.var.1 = "condition_arm1",
arm.var.2 = "condition_arm2",
measure.var = "instrument",
w1.var = "n_arm1",
w2.var = "n_arm2",
time.var = "time_weeks",
round.digits = 2
)
# Create simple forest plot of remission results
meta::forest(
remission_results$model.overall,
sortvar = remission_results$model.overall$data$year,
xlab = "Log RR (95% CI)",
leftlabs = c("Study", "Log RR"),
layout = "JAMA"
)
Our meta-analysis shows statistically significant higher remission rates with psilocybin compared to control conditions.
As a sensitivity analysis, we also run a fixed-effects meta-analysis on the response and remission results.
# Fixed response
method.tau(response_results) <- "FE"
hakn(response_results) <- FALSE
rerun(response_results)
## Model results ------------------------------------------------
## Model k rr rr.ci p i2 i2.ci prediction.ci nnt
## 2.8 [2.05; 3.83] <0.001 0 [0; 79.2] [1.67; 4.58] 2.81
# Fixed remission
method.tau(remission_results) <- "FE"
hakn(remission_results) <- FALSE
rerun(remission_results)
## Model results ------------------------------------------------
## Model k rr rr.ci p i2 i2.ci prediction.ci nnt
## .13 [2.66; 6.42] <0.001 0 [0; 79.2] [2.02; 8.44] 3
Our fixed effects models yielded results that were in line with the main model, showing statistically significant higher response and remission rates with psilocybin compared to control conditions.
Summary and Conclusions
This comprehensive meta-analysis provides promising evidence regarding the efficacy of psilocybin for treating depression, but should be interpreted with caution.
The analysis includes:
- Primary analysis of continuous depression severity outcomes using standardized mean differences
- Time course analysis examining how treatment effects evolve over time
- Publication bias assessment using multiple methods
- Extensive subgroup and sensitivity analyses to examine robustness and moderators
- Dichotomous outcomes analysis of response and remission rates
The results demonstrate consistent evidence for the efficacy of psilocybin in reducing depression severity, with effects persisting over time and showing robustness across various sensitivity analyses. However, given the small number of studies eligible to include in our meta-analysis and limitations such as the potential for functional unblinding and expectancy effects, results should be interpreted with caution.