群體遺傳學(xué)親緣關(guān)系分析

親緣關(guān)系分析實(shí)操

前期準(zhǔn)備

給標(biāo)記加上ID

SNP data通常都是以VCF格式文件呈現(xiàn)冤荆,拿到VCF文件的第一件事情就是添加各個(gè)SNP位點(diǎn)的ID术瓮。
先看一下最開始生成的VCF文件:

原始VCF文件

可以看到溶弟,ID列都是"."沙廉,需要我們自己加上去扶叉。我用的是某不知名大神寫好的perl腳本嗓节,可以去我的github上下載荧缘,用法:

perl path2file/VCF_add_id.pl YourDataName.vcf YourDataName-id.vcf`

當(dāng)然也可以用excel手工添加。添加后的文件如下圖所示(格式:CHROMID__POS):

添加ID后VCF文件

SNP位點(diǎn)過濾(Missing rate and maf filtering)

SNP位點(diǎn)過濾前需要問自己一個(gè)問題拦宣,我的數(shù)據(jù)需要過濾嗎截粗?

一般要看后期是否做關(guān)聯(lián)分析(GWAS);如果只是單純研究群體結(jié)構(gòu)建議不過濾鸵隧,因?yàn)檫^濾掉低頻位點(diǎn)可能會(huì)改變某些樣本之間的關(guān)系绸罗;如果需要和表型聯(lián)系其來做關(guān)聯(lián)分析,那么建議過濾豆瘫,因?yàn)樵诤笃诜治鲋械皖l位點(diǎn)是不在考慮范圍內(nèi)的珊蟀,需要保持前后一致。

如果過濾外驱,此處用到強(qiáng)大的plink軟件育灸,用法:

plink --vcf YourDataName-id.vcf --maf 0.05 --geno 0.2 --recode vcf-iid -out YourDataName-id-maf0.05 --allow-extra-chr

參數(shù)解釋:--maf 0.05:過濾掉次等位基因頻率低于0.05的位點(diǎn);--geno 0.2:過濾掉有20%的樣品缺失的SNP位點(diǎn)昵宇;--allow-extra-chr:我的參考數(shù)據(jù)是Contig級(jí)別的磅崭,個(gè)數(shù)比常見分析所用的染色體多太多,所以需要加上此參數(shù)瓦哎。

格式轉(zhuǎn)換

將vcf文件轉(zhuǎn)換為bed格式文件砸喻。
這里注意一點(diǎn)!=8畹骸!:應(yīng)該是軟件的問題羡铲,需要把染色體/contig名稱變成連續(xù)的數(shù)字(1 to n)蜂桶,不然會(huì)報(bào)錯(cuò)無法算出結(jié)果!(坑)

plink --vcf YourDataName-id-maf0.05.vcf --make-bed --out snp --chr-set 29 no-xy

參數(shù)解釋:--chr-set 給出染色體/contig的數(shù)目也切;no-xy 沒有xy染色體扑媚。

用gcta做親緣關(guān)系分析

gcta輸出grm陣列(genetic relationship matrix)

gcta64 --make-grm-gz --out snp.gcta --bfile snp --autosome-num 29

參數(shù)解釋:--autosome-num常染色體數(shù)目。

snp.gcta結(jié)果文件:

snp.gcta結(jié)果文件

解讀:第一雷恃,第二列為樣品編號(hào)疆股;第三列為兩樣品間有多少個(gè)有效位點(diǎn);第四列為兩樣品間的親緣關(guān)系的值倒槐。

將上述陣列轉(zhuǎn)化為矩陣形式

snp.gcta結(jié)果文件列舉了兩個(gè)樣品間的關(guān)系旬痹,我們需要把它變成常見的矩陣形式,這里用R可以輕松完成讨越,寫好的R包我放在了Github中:GRM2normal_format.R两残,大家自行下載使用。

如果不想下載把跨,可以復(fù)制如下代碼:

library(reshape2)
tmp <- read.table(gzfile("snp.gcta.grm.gz"), header = F, stringsAsFactors = F)
ids <- read.table("snp.gcta.grm.id", header = F, stringsAsFactors = F)
tmp <- tmp[,c(1,2,4)]
result_matrix <- acast(tmp, V1~V2, value.var="V4", drop = F)
makeSymm <- function(m) {
  m[upper.tri(m)] <- t(m)[upper.tri(m)]
  return(m)
}
result_full <- makeSymm(result_matrix)
result_df <- as.data.frame(result_full)
row.names(result_df) <- ids$V2
colnames(result_df) <- ids$V2
write.table(result_df, file = "ldak.weight.kinship.txt", row.names = T, col.names = NA, sep = "\t", quote = F)

需要用到上訴步驟生成的2個(gè)結(jié)果文件:snp.gcta.grm.gz和snp.gcta.grm.id人弓。

轉(zhuǎn)換后的結(jié)果文件:

gcta.kinship.txt

解讀:第一列和第一行都是對(duì)應(yīng)的樣品名稱。

用LDAK做親緣關(guān)系分析

相比gcta着逐,能用LD對(duì)結(jié)果進(jìn)行校正崔赌,具體來說,就是先用LD計(jì)算每個(gè)SNP位點(diǎn)的權(quán)重耸别,根據(jù)權(quán)重再計(jì)算Kinship健芭,這樣的結(jié)果更接近真實(shí)情況。

LDAK輸出grm陣列(genetic relationship matrix)

  • 在不考慮權(quán)重的情況下秀姐,方法如下:
ldak5.linux --calc-kins-direct snp.ldak --bfile snp --ignore-weights YES --kinship-gz YES --power -0.25
  • 用LD計(jì)算每個(gè)SNP位點(diǎn)的權(quán)重慈迈,根據(jù)權(quán)重再計(jì)算Kinship
#切割
ldak5.linux --cut-weights snp.sections --bfile snp
#查看有多少個(gè)section
cat snp.sections/section.number
#根據(jù)自己的section個(gè)數(shù)分別計(jì)算權(quán)重(我這里是31個(gè))
for section in {1..31}; do ldak5.linux --calc-weights snp.sections --bfile snp --section $section; done
#weight文件整合,給SNP賦權(quán)重值
ldak5.linux --join-weights snp.sections --bfile snp
#輸出grm陣列
ldak5.linux --calc-kins-direct snp.ldak.weight --bfile snp --weights snp.sections/weights.all --kinship-gz YES --power -0.25

結(jié)果文件和gcta類似省有,包含兩個(gè)文件:snp.ldak.weight.grm.gz和snp.ldak.weight.grm.id痒留,用上述同一個(gè)R包,同樣的方法轉(zhuǎn)化為矩陣形式锥咸。

同樣的狭瞎,如果不想下載,直接復(fù)制如下代碼:

library(reshape2)
tmp <- read.table(gzfile("snp.ldak.weight.grm.gz"), header = F, stringsAsFactors = F)
ids <- read.table("snp.ldak.weight.grm.id", header = F, stringsAsFactors = F)
tmp <- tmp[,c(1,2,4)]
result_matrix <- acast(tmp, V1~V2, value.var="V4", drop = F)
makeSymm <- function(m) {
  m[upper.tri(m)] <- t(m)[upper.tri(m)]
  return(m)
}
result_full <- makeSymm(result_matrix)
result_df <- as.data.frame(result_full)
row.names(result_df) <- ids$V2
colnames(result_df) <- ids$V2
write.table(result_df, file = "ldak.weight.kinship.txt", row.names = T, col.names = NA, sep = "\t", quote = F)

數(shù)據(jù)可視化

用R畫熱圖即可搏予,各種熱圖的畫法熊锭,我另外找個(gè)時(shí)間再詳細(xì)說明,先直接分享一下我作圖的代碼:

library(pheatmap)
kinship <- read.table("ldak.weight.kinship.txt", header = F, row.names = 1, skip=1)
colnames(kinship) <- row.names(kinship)
diag(kinship) <- NA
hist_data <- hist(as.matrix(kinship), xlab = "Kinship", col = "red", main = "Histogram of Kinship")
pheatmap(kinship, fontsize_row = 0.3, fontsize_col = 0.3)
color = colorRampPalette(c("white", "red","red4"),bias=0.5)(500)
#調(diào)整cell大小
par(mar=c(10,10,10,10))
pheatmap(kinship,color=color,border_color = F,fontsize_row = 0.3, fontsize_col = 0.3,cellwidth = 2,cellheight = 2)
#調(diào)整聚類樹高度
pheatmap(kinship,color=color,border_color = F,fontsize_row = 0.3, fontsize_col = 0.3,cellwidth = 2,cellheight = 2,treeheight_col= 40,treeheight_row = 40)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雪侥,一起剝皮案震驚了整個(gè)濱河市碗殷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌速缨,老刑警劉巖锌妻,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異旬牲,居然都是意外死亡仿粹,警方通過查閱死者的電腦和手機(jī)搁吓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吭历,“玉大人堕仔,你說我怎么就攤上這事∩吻” “怎么了摩骨?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)朗若。 經(jīng)常有香客問我恼五,道長(zhǎng),這世上最難降的妖魔是什么哭懈? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任灾馒,我火速辦了婚禮,結(jié)果婚禮上银伟,老公的妹妹穿的比我還像新娘你虹。我一直安慰自己,他們只是感情好彤避,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布傅物。 她就那樣靜靜地躺著,像睡著了一般琉预。 火紅的嫁衣襯著肌膚如雪董饰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天圆米,我揣著相機(jī)與錄音卒暂,去河邊找鬼。 笑死娄帖,一個(gè)胖子當(dāng)著我的面吹牛也祠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播近速,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼诈嘿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了削葱?” 一聲冷哼從身側(cè)響起奖亚,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎析砸,沒想到半個(gè)月后昔字,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡首繁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年作郭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陨囊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡所坯,死狀恐怖谆扎,靈堂內(nèi)的尸體忽然破棺而出挂捅,到底是詐尸還是另有隱情芹助,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布闲先,位于F島的核電站状土,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伺糠。R本人自食惡果不足惜蒙谓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望训桶。 院中可真熱鬧累驮,春花似錦、人聲如沸舵揭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)午绳。三九已至置侍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拦焚,已是汗流浹背蜡坊。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赎败,地道東北人秕衙。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像僵刮,于是被迫代替她去往敵國(guó)和親据忘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351