-
Notifications
You must be signed in to change notification settings - Fork 0
/
Traits_MR-APSS.r
132 lines (92 loc) · 4.12 KB
/
Traits_MR-APSS.r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
run_APSS_func <- function(clumped=NULL,
exposure=NULL,
outcome=NULL,
C = diag(2),
Omega = matrix(0, 2, 2),
IV.Threshold = 5e-08, # IV selection threshold
Threshold = 5e-08, # threshold for correcting for selection bias
Cor.SelectionBias=T){
res=NULL
for(i in 1:length(Threshold)){
if(!is.null(clumped)){
test = subset(clumped, pval.exp <= IV.Threshold[i])
if(nrow(test) < 4 ) next
test$Threshold = Threshold[i]
cat("IV selection threshold:", IV.Threshold[i] ,"\n")
MRres = try(MRAPSS::MRAPSS(test,
exposure=exposure,
outcome=outcome,
C= C,
Omega= Omega,
Cor.SelectionBias = Cor.SelectionBias))
if(inherits(MRres, 'try-error')) {
MRres=NULL
}
}
res0 = data.frame(exposure = MRres$exposure,
outcome = MRres$outcome,
nSNP = nrow(MRres$MRdat),
pi0 = MRres$pi0,
nvalid = nrow(MRres$MRdat)*MRres$pi0,
sigma.sq= MRres$sigma.sq,
tau.sq= MRres$tau.sq,
beta = MRres$beta,
se = MRres$beta.se,
pval= MRres$pvalue,
method = MRres$method,
Threshold = Threshold[i],
IVstrength = MRres$IVsignal.sum
)
if(nrow(res0)!=0){
res0$IV.Threshold = IV.Threshold[i]
}
res = rbind(res, res0)
}
return(res)
}
# All the results will be saved to the file "Traits_MRAPSS.MRres"
start = proc.time()
ts1 = c("AD", "ASD", "Daytime_Sleepiness", "Height_UKB", "Intelligence", "RA",
"T2D", "Alcohol", "BMI", "Depression", "IBD", "MDD", "SCZ", "Angina",
"CAD", "HBP", "Income", "NEB", "Smoking", "Urate", "Anorexia",
"CD", "Height_GIANT", "Insomnia", "Neuroticism", "SWB")
ts2 = ts1
IV.Threshold = 5e-05
for( exposure in ts1){
for( outcome in ts2){
if(exposure==outcome) next
cat("Pair: ", exposure,"~", outcome,"\n")
# read in GWAS summary data for IVs
clumped = try(read.table(paste0("./MRdat/", exposure,"~",outcome), header = T))
# read in background parameters Omega and C
C = try(as.matrix(read.table(paste0("./pairs_bg_paras/",exposure, "~", outcome,"_C"),
header = F)))
C = matrix(C[nrow(C), ], 2,2)
Omega = try(as.matrix(read.table(paste0("./pairs_bg_paras/", exposure, "~", outcome,"_Omega"),
header = F)))
Omega = matrix(Omega[nrow(Omega), ], 2, 2)
if(inherits(clumped , 'try-error')) clumped = NULL
if(inherits(C, 'try-error')) next
if(inherits(Omega, 'try-error')) next
if(nrow(clumped) < 4 ) next
# The p-value threshold for selection bias correction
Threshold = ifelse(IV.Threshold==5e-05, unique(clumped$Threshold), IV.Threshold)
# MR-APSS
cat("Run MR-APSS ... \n")
res = run_APSS_func(clumped = clumped,
exposure = exposure,
outcome = outcome,
C = C,
Omega=Omega,
IV.Threshold = IV.Threshold,
Threshold = Threshold,
Cor.SelectionBias = T)
# saving resuts
write.table(res, "Traits_MRAPSS.MRres", quote=F, col.names = F, append = T,row.names = F)
}
}
print(proc.time()-start)
apss_res = read.table("Traits_MRAPSS.MRres", header = F)
colnames(apss_res) = c("exposure","outcome", "nsnp","pi","nvalid","sigma.sq","tau.sq","b","se","pval",
"Method", "cor.Threshold", "IVstrength", "Threshold")
write.table(apss_res, "Traits_MRAPSS.MRres", quote=F, col.names = T, append = F,row.names = F)