homer -- 通过差异基因寻找转录因子

看我写的教程不如看官网(\滑稽):http://homer.ucsd.edu/homer/

1. Installation

cd $HOME/software
mkdir homer
cd homer
wget http://homer.ucsd.edu/homer/configureHomer.pl
perl configureHomer.pl -install
export PATH=$HOME/software/homer/bin/:$PATH # 最好写到.bashrc里

2. Data donwload

perl $HOME/software/homer/configureHomer.pl -list # 列出可供下载的数据包,按需下载
# perl $HOME/software/homer/configureHomer.pl -install mouse
# perl $HOME/software/homer/configureHomer.pl -install mm8
perl $HOME/software/homer/configureHomer.pl -install hg19 # 我只需要人类的数据
perl $HOME/software/homer/configureHomer.pl -install human-p # 人类启动子数据

3. Find TF

目前我只用过findMotifs.pl这个功能,可以根据给定的基因ID或者fasta文件寻找已知的或潜在的转录因子结合区域,即motif,并给出对应的TF和统计数据。

养成好习惯,记得先 --help~

findMotifs.pl --help

两种用法:

  • findMotifs.pl <input list> <promoter set> <output directory> [additoinal options]
  • findMotifs.pl targets.fa fasta motifResults/ -fasta background.fa

如果已获得差异基因,直接使用第一种用法就行了,比较简单。

参数设置:

  • -start:TSS上游多少bp作为启动子区域,带负号,默认-300
  • -end:TSS下游多少bp作为启动子区域,不用带正号,默认50
  • 物种类型
  • 输出目录

其他的好像也不用怎么设置,功能都挺齐全的昂,GO、KEGGG、MsigDB富集分析、染色体区域、蛋白质相互作用以及我不了解的东东,略fancy~

示例:

测试数据:https://github.com/JiahaoWongg/Files/blob/main/homer_geneID.txt

鉴于github访问时好时坏。。。

ENSG00000271798.1
ENSG00000228350.1
ENSG00000169903.7
ENSG00000072163.19
ENSG00000242110.8
ENSG00000162639.16
ENSG00000133131.15
ENSG00000171617.14
ENSG00000258757.1
ENSG00000145604.16
ENSG00000100297.16
ENSG00000285160.1
ENSG00000011143.17
ENSG00000276043.5
ENSG00000117480.16
ENSG00000196260.5
ENSG00000185379.20
ENSG00000186185.14
ENSG00000129173.13
ENSG00000279347.1
ENSG00000127324.9
ENSG00000076770.14
ENSG00000186283.14
ENSG00000105427.10
ENSG00000273132.1
ENSG00000226065.1
ENSG00000122642.11

geneID最好用ENSEMBL,当然如果不是软件也会给你转换。

启动子范围我选择-800~200,另外需要指定文件输出目录,这里为out

findMotifs.pl homer_geneID.txt human out -start -800 -end 200

跑的还挺慢的吧,两个小时?

结果:

$ ls out
biocyc.txt              homerMotifs.motifs10  knownResults.html           prosite.txt
biological_process.txt  homerMotifs.motifs12  knownResults.txt            reactome.txt
cellular_component.txt  homerMotifs.motifs8   lipidmaps.txt               seq.autonorm.tsv
chromosome.txt          homerResults          molecular_function.txt      smart.txt
cosmic.txt              homerResults.html     motifFindingParameters.txt  smpdb.txt
gene3d.txt              interactions.txt      msigdb.txt                  wikipathways.txt
geneOntology.html       interpro.txt          pathwayInteractionDB.txt
gwas.txt                kegg.txt              pfam.txt
homerMotifs.all.motifs  knownResults          prints.txt

这里主要看homerResults文件夹,为预测的潜在的TF结合motif,至于已存在的TF结果knownResults我还没研究。

可以用浏览器打开homerResults.html进行查看。

不过,貌似并没有提供预测结果的汇总,我这里写了一个R函数,用于提取汇总homerResults里的结果:

subString <- function(strings, idx, sep = NA){

	strings = as.character(strings)
	if(is.na(sep)){
		res = as.character(lapply(strings, function(x) paste(strsplit(x, "")[[1]][idx], collapse = "")))
	} else{
		res = sapply(strsplit(strings, sep), function(x) x[idx])
	}
	return(res)
}

summaryHomer <- function(outFolder){

	homerFolder = paste0(outFolder, "/homerResults")
	xFiles = list.files(homerFolder, ".motif$")
	xFiles = xFiles[-grep("similar", xFiles)]
	xFiles = xFiles[-grep("RV", xFiles)]
	xFiles = xFiles[order(as.numeric(gsub("\\.", "", gsub("motif", "", xFiles))))]
	texts  = sapply(paste0(homerFolder, "/", xFiles), readLines)
	chunks = sapply(texts, function(x) strsplit(x[1], "[\t]"))

	motif = sapply(chunks, function(x) subString(x[1], 2, ">"))
	match = sapply(chunks, function(x) subString(subString(x[2], 2, "BestGuess:"),  1, "/"))
	score = sapply(chunks, function(x) rev(strsplit(x[2], "[()]")[[1]])[1])
	count = sapply(chunks, function(x) subString(x[6], 3, "[T:()]"))
	ratio = sapply(chunks, function(x) subString(x[6], 2, "[()]"))
	p_value = sapply(chunks, function(x) subString(x[6], 2, "P:"))

	xresT = data.frame(motif, 
					   match, 
					   score = as.numeric(score), 
					   count = as.numeric(count),
					   ratio_perc = as.numeric(gsub("%", "", ratio)), 
					   p_value = as.numeric(p_value)
					   )
	rownames(xresT) = gsub(".motif", "", basename(rownames(xresT)))
	return(xresT)
}

只需要提供homer的输出目录,我们来使用一下:

> summaryHomer(out)
               motif              match score count ratio p_value
motif1  TCAGGTGAAGGG         ZNF467(Zf) 0.635     4 0.07%    1e-8
motif2  YSGTGGAYTRYT            ZNF354C 0.746     3 0.04%    1e-7
motif3    TTCTVAATGC             BARHL1 0.558     8 2.98%    1e-7
motif4      TATTKTCC             NFATC2 0.772     9 6.70%    1e-5
motif5  CCTAACTGTTGG          BMYB(HTH) 0.640     2 0.02%    1e-5
motif6      TCKGTAGA               OSR1 0.704    10 9.54%    1e-5
motif7      AGCGGGAC          E2F6(E2F) 0.765     7 3.79%    1e-5
motif8      TGGCGATC               MZF1 0.707     8 6.11%    1e-4
motif9  TGAGCMGRGATA          GATA3(Zf) 0.605     3 0.26%    1e-4
motif10   GCGAGCTTGC              Nr2e3 0.613     4 0.85%    1e-4
motif11     ACCAGATT             TWIST1 0.723     3 0.40%    1e-4
motif12 CYGSYGCWWAMC    PB0112.1_E2F2_2 0.577     2 0.12%    1e-3
motif13 ACTGTGCCATTC    AR-halfsite(NR) 0.599     2 0.15%    1e-3
motif14   CCGTCATCAT                YY2 0.665     1 0.00%    1e-3
motif15   TCCTTATTCG              SOX14 0.620     1 0.00%    1e-3
motif16   GTGATCGGTA               CUX2 0.677     1 0.00%    1e-3
motif17   ATTGGCGTAT Oct2(POU,Homeobox) 0.703     1 0.00%    1e-3
motif18   CGATTGAATG              ZNF24 0.705     1 0.00%    1e-3
motif19   CGATGGCAGT           HIC1(Zf) 0.731     1 0.00%    1e-3
motif20   GACTGTATAG             ZBTB32 0.684     1 0.00%    1e-3
motif21   TTAGTAGCAC    PB0155.1_Osr2_2 0.705     1 0.00%    1e-3
motif22   AGTACGCGCT              HIF1A 0.640     1 0.00%    1e-3
motif23   CGAAGATGAT   POL008.1_DCE_S_I 0.608     1 0.00%    1e-3
motif24   ACTTATATGG                SRF 0.728     1 0.00%    1e-3
motif25   TTTATCGCAT               CDX2 0.758     1 0.00%    1e-3
motif26   TTTCTGTACG             ZBTB32 0.727     1 0.00%    1e-3
motif27   GGGTCGATCA   PB0030.1_Hnf4a_1 0.621     1 0.00%    1e-3
motif28   CATAAATTCG   PB0171.1_Sox18_2 0.706     1 0.00%    1e-3
motif29 CCTCAGTGTGTC             ZSCAN4 0.581     1 0.00%    1e-3
motif30 TAACCAGGATGT         SPDEF(ETS) 0.781     1 0.00%    1e-3
motif31 CTTGGGCAGTAC    PB0133.1_Hic1_2 0.679     1 0.00%    1e-3
motif32 GGGGGTTGGGTC               KLF4 0.681     1 0.00%    1e-3
motif33 TCCAAAAGAGCT             ZBTB26 0.613     1 0.00%    1e-3
motif34 AGCTGTGCTTTA              Gfi1b 0.732     1 0.00%    1e-3
motif35 CGTGAATGAAGC    PB0028.1_Hbp1_1 0.674     1 0.00%    1e-3
motif36 GTTTATTCTGGG              Foxq1 0.650     1 0.00%    1e-3
motif37 TCCCCACTGGAG               EBF1 0.679     1 0.00%    1e-3
motif38 TTTAGAGGAGGC  PB0203.1_Zfp691_2 0.629     1 0.00%    1e-3
motif39 GCTGGCATGTCT           HIC1(Zf) 0.724     1 0.00%    1e-3
motif40 GGCATGGGGCTC              CTCFL 0.671     1 0.00%    1e-3
motif41 CTGGGGCGCAGT         ZNF692(Zf) 0.648     1 0.00%    1e-3
motif42 AGAGGACGGCCG            YY1(Zf) 0.588     1 0.00%    1e-3
motif43 AAGCTTGGGAGG              Nr2e3 0.741     1 0.00%    1e-3
motif44 TCGCCCACGAGA           Egr2(Zf) 0.683     1 0.00%    1e-3
  • motif
    预测的motif序列,正链
  • match
    预测的TF
  • score
    匹配度,1为完全匹配
  • count
    你输入的基因中包含该motif的基因个数
  • ratio
    你输入的基因中包含该motif的基因个数占总输入基因个数的比例
  • p_value
    置信度

接下来,敲除?过表达?


后来又加了提取汇总knownResults里的结果的函数:

summaryHomerKnown <- function(outFolder){

	knownFolder = paste0(outFolder, "/knownResults")
	xFiles = list.files(knownFolder, ".motif$")
	xFiles = xFiles[order(as.numeric(gsub("\\.motif", "", gsub("known", "", xFiles))))]
	texts  = sapply(paste0(knownFolder, "/", xFiles), readLines)
	chunks = sapply(texts, function(x) strsplit(x[1], "[\t]"))

	motif = sapply(chunks, function(x) subString(x[1], 2, ">"))
	TF    = sapply(chunks, function(x) subString(x[2], 1, "/"))
	count = sapply(chunks, function(x) subString(x[6], 3, "[T:()]"))
	ratio = sapply(chunks, function(x) subString(x[6], 2, "[()]"))
	p_value = sapply(chunks, function(x) subString(x[6], 2, "P:"))

	xresT = data.frame(motif, 
					   TF, 
					   count = as.numeric(count),
					   ratio_perc = as.numeric(gsub("%", "", ratio)), 
					   p_value = as.numeric(p_value)
					   )
	rownames(xresT) = gsub("\\.motif", "", basename(rownames(xresT)))
	return(xresT)
}
### 单细胞转录组数据分析方法与工具 #### 数据预处理 在单细胞转录组数据的分析过程中,数据预处理是一个至关重要的环节。这一步骤通常涉及质量控制、过滤低质量细胞以及标准化表达矩阵等操作。为了确保后续分析的有效性和准确性,多种软件包提供了强大的功能来完成这些任务[^1]。 ```r library(Seurat) # 创建 Seurat 对象并加载原始计数数据 sce <- CreateSeuratObject(counts = raw_counts, project = "scRNAseq") ``` #### 维度约减与聚类 通过降维技术可以减少高维度特征空间带来的计算复杂度问题,并有助于发现潜在结构。t-SNE 和 UMAP 是两种广泛使用的非线性嵌入算法,在保持局部邻近关系的同时能够很好地分离不同类型的细胞群落。此外,基于图论的方法如 Louvain 社区检测也被应用于构建细胞间的相似网络进而实现高效聚类[^2]。 ```python import scanpy as sc adata = sc.read_10x_h5('filtered_gene_bc_matrices.h5') sc.pp.neighbors(adata, n_neighbors=15) sc.tl.umap(adata) sc.pl.umap(adata, color=' louvain', legend_loc='on data') ``` #### 差异基因表达分析 识别差异表达基因对于理解特定条件下哪些生物过程被激活具有重要意义。DESeq2 或 edgeR 这样的统计模型常用于比较两组或多组样本之间的平均表达水平变化情况;而 SCDE 则专注于捕捉稀有事件下的微弱信号,适用于探索罕见亚型特性[^3]。 ```bash # 使用 DESeq2 执行差异表达测试 $ Rscript run_DESeq2.R --input_matrix file.txt \ --condition_file conditions.csv \ --output_results results.tsv ``` #### 调控元件结合基序比较分析 结合调控区域内的序列保守性和转录因子表达信息来进行共定位模式挖掘,可以帮助揭示正常生理活动及疾病发生发展背后的分子机制。例如,利用 HOMER 可以预测新的顺式作用元件并与已知数据库对比找出可能参与关键路径调节的新成员。 ```perl use homer; findMotifs.pl peaks.bed mm10 knownResults/ -size 1000 annotatePeaks.pl peaks.bed mm10 > annotations.txt ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值