一、什么是單倍型?
在單倍型分析前,首先需要明白什么是單倍型、什么是基因單倍型?
一般來講,所謂的單倍型是指同一染色體上不同變異位點的各種線性組合形式。那么基因單倍型自然就是指同一基因上(啟動子、外顯子、內含子、終止子)的不同變異位點的顯性組合形式。
說明:基因組或染色體水平的單倍型分析不在本文范疇之內,請您參考“http://www.lxweimin.com/p/4de7762aa81e”。
二、單倍型分析需要什么數據?數據從哪里來?
那么,進行基因單倍型分析需要那些數據呢?
1)基因型數據(必須)
既然單倍型分析需要變異位點信息,自然就需要基因型數據?;蛐蛿祿梢杂泻芏鄟碓?,首先,可以零成本從各大公開數據庫下載(推薦);其次,可以用一代測序的方法獲取基因型數據(適合于基因不太長、樣本數量較少的情況);如果你們課題組經費非常充足,可以自行做制作基因芯片、高通量測序等等。
數據格式:
- 一代測序數據:需要拼接成序列并保存成fasta格式
- 二代測序數據:VCF,Hapmap,plink(map&ped)
- 自定義格式:表格,每行為一個變異位點,每列為一個樣品,前五列固定為Chr,POS,REF,Alt和INFO
2)基因注釋信息(可選)
如果需要查看單倍型中的變異位點在基因上面的分布的話,則會需要用到基因注釋信息。如果沒有這方面需求,則可以忽略。一般來說,各個已測序的物種都有對應的注釋信息,這個做基因功能研究的肯定知道從哪里搞到適合你們所研究的物種的注釋信息的。比如已測序的作物可以從phytozome數據庫中下載,或者物種對應的數據庫下載玉米(maizeGDB)。當然,這種注釋信息不一定百分百正確。如果非常不行的你研究的基因恰巧注釋是錯誤的,那么就需要你自行創建一個BED格式的注釋文件了。
數據格式
- GFF/GFF3:一般從數據庫下載的注釋文件屬于這種格式,可以手動將對應基因的注釋信息提取出來,也可以直接使用源文件
- BED6:一般自定義為BED6格式;第一列為染色體名稱,第二列為起始位置,第三列為終止位置,第四列為片段名稱(基因ID+空格+CDS/UTR),第五列留空,第六列為方向(+/-)
3)樣本信息(表型數據、地理坐標、樣本分類等等,可選)
在分析完單倍型之后需要評估優勢單倍型(產量高、高耐逆等)、變異位點的效應分析,則需要用到表型數據。單倍型的地理分布需要用到地理坐標。如果提供樣本分類數據的話,單倍型網絡分析能提供更多的線索。
數據格式
- 文件中:每行為一個樣本,每一列作為一種數據,
- R中: 數據框(data.frame),行名為樣本名,列名為數據信息(type,subgroup,location,等)
三、單倍型需要什么工具?
什么,都2302年了,您還在用Excel分析單倍型呢??!
在這里向推薦大家使用geneHapR。這款軟件完美地支持從fasta序列以及vcf、p.link、HapMap等格式的二代測序結果進行單倍型鑒定。
軟件安裝:由于這款軟件是基于R語言開發的,所以需要首先安裝R和RStudio兩款軟件(注意一定要先安裝R再安裝RStudio)。
最新版R下載鏈接:https://cloud.r-project.org/bin/windows/base/。
最新版RStudio下載鏈接:https://posit.co/download/rstudio-desktop/。
都安裝完成后,打開RStudio,輸入如下命令。
# 先安裝一些依賴的BiocManager的包,否則后續安裝geneHapR容易出錯
install.packages("BiocManager")
BiocManager::install(c("Biostrings", "GenomicRanges", "muscle", "IRanges", "rtracklayer", "trackViewer"))
# 安裝geneHapR
install.packages("geneHapR")
如果安裝過程遇到錯誤了。請不要灰心,不要放棄,命運總是坎坷的,相信陽光總在風雨后!請先安裝缺失的軟件包,等完成后再嘗試運行install.packages("geneHapR")
安裝geneHapR。
如果看到程序包‘geneHapR’打開成功,MD5和檢查也通過
,恭喜你可以使用geneHapR進行單倍型分析了!??!
四、工具裝好了,該怎么操作呢?
4.0 測試數據準備
將下列4個文件下載下來并存放到工作目錄中,后續分析會用到
基因型數據:Genotype
注釋信息:Annotation
表型數據:Phenotype
其他相關信息:AccINFO
4.1 RStudio代碼
如果有一定的R語言基礎,推薦您使用這種方式。
1) 從數據導入到單倍型鑒定
# 首先把軟件加載進來
library(geneHapR)
# 設置工作目錄(windows的同學注意"\"和"/"的問題)
setwd("D:/Haplotype")
# 導入各種數據
gff <- import_gff("gff/OsGHD7.gff3") # 導入GFF格式的注釋數據
gff <- import_bed("12859_2023_5318_MOESM3_ESM.bed6") # 導入BED格式的注釋數據
pheno <- import_AccINFO("12859_2023_5318_MOESM4_ESM.tsv") # 導入表型數據
AccINFO <- import_AccINFO("12859_2023_5318_MOESM5_ESM.csv",
sep = ",", # 分隔符號,默認為制表符"\t"
na.strings = "NA") # 導入其他樣本信息
# 導入VCF格式的基因型數據及變異信息的篩選
vcf <- import_vcf("OsGHD7.vcf.gz")
vcf <- filter_vcf(vcf, gff,
mode = "both", # both, POS, Type的其中一個
start = start, end = end, Chr = Chr, # 保留哪些位置的變異信息
type = "CDS", cusTyp = c("CDS")) # 保留哪些類型的變異信息
# 導入表格形式的基因型數據
tbl <- read.csv("12859_2023_5318_MOESM2_ESM.geno")
# 導入其他格式的基因型數據請查看幫助
# 這里就不再一一展示了
help("geneHapR")
library(help = 'geneHapR')
browseVignettes('geneHapR')
# 一些基本參數的設置
geneID <- "OsGHD7" # 基因ID
Chr <- "Chr7" # 基因所處的染色體名稱
start <- 9152403 # 基因的起始位置(染色體坐標)
end <- 9155185 # 基因的終止位置(染色體坐標)
hapPrefix <- "H" # 單倍型名稱的前綴
# 常用格式的單倍型鑒定,具體參數請查看幫助文檔
# VCF: vcf2hap()
# P.link(ped&map): plink.pedmap2hap()
# Fasta: seqs2hap()
# HapMap: hmp2hap()
# Table: table2hap()
# 從VCF開始單倍型鑒定
hapResult <- vcf2hap(vcf, hapPrefix = hapPrefix,
hetero_remove = TRUE, # 移除包含雜合位點的樣本
na_drop = TRUE) # 移除包含基因型缺失的樣本
# 從表格形式的基因型數據開始單倍型分析
hapResult <- table2hap(vcf, hapPrefix = hapPrefix,
hetero_remove = TRUE, # 移除包含雜合位點的樣本
na_drop = TRUE) # 移除包含基因型缺失的樣本
# 對單倍型結果進行匯總整理
hapSummary <- hap_summary(hapResult, hapPrefix = hapPrefix)
# 將單倍型鑒定結果保存到硬盤
write.hap(hapResult, file = "GeneID.hapResult")
write.hap(hapSummary, file = "GeneID.hapSummary")
# 導入之前的單倍型分析結果
hapResult <- import_hap(file = "GeneID.hapResult")
hapSummary <- import_hap(file = "GeneID.hapSummary")
2)單倍型結果展示
# 單倍型結果可視化分析
# 以表格形式展示各單倍型的基因型
plotHapTable(hapSummary, # 單倍型結果
hapPrefix = hapPrefix, # 單倍型名稱前綴
angle = 45, # 物理位置的角度
displayIndelSize = 0, # 圖中展示最大的Indel大小
title = geneID) # 圖片標題
# 在表格中添加注釋信息
plotHapTable(hapSummary, # 單倍型結果
hapPrefix = hapPrefix, # 單倍型名稱前綴
angle = 45, # 物理位置的角度
displayIndelSize = 4, # 圖中展示最大的Indel大小
title = geneID, # 圖片標題
INFO_tag = "ANN", tag_field = 11, geneName = geneID) # 添加的注釋信息
3) 變異位點都在哪里
# 在基因模式圖上展示變異位點的信息
displayVarOnGeneModel(gff = gff, hapSummary = hapSummary,
startPOS = start-10,
endPOS = end+10,
CDS_h = 0.05, fiveUTR_h = 0.25, threeUTR_h = 0.25, # gene model parameters
cex = 0.8) # size of variants
4) 單倍型網絡分析
# 單倍型網絡分析
hapSummary[hapSummary == "DEL"] = "N"
hapnet <- get_hapNet(hapSummary, # 單倍型結果
AccINFO = AccINFO, # 包含樣本分類信息的數據框(data.frame)
groupName = "Subpopulation", # 含有樣本分類信息的列名稱
na.label = "Unknown") # 未知分類樣本的類別
plotHapNet(hapnet, # 單倍型網絡
scale = "log2", # 標準化方法"log10"或"log2"或"none"
show.mutation = 2, # 是否展示變異位點數量, 0,1,2,3
col.link = 2, link.width = 2, # 單倍型之間連線的顏色和寬度
main = geneID, # 主標題
pie.lim = c(0.5, 2), # 圓圈的大小
legend_version = 1, # 圖例形式(0或1)
labels = T, # 是否在單倍型上添加label
# legend = FALSE) # 不添加圖例
# legend = TRUE) # 添加圖例,但需要單擊添加的位置
legend = c(12,0), # 圖例的坐標
cex.legend = 0.6) # 圖例中文字的大小
5) 單倍型的地理分布
# 地理分布
AccINFO$Longitude <- as.numeric(AccINFO$Longitude)
AccINFO$Latitude <- as.numeric(AccINFO$Latitude)
hapDistribution(hapResult, # 單倍型結果
AccINFO = AccINFO, # 含有地理坐標的數據框(data.frame)
hapNames = c("H001",
"H002",
"H003"), # 展示的單倍型名稱建議不超過3個
symbol.lim = c(3, 6), # 圓圈的大小
LON.col = "Longitude", # 經緯度所處的列名稱
LAT.col = "Latitude", # 經緯度所處的列名稱
legend = "bottomleft", # 圖例所處的位置
cex.legend = 1, # 圖例大小
lwd.pie = 0.2, # 圓圈線條的粗細
lwd = 1.5, # 地圖線條的粗細
main = geneID) # 主標題
6) 連鎖不平衡分析
# 連鎖不平衡分析
plot_LDheatmap(hap = hapResult, # 單倍型結果
add.map = TRUE, # 是否添加基因模式圖
gff = gff, # 注釋信息
Chr = Chr, # 染色體名稱
start = start, # 基因的起始位置
end = end) # 基因的終止位置(更多參數參見幫助文檔)
7)表型關聯分析
# 表型關聯分析
# 單個表型的分析
hapVsPheno(hap = hapResult, # 單倍型分析結果
pheno = pheno, # 表型
hapPrefix = hapPrefix, # 單倍型名稱的前綴
title = geneID, # 主標題
minAcc = 4, # 參與p值計算所需的最小樣本數
symnum.args = list( # 定義顯著性標注方式
cutpoints = c(0, 0.001, 0.01, 0.05, 1),
symbols = c("***", "**", "*", "ns")),
mergeFigs = TRUE) # 結果包括兩個圖,是否融合成一張圖
# 多個表型的分析
hapVsPhenos(hap = hapResult,
pheno = pheno,
hapPrefix = hapPrefix,
title = geneID,
compression = "lzw", # tiff文件的壓縮方式
res = 300, width = 12, height = 12, # 圖片大小的單位"inch"
outPutSingleFile = TRUE, # 只有pdf格式支持輸出單個文件
filename.surfix = "pdf", # 文件格式: pdf, png, jpg, tiff, bmp
filename.prefix = geneID) # 文件名稱為: prefix + pheno_name + surfix
8)變異位點的效應估算
# 位點效應估算(結果僅供參考)
# EFF <- siteEFF(hapResult, pheno)
# plotEFF(EFF, gff = gff,
# Chr = Chr, start = start, end = end,
# showType = c("five_prime_UTR", "CDS", "three_prime_UTR"), # see help(plotEFF)
# y = "effect", # the means of y axis, one of effect or pvalue
# ylab = "effect", # label of y axis
# cex = 0.5, # Cex
# legend.cex = 0.8, # legend size
# main = geneID, # main title
# CDS.height = 1, # controls the height of CDS, heights of others will be half of that
# markMutants = TRUE, # mark mutants by short lines
# mutants.col = 1, mutants.type = 1, # parameters for appearance of mutants
# pch = 20) # points type
或者逐個位點進行比較分析
# 逐位點比較變異效應
hapVsPhenoPerSite(hap = hapResult, # 單倍型分析結果
pheno = pheno, # 表型文件
phenoName = names(pheno)[10], # 表型名稱
freq.min = 5) # 參與顯著性計算的最小樣本數
# 回車繼續下一位點
# ESC退出當前命令
9) 什么?你的VCF文件太大,導不進來???
給你個小提示
filterLargeVCF()
filterLargeP.link()
4.2 好飯不怕晚,GUI操作界面
我對R語言了解比較少,學習上面方法比較困難,我該怎么辦?
哈哈,不要擔心,軟件作者貼心的開發了對應的GUI界面,并且在軟件中配有簡單的使用說明,自己去探索吧!^_^
# 常規操作,加載geneHapR
library(geneHapR)
# 打開新世界的大門
startGUI.geneHapR()
# 剩下的交給你啦
五、我發現了一個bug怎么辦?
在軟件的gitee倉庫給作者留言?;蛘咧苯勇撓底髡?,作者聯系方式還是在軟件的gitee倉庫首頁最底部^_^。
geneHapR的gitee倉庫地址:(https://gitee.com/zhangrenl/genehapr)。
一定認清是gitee.com不是github.com。
六、最后的最后
如果您在您的研究中的使用了geneHapR,歡迎您引用如下文章:
Zhang, R., Jia, G. & Diao, X. geneHapR: an R package for gene haplotypic statistics and visualization. BMC Bioinformatics 24, 199 (2023). https://doi.org/10.1186/s12859-023-05318-9
問題請參見geneHapR 的常見問題