• R语言
  • 孟德尔随机化筛选完工具变量后进行MR分析少两个工具变量,是什么问题?

PATH<-"D:\\Mendelian Randomization"
setwd(PATH)
library(ggplot2)
library(plyr)
library(data.table)
library(devtools)
library(MendelianRandomization)
library(TwoSampleMR)
EXP<-data.table::fread("D:/Mendelian Randomization/alopecia/AGA/finngen_R9_L12_ALOPECANDRO.gz")
EXP1<-data.frame(EXP)
head(EXP1)
colnames(EXP1)[c(4,3,5,7,9,10,11)]<-c("effect_allele.exposure","other_allele.exposure","SNP","pval.exposure","beta.exposure","se.exposure","eaf.exposure")
EXP1$id.exposure<-"AGA"
EXP1$exposure<-"AGA"
EXP1$samplesize.exposure<-201214
head(EXP1,6)
EXP1_IV<-subset(EXP1,pval.exposure<5e-05)
EXP1_IV<-clump_data(EXP1_IV,clump_kb = 10000,clump_r2 = 0.001,pop = "EUR")
OUT1<-extract_outcome_data(snps=EXP1_IV$SNP,outcomes = "ukb-b-19732*",proxies = T,maf_threshold = 0.01,access_token = NULL)
OUT1<-OUT1[!duplicated(OUT1$SNP),]
OUT1$id.outcome<-"Hypothyroidism"
OUT1$outcome<-"Hypothyroidism"
head(OUT1)
data_h<-harmonise_data(exposure_dat = EXP1_IV,outcome_dat = OUT1,action = 2)

library(phenoscanner)
dim(data_h)[1]
PhenoScan=phenoscanner(snpquery = data_h$SNP[1:25],pvalue = 5e-08)
write.csv(PhenoScan$results,file="PhenoScan.csv")
write.table(data_h$SNP,"SNP.txt",quote = F,row.names = F)
SNP<-read.table("SNP.txt",header = T)
data_h_SNP<-merge(SNP,data_h,by="SNP",all=F)
data_h_SNP_steiger<-steiger_filtering(data_h_SNP)
data_h_SNP_steiger<-subset(data_h_SNP_steiger,steiger_dir==TRUE)
data_h_SNP_steiger<-data_h_SNP_steiger[!duplicated(data_h_SNP_steiger$SNP),]
这一步结束后应该是25个工具变量
mr<-mr(data_h_SNP_steiger)
但这一步实际进行的确是23个工具变量,这到底是什么原因呢?

GPT-4的答复,俺还看不懂:

你遇到的问题在于最后的Mendelian Randomization(MR)分析步骤中使用的工具变量(IVs)的数量减少了。这种情况通常是因为一些特定的筛选标准或数据清理步骤导致的。在你的代码中,存在几个可能的原因导致工具变量数量的减少:

Clumping: 在 clump_data 步骤中,你使用了特定的参数来减少遗传变异之间的关联(例如,通过设置 clump_kb 和 clump_r2)。这可能会移除一些遗传变异,尤其是那些与其他变异高度相关的。

Duplicated SNPs: 在多个步骤中,你使用了去重操作(例如,OUT1<-OUT1[!duplicated(OUT1$SNP),]),这可能会进一步减少可用的变异数量。

Steiger Filtering: steiger_filtering 函数用于检查每个遗传变异对暴露和结果之间的因果关系方向是否一致。如果某些变异的方向性检验表明它们不支持预期的因果方向,这些变异会被移除。

缺失数据或合并步骤:在将SNP数据与其他数据合并时(merge函数),如果某些SNP在结果数据集中没有对应的条目,则这些SNP会被排除出最终分析。

要解决这个问题,你可以检查每个步骤后工具变量的数量,以确定是在哪个阶段丢失了工具变量。具体来说:

在进行clumping和去重后,检查保留下来的SNP数量。
在应用Steiger过滤后,再次检查SNP数量,以确认是否有SNP因方向性问题被移除。
确保所有的合并操作都没有不必要地丢弃数据,特别是在合并暴露和结果数据时。
通过逐步检查,你应该能够确定导致工具变量数量减少的具体原因,并据此调整分析策略。