使用 SNP 的多元线性回归
Multiple linear regression using SNPs
我有 40 个 SNP,想看看每个 SNP 对绝经年龄的影响。为此,我需要对每个单独的 SNP 进行多元线性回归。我想避免键入相同的命令 40 次不同的时间(因为将来我将使用更多的 SNP 来执行此操作)。
我想做的是在 csv
文件中列出 SNP,并将其命名为 x
:
x <- read.csv("snps.csv")
那么我想在这个命令中使用这个列表;
fit <- lm(a_menopause ~ "snps" + country, data=mydata)
其中 snps
是我需要分析的 SNP 列表,但需要一次分析一个 SNP。理想情况下,我想将结果打印到 csv
文件。
见下例:
#dummy data
set.seed(123)
#phenotype
phenotype <- data.frame(
a_menopause=sample(c(0,1),10,replace=TRUE),
country=sample(letters[1:3],10,replace=TRUE))
#genotype
genotype <-
read.table(text="SNP1 SNP2 SNP3 SNP4
1 0 1 1
2 0 2 1
0 0 0 1
0 0 0 1
0 1 0 1
1 1 0 1
1 2 0 1
1 2 1 2
0 0 0 1
0 1 0 1
",header=TRUE)
#data for lm
fitDat <- cbind(phenotype,genotype)
#get fit for all SNPs
fitAllSNPs <-
lapply(colnames(fitDat)[3:6], function(SNP){
fit <- lm(paste("a_menopause ~ country + ", SNP),
data=fitDat)
})
#extract coef for each SNP
lapply(fitAllSNPs,coef)
#output
# [[1]]
# (Intercept) countryb countryc SNP1
# 1.000000e+00 -2.633125e-16 -1.000000e+00 9.462903e-17
#
# [[2]]
# (Intercept) countryb countryc SNP2
# 1.000000e+00 -1.755417e-16 -1.000000e+00 2.780094e-19
#
# [[3]]
# (Intercept) countryb countryc SNP3
# 1.000000e+00 -2.633125e-16 -1.000000e+00 1.079985e-16
#
# [[4]]
# (Intercept) countryb countryc SNP4
# 1.000000e+00 -1.755417e-16 -1.000000e+00 4.269835e-31
我有 40 个 SNP,想看看每个 SNP 对绝经年龄的影响。为此,我需要对每个单独的 SNP 进行多元线性回归。我想避免键入相同的命令 40 次不同的时间(因为将来我将使用更多的 SNP 来执行此操作)。
我想做的是在 csv
文件中列出 SNP,并将其命名为 x
:
x <- read.csv("snps.csv")
那么我想在这个命令中使用这个列表;
fit <- lm(a_menopause ~ "snps" + country, data=mydata)
其中 snps
是我需要分析的 SNP 列表,但需要一次分析一个 SNP。理想情况下,我想将结果打印到 csv
文件。
见下例:
#dummy data
set.seed(123)
#phenotype
phenotype <- data.frame(
a_menopause=sample(c(0,1),10,replace=TRUE),
country=sample(letters[1:3],10,replace=TRUE))
#genotype
genotype <-
read.table(text="SNP1 SNP2 SNP3 SNP4
1 0 1 1
2 0 2 1
0 0 0 1
0 0 0 1
0 1 0 1
1 1 0 1
1 2 0 1
1 2 1 2
0 0 0 1
0 1 0 1
",header=TRUE)
#data for lm
fitDat <- cbind(phenotype,genotype)
#get fit for all SNPs
fitAllSNPs <-
lapply(colnames(fitDat)[3:6], function(SNP){
fit <- lm(paste("a_menopause ~ country + ", SNP),
data=fitDat)
})
#extract coef for each SNP
lapply(fitAllSNPs,coef)
#output
# [[1]]
# (Intercept) countryb countryc SNP1
# 1.000000e+00 -2.633125e-16 -1.000000e+00 9.462903e-17
#
# [[2]]
# (Intercept) countryb countryc SNP2
# 1.000000e+00 -1.755417e-16 -1.000000e+00 2.780094e-19
#
# [[3]]
# (Intercept) countryb countryc SNP3
# 1.000000e+00 -2.633125e-16 -1.000000e+00 1.079985e-16
#
# [[4]]
# (Intercept) countryb countryc SNP4
# 1.000000e+00 -1.755417e-16 -1.000000e+00 4.269835e-31