A Shared Genetic Basis Underlying Myopia-Exotropia Comorbidity.
The 4 matches
- [1] § Methods › Colocalization Analysis ↔ R/claudia.R, lines 366–485 · score 0.73 · Bayesian colocalization, Posterior probabilities, pp h4, causal variants, signals, SNPs
- [2] § Methods › Colocalization Analysis ↔ R/split.R, lines 4–62 · score 0.73 · Bayesian colocalization, Posterior probabilities, pp h4, causal variants, signals, SNPs
- [3] § Results › Cross-Trait Meta-Analysis Results ↔ R/claudia.R, lines 366–485 · score 0.52 · pp h4, shared signal, causal variant, colocalization, trait
- [4] § Results › Cross-Trait Meta-Analysis Results ↔ R/split.R, lines 4–62 · score 0.52 · pp h4, shared signal, causal variant, colocalization, trait
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 · 502 lines · 19 KB · no license · 2 matches
- ##' variance of MLE of beta for quantitative trait, assuming var(y)=1
- ##'
- ##' Internal function
- ##' @title Var.data
- ##' @param f minor allele freq
- ##' @param N sample number
- ##' @return variance of MLE beta
- ##' @author Claudia Giambartolomei
- Var.data <- function(f, N) {
- 1 / (2 * N * f * (1 - f))
- }
- ##' variance of MLE of beta for case-control
- ##'
- ##' Internal function
- ##' @title Var.data
- ##' @inheritParams Var.data
- ##' @param s ???
- ##' @return variance of MLE beta
- ##' @author Claudia Giambartolomei
- Var.data.cc <- function(f, N, s) {
- 1 / (2 * N * f * (1 - f) * s * (1 - s))
- }
- ##' Internal function, logsum
- ##'
- ##' This function calculates the log of the sum of the exponentiated
- ##' logs taking out the max, i.e. insuring that the sum is not Inf
- ##' @title logsum
- ##' @param x numeric vector
- ##' @return max(x) + log(sum(exp(x - max(x))))
- ##' @author Claudia Giambartolomei
- logsum <- function(x) {
- my.max <- max(x) ##take out the maximum value in log form
- my.res <- my.max + log(sum(exp(x - my.max )))
- return(my.res)
- }
- ##' Internal function, logdiff
- ##'
- ##' This function calculates the log of the difference of the exponentiated
- ##' logs taking out the max, i.e. insuring that the difference is not negative
- ##' @title logdiff
- ##' @param x numeric
- ##' @param y numeric
- ##' @return max(x) + log(exp(x - max(x,y)) - exp(y-max(x,y)))
- ##' @author Chris Wallace
- logdiff <- function(x,y) {
- my.max <- max(x,y) ##take out the maximum value in log form
- my.res <- my.max + log(max(exp(x - my.max) - exp(y-my.max), 0))
- return(my.res)
- }
- ##' Internal function, approx.bf.p
- ##'
- ##' Calculate approximate Bayes Factors
- ##' @title Internal function, approx.bf.p
- ##' @param p p value
- ##' @param f MAF
- ##' @param type "quant" or "cc"
- ##' @param N sample size
- ##' @param s proportion of samples that are cases, ignored if type=="quant"
- ##' @param suffix suffix to append to column names of returned data.frame
- ##' @return data.frame containing lABF and intermediate calculations
- ##' @author Claudia Giambartolomei, Chris Wallace
- approx.bf.p <- function(p,f,type, N, s, suffix=NULL) {
- if(type=="quant") {
- sd.prior <- 0.15
- V <- Var.data(f, N)
- } else {
- sd.prior <- 0.2
- V <- Var.data.cc(f, N, s)
- }
- z <- qnorm(0.5 * p, lower.tail = FALSE)
- ## Shrinkage factor: ratio of the prior variance to the total variance
- r <- sd.prior^2 / (sd.prior^2 + V)
- ## Approximate BF # I want ln scale to compare in log natural scale with LR diff
- lABF = 0.5 * (log(1-r) + (r * z^2))
- ret <- data.frame(V,z,r,lABF)
- if(!is.null(suffix))
- colnames(ret) <- paste(colnames(ret), suffix, sep=".")
- return(ret)
- }
- ##' Internal function, approx.bf.estimates
- ##'
- ##' Calculate approximate Bayes Factors using supplied variance of the
- ##' regression coefficients
- ##' @title Internal function, approx.bf.estimates
- ##' @param z normal deviate associated with regression coefficient and
- ##' its variance
- ##' @param V its variance
- ##' @param sdY standard deviation of the trait. If not supplied, will
- ##' be estimated.
- ##' @param effect_priors named vector with variance of prior effect
- ##' sizes for quantitative and case-control traits. don't change
- ##' unless you know what you are doing!
- ##' @inheritParams approx.bf.p
- ##' @return data.frame containing lABF and intermediate calculations
- ##' @author Vincent Plagnol, Chris Wallace
- approx.bf.estimates <- function (z, V, type, suffix=NULL, sdY=1,
- effect_priors=c(quant=0.15,cc=0.2)) {
- sd.prior <- if (type == "quant") { effect_priors["quant"] * sdY } else { effect_priors["cc"] }
- r <- sd.prior^2/(sd.prior^2 + V)
- lABF = 0.5 * (log(1 - r) + (r * z^2))
- ret <- data.frame(V, z, r, lABF)
- if(!is.null(suffix))
- colnames(ret) <- paste(colnames(ret), suffix, sep = ".")
- return(ret)
- }
- ##' Internal function, calculate posterior probabilities for configurations, given logABFs for each SNP and prior probs
- ##'
- ##' @title combine.abf
- ##' @param l1 merged.df$lABF.df1
- ##' @param l2 merged.df$lABF.df2
- ##' @param quiet don't print posterior summary if TRUE. default=FALSE
- ##' @inheritParams coloc.abf
- ##' @return named numeric vector of posterior probabilities
- ##' @author Claudia Giambartolomei, Chris Wallace
- combine.abf <- function(l1, l2, p1, p2, p12, quiet=FALSE) {
- stopifnot(length(l1)==length(l2))
- lsum <- l1 + l2
- lH0.abf <- 0
- lH1.abf <- log(p1) + logsum(l1)
- lH2.abf <- log(p2) + logsum(l2)
- lH3.abf <- log(p1) + log(p2) + logdiff(logsum(l1) + logsum(l2), logsum(lsum))
- lH4.abf <- log(p12) + logsum(lsum)
- all.abf <- c(lH0.abf, lH1.abf, lH2.abf, lH3.abf, lH4.abf)
- my.denom.log.abf <- logsum(all.abf)
- pp.abf <- exp(all.abf - my.denom.log.abf)
- names(pp.abf) <- paste("PP.H", (1:length(pp.abf)) - 1, ".abf", sep = "")
- if(!quiet) {
- print(signif(pp.abf,3))
- print(paste("PP abf for shared variant: ", signif(pp.abf["PP.H4.abf"],3)*100 , '%', sep=''))
- }
- return(pp.abf)
- }
- combine_abf_weighted <- function(l1, l2, p1, p2, p12,
- prior_weights1, prior_weights2,
- quiet = FALSE) {
- stopifnot(length(l1) == length(l2))
- Q <- length(l1)
- if (is.null(prior_weights1)) {
- p1_vec <- rep(p1, Q)
- } else {
- prior_weights1 <- prior_weights1 / sum(prior_weights1)
- p1_vec <- Q * p1 * prior_weights1
- }
- if (is.null(prior_weights2)) {
- p2_vec <- rep(p2, Q)
- } else {
- prior_weights2 <- prior_weights2 / sum(prior_weights2)
- p2_vec <- Q * p2 * prior_weights2
- }
- stopifnot(length(p1_vec) == length(p2_vec))
- stopifnot(length(p1_vec) == length(l1))
- p12_vec <- p1_vec * p2_vec * (p12 / (p1 * p2))
- lsum <- l1 + l2
- lH0_abf <- 0
- lH1_abf <- logsum(log(p1_vec) + l1)
- lH2_abf <- logsum(log(p2_vec) + l2)
- lH3_abf <- logdiff(logsum(log(p1_vec) + l1) + logsum(log(p2_vec) + l2),
- logsum(log(p1_vec) + log(p2_vec) + lsum))
- lH4_abf <- logsum(log(p12_vec) + lsum)
- all_abf <- c(lH0_abf, lH1_abf, lH2_abf, lH3_abf, lH4_abf)
- denom_log_abf <- logsum(all_abf)
- pp_abf <- exp(all_abf - denom_log_abf)
- names(pp_abf) <- paste0("PP.H", (1:length(pp_abf)) - 1, ".abf")
- if(!quiet) {
- print(signif(pp_abf,3))
- print(paste("PP abf for shared variant: ", signif(pp_abf["PP.H4.abf"],3) * 100 ,
- "%", sep = ""))
- }
- pp_abf
- }
- ##' Estimate trait standard deviation given vectors of variance of coefficients, MAF and sample size
- ##'
- ##' Estimate is based on var(beta-hat) = var(Y) / (n * var(X))
- ##' var(X) = 2*maf*(1-maf)
- ##' so we can estimate var(Y) by regressing n*var(X) against 1/var(beta)
- ##'
- ##' @title Estimate trait variance, internal function
- ##' @param vbeta vector of variance of coefficients
- ##' @param maf vector of MAF (same length as vbeta)
- ##' @param n sample size
- ##' @return estimated standard deviation of Y
- ##'
- ##' @author Chris Wallace
- sdY.est <- function(vbeta, maf, n) {
- warning("estimating sdY from maf and varbeta, please directly supply sdY if known")
- oneover <- 1/vbeta
- nvx <- 2 * n * maf * (1-maf)
- m <- lm(nvx ~ oneover - 1)
- cf <- coef(m)[['oneover']]
- if(cf < 0)
- stop("estimated sdY is negative - this can happen with small datasets, or those with errors. A reasonable estimate of sdY is required to continue.")
- return(sqrt(cf))
- }
- ##' Internal function, process each dataset list for coloc.abf.
- ##'
- ##' Made public for another package to use, but not intended for users to use.
- ##'
- ##' @title process.dataset
- ##' @param d list
- ##' @param suffix "df1" or "df2"
- ##' @param ... used to pass parameters to approx.bf.estimates, in
- ##' particular the effect_priors parameter
- ##' @return data.frame with log(abf) or log(bf)
- ##' @export
- ##' @author Chris Wallace
- process.dataset <- function(d, suffix, ...) {
- #message('Processing dataset')
- nd <- names(d)
- ## if (! 'type' %in% nd)
- ## stop("dataset ",suffix,": ",'The variable type must be set, otherwise the Bayes factors cannot be computed')
- ## if(!(d$type %in% c("quant","cc")))
- ## stop("dataset ",suffix,": ","type must be quant or cc")
- ## if(d$type=="cc" & "pvalues" %in% nd) {
- ## if(!( "s" %in% nd))
- ## stop("dataset ",suffix,": ","please give s, proportion of samples who are cases, if using p values")
- ## if(!("MAF" %in% nd))
- ## stop("dataset ",suffix,": ","please give MAF if using p values")
- ## if(d$s<=0 || d$s>=1)
- ## stop("dataset ",suffix,": ","s must be between 0 and 1")
- ## }
- ## if(d$type=="quant") {
- ## if(!("sdY" %in% nd || ("MAF" %in% nd && "N" %in% nd )))
- ## stop("dataset ",suffix,": ","must give sdY for type quant, or, if sdY unknown, MAF and N so it can be estimated")
- ## }
- if("beta" %in% nd && "varbeta" %in% nd) { ## use beta/varbeta. sdY should be estimated by now for quant
- ## if(length(d$beta) != length(d$varbeta))
- ## stop("dataset ",suffix,": ","Length of the beta vectors and variance vectors must match")
- ## if(!("snp" %in% nd))
- ## d$snp <- sprintf("SNP.%s",1:length(d$beta))
- ## if(length(d$snp) != length(d$beta))
- ## stop("dataset ",suffix,": ","Length of snp names and beta vectors must match")
- if(d$type=="quant" && !('sdY' %in% nd))
- d$sdY <- sdY.est(d$varbeta, d$MAF, d$N)
- df <- approx.bf.estimates(z=d$beta/sqrt(d$varbeta),
- V=d$varbeta, type=d$type, suffix=suffix, sdY=d$sdY)
- df$snp <- as.character(d$snp)
- if("position" %in% nd)
- df <- cbind(df,position=d$position)
- return(df)
- }
- if("pvalues" %in% nd & "MAF" %in% nd & "N" %in% nd) { ## no beta/varbeta: use p value / MAF approximation
- ## if (length(d$pvalues) != length(d$MAF))
- ## stop('Length of the P-value vectors and MAF vector must match')
- ## if(!("snp" %in% nd))
- ## d$snp <- sprintf("SNP.%s",1:length(d$pvalues))
- df <- data.frame(pvalues = d$pvalues,
- MAF = d$MAF,
- N=d$N,
- snp=as.character(d$snp))
- snp.index <- which(colnames(df)=="snp")
- colnames(df)[-snp.index] <- paste(colnames(df)[-snp.index], suffix, sep=".")
- ## keep <- which(df$MAF>0 & df$pvalues > 0) # all p values and MAF > 0
- ## df <- df[keep,]
- abf <- approx.bf.p(p=df$pvalues, f=df$MAF, type=d$type, N=df$N, s=d$s, suffix=suffix)
- df <- cbind(df, abf)
- if("position" %in% nd)
- df <- cbind(df,position=d$position)
- return(df)
- }
- stop("Must give, as a minimum, one of:\n(beta, varbeta, type, sdY)\n(beta, varbeta, type, MAF)\n(pvalues, MAF, N, type)")
- }
- ##' Bayesian finemapping analysis
- ##'
- ##' This function calculates posterior probabilities of different
- ##' causal variant for a single trait.
- ##'
- ##' If regression coefficients and variances are available, it
- ##' calculates Bayes factors for association at each SNP. If only p
- ##' values are available, it uses an approximation that depends on the
- ##' SNP's MAF and ignores any uncertainty in imputation. Regression
- ##' coefficients should be used if available.
- ##'
- ##' @title Bayesian finemapping analysis
- ##' @param dataset a list with specifically named elements defining the dataset
- ##' to be analysed. See \code{\link{check_dataset}} for details.
- ##'
- ##' @param p1 prior probability a SNP is associated with the trait 1, default 1e-4
- ##' @param prior_weights Non-negative weights for the prior probability a SNP is causal
- ##' @return a \code{data.frame}:
- ##' \itemize{
- ##' \item an annotated version of the input data containing log Approximate Bayes Factors and intermediate calculations, and the posterior probability of the SNP being causal
- ##' }
- ##' @author Chris Wallace
- ##' @export
- finemap.abf <- function(dataset, p1=1e-4, prior_weights = NULL) {
- check_dataset(dataset,"")
- df <- process.dataset(d=dataset, suffix="")
- nsnps <- nrow(df)
- p1=adjust_prior(p1,nsnps,"1")
- if (!is.null(prior_weights) && (nsnps != length(prior_weights) | (prior_weights <= 0))) {
- stop("Length of prior weights must match size of dataset")
- }
- dfnull <- df[1,]
- for(nm in colnames(df))
- dfnull[,nm] <- NA
- dfnull[,"snp"] <- "null"
- dfnull[,"lABF."] <- 0
- df <- rbind(df,dfnull)
- ## data.frame("V."=NA,
- ## z.=NA,
- ## r.=NA,
- ## lABF.=1,
- ## snp="null"))
- if (!is.null(prior_weights)) {
- prior_vec <- p1 * nsnps * prior_weights / sum(prior_weights)
- df$prior <- c(prior_vec, 1 - nsnps * p1)
- } else {
- df$prior <- c(rep(p1,nsnps),1-nsnps*p1)
- }
- ## add SNP.PP.H4 - post prob that each SNP is THE causal variant for a shared signal
- ## BUGFIX 16/5/19
- ## my.denom.log.abf <- logsum(df$lABF + df$prior)
- ## df$SNP.PP <- exp(df$lABF - my.denom.log.abf)
- my.denom.log.abf <- logsum(df$lABF + log(df$prior))
- df$SNP.PP <- exp(df$lABF + log(df$prior) - my.denom.log.abf)
- return(df)
- }
- adjust_prior=function(p,nsnps,suffix="") {
- if(nsnps * p >= 1) { ## for very large regions
- warning(paste0("p",suffix," * nsnps >= 1, setting p",suffix,"=1/(nsnps + 1)"))
- 1/(nsnps + 1)
- } else {
- p
- }
- }
- ##' Bayesian colocalisation analysis
- ##'
- ##' This function calculates posterior probabilities of different
- ##' causal variant configurations under the assumption of a single
- ##' causal variant for each trait.
- ##'
- ##' If regression coefficients and variances are available, it
- ##' calculates Bayes factors for association at each SNP. If only p
- ##' values are available, it uses an approximation that depends on the
- ##' SNP's MAF and ignores any uncertainty in imputation. Regression
- ##' coefficients should be used if available.
- ##'
- ##' @title Fully Bayesian colocalisation analysis using Bayes Factors
- ##' @param dataset1 a list with specifically named elements defining
- ##' the dataset to be analysed. See \code{\link{check_dataset}}
- ##' for details.
- ##' @param dataset2 as above, for dataset 2
- ##' @param MAF Common minor allele frequency vector to be used for
- ##' both dataset1 and dataset2, a shorthand for supplying the same
- ##' vector as parts of both datasets
- ##' @param p1 prior probability a SNP is associated with trait 1,
- ##' default 1e-4
- ##' @param p2 prior probability a SNP is associated with trait 2,
- ##' default 1e-4
- ##' @param p12 prior probability a SNP is associated with both traits,
- ##' default 1e-5
- ##' @param prior_weights1 Non-negative weights for the prior
- ##' probability a SNP is associated with trait 1
- ##' @param prior_weights2 Non-negative weights for the prior
- ##' probability a SNP is asscoiated with trait 2
- ##' @param ... used to pass parameters to approx.bf.estimates, in
- ##' particular the effect_priors parameter
- ##' @return a list of two \code{data.frame}s: \itemize{ \item summary
- ##' is a vector giving the number of SNPs analysed, and the
- ##' posterior probabilities of H0 (no causal variant), H1 (causal
- ##' variant for trait 1 only), H2 (causal variant for trait 2
- ##' only), H3 (two distinct causal variants) and H4 (one common
- ##' causal variant) \item results is an annotated version of the
- ##' input data containing log Approximate Bayes Factors and
- ##' intermediate calculations, and the posterior probability
- ##' SNP.PP.H4 of the SNP being causal for the shared signal *if*
- ##' H4 is true. This is only relevant if the posterior support for
- ##' H4 in summary is convincing. }
- ##' @author Claudia Giambartolomei, Chris Wallace, Jeffrey Pullin
- ##' @export
- coloc.abf <- function(dataset1, dataset2, MAF=NULL,
- p1=1e-4, p2=1e-4, p12=1e-5,
- prior_weights1 = NULL, prior_weights2 = NULL, ...) {
- if(!("MAF" %in% names(dataset1)) & !is.null(MAF))
- dataset1$MAF <- MAF
- if(!("MAF" %in% names(dataset2)) & !is.null(MAF))
- dataset2$MAF <- MAF
- check_dataset(d=dataset1,1)
- check_dataset(d=dataset2,2)
- df1 <- process.dataset(d=dataset1, suffix="df1")
- df2 <- process.dataset(d=dataset2, suffix="df2")
- if (!is.null(prior_weights1) && (nrow(df1) != length(prior_weights1))) {
- stop("Length of prior_weights1 must match size of dataset 1")
- }
- if (!is.null(prior_weights2) && (nrow(df2) != length(prior_weights2))) {
- stop("Length of prior_weights2 must match size of dataset 2")
- }
- if (!is.null(prior_weights1) && any(is.na(prior_weights1) | (prior_weights1 < 0))) {
- stop("prior_weights1 must contain non-negative weights.")
- }
- if (!is.null(prior_weights2) && any(is.na(prior_weights2) | (prior_weights2 < 0))) {
- stop("prior_weights2 must contain non-negative weights.")
- }
- if (!is.null(prior_weights1) && !is.null(prior_weights2)) {
- warning("Prior weights specified for both traits.\n",
- " The two weight vectors should be derived from independent sources of\n",
- " information, i.e. not computed using the same method.")
- }
- p1=adjust_prior(p1,nrow(df1),"1")
- p2=adjust_prior(p2,nrow(df2),"2")
- merged.df <- merge(df1,df2)
- p12=adjust_prior(p12,nrow(merged.df),"12")
- prior_weights1 <- prior_weights1[which(df1$snp %in% merged.df$snp)]
- prior_weights2 <- prior_weights2[which(df2$snp %in% merged.df$snp)]
- if(!nrow(merged.df))
- stop("dataset1 and dataset2 should contain the same snps in the same order, or should contain snp names through which the common snps can be identified")
- merged.df$internal.sum.lABF <- with(merged.df, lABF.df1 + lABF.df2)
- ## add SNP.PP.H4 - post prob that each SNP is THE causal variant for a shared signal
- my.denom.log.abf <- logsum(merged.df$internal.sum.lABF)
- merged.df$SNP.PP.H4 <- exp(merged.df$internal.sum.lABF - my.denom.log.abf)
- is_weighted <- !is.null(prior_weights1) || !is.null(prior_weights2)
- if (is_weighted) {
- pp.abf <- combine_abf_weighted(merged.df$lABF.df1, merged.df$lABF.df2,
- p1, p2, p12, prior_weights1, prior_weights2)
- } else {
- pp.abf <- combine.abf(merged.df$lABF.df1, merged.df$lABF.df2, p1, p2, p12)
- }
- common.snps <- nrow(merged.df)
- results <- c(nsnps=common.snps, pp.abf)
- output<-list(summary=results,
- results=merged.df,
- priors=c(p1=p1,p2=p2,p12=p12))
- if (is_weighted) {
- output$weights <- list(
- prior_weights1 = prior_weights1,
- prior_weights2 = prior_weights2
- )
- }
- class(output) <- c("coloc_abf",class(output))
- return(output)
- }
- ##' Get credible sets from finemapping results
- ##'
- ##' @title credible.sets
- ##' @param dataset data.frame output of `finemap.abf()`
- ##' @param credible.size threshold of the credible set (Default: 0.95)
- ##' @return SNP ids of the credible set
- ##' @author Guillermo Reales, Chris Wallace
- ##' @export
- credible.sets <- function(dataset, credible.size = 0.95){
- if(!"SNP.PP" %in% names(dataset)) stop("Input must be finemap.abf() output and have a SNP.PP column.")
- t2 <- dataset[ order(dataset$SNP.PP, decreasing = TRUE),]
- t2$csum <- cumsum(t2$SNP.PP)
- w=which(cumsum(t2$SNP.PP)>=credible.size)[1]
- t2[ 1:w ,c("snp","SNP.PP")]
- }
claudia.R at commit 8f20f0b, no license · at the source
Overview
- State Key Laboratory of Eye Health, Eye Hospital and National Engineering Research Center of Ophthalmology and Optometry, Wenzhou Medical University, Wenzhou, China
- The Fourth School of Clinical Medicine, Zhejiang Chinese Medical University, Hangzhou, China
- Liuzhou People's Hospital, Guangxi Medical University, Liuzhou, China
- The Second School of Medicine, Wenzhou Medical University, Wenzhou, China
- Department of Ophthalmology, LKS Faculty of Medicine, The University of Hong Kong, Hong Kong SAR, China
- Department of Ophthalmology, The First Affiliated Hospital of Ningbo University, Ningbo, 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 4 matches between paragraphs and lines of code.
chr1swallace/coloc
8f20f0bc5e60ffc99e4c2f787bd55fd30cfe7c45, 22 September 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
41 files
- R/
boundaries.R , R, 108 lines - R/
check.R , R, 225 lines - R/
claudia.R , R, 502 lines, 2 matches - R/
coloc-package.R , R, 21 lines - R/
data.R , R, 193 lines - R/
plot.R , R, 376 lines - R/
private.R , R, 43 lines - R/
sensitivity.R , R, 198 lines - R/
split.R , R, 986 lines, 2 matches - R/
susie.R , R, 583 lines - R/
zzz.R , R, 4 lines - docs/
bootstrap-toc.js , JavaScript, 159 lines - docs/
deps/ , JavaScript, 7 linesbootstrap-5.3.1/ bootstrap.bundle.min.js - docs/
deps/ , JavaScript, 5 linesbootstrap-toc-1.0.1/ bootstrap-toc.min.js - docs/
deps/ , JavaScript, 7 linesclipboard.js-2.0.11/ clipboard.min.js - docs/
deps/ , JavaScript, 7 linesheadroom-0.11.0/ headroom.min.js - docs/
deps/ , JavaScript, 7 linesheadroom-0.11.0/ jQuery.headroom.min.js - docs/
deps/ , JavaScript, 7,407 linesjquery-3.6.0/ jquery-3.6.0.js - docs/
deps/ , JavaScript, 2 linesjquery-3.6.0/ jquery-3.6.0.min.js - docs/
deps/ , JavaScript, 7 linessearch-1.0.0/ autocomplete.jquery.min. js - docs/
deps/ , JavaScript, 9 linessearch-1.0.0/ fuse.min.js - docs/
deps/ , JavaScript, 7 linessearch-1.0.0/ mark.min.js - docs/
docsearch.js , JavaScript, 85 lines - docs/
katex-auto.js , JavaScript, 14 lines - docs/
lightswitch.js , JavaScript, 85 lines - docs/
pkgdown.js , JavaScript, 162 lines - inst/
sticker.R , R, 95 lines - tests/
testthat.R , R, 4 lines - tests/
testthat/ , R, 94 linestest-abf.R - tests/
testthat/ , R, 73 linestest-check.R - tests/
testthat/ , R, 3 linestest-examples.R - tests/
testthat/ , R, 37 linestest-susie.R - tests/
testthat/ , R, 97 linestest-test-variant_specif ic_priors.R - vignettes/
a01_intro.Rmd , R, 82 lines - vignettes/
a02_data.Rmd , R, 192 lines - vignettes/
a03_enumeration.Rmd , R, 90 lines - vignettes/
a04_sensitivity.Rmd , R, 67 lines - vignettes/
a05_conditioning.Rmd , R, 78 lines - vignettes/
a06_SuSiE.Rmd , R, 130 lines - vignettes/
a07_variant-specific-pri , R, 100 linesors.Rmd - README.md, Text, 97 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;
- 40 scripts, each with its path and the digest of its content;
- 4 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
Datasets cited
- geo:GSE134355, at NCBI GEO; found in the text, “Transcriptomic Profiling of TSPAN10 Across…”
- julkari.fi, at julkari.fi; found in the text, “GWAS Data for Exotropia”
- zenodo:16735224, at Zenodo; found in the acknowledgements
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, 4 keywords, 7 MeSH terms, 58 references.
Cite
This paper
Mi, Y., Tao, Z., Xue, Z., Lin, S., Huang, Y., Zhu, Q., Zheng, X., Hong, Y., Liu, Z., Tong, L., Zhou, J., & Wan, M. (2026). A Shared Genetic Basis Underlying Myopia-Exotropia Comorbidity. Investigative ophthalmology & visual science, 67(8), 61. https://
BibTeX
@article{mi2026shared,
author = {Mi, Yuze and Tao, Zhe and Xue, Zhengbo and Lin, Shaokai and Huang, Yebao and Zhu, Qinnan and Zheng, Xinni and Hong, Yanggang and Liu, Zirong and Tong, Luyao and Zhou, Jiawei and Wan, Minghui},
title = {{A Shared Genetic Basis Underlying Myopia-Exotropia Comorbidity}},
journal = {Investigative ophthalmology \& visual science},
year = {2026},
month = jul,
volume = {67},
number = {8},
pages = {61},
publisher = {Association for Research in Vision and Ophthalmology},
issn = {0146-0404},
doi = {10.1167/
url = {https://
pmid = {42530915},
pmcid = {PMC13436582}
}
RIS
TY - JOUR
AU - Mi, Yuze
AU - Tao, Zhe
AU - Xue, Zhengbo
AU - Lin, Shaokai
AU - Huang, Yebao
AU - Zhu, Qinnan
AU - Zheng, Xinni
AU - Hong, Yanggang
AU - Liu, Zirong
AU - Tong, Luyao
AU - Zhou, Jiawei
AU - Wan, Minghui
TI - A Shared Genetic Basis Underlying Myopia-Exotropia Comorbidity
T2 - Investigative ophthalmology & visual science
J2 - Invest Ophthalmol Vis Sci
PY - 2026
DA - 2026/
VL - 67
IS - 8
SP - 61
SN - 0146-0404
PB - Association for Research in Vision and Ophthalmology
DO - 10.1167/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1167/
"type": "article-journal",
"title": "A Shared Genetic Basis Underlying Myopia-Exotropia Comorbidity",
"container-title": "Investigative ophthalmology & visual science",
"author": [
{
"family": "Mi",
"given": "Yuze"
},
{
"family": "Tao",
"given": "Zhe"
},
{
"family": "Xue",
"given": "Zhengbo"
},
{
"family": "Lin",
"given": "Shaokai"
},
{
"family": "Huang",
"given": "Yebao"
},
{
"family": "Zhu",
"given": "Qinnan"
},
{
"family": "Zheng",
"given": "Xinni"
},
{
"family": "Hong",
"given": "Yanggang"
},
{
"family": "Liu",
"given": "Zirong"
},
{
"family": "Tong",
"given": "Luyao"
},
{
"family": "Zhou",
"given": "Jiawei"
},
{
"family": "Wan",
"given": "Minghui"
}
],
"container-title-short":
"volume": "67",
"issue": "8",
"page": "61",
"DOI": "10.1167/
"PMID": "42530915",
"PMCID": "PMC13436582",
"ISSN": "0146-0404",
"publisher": "Association for Research in Vision and Ophthalmology",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
1
]
]
}
}
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.1073/pnas.2609814123 [code]
- Genetic architectures of brain-related traits are shaped by strong selective constraints.Journal: Proceedings of the National Academy of Sciences of the United States of AmericaIn common: cowplot, data.table, ggplot2, genetics / omics, 4 references
- [2] doi:10.1186/s12967-026-08266-z [code]
- Single-cell multi-omic integration analysis prioritizes druggable genes and reveals cell-type-specific causal effects in glioblastomagenesis.Journal: Journal of translational medicineIn common: cowplot, data.table, ggplot2, genetics / omics, 3 references
- [3] doi:10.1038/s41467-026-71682-8 [code]
- GWAS meta-analysis of cerebrospinal fluid Alzheimer's biomarkers reveals loci regulating lipids, brain volume and autophagy.Journal: Nature communicationsIn common: data.table, ggplot2, genetics / omics, 4 references
- [4] doi:10.1038/s41467-026-72164-7 [code]
- Multivariate genetic analysis reveals three distinct pathological dimensions in musculoskeletal disorders.Journal: Nature communicationsIn common: data.table, ggplot2, genetics / omics, 4 references
- [5] doi:10.1007/s00406-026-02302-1 [code]
- Exploring the genetic correlation between inflammatory bowel disease and psychiatric disorders: insights from genome-wide association studies.Journal: European archives of psychiatry and clinical neuroscienceIn common: data.table, ggplot2, genetics / omics, 4 references
- [6] doi:10.1038/s41562-026-02486-5 [code]
- Genome-wide association studies of infant and toddler temperament in European and multi-ancestry populations.Journal: Nature human behaviourIn common: data.table, ggplot2, genetics / omics, 4 references
- [7] doi:10.1038/s41467-026-73428-y [code]
- Regional heterogeneity in phenotypic and genetic associations between bone and brain in humans.Journal: Nature communicationsIn common: data.table, ggplot2, genetics / omics, 4 references
- [8] doi:10.1371/journal.pcbi.1014422 [code]
- Deciphering cell type-specific causal genetic effects on brain imaging-derived phenotypes and disorders with single-cell Mendelian randomization.Journal: PLoS computational biologyIn common: data.table, ggplot2, genetics / omics, 4 references
- [9] doi:10.1038/s41562-026-02476-7 [code]
- Genome-wide meta-analysis of quantitatively measured generalized anxiety symptoms in individuals of European ancestry.Journal: Nature human behaviourIn common: data.table, genetics / omics, 4 references
- [10] doi:10.1080/20008066.2026.2709174
- Exploring the shared genetic architecture between post-traumatic stress disorder (PTSD) and obstructive sleep apnea (OSA).Journal: European journal of psychotraumatologyIn common: genetics / omics, 5 references
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, 40 scripts, and 4 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:2568a77bbf983f96…
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.
