一、暴露数据预处理 假设研究BMI和阿尔兹海默症的关系,下载BMI的SNP数据为SNP_gwas_mc_nogc_tbl.txt。 首先将数据放于TwoSampleMR包文件夹内(可再新建文件夹(例如TwoSampleMR\xxx\SNP_gwas_mc_nogc_tbl.txt))Finn Gen,工作环境和数据位置一致。
library("Two Sample MR") ##调用R包
a <- read.table("D:/MRlearning/xxxx/xx.txt", header = T) ##读取数据,header看数据集中是否带有表头,如有即为T,否则即为F
View(a)
## 二、SNP筛选条件设置 ● 相关性:P<5e-08 ● 独立性:Clumping:LD r2<0.001, distance 1Mb ● 统计强度设置:R^2计算公式和F值计算公示,F值一般大于10 ### 1.暴露SNP的筛选
b <- subset(a,p<5e-08) #进行独立性筛选,即筛选a中"p"列小于5e-08的子集,注意列名一致性;
# 注:如果p值过于严格导致结果过少,可以放宽至5e-06至5e-14
View(b)
write.csv(b, file = "exposure_bmi.csv") #输出b为一个csv文件,便于后续处理
## 从UKBB和Finn Gene来的数据这步已经完成了,从下一行代码开始看就行##
##对输出的csv修改列名,a1为effect_allele, a2为other_allele, FreqA1为beta(检验效能), se(标准误),便于后续操作
bmi <- system.file("xxx/exposure_bmi.csv", package = "TwoSampleMR")#调用TwoSampleMR,读取exposre_bmi.csv的文件数据
bmi <- read.csv("xxxx.csv")
bmi_exp_data <- read_exposure_data( #数据处理,转换格式
filename = "", #名称同第4行
sep = ",", #csv文件以逗号分隔
snp_col = "", #标明csv文件中的列名,下同
beta_col = "",
se_col = "",
effect_allele_col = "",
other_allele_col = "",
eaf_col = "", #效应等位基因的频率
pval_col = "",
phenotyle_col = "" #本行可忽略
)
View(bmi_exp_data)
bmi_exp_data_clumped <- clump_data(#对上述整理出的数据进行独立性设置(LD r2<0.001, distance 1Mb)
bmi_exp_data, #需要进行clump的数据集
clump_kb = 10000, #distance设置,1Mb即为10000kb
clump_r2 = 0.001, #LD r2设置
clump_p1 = 1, #不知道什么意思
clump_p2 = 1, #不知道什么意思
pop = "EUR" #样本人群,欧洲为EUR,东亚为EAR
)
View(bmi_exp_data_clumped)
> 2024-07-20 clump_data失效,参考clump失败的处理 ### 2.F统计量的计算
# 来源:https://github.com/HaobinZhou/Get_MR.git
# Get_MR2.0.r
get_f <- function(dat,F_value=10){
log <- is.na(dat$eaf.exposure)
log <- unique(log)
if(length(log)==1)
{if(log==TRUE){print("数据不包含eaf,无法计算F统计量")
return(dat)}}
if(is.null(dat$beta.exposure[1])==T || is.na(dat$beta.exposure[1])==T){print("数据不包含beta,无法计算F统计量")
return(dat)}
if(is.null(dat$se.exposure[1])==T || is.na(dat$se.exposure[1])==T){print("数据不包含se,无法计算F统计量")
return(dat)}
if(is.null(dat$samplesize.exposure[1])==T || is.na(dat$samplesize.exposure[1])==T){print("数据不包含samplesize(样本量),无法计算F统计量")
return(dat)}
}
bmi_exp_data <- get_f(bmi_exp_data, F_value = 10)
## 三、导入结局数据(AD) 假设获取阿尔兹海默的结局数据IGAP_stage_1.txt ### 1.读取Outcome数据
a <- read.table("IGAP_stage_1.txt", header = T)
### 2.将暴露和结局进行Merge
data_merge <- merge( #merge的作用就是将两个数据集按照SNP编号"rsxxxxxx",将相同SNP编号整理在一起,相当于取交集,第一个在前,第二个在后
bmi_exp_data_clumped, a, #参与merge的两个数据集
by.x = "SNP", by.y = "Makername" #by.x即第一个数据集中SNP编号的列名,by.y即第二个数据集中SNP编号的列名
)
########需要注意的是,为了满足MR的独立性假设,暴露(BMI)的工具变量(SNP)不应与结局(AD)的工具变量具有直接相关性,即上述工具变量merge后在AD数据集中的p应当≥5e-08########
View(data_merge)
write.csv(data_merge, "outcome.csv")
##在outcome.csv中可以将暴露组的相关列删掉,并对结局列重命名,只留下SNP编号、结局的effect_allele, other_allele_ beta, se, p
### 3.读取outcome.csv数据
outcome_data <- read_outcome_data(
snps = bmi_exp_data_clumped$SNP, #$符号意在出现并选择该数据集的列名
filename = "outcome.csv" #文件名同上
sep = ",", #对每一列的列名进行表明,同read_exposure_data
snp_col = "",
beta_col = "", #beta,b,eaf,FreqA1
se_col = "",
effect_allele_col = "",
other_allele_col = "",
eaf_col = "",
pval_col = ""
)
### 4.几个问题 **#### Q1.暴露数据和结局数据的SNP对应的效应等位基因不一致怎么办?** eg:
评论