基于Vcf文件進(jìn)行基因單倍型分析

單倍型颠焦,是單倍體基因型的簡(jiǎn)稱,在遺傳學(xué)上是指在同一染色體上進(jìn)行共同遺傳的多個(gè)基因座等位基因的組合粥谬;通俗的說法就是若干個(gè)決定同一性狀的緊密連鎖的基因構(gòu)成的基因型。
單倍型分析舉例:

不同樣本中TtBtr-A基因的單倍型分布

TaHY5-like基因的單倍型全球分布

我們以目的基因X來進(jìn)行實(shí)戰(zhàn)分析

(1) 提取基因X的基因區(qū)SNP

bcftools filter All.vcf.gz --regions chr:start-end > GeneX.vcf
#chr:基因X所在的染色體辫塌;start:基因X起始位點(diǎn)漏策;end:基因X終止位點(diǎn)【拾保可以檢索基因組gff文件獲得

(2) 重新編碼vcf文件的基因型
我們這里主要針對(duì)雙等位基因vcf文件進(jìn)行分析掺喻,vcf中包含./.,0/0储矩,0/1感耙,1/1四種基因型。
編碼對(duì)應(yīng)表(轉(zhuǎn)換后 - 轉(zhuǎn)換前):

  • -1 - ./.
  • 0 - 0/0
  • 1 - 0/1
  • 2 - 1/1
    使用vcftools可以實(shí)現(xiàn)基因型的轉(zhuǎn)換:
vcftools --vcf test.vcf --012

Java腳本也可以實(shí)現(xiàn)替換基因型

public class HaploType {
    public static void main(String[] args) throws IOException {
        this.changeVcfCode("input.txt","output,txt");
    }
    public static void changeVcfCode(String input, String output) throws IOException {
        BufferedReader rd = new BufferedReader(new FileReader(new File(input)));
        BufferedWriter wt = new BufferedWriter(new FileWriter(new File(output)));
        String line;
        List<String> listTab;
        while ((line = rd.readLine()) != null ) {
            if (line.startsWith("#")) continue;
            listTab = Arrays.asList(line.split("\t"));
            StringBuilder bf = new StringBuilder();
            for (int i = 9; i < listTab.size(); i++) {
                if(listTab.get(i).startsWith("1/1")){
                    bf.append("2\t");
                }else if(listTab.get(i).startsWith("0/0")){
                    bf.append("0\t");
                }else if(listTab.get(i).startsWith("0/1") | listTab.get(i).startsWith("1/0") ){
                    bf.append("1\t");
                }else if(listTab.get(i).startsWith("./.")){
                    bf.append("-1\t");
                }else{
                    bf.append(listTab.get(i)+"\t");
                }
            }
            wt.write(bf.toString()+"\n");
        }
        rd.close();
        wt.close();
    }
}

生成haplo.txt文件持隧,沒有表頭即硼。


haplo.txt

(3) 基因單倍型圖譜

  1. 輸入文件
    (1)haplo.txt:行代表snp位點(diǎn),列代表樣本舆蝴。
    (2)Annotation_sample.txt:可選的谦絮,用于注釋單倍型圖譜的樣本信息,行代表樣本洁仗,tab隔開层皱。
#Annotation_sample.txt
Growing_Habit   Region  
Winter  SCA     
Spring  SCA 
Winter  EA
  1. 畫圖
#加載所需的軟件包
library(pheatmap)
require(reshape)
require (rworldmap)
require(rworldxtra)
#加載注釋內(nèi)容,根據(jù)自己的注釋文件進(jìn)行修改,145是樣本數(shù)目
annotation_col <- read.table("Annotation.txt",header=T,stringsAsFactors = T)
rownames(annotation_col) = c(1:145)
labels_col = rep(c(""), 145)
ann_colors = list(
  Growing_Habit = c(Facultative = "yellow", Spring="red",Winter="blue"),
  Region = c(AM = "#228B22",EA = "#D95F02",SCA="#1E90FF",WA="#E7298A", EU="#000000", AF="#FFD700",EAF="#8B008B")
)
#加載haplotype文件
GeneX <- read.table("haplo.txt", header=F, stringsAsFactors = F)
colnames(GeneX) <- c(1:145)
#畫圖
out <- pheatmap(GeneX, show_colnames=FALSE, legend_breaks = -1:2, legend_labels = c("./.", "0/0", "0/1", "1/1"), cutree_cols=3, cluster_row = FALSE, annotation_col = annotation_col, annotation_colors = ann_colors, main="")
out

基因單倍型分布.png

(4) 基因單倍型地理分布圖譜

  1. 輸入文件
    (1)haplo.txt:行代表樣本赠潦,列代表snp位點(diǎn)叫胖。
    (2)Annotation_sample_location.txt:行代表樣本,tab隔開她奥。
#Annotation_sample_location.txt
Lat Lon
36.65   61.15   
33.8    62.2
34.36   111.61
  1. 畫圖
#加載所需的軟件包
library(pheatmap)
require(reshape)
require (rworldmap)
require(rworldxtra)
#加載樣本經(jīng)緯度信息
latlon <- read.table("latlon.txt",header=T,stringsAsFactors = F, fill=TRUE)
rownames(latlon) <- c(1:145)
#對(duì)樣本經(jīng)緯度進(jìn)行聚類
library(cluster)
library(factoextra)
data2 <- latlon[!is.na(latlon$Lat),]
df = scale(data2)
#先求樣本之間兩兩相似性
result <- dist(df, method = "euclidean")
#產(chǎn)生層次結(jié)構(gòu)
result_hc <- hclust(d = result, method = "ward.D2")
#確定樣本地理位置聚類的數(shù)目瓮增,這里分成了40個(gè)地理group
data2$type <- cutree(result_hc, k=40)
lat_mean <- tapply(data2[,1],data2$type,mean,na.rm = TRUE)
lon_mean <- tapply(data2[,2],data2$type,mean,na.rm = TRUE)
data2$cluster1 <- NA
data2$cluster2 <- NA
#145是樣本數(shù),40是聚類數(shù)目
for(i in 1:145) {
  for(j in 1:40){
    if(data2[i,3] == j ){
      data2[i,4] <- as.numeric(lat_mean[j])
      data2[i,5] <- as.numeric(lon_mean[j])
    } 
  }
}
new_latlon <- data2[,c(4,5)]
rownames(new_latlon) <- c(1:145)
#根據(jù)上述單倍型圖譜確定每個(gè)地理group的樣本以及標(biāo)注樣本對(duì)應(yīng)的單倍型(1哩俭,2绷跑,3...)
names <- as.numeric(colnames(GeneX[,out$tree_col[["order"]]]))
dataset <- new_latlon[names,]
new_latlon$id <- rownames(new_latlon)
dataset$sub <- NA
colnames(dataset)[1:3] <- c("Lat", "Lon", "id",)
#下面幾行代碼是確定不同的單倍型cluster的分界線。上面單倍型圖譜中分了三種不同的單倍型凡资,從圖中確定界限的樣本編號(hào)(41, 63, 123)砸捏,根據(jù)下面代碼的返回值為樣本確定單倍型group(1,2,3)
which(dataset$id==41,)
which(dataset$id==63,)
which(dataset$id==123,)
#確定樣本的單倍型類型
dataset$sub[1] <- 1
dataset$sub[2:11] <- 2
dataset$sub[12:145] <- 3
colnames(dataset)[4] <- "Sub.population.3"
#畫圖
dataset$value <- 1
reshape <- cast(dataset,Lat+Lon~Sub.population.3) 
reshape2 <- as.data.frame(reshape)
mapPies(reshape2,xlim=c(-120,140),ylim=c(35,40),nameX="Lon",nameY="Lat",nameZs=c('1','2','3'),symbolSize=1,   zColours=c('green','blue','orange'),barOrient='vert',oceanCol="#D1EEEE",landCol="#FFDAB9",main="29")

樣本單倍型地理分布.png

參考文獻(xiàn):
【1】https://www.nature.com/articles/s41588-020-00722-w
【2】https://www.nature.com/articles/s41467-020-18738-5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子垦藏,更是在濱河造成了極大的恐慌梆暖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掂骏,死亡現(xiàn)場(chǎng)離奇詭異轰驳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弟灼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門级解,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人田绑,你說我怎么就攤上這事蠕趁。” “怎么了辛馆?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)豁延。 經(jīng)常有香客問我昙篙,道長(zhǎng),這世上最難降的妖魔是什么诱咏? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任苔可,我火速辦了婚禮,結(jié)果婚禮上袋狞,老公的妹妹穿的比我還像新娘焚辅。我一直安慰自己,他們只是感情好苟鸯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布同蜻。 她就那樣靜靜地躺著,像睡著了一般早处。 火紅的嫁衣襯著肌膚如雪湾蔓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天砌梆,我揣著相機(jī)與錄音默责,去河邊找鬼。 笑死咸包,一個(gè)胖子當(dāng)著我的面吹牛桃序,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烂瘫,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼媒熊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泛释,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤滤愕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后怜校,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體间影,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年茄茁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了魂贬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裙顽,死狀恐怖付燥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愈犹,我是刑警寧澤键科,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站漩怎,受9級(jí)特大地震影響勋颖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勋锤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一饭玲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叁执,春花似錦茄厘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至入挣,卻和暖如春亿乳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背径筏。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工葛假, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滋恬。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓聊训,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親恢氯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子带斑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容