将marker转成012格式

进行GS前,需要将标记格式转成012格式,0表示低频allele的个数,即M矩阵。在R中有包synbreedSNPassoc能够完成这项工作。

library(tidyverse)
library(magrittr)
library(synbreed)
library(SNPassoc)
# 准备数据
data("SNPs")
pheno <- SNPs %>% select(id, blood.pre, protein)
genos <- SNPs[,-c(1:5)] %>% `rownames<-`(pheno$id)
pheno$id <- factor(pheno$id)

# synbreed 
G_syn <- create.gpData(geno = as.matrix(genos)) %>% codeGeno() %>% extract2("geno")
# snp10001 snp100010 snp100011 snp100012 snp100013
# 1        0         0         0         0         0
# 2        0         0         0         1         0
# 3        0         0         2         0         0
# 4        1         0         0         0         0
# 5        0         0         0         0         0

G_snp <- setupSNP(geno,1:ncol(geno),sep="")%>% apply(2,additive)
# snp10001 snp10002 snp10003 snp10004 snp10005
# [1,]        2        2        0        0        2
# [2,]        2        1        0        0        1
# [3,]        2        2        0        0        2
# [4,]        1        2        0        0        2
# [5,]        2        1        0        0        2

这2个包的列的排列方式不同。转换模型也不同:SNPassoc得到的不是M矩阵,而是相反的高频allele矩阵。这2中矩阵得到的加性关系矩阵也不同,因此随机效应值也是不一样的。我尝试用2减去G_snp,应该是可以,但分子关系矩阵依然有差别,不再往下细究,建议还是用synbreed。

你可能感兴趣的:(将marker转成012格式)