Phocaeicola vulgatus improves anxiety-like behavior by ameliorating amygdala neuroinflammation and the neurite impairment in IBS.
The 2 matches
- [1] § Materials and methods › Mendelian randomization ↔ R/format_mr_results2.R, lines 137–214 · score 0.65 · inverse variance weighted, weighted median, MR Egger, SNPs
- [2] § Materials and methods › Mendelian randomization ↔ R/mr.R, lines 882–921 · score 0.61 · instrumental variable, weighted median, modification, IVW, Mendelian, randomization
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
R · 460 lines · 17 KB · other · 1 match
- #' Split outcome column
- #'
- #' This function takes the outcome column from the results generated by [mr()] and splits it into separate columns for 'outcome name' and 'id'.
- #'
- #' @param mr_res Results from [mr()].
- #'
- #' @export
- #' @return data frame
- split_outcome <- function(mr_res) {
- Pos <- grep("\\|\\|", mr_res$outcome) #the "||"" indicates that the outcome column was derived from summary data in MR-Base. Sometimes it won't look like this e.g. if the user has supplied their own outcomes
- if (sum(Pos) != 0) {
- Outcome <- as.character(mr_res$outcome[Pos])
- Vars <- strsplit(Outcome, split = "\\|\\|")
- Vars <- unlist(Vars)
- Vars <- trim(Vars)
- Trait <- Vars[seq(1, length(Vars), by = 2)]
- id <- Vars[seq(2, length(Vars), by = 2)]
- mr_res$outcome <- as.character(mr_res$outcome)
- mr_res$outcome[Pos] <- Trait
- }
- return(mr_res)
- }
- #' Split exposure column
- #'
- #' This function takes the exposure column from the results generated by [mr()] and splits it into separate columns for 'exposure name' and 'id'.
- #'
- #' @param mr_res Results from [mr()].
- #'
- #' @export
- #' @return data frame
- split_exposure <- function(mr_res) {
- Pos <- grep("\\|\\|", mr_res$exposure) #the "||"" indicates that the outcome column was derived from summary data in MR-Base. Sometimes it won't look like this e.g. if the user has supplied their own outcomes
- # Pos2<-grep("\\|\\|",mr_res$exposure,invert=T)
- # mr_res2 <-mr_res[Pos2,]
- # mr_res1<-mr_res[Pos,]
- if (sum(Pos) != 0) {
- Exposure <- as.character(mr_res$exposure[Pos])
- Vars <- strsplit(as.character(Exposure), split = "\\|\\|")
- Vars <- unlist(Vars)
- Vars <- trim(Vars)
- Trait <- Vars[seq(1, length(Vars), by = 2)]
- mr_res$exposure <- as.character(mr_res$exposure)
- mr_res$exposure[Pos] <- Trait
- }
- return(mr_res)
- }
- #' Generate odds ratios
- #'
- #' This function takes b and se from [mr()] and generates odds ratios and 95 percent confidence intervals.
- #'
- #' @param mr_res Results from [mr()].
- #'
- #' @export
- #' @return data frame
- generate_odds_ratios <- function(mr_res) {
- mr_res$lo_ci <- mr_res$b - 1.96 * mr_res$se
- mr_res$up_ci <- mr_res$b + 1.96 * mr_res$se
- mr_res$or <- exp(mr_res$b)
- mr_res$or_lci95 <- exp(mr_res$lo_ci)
- mr_res$or_uci95 <- exp(mr_res$up_ci)
- return(mr_res)
- }
- #' Subset MR-results on method
- #'
- #' This function takes MR results from [mr()] and restricts to a single method per exposure x disease combination.
- #'
- #' @param mr_res Results from [mr()].
- #' @param single_snp_method Which of the single SNP methods to use when only 1 SNP was used to estimate the causal effect? The default is `"Wald ratio"`.
- #' @param multi_snp_method Which of the multi-SNP methods to use when there was more than 1 SNPs used to estimate the causal effect? The default is `"Inverse variance weighted"`.
- #'
- #' @export
- #' @return data frame.
- subset_on_method <- function(
- mr_res,
- single_snp_method = "Wald ratio",
- multi_snp_method = "Inverse variance weighted"
- ) {
- dat <- subset(
- mr_res,
- (nsnp == 1 & method == single_snp_method) | (nsnp > 1 & method == multi_snp_method)
- )
- return(dat)
- }
- #' Combine all mr results
- #'
- #' This function combines results of [mr()], [mr_heterogeneity()], [mr_pleiotropy_test()] and [mr_singlesnp()] into a single data frame.
- #' It also merges the results with outcome study level characteristics in [available_outcomes()].
- #' If desired it also exponentiates results (e.g. if the user wants log odds ratio converted into odds ratios with 95 percent confidence intervals).
- #' The exposure and outcome columns from the output from [mr()] contain both the trait names and trait ids.
- #' The `combine_all_mrresults()` function splits these into separate columns by default.
- #'
- #' @param res Results from [mr()].
- #' @param het Results from [mr_heterogeneity()].
- #' @param plt Results from [mr_pleiotropy_test()].
- #' @param sin Results from [mr_singlesnp()].
- #' @param ao_slc Logical; if set to `TRUE` then outcome study level characteristics are retrieved from [available_outcomes()]. Default is `TRUE`.
- #' @param Exp Logical; if set to `TRUE` results are exponentiated. Useful if user wants log odds ratios expressed as odds ratios. Default is `FALSE`.
- #' @param split.exposure Logical; if set to `TRUE` the exposure column is split into separate columns for the exposure name and exposure ID. Default is `FALSE`.
- #' @param split.outcome Logical; if set to `TRUE` the outcome column is split into separate columns for the outcome name and outcome ID. Default is `FALSE`.
- #'
- #' @export
- #' @return data frame
- #
- # library(TwoSampleMR)
- # library(MRInstruments)
- # exp_dat <- extract_instruments(outcomes=c(2,300))
- # chd_out_dat <- extract_outcome_data(
- # snps = exp_dat$SNP,
- # outcomes = c(6,7,8,9)
- # )
- # dat <- harmonise_data(
- # exposure_dat = exp_dat,
- # outcome_dat = chd_out_dat
- # )
- # dat<-power.prune(dat,method.size=F)
- # Res<-mr(dat)
- # Het<-mr_heterogeneity(dat)
- # Plt<-mr_pleiotropy_test(dat)
- # Sin<-mr_singlesnp(dat)
- # All.res<-combine_all_mrresults(Res=Res,Het=Het,Plt=Plt,Sin=Sin)
- # All.res<-split_exposure(All.res)
- # All.res<-split_outcome(All.res)
- combine_all_mrresults <- function(
- res,
- het,
- plt,
- sin,
- ao_slc = TRUE,
- Exp = FALSE,
- split.exposure = FALSE,
- split.outcome = FALSE
- ) {
- het <- het[, c("id.exposure", "id.outcome", "method", "Q", "Q_df", "Q_pval")]
- # Convert all factors to character
- factors_to_character <- function(df) {
- df[] <- lapply(df, function(x) if (is.factor(x)) as.character(x) else x)
- df
- }
- res <- factors_to_character(res)
- het <- factors_to_character(het)
- sin <- factors_to_character(sin)
- sin <- sin[grep("[:0-9:]", sin$SNP), ]
- sin$method <- "Wald ratio"
- names(sin)[names(sin) == "p"] <- "pval"
- # Res<-Res[Res$method %in% c("MR Egger","Weighted median","Inverse variance weighted"),]
- #method is also the name of an argument in the method function. this prevents all.x argument from working. rename method column
- names(res)[names(res) == "method"] <- "Method"
- names(het)[names(het) == "method"] <- "Method"
- names(sin)[names(sin) == "method"] <- "Method"
- res <- merge(res, het, by = c("id.outcome", "id.exposure", "Method"), all.x = TRUE)
- res <- data.table::rbindlist(
- list(
- res,
- sin[, c(
- "exposure",
- "outcome",
- "id.exposure",
- "id.outcome",
- "SNP",
- "b",
- "se",
- "pval",
- "Method"
- )]
- ),
- fill = TRUE,
- use.names = TRUE
- )
- data.table::setDF(res)
- if (ao_slc) {
- ao <- available_outcomes()
- names(ao)[names(ao) == "nsnp"] <- "nsnps.outcome.array"
- res <- merge(
- res,
- ao[, !names(ao) %in% c("unit", "priority", "sd", "path", "note", "filename", "access", "mr")],
- by.x = "id.outcome",
- by.y = "id"
- )
- }
- res$nsnp[is.na(res$nsnp)] <- 1
- for (i in unique(res$id.outcome)) {
- wald_snps <- paste(
- res$SNP[res$id.outcome == i & res$Method == "Wald ratio"],
- collapse = "; "
- )
- res$SNP[res$id.outcome == i & res$Method != "Wald ratio"] <- wald_snps
- }
- if (Exp) {
- res$or <- exp(res$b)
- res$or_lci95 <- exp(res$b - res$se * 1.96)
- res$or_uci95 <- exp(res$b + res$se * 1.96)
- }
- # add intercept test from MR Egger
- plt <- plt[, c("id.outcome", "id.exposure", "egger_intercept", "se", "pval")]
- plt$Method <- "MR Egger"
- names(plt)[names(plt) == "egger_intercept"] <- "intercept"
- names(plt)[names(plt) == "se"] <- "intercept_se"
- names(plt)[names(plt) == "pval"] <- "intercept_pval"
- res <- merge(res, plt, by = c("id.outcome", "id.exposure", "Method"), all.x = TRUE)
- if (split.exposure) {
- res <- split_exposure(res)
- }
- if (split.outcome) {
- res <- split_outcome(res)
- }
- Cols <- c(
- "Method",
- "outcome",
- "exposure",
- "nsnp",
- "b",
- "se",
- "pval",
- "intercept",
- "intercept_se",
- "intercept_pval",
- "Q",
- "Q_df",
- "Q_pval",
- "consortium",
- "ncase",
- "ncontrol",
- "pmid",
- "population"
- )
- res <- res[, c(names(res)[names(res) %in% Cols], names(res)[which(!names(res) %in% Cols)])]
- # names(ResSNP)<-tolower(names(ResSNP))
- return(res)
- }
- #' Power prune
- #'
- #' When there are duplicate summary sets for a particular exposure-outcome combination, this function keeps the
- #' exposure-outcome summary set with the highest expected statistical power.
- #' This can be done by dropping the duplicate summary sets with the smaller sample sizes.
- #' Alternatively, the pruning procedure can take into account instrument strength and outcome sample size.
- #' The latter is useful, for example, when there is considerable variation in SNP coverage between duplicate summary sets
- #' (e.g. because some studies have used targeted or fine mapping arrays).
- #' If there are a large number of SNPs available to instrument an exposure,
- #' the outcome GWAS with the better SNP coverage may provide better power than the outcome GWAS with the larger sample size.
- #'
- #' @param dat Results from [harmonise_data()].
- #' @param method Should the duplicate summary sets be pruned on the basis of sample size alone (`method = 1`)
- #' or a combination of instrument strength and sample size (`method = 2`)? Default set to `1`.
- #' When set to 1, the duplicate summary sets are first dropped on the basis of the outcome sample size (smaller duplicates dropped).
- #' If duplicates are still present, remaining duplicates are dropped on the basis of the exposure sample size (smaller duplicates dropped).
- #' When method is set to `2`, duplicates are dropped on the basis of instrument strength
- #' (amount of variation explained in the exposure by the instrumental SNPs) and sample size,
- #' and assumes that the SNP-exposure effects correspond to a continuous trait with a normal distribution (i.e. exposure cannot be binary).
- #' The SNP-outcome effects can correspond to either a binary or continuous trait. If the exposure is binary then `method=1` should be used.
- #'
- #' @param dist.outcome The distribution of the outcome. Can either be `"binary"` or `"continuous"`. Default set to `"binary"`.
- #'
- #' @export
- #' @return data.frame with duplicate summary sets removed
- power_prune <- function(dat, method = 1, dist.outcome = "binary") {
- # dat[,c("eaf.exposure","beta.exposure","se.exposure","samplesize.outcome","ncase.outcome","ncontrol.outcome")]
- if (method == 1) {
- id.sets <- paste(split_exposure(dat)$exposure, split_outcome(dat)$outcome)
- id.set.unique <- unique(id.sets)
- dat$id.set <- as.numeric(factor(id.sets))
- L <- vector("list", length(id.set.unique))
- for (i in seq_along(id.set.unique)) {
- # print(i)
- print(paste(
- "finding summary set for --",
- id.set.unique[i],
- "-- with largest sample size",
- sep = ""
- ))
- dat1 <- dat[id.sets == id.set.unique[i], ]
- id.subset <- paste(dat1$exposure, dat1$id.exposure, dat1$outcome, dat1$id.outcome)
- id.subset.unique <- unique(id.subset)
- dat1$id.subset <- as.numeric(factor(id.subset))
- ncase <- dat1$ncase.outcome
- if (is.null(ncase)) {
- ncase <- NA
- }
- if (anyNA(ncase)) {
- ncase <- dat1$samplesize.outcome
- if (dist.outcome == "binary") {
- warning(paste(
- "dist.outcome set to binary but case sample size is missing. Will use total sample size instead but power pruning may be less accurate"
- ))
- }
- }
- if (anyNA(ncase)) {
- stop("sample size missing for at least 1 summary set")
- }
- # Permute dat1 and ncase identically; sort() would drop NA values and
- # misalign ncase from dat1's rows.
- ncase_ord <- order(ncase, decreasing = TRUE)
- dat1 <- dat1[ncase_ord, ]
- # id.expout<-paste(split_exposure(dat)$exposure,split_outcome(dat)$outcome)
- ncase <- ncase[ncase_ord]
- # dat1$power.prune.ncase<-"drop"
- # dat1$power.prune.ncase[ncase==ncase[1]]<-"keep"
- dat1 <- dat1[ncase == ncase[1], ]
- nexp <- dat1$samplesize.exposure
- nexp_ord <- order(nexp, decreasing = TRUE)
- dat1 <- dat1[nexp_ord, ]
- nexp <- nexp[nexp_ord]
- # dat1$power.prune.nexp<-"drop"
- # dat1$power.prune.nexp[nexp==nexp[1]]<-"keep"
- # dat1$power.prune<-"drop"
- # dat1$power.prune[dat1$power.prune.ncase=="keep" & dat1$power.prune.nexp == "keep"]<-"keep"
- # dat1<-dat1[,!names(dat1) %in% c("power.prune.ncase","power.prune.nexp")]
- # dat1[,c("samplesize.exposure","ncase.outcome","exposure","outcome")]
- dat1 <- dat1[nexp == nexp[1], ]
- L[[i]] <- dat1
- }
- dat <- data.table::rbindlist(L)
- dat <- dat[, !names(dat1) %in% c("id.set", "id.subset")]
- # if (drop.duplicates == T) {
- # dat<-dat[dat$power.prune=="keep",]
- # }
- return(dat)
- }
- if (method == 2) {
- id.sets <- paste(split_exposure(dat)$exposure, split_outcome(dat)$outcome)
- id.set.unique <- unique(id.sets)
- dat$id.set <- as.numeric(factor(id.sets))
- L <- vector("list", length(id.set.unique))
- for (i in seq_along(id.set.unique)) {
- dat1 <- dat[id.sets == id.set.unique[i], ]
- # unique(dat1[,c("exposure","outcome")])
- id.subset <- paste(dat1$exposure, dat1$id.exposure, dat1$outcome, dat1$id.outcome)
- id.subset.unique <- unique(id.subset)
- dat1$id.subset <- as.numeric(factor(id.subset))
- L1 <- vector("list", length(id.subset.unique))
- for (j in seq_along(id.subset.unique)) {
- # print(j)
- print(paste("identifying best powered summary set: ", id.subset.unique[j], sep = ""))
- dat2 <- dat1[id.subset == id.subset.unique[j], ]
- p <- dat2$eaf.exposure #effect allele frequency
- # b<-abs(dat2$beta.exposure) # effect of SNP on risk factor
- se <- dat2$se.exposure
- z <- dat2$beta.exposure / dat2$se.exposure
- n <- dat2$samplesize.exposure
- b <- z / sqrt(2 * p * (1 - p) * (n + z^2))
- if (anyNA(dat2$ncase.outcome)) {
- stop(paste("number of cases missing for summary set: ", id.subset.unique[j], sep = ""))
- }
- n.cas <- dat2$ncase.outcome
- n.con <- dat2$ncontrol.outcome
- var <- 1 # variance of risk factor assumed to be 1
- r2 <- 2 * b^2 * p * (1 - p) / var
- if (anyNA(r2)) {
- warning(
- "beta or allele frequency missing for some SNPs, which could affect accuracy of power pruning"
- )
- }
- r2 <- r2[!is.na(r2)]
- # k<-length(p[!is.na(p)]) #number of SNPs in the instrument / associated with the risk factor
- # n<-min(n) #sample size of the exposure/risk factor GWAS
- r2sum <- sum(r2) # sum of the r-squares for each SNP in the instrument
- # F<-r2sum*(n-1-k)/((1-r2sum*k )
- if (dist.outcome == "continuous") {
- iv.se <- 1 / sqrt(mean(dat2$samplesize.outcome, na.rm = TRUE) * r2sum) #standard error of the IV should be proportional to this
- }
- if (dist.outcome == "binary") {
- if (anyNA(n.cas) || anyNA(n.con)) {
- warning(
- "dist.outcome set to binary but number of cases or controls is missing. Will try using total sample size instead but power pruning will be less accurate"
- )
- iv.se <- 1 / sqrt(mean(dat2$samplesize.outcome, na.rm = TRUE) * r2sum)
- } else {
- iv.se <- 1 / sqrt(mean(n.cas, na.rm = TRUE) * mean(n.con, na.rm = TRUE) * r2sum) #standard error of the IV should be proportional to this
- }
- }
- # Power calculations to implement at some point
- # iv.se<-1/sqrt(unique(n.cas)*unique(n.con)*r2sum) #standard error of the IV should be proportional to this
- # n.outcome<-unique(n.con+n.cas)
- # ratio<-unique(n.cas/n.con)
- # sig<-alpha #alpha
- # b1=log(or) # assumed log odds ratio
- # power<-pnorm(sqrt(n.outcome*r2sum*(ratio/(1+ratio))*(1/(1+ratio)))*b1-qnorm(1-sig/2))
- dat2$iv.se <- iv.se
- # dat2$power<-power
- L1[[j]] <- dat2
- }
- L[[i]] <- data.table::rbindlist(L1)
- }
- dat2 <- data.table::rbindlist(L)
- dat2 <- dat2[order(dat2$id.set, dat2$iv.se), ]
- id.sets <- unique(dat2$id.set)
- id.keep <- vector("list", length(id.sets))
- for (i in seq_along(id.sets)) {
- # print(i)
- # print(id.sets[i])
- id.temp <- unique(dat2[dat2$id.set == id.sets[i], c("id.set", "id.subset")])
- id.keep[[i]] <- paste(id.temp$id.set, id.temp$id.subset)[1]
- }
- dat2$power.prune <- "drop"
- dat2$power.prune[paste(dat2$id.set, dat2$id.subset) %in% id.keep] <- "keep"
- # if (drop.duplicates == T) {
- dat2 <- dat2[dat2$power.prune == "keep", ]
- # }
- dat2 <- dat2[, !names(dat2) %in% c("iv.se", "power.prune", "id.set", "id.subset")]
- dat <- dat2
- # dat2[,c("exposure","outcome","iv.se","power","id.set","id.subset","power.prune")]
- # unique(dat2[order(dat2$id.set,dat2$id.subset),c("samplesize.exposure","ncase.outcome","exposure","outcome","iv.se","power","id.set","id.subset")])
- # dat2[dat2$id.set==1,c("iv.se","id.set","id.subset")]
- return(dat)
- }
- }
- #' Size prune
- #'
- #' Whens there are duplicate summary sets for a particular exposure-outcome combination,
- #' this function drops the duplicates with the smaller total sample size
- #' (for binary outcomes, the number of cases is used instead of total sample size).
- #'
- #' @param dat Results from [harmonise_data()].
- #'
- #' @export
- #' @return data frame
- size.prune <- function(dat) {
- dat$ncase[is.na(dat$ncase)] <- dat$samplesize[is.na(dat$ncase)]
- dat <- dat[order(dat$ncase, decreasing = TRUE), ]
- id.expout <- paste(dat$exposure, dat$outcome)
- id.keep <- id.expout[!duplicated(data.frame(dat$exposure, dat$originalname.outcome))]
- dat <- dat[id.expout %in% id.keep, ]
- }
format_mr_results2.R at commit d4df219, under other · at the source
Overview
- Division of Gastroenterology, Union Hospital, Tongji Medical College, Huazhong University of Science and Technology, Wuhan, Hubei 430022 China
- Department of Radiology, Union Hospital, Tongji Medical College, Huazhong University of Science and Technology, Wuhan, 430022 China
- Department of Gastroenterology, The Central Hospital of Wuhan, Tongji Medical College, Huazhong University of Science and Technology, Wuhan, 430014 China
- Department of Gastroenterology, Tianyou Hospital, College of Medicine, Wuhan University of Science and Technology, Wuhan, 430064 China
Abstract
The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.
Repository
Its files are read in the Code ↔ Paper reader above, with 2 matches between paragraphs and lines of code.
MRCIEU/TwoSampleMR
d4df21929fdabeb2f89686ffaad0db5f56973d64, 25 September 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
71 files
- R/
TwoSampleMR-package.R , R, 6 lines - R/
add_metadata.r , R, 82 lines - R/
add_rsq.r , R, 391 lines - R/
backward_compatibility.R , R, 24 lines - R/
enrichment.R , R, 88 lines - R/
eve.R , R, 339 lines - R/
forest_plot.R , R, 384 lines - R/
forest_plot2.R , R, 699 lines - R/
forest_plot_1-to-many.R , R, 922 lines - R/
format_mr_results2.R , R, 460 lines, 1 match - R/
globals.R , R, 116 lines - R/
harmonise.R , R, 794 lines - R/
heterogeneity.R , R, 99 lines - R/
instruments.R , R, 73 lines - R/
knit.R , R, 177 lines - R/
ld.R , R, 106 lines - R/
ldsc.r , R, 232 lines - R/
leaveoneout.R , R, 200 lines - R/
make_dat.R , R, 19 lines - R/
moe.R , R, 229 lines - R/
mr-grip.R , R, 118 lines - R/
mr.R , R, 1,239 lines, 1 match - R/
mr_mode.R , R, 401 lines - R/
multivariable_mr.R , R, 890 lines - R/
other_formats.R , R, 305 lines - R/
query.R , R, 332 lines - R/
read_data.R , R, 831 lines - R/
rucker.R , R, 607 lines - R/
scatterplot.R , R, 178 lines - R/
singlesnp.R , R, 415 lines - R/
steiger.R , R, 285 lines - R/
steiger_filtering.R , R, 59 lines - R/
transform.R , R, 62 lines - R/
utils-pipe.R , R, 11 lines - R/
zzz.R , R, 57 lines - README.Rmd, R, 14 lines
- inst/
reports/ , R, 88 linesmr_report.Rmd - tests/
testthat.R , R, 4 lines - tests/
testthat/ , R, 7 lineshelper-twosamplemr.R - tests/
testthat/ , R, 107 linestest_add_metadata.r - tests/
testthat/ , R, 18 linestest_create_test_data.r - tests/
testthat/ , R, 11 linestest_eve.R - tests/
testthat/ , R, 26 linestest_format_d.R - tests/
testthat/ , R, 93 linestest_format_data.R - tests/
testthat/ , R, 11 linestest_harmonise.R - tests/
testthat/ , R, 70 linestest_harmonise_edge_case s.R - tests/
testthat/ , R, 14 linestest_heterogeneity.R - tests/
testthat/ , R, 87 linestest_instruments.R - tests/
testthat/ , R, 58 linestest_ld.R - tests/
testthat/ , R, 18 linestest_ldsc.R - tests/
testthat/ , R, 15 linestest_leaveoneout.R - tests/
testthat/ , R, 92 linestest_mr.R - tests/
testthat/ , R, 43 linestest_mr_mode.R - tests/
testthat/ , R, 88 linestest_mvmr.R - tests/
testthat/ , R, 51 linestest_mvmr_local.R - tests/
testthat/ , R, 60 linestest_otherformats.R - tests/
testthat/ , R, 59 linestest_outcomes.R - tests/
testthat/ , R, 136 linestest_plots.R - tests/
testthat/ , R, 148 linestest_rsq.r - tests/
testthat/ , R, 55 linestest_rucker.R - tests/
testthat/ , R, 75 linestest_singlesnp.R - tests/
testthat/ , R, 26 linestest_steiger.R - vignettes/
exposure.Rmd , R, 386 lines - vignettes/
gwas2020.Rmd , R, 113 lines - vignettes/
harmonise.Rmd , R, 180 lines - vignettes/
introduction.Rmd , R, 129 lines - vignettes/
outcome.Rmd , R, 199 lines - vignettes/
perform_mr.Rmd , R, 1,017 lines - LICENSE, License, 2 lines
- LICENSE.md, License, 21 lines
- README.md, Text, 63 lines
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 68 scripts, each with its path and the digest of its content;
- 2 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Data links
- ncbi.nlm.nih.gov/
sra , NCBI; found in “Data availability”
Data availability statement
The paper has a data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:
- it points to a dataset: NCBI
Read it in the paper: doi.org/10.1038/s41398-026-04142-y.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 12 authors, 3 keywords, 13 MeSH terms, 2 funders, 68 references.
Cite
This paper
Wu, J., He, J., Zhang, K., Liu, X., Yang, P., Wang, D., Xu, Z., Qian, W., Zhang, L., Lei, Z., Hou, X., & Tao, B. (2026). Phocaeicola vulgatus improves anxiety-like behavior by ameliorating amygdala neuroinflammation and the neurite impairment in IBS. Translational psychiatry, 16(1), 422. https://
BibTeX
@article{wu2026phocaeico
author = {Wu, Jiacheng and He, Jing and Zhang, Kailu and Liu, Xiaoming and Yang, Pengcheng and Wang, Dongke and Xu, Zhiyue and Qian, Wei and Zhang, Lei and Lei, Ziqiao and Hou, Xiaohua and Tao, Bai},
title = {{Phocaeicola vulgatus improves anxiety-like behavior by ameliorating amygdala neuroinflammation and the neurite impairment in IBS}},
journal = {Translational psychiatry},
year = {2026},
month = jun,
volume = {16},
number = {1},
pages = {422},
publisher = {Nature Publishing Group},
issn = {2158-3188},
doi = {10.1038/
url = {https://
pmid = {42289401},
pmcid = {PMC13493998}
}
RIS
TY - JOUR
AU - Wu, Jiacheng
AU - He, Jing
AU - Zhang, Kailu
AU - Liu, Xiaoming
AU - Yang, Pengcheng
AU - Wang, Dongke
AU - Xu, Zhiyue
AU - Qian, Wei
AU - Zhang, Lei
AU - Lei, Ziqiao
AU - Hou, Xiaohua
AU - Tao, Bai
TI - Phocaeicola vulgatus improves anxiety-like behavior by ameliorating amygdala neuroinflammation and the neurite impairment in IBS
T2 - Translational psychiatry
J2 - Transl Psychiatry
PY - 2026
DA - 2026/
VL - 16
IS - 1
SP - 422
SN - 2158-3188
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Phocaeicola vulgatus improves anxiety-like behavior by ameliorating amygdala neuroinflammation and the neurite impairment in IBS",
"container-title": "Translational psychiatry",
"author": [
{
"family": "Wu",
"given": "Jiacheng"
},
{
"family": "He",
"given": "Jing"
},
{
"family": "Zhang",
"given": "Kailu"
},
{
"family": "Liu",
"given": "Xiaoming"
},
{
"family": "Yang",
"given": "Pengcheng"
},
{
"family": "Wang",
"given": "Dongke"
},
{
"family": "Xu",
"given": "Zhiyue"
},
{
"family": "Qian",
"given": "Wei"
},
{
"family": "Zhang",
"given": "Lei"
},
{
"family": "Lei",
"given": "Ziqiao"
},
{
"family": "Hou",
"given": "Xiaohua"
},
{
"family": "Tao",
"given": "Bai"
}
],
"container-title-short":
"volume": "16",
"issue": "1",
"page": "422",
"DOI": "10.1038/
"PMID": "42289401",
"PMCID": "PMC13493998",
"ISSN": "2158-3188",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
15
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1186/s12916-026-04869-x [code]
- The tissue-specific effects of glucose-lowering drug targets on aging mediated through DNA methylation: a multi-omics genetic study.Journal: BMC medicineIn common: randomForest, glmnet, psych, 5 other tools, other condition
- [2] doi:10.1016/j.isci.2026.115657 [code]
- Integration of machine learning to develop a disulfidptosis model for predicting glioma prognosis, immunotherapy response, and drug.Journal: iScienceIn common: glmnet, psych, car, 4 other tools, other condition
- [3] doi:10.1093/bioinformatics/btag592 [code]
- Network-based stratification of allele-specific expression reveals patient subgroups in Huntington's disease.Journal: Bioinformatics (Oxford, England)In common: randomForest, car, cowplot, 3 other tools, other condition, 1 reference
- [4] doi:10.1186/s40168-026-02342-8 [code]
- Impacts of host genetics on gut microbiome composition in Alzheimer's disease.Journal: MicrobiomeIn common: randomForest, cowplot, data.table, 2 other tools, 2 references
- [5] doi:10.3390/ijms27156925 [code]
- XGBoost-SHAP Interpretable Modeling Identifies and Validates an Eight-Gene Biomarker for Hepatic Encephalopathy Risk Prediction in Cirrhosis.Journal: International journal of molecular sciencesIn common: randomForest, glmnet, cowplot, 3 other tools, other condition
- [6] doi:10.7717/peerj.21426 [code]
- Integrated transcriptomic identification and validation reveal key autophagy-associated biomarkers in sleep deprivation.Journal: PeerJIn common: randomForest, glmnet, cowplot, 3 other tools, mouse
- [7] doi:10.3390/ijms27093997 [code]
- Coordinated Multicellular Immune Programs and Drug Targets Revealed by Single-Cell Analysis in Driver-Mutated NSCLC.Journal: International journal of molecular sciencesIn common: glmnet, psych, cowplot, 3 other tools, other condition
- [8] doi:10.1126/sciadv.aec9291 [code]
- Computational mechanisms of perception in autism revealed using games inspired by rodent operant tasks.Journal: Science advancesIn common: glmnet, psych, car, 3 other tools
- [9] doi:10.1093/braincomms/fcag146 [code]
- Convergent structural brain alterations in chronic pain: a multi-metric individual participant data meta-analysis.Journal: Brain communicationsIn common: glmnet, psych, car, 3 other tools
- [10] doi:10.3389/fphys.2026.1886058 [code]
- Xanthohumol and its non-estrogenic derivatives link to the gut-liver-brain axis to improve cognition in mice with diet-induced obesity.Journal: Frontiers in physiologyIn common: randomForest, car, cowplot, 3 other tools, mouse
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 68 scripts, and 2 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:027b49a6ab85fa8e…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
