2024-11-14 | LDSC——分区遗传力及组织细胞富集

LDSC不仅仅可以用于计算h^2以及检验GWAS结果的inflation是否是因为混杂因素(confounding)的影响,还可以有S-LDSCpartition haritability, 分区遗传力),LDSC-SEG(遗传力组织细胞富集)

在本节,让我们来讲讲LDSC-SEG这个方法,实质上也是利用了partition haritability的思想。

一、S-LDSC的理论及方法

S-LDSC的思想是通过不同的基因组注释(不同功能区域)来估计h^2在基因组上的分布。其拟合回归模型为

E[\chi^2] = 1 + Na + N\sum_k{\tau_k}{l(i, k)}
其中E[\chi^2]为SNPi的卡方统计量期望值,N为样本量,a为混杂因素,l(i, k)是SNPi在注释类别C_k中的LD评分,\tau_k为待估计的回归系数。

  • \tau_k反映了注释类别C_k对遗传力的贡献。即:
    • \tau_k为正,则属于C_k的SNP比其他SNP更容易解释表型的遗传变异。
    • \tau_k为负,则属于C_k的SNP对遗传力的贡献较少。
    • \tau_k为0,则C_k不对表型的遗传力有显著影响。

通过回归,我们可以得到每个注释类别中的SNPh^2的富集,及哪些注释类别对于表型变异更加重要。

二、S-LDSC的脚本实现

1、转换格式
python munge_sumstats.py \
--sumstats body_BMIz.sumstats.gz \
--merge-alleles w_hm3.snplist \
--out BMI
2、运行S-LDSC
python ldsc/ldsc.py \
  --h2 BMI.sumstats.gz \
  --ref-ld-chr baselineLD. \
  --frqfile-chr 1000G.EUR.QC. \
  --w-ld-chr weights.hm3_noMHC. \
  --overlap-annot \
  --print-coefficients \
  --print-delete-vals \
  --out BMI.baselineLD

上面脚本结束后,我们就可以得到S-LDSC的结果,查看h^2在哪些注释类别中更富集。

三、LDSC-SEG组织细胞富集

继S-LDSC的思想,研究团队又将partition haritability拓展到了转录组的组织细胞层面。

1、首先,计算某个数据来源(比如这里的GTEx)表达矩阵 per gene 的t-statistic
2、对某个组织或细胞的t-statistic进行排序,比如这里的cortex组织。
3、根据t-statistic排序,取top 10%的gene作为该组织活细胞specific expression的gene。
4、对top 10%的gene上下100-KB窗口,利用LDSC baseline model计算其LD score,并利用S-LDSC进行组织细胞富集。

LDSC-SEG.png

!!!注意:如果得到的基因表达矩阵为标准化后的相对表达矩阵, 则不用计算t-statistic,就用该值进行排序选基因即可。
The available gene expression values already quantify relative expression for a tissue or cell type rather than absolute expression for a single sampleand so we used these values in place of our t-statistics. (Hilary K. Finucane et al. Nat Genet)

四、LDSC-SEG代码实现

1、转换格式
python munge_sumstats.py \
--sumstats body_BMIz.sumstats.gz \
--merge-alleles w_hm3.snplist \
--out BMI
2、运行LDSC-SEG
ldsc.py \
    --h2-cts BMI.sumstats.gz \
    --ref-ld-chr 1000G_EUR_Phase3_baseline/baseline. \
    --out BMI_${cts_name} \
    --ref-ld-chr-cts $cts_name.ldcts \
    --w-ld-chr weights_hm3_no_hla/weights.

五、如何生成自己的LDSC-SEG组织细胞注释文件

因为LDSC只提供了一些常见组织的注释文件,那么如果我们研究的是一些如耳朵、鼻子等组织,就得自己找数据生成这些注释文件。有时,有些在人类中难以得到,则需要用小鼠这些的代替,不过需要先找同源基因。\

我这里就用小鼠的scRNA数据进行实例,前提是你已经有了每个细胞类型的基因表达矩阵。

1、biomaRt找同源基因
# if (!require("BiocManager", quietly = TRUE)) 
#     install.packages("BiocManager")
# BiocManager::install("biomaRt")
library(dplyr)
library(data.table)
library(biomaRt)
listEnsembl()
# connect Ensembl
mouse <- useEnsembl(biomart = "genes", dataset = "mmusculus_gene_ensembl")
human <- useEnsembl(biomart = "genes", dataset = "hsapiens_gene_ensembl")
## 构建转化函数
homologs <- getBM(attributes = c("chromosome_name","ensembl_gene_id", "external_gene_name",
                                 "mmusculus_homolog_ensembl_gene", "mmusculus_homolog_orthology_type"),
                  filters = "with_mmusculus_homolog", 
                  values = TRUE, 
                  mart = human)
# head(homologs)
homologs_1to1 <- subset(homologs, mmusculus_homolog_orthology_type == "ortholog_one2one")
# rm MT X Y chromosome genes
homGene_1to1_chr1_22 <- homologs_1to1 %>% 
  filter(!chromosome_name %in% c("MT", "X", "Y")) %>%
  rename(human_ensembl_gene = ensembl_gene_id)

fwrite(homGene_1to1_chr1_22, file="HomGene1to1_mouse2human.txt", sep="\t", row.names=FALSE)
2、得到per cell type top 10%的基因list
# 同时生成control.GeneSet文件,也就是所有的基因
library(dplyr)
library(data.table)
setwd("/public/share/wchirdzhq2022/Wulab_share/LDSC/Mouse_cochleae/")
scGene = fread("Sc_P8_12_20.txt")
homologs_1to1 = fread("HomGene1to1_mouse2human.txt")[,2:3,with=FALSE]
colnames(homologs_1to1) = c("human_gene", "gene")

merge_df = merge(scGene, homologs_1to1, by="gene")
merge_df = subset(merge_df, select = -c(gene))
colnames(merge_df) = gsub("[[:space:]/-]", "_", colnames(merge_df))
colnames(merge_df) = gsub("'", "_", colnames(merge_df))
merge_df = merge_df %>% select(human_gene, everything())

control = merge_df[, 1]
fwrite(control, file="Sc_P8_12_20_control.GeneSet", sep="\t", col.names=FALSE)

lapply(2:ncol(merge_df), function(i){
  temp_dt = data.frame(merge_df[[1]], merge_df[[i]])
  # colnames(df1) = names(merge_df)[c(37, i)]
  sorted_dt = temp_dt[order(temp_dt[[2]], decreasing = TRUE), ]
  top_10 = sorted_dt[1:floor(0.1*nrow(sorted_dt)), ]
  top_10_gene = top_10[, 1, drop=FALSE]

  cell_type = colnames(merge_df)[i]
  fwrite(top_10_gene, file=paste0("Sc_P8_12_20_", cell_type, ".GeneSet"), sep="\t", col.names=FALSE)
})
3、make_annot.py处理得到的gene list

虽然LDSC说make_annot.py默认提供了ENSG.coord.txt,但是其实这个文件找不到,得自己生成。
由于这个文件需要的是GENE CHR START END四列信息,而SMR中提供的glist-hg19文件正好满足,所以用这个文件稍微转化一下

# generate ENSG.coord.txt
library(biomaRt)
library(data.table)
human <- useEnsembl(biomart = "genes", dataset = "hsapiens_gene_ensembl")
human_gene <- getBM(attributes = c("chromosome_name","ensembl_gene_id", "external_gene_name"),
                    filters = "", values = TRUE, mart = human)
colnames(human_gene) = c("CHR", "ENSG_ID", "GENE")

glist_hg19 <- fread("/public/home/shilulu/script/plot_smr/glist-hg19")
colnames(glist_hg19) = c("CHR", "START", "END", "GENE")
merge_df <- merge(glist_hg19, human_gene, by="GENE")
glist_hg19_ENSG <- merge_df[, c("ENSG_ID", "CHR.y", "START", "END")]
colnames(glist_hg19_ENSG) = c("GENE", "CHR", "START", "END")

fwrite(glist_hg19_ENSG, file="ENSG_coord.txt", sep="\t")

然后,运行make_annot.py,其中的control为你的整个表达矩阵中所有的基因哦,control在运行LDSC-SEG的时候会用到

# using 100K widow as Hilary K. Finucane et al. Nat Genet
# run make_annot.py 为control 和 每个cell type生成
conda activate ldsc
bfile="/public/share/wchirdzhq2022/Wulab_share/LDSC/1000G_EUR_Phase3_plink/1000G.EUR.QC"
ldsc="/public/home/shilulu/software/ldsc"

ls *.GeneSet | while read id; do
  annot=$(basename -- "${id}" ".GeneSet")
  for chr in {1..22}; do 
  cmd="python ${ldsc}/make_annot.py \
      --gene-set-file ${annot}.GeneSet \
      --gene-coord-file ${ldsc}/ENSG_coord.txt \
      --bimfile ${bfile}.${chr}.bim \
      --windowsize 100000 \
      --annot-file ${annot}.${chr}.annot.gz"
  done 
done
4、计算per cell type的LD score
awk '{if ($1!="SNP") {print $1} }' ${ldsc_dir}/w_hm3.snplist > ${ldsc_dir}/listHM3.txt

ls *.GeneSet | while read id; do
  annot=$(basename -- "${id}" ".GeneSet")
  for chr in {1..22}; do
  python ${ldsc}/ldsc.py --l2 \
    --bfile ${bfile}.${chr} \
    --print-snps ${ldsc_dir}/listHM3.txt \
    --ld-wind-cm 1 \
    --annot ${annot}.{TASK_ID}.annot.gz \
    --thin-annot \
    --out ${annot}.${chr}
  done
done
5、生成一个list,第一列为cell type name,第二列为每个cell type文件名前缀加“,”加上面说的cotrol的文件名前缀
# generate .ldcts file for my sc data
ls ${dir}/*GeneSet | while read id; do
  tissue=$(basename -- ${id} | sed 's/^Sc_P8_12_20_//;s/.GeneSet$//')
  cell=${dir}/$(basename -- ${id} "GeneSet")
  control=${dir}/"Sc_P8_12_20_control."
  echo "${tissue} ${cell},${control}" >> Mouse_cochleae_gene_expr.ldcts
done
# 注意最后把cell type为cotrol的删除,这个脚本有待完善

至此,我们就生成了自己的组织或细胞类型的注释文件,就可以进行LDSC-SEG分析了

ldsc.py --h2-cts BMI.sumstats.gz \
             --ref-ld-chr ${REF_LD_CHR} \
             --out BMI_cts \
             --ref-ld-chr-cts Mouse_cochleae_gene_expr.ldcts \
             --w-ld-chr ${W_LD_CHR}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容