Cmplot批量绘制GEEMA的GWAS结果manhattan/QQ图

 输入文件为GEMMA进行GWAS的结果文件(参数设置请参考官方说明书)

#############################################
################## R代码 ####################
#############################################
#绘图
# 清空环境变量
rm(list = ls())

# 设置工作目录
setwd("/home/wzy/gemma/output/")

# 加载必要的包
library(CMplot)
library(dplyr)

# 获取当前目录下所有扩展名为 .assoc.txt 的文件(包括完整路径)
files <- list.files(pattern = "\\.assoc\\.txt$", full.names = TRUE)

# 定义处理单个文件并绘图的函数
process_file <- function(file) {
  # 读取数据(假设数据以空格或制表符分隔,且包含表头)
  data <- read.table(file, header = TRUE)
  
  # 选择指定的列(第2,1,3,12列),请确认这4列为所需数据
  data <- data[, c(2, 1, 3, 12)]
  
  # 过滤数据:去除“chr”列中等于23的记录
  # 如果你的数据中第二列的名称不是 "chr",请改为正确的列名
  data <- data %>% filter(chr != 23)
  
  # 提取文件基本名称(不带路径和扩展名)
  file_name <- tools::file_path_sans_ext(basename(file))
  
  # 定义输出文件前缀,保存到当前工作目录
  manhattan_prefix <- paste0(file_name, "_manhattan")
  qq_prefix <- paste0(file_name, "_qq")
  
  ## 绘制曼哈顿图,使用 CMplot 内置输出功能 ##
  CMplot(data,
         plot.type = "m",
         col = c("skyblue", "gray80"),
         cex = 0.9,
         LOG10 = TRUE,
         multracks = FALSE,
         threshold = c(5e-8, 1e-6),
         threshold.lty = c(1, 2),
         threshold.lwd = c(1, 1),
         threshold.col = c("red", "grey"),
         amplify = TRUE,
         file = "tiff",      # 输出格式为 TIFF
         dpi = 500,
         signal.cex = c(1, 1),
         signal.col = c("red", "green"),
         file.output = TRUE,
         file.name = manhattan_prefix)
  
  ## 绘制 QQ 图 ##
  # 计算 λ(lambda)值:利用 p_wald 列计算 Z 值,再取中位数
  p_value <- data$p_wald
  z <- qnorm(p_value / 2)
  lambda <- round(median(z^2, na.rm = TRUE) / 0.454, 3)
  
  CMplot(data,
         plot.type = "q",
         conf.int.col = NULL,
         box = TRUE,
         file = "tiff",
         main = paste("λ =", lambda),
         dpi = 500,
         file.output = TRUE,
         file.name = qq_prefix,
         verbose = FALSE)
  
  cat("Processed file:", file, "\n")
}

# 遍历所有文件进行处理
lapply(files, process_file)

只绘制一个曼哈顿图和QQ图,使用以下R代码(这里输入文件以GMATs的GWAS结果文件为例)

#设置工作路径
setwd("/home/wzy/geno/GMATs/")
data <- read.table("adg.0_12848070.res", header = T)
data=data[,c(3,2,5,13)]

#加载R包
library(CMplot)
##曼哈顿图
CMplot(data,
       plot.type = "m",
       col = c("skyblue", "gray80"),
       cex = 0.9,
       LOG10 = TRUE,
       multracks = FALSE,
       threshold = 5e-8,
       threshold.lty = 1,
       threshold.lwd = 1,
       threshold.col = "red",
       amplify = TRUE,
       file = "tiff",      # 输出格式为 TIFF
       dpi = 500,
       signal.cex = 1,
       signal.col = "red",
       file.output = TRUE,
       #file.name = manhattan_prefix
)

#计算膨胀系数
p_value <- data$p
z <- qnorm(p_value / 2)
lambda <- round(median(z^2, na.rm = TRUE) / 0.454, 3)

##绘制QQ图
CMplot(data,
       plot.type = "q",
       conf.int.col = NULL,
       box = TRUE,
       file = "tiff",
       main = paste("λ =", lambda),
       dpi = 500,
       file.output = TRUE,
       #file.name = qq_prefix,
       verbose = FALSE)

 

### LDAK 和 GWAS 的实现细节 #### 什么是 LDAK? LDAK 是一种用于全基因组关联研究(GWAS)的工具包,它能够通过考虑连锁不平衡(LD)、遗传结构和其他复杂因素来提高分析精度。其核心功能之一是计算加权矩阵并将其应用于后续的统计模型中[^1]。 #### LDAK 的基本工作流程 以下是基于引用中的脚本以及常见实践总结出的 LDAK 工作流: 1. **准备数据** 需要输入 PLINK 格式的 `.bed`, `.bim` 和 `.fam` 文件作为基础数据集。如果原始数据为 VCF 格式,则可以使用 `plink` 转换命令完成格式转换[^2]。 ```bash plink --vcf input.vcf --make-bed --out output_prefix ``` 2. **分块处理 LD 结构** 将整个基因组划分为多个区域(通常按染色体或固定窗口大小),以便更高效地计算权重矩阵。以下是一个典型的循环脚本示例: ```bash for section in {1..31}; do ldak5.linux --calc-weights snp.sections --bfile snp --section $section; done ``` 这里的 `$section` 表示当前正在处理的片段编号,而 `--calc-weights` 参数会生成对应的权重文件[^2]。 3. **构建混合线性模型 (MLM)** 利用之前得到的权重信息建立 MLM 来校正群体分层效应和亲属关系偏差。具体操作如下所示: ```bash ldak5.linux --linear gwas.results --bfile snp --grm weights.grm.bin --pheno phenotype.txt --covar covariates.cov ``` 上述命令中包含了几个重要参数解释: - `gwas.results`: 输出结果保存路径; - `snp`: 输入 PLINK 数据前缀名; - `weights.grm.bin`: 加载预定义好的 GRM/权重二进制文件; - `phenotype.txt`: 提供表型向量; - `covariates.cov`: 可选协变量列表文件。 4. **解读输出结果** 完成以上步骤之后即可获得 SNP 效应估计值及其显著水平 p 值等内容。进一步可视化可借助 R 包如 `CMplot` 绘制曼哈顿图QQ 辅助判断信号强度分布情况[^1]。 #### 技术要点解析 - **链路平衡调整**:由于 SNPs 并非完全独立随机抽样所得,因此引入 LD-aware 方法有助于减少假阳性率的同时提升检测效能。 - **多重比较修正**:鉴于海量假设检验场景下容易出现偶然发现的现象,Bonferroni 或 FDR 控制策略被广泛采纳以保障结论可靠性。 - **软件兼容性考量**:除了原生支持外,还可以与其他主流平台无缝对接比如 GCTA, BOLT-LMM 等扩展应用范围。 ```R library(CMplot) # 导入 GWAS summary statistics data <- read.table("gwas_results.txt", header=TRUE) # 创建 Manhattan plot cm.plot(data$CHR, data$BP, data$p.value, type="mh") # 添加额外装饰元素 title(main="Manhattan Plot of Genome-Wide Association Study Results") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值