样本间亲缘关系矩阵(kinship matrix)和同源性矩阵(IBS matrix)构建的方式
1. 可以使用plink的--make-rel计算个体之间的亲缘关系(强调个体之间的遗传相似性)
bash
/opt/software/plink --bfile vcf_bfile--make-rel --out relatedness_matrix # 得到亲缘关系距离矩阵:
# relatedness_matrix.rel
2. kinship
bash
# 利用tassel计算
run_pipeline.pl -Xmx1536m-Xms512m -SortGenotypeFilePlugin -inputFile 你的vcf文件 -outputFile outvcf -fileType VCF
run_pipeline.pl-Xmx1536m -Xms512m -importGuess outvcf -KinshipPlugin -methodCentered_IBS -endPlugin -export tassel_kinship.txt -exportType SqrMatrix
# 利用gcta计算
使用 --make-grm-alg 1 或 --make-grm 0
gcta --make-grm --make-grm-alg 1 --out snp.gcta --bfile vcf_bfile snp --autosome-num 90
3. IBS
bash
/opt/software/plink --bfile vcf_bfile --make-bed --out IBS_matrix --maf 0.05 --recode --double-id --allow-extra-chr --chr-set 90 --distance square ibs
要计算遗传距离,使用1-ibs
群体关系矩阵如何构建?
转换方法:平均IBS(个体对间均值)
计算所有个体两两之间的IBS均值,反映群体内遗传相似性。
python
#算法示例
import numpy as np
def pairwise_ibs(genotype_matrix):
n_individuals = genotype_matrix.shape[0]
ibs_matrix = np.zeros((n_individuals, n_individuals))
for i in range(n_individuals):
for j in range(i+1, n_individuals):
ibs_sum = 0
for snp in range(genotype_matrix.shape[1]):
ibs_sum += calculate_ibs(
genotype_matrix[i, snp, 0], genotype_matrix[i, snp, 1],
genotype_matrix[j, snp, 0], genotype_matrix[j, snp, 1]
)
ibs_matrix[i, j] = ibs_sum / genotype_matrix.shape[1]
ibs_matrix[j, i] = ibs_matrix[i, j] # 对称矩阵
return ibs_matrix
# 示例基因型矩阵(个体数×SNP数×2等位基因)
genotype_data = np.array([
[['A', 'A'], ['G', 'G']], # 个体1
[['A', 'G'], ['G', 'G']], # 个体2
[['T', 'T'], ['A', 'G']] # 个体3
])
ibs_matrix = pairwise_ibs(genotype_data)
print("群体IBS矩阵:\n", ibs_matrix)