單倍型分析

一、什么是單倍型?

在單倍型分析前,首先需要明白什么是單倍型、什么是基因單倍型?

一般來講,所謂的單倍型是指同一染色體上不同變異位點的各種線性組合形式。那么基因單倍型自然就是指同一基因上(啟動子、外顯子、內含子、終止子)的不同變異位點的顯性組合形式。

說明:基因組或染色體水平的單倍型分析不在本文范疇之內,請您參考“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) # 添加的注釋信息

Table1.png

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
model.png

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)                # 圖例中文字的大小
nework.png

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)         # 主標題
maps.png

6) 連鎖不平衡分析

# 連鎖不平衡分析
plot_LDheatmap(hap = hapResult, # 單倍型結果
               add.map = TRUE,  # 是否添加基因模式圖
               gff = gff,       # 注釋信息
               Chr = Chr,       # 染色體名稱
               start = start,   # 基因的起始位置
               end = end)       # 基因的終止位置(更多參數參見幫助文檔)
LDheatmap.png

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
pheno.png

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
effect.png

或者逐個位點進行比較分析

# 逐位點比較變異效應
hapVsPhenoPerSite(hap = hapResult,              # 單倍型分析結果
                  pheno = pheno,                # 表型文件
                  phenoName = names(pheno)[10], # 表型名稱
                  freq.min = 5)                 # 參與顯著性計算的最小樣本數
# 回車繼續下一位點
# ESC退出當前命令
EFF.png

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 的常見問題

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容