Skip to content

Commit 6efd70e

Browse files
authored
Add files via upload
main-function
1 parent d81f943 commit 6efd70e

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed

met.R

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
library(mvtnorm)
2+
3+
## Computing the p-value of the MET based on the case-control design;
4+
## r: the number of cases; s: the number of controls; grr1,grr2: the genotype relative risks;
5+
## k: the disease prevalence; alpha: the nominal significance level; c: the threshold for HWDTT;
6+
## maf: minor allele frequency;
7+
8+
MET <- function(r, s, grr1, grr2, k, alpha, c, maf)
9+
{
10+
# population
11+
n <- r+s
12+
13+
# scores of the recessive model, the additive model, and the dominant model
14+
score <- c(0,1/2,1)
15+
16+
# penetrance
17+
f_0 <- k/((1-maf)^2+grr1*2*maf*(1-maf)+grr2*maf^2)
18+
19+
# genotype frequencies in cases
20+
p_0 <- f_0*(1-maf)^2/k
21+
p_1 <- grr1*f_0*2*maf*(1-maf)/k
22+
p_2 <- grr2*f_0*maf^2/k
23+
24+
# genotype frequencies in controls
25+
q_0 <- (1-f_0)*(1-maf)^2/(1-k)
26+
q_1 <- (1-grr1*f_0)*2*maf*(1-maf)/(1-k)
27+
q_2 <- (1-grr2*f_0)*maf^2/(1-k)
28+
29+
met.pvalue <- c()
30+
31+
# observed genotype counts in cases and controls
32+
case <- sample(c(0,1,2),r,replace=T,prob=c(p_0,p_1,p_2))
33+
control <- sample(c(0,1,2),s,replace=T,prob=c(q_0,q_1,q_2))
34+
35+
r_0 <- length(which(case==0))
36+
r_1 <- length(which(case==1))
37+
r_2 <- length(which(case==2))
38+
s_0 <- length(which(control==0))
39+
s_1 <- length(which(control==1))
40+
s_2 <- length(which(control==2))
41+
n_0 <- r_0+s_0
42+
n_1 <- r_1+s_1
43+
n_2 <- r_2+s_2
44+
45+
if(n_2!=0){
46+
47+
# estimators of genotype frequencies under the null hypothesis
48+
ep_1 <- eq_1 <- n_1/n
49+
ep_2 <- eq_2 <- n_2/n
50+
51+
# estimators of the variances and covariances under three genetic models
52+
cvar_rec <- (1/r)*(ep_2-3*ep_2^2+2*ep_2^3+2*ep_1*ep_2^2+(1/2)*ep_1^2*ep_2-ep_1*ep_2)
53+
cvar_add <- (1/r)*(ep_2-2*ep_1*ep_2-3*ep_2^2+2*ep_2^3+3*ep_1*ep_2^2+(3/2)*ep_1^2*ep_2-(1/4)*ep_1^2+(1/4)*ep_1^3)
54+
cvar_dom <- (1/r)*(ep_2-3*ep_2^2-3*ep_1*ep_2+2*ep_2^3+4*ep_1*ep_2^2+(5/2)*ep_1^2*ep_2-(1/2)*ep_1^2+(1/2)*ep_1^3)
55+
var_rec <- (ep_2-ep_2^2)/r+(eq_2-eq_2^2)/s
56+
var_add <- ((ep_2+(1/4)*ep_1)-(ep_2+(1/2)*ep_1)^2)/r+((eq_2+(1/4)*eq_1)-(eq_2+(1/2)*eq_1)^2)/s
57+
var_dom <- ((ep_2+ep_1)-(ep_2+ep_1)^2)/r+((eq_2+eq_1)-(eq_2+eq_1)^2)/s
58+
vardel <- (1/r)*(ep_2-5*ep_2^2+8*ep_2^3-4*ep_2^4+(1/4)*ep_1^3-(1/4)*ep_1^4-2*ep_1*ep_2+3*ep_1^2*ep_2+9*ep_1*ep_2^2-6*ep_1^2*ep_2^2-8*ep_1*ep_2^3-2*ep_1^3*ep_2)
59+
60+
# CATT under three genetic models
61+
Z_rec <- n^(1/2)*(score[1]*(s*r_1-r*s_1)+(s*r_2-r*s_2))/((r*s*(n*(score[1]^2*n_1+n_2)-(score[1]*n_1+n_2)^2))^(1/2))
62+
Z_add <- n^(1/2)*(score[2]*(s*r_1-r*s_1)+(s*r_2-r*s_2))/((r*s*(n*(score[2]^2*n_1+n_2)-(score[2]*n_1+n_2)^2))^(1/2))
63+
Z_dom <- n^(1/2)*(score[3]*(s*r_1-r*s_1)+(s*r_2-r*s_2))/((r*s*(n*(score[3]^2*n_1+n_2)-(score[3]*n_1+n_2)^2))^(1/2))
64+
65+
# HWDTT in only case
66+
delta_p <- r_2/r-(r_2/r+r_1/(2*r))^2
67+
Z_C <- delta_p/sqrt(vardel)
68+
69+
# expectation of the MET
70+
delta_pt <- p_2-(p_2+p_1/2)^2
71+
mu_deltap <- delta_pt/sqrt(vardel)
72+
mean_met <- c(0,mu_deltap)
73+
74+
# variance and covariance matrix of the MET
75+
ecvar <- c(cvar_rec/sqrt(var_rec*vardel),cvar_add/sqrt(var_add*vardel),cvar_dom/sqrt(var_dom*vardel))
76+
covr_met <- matrix(c(1,ecvar[1],ecvar[1],1),ncol=2)
77+
cova_met <- matrix(c(1,ecvar[2],ecvar[2],1),ncol=2)
78+
covd_met <- matrix(c(1,ecvar[3],ecvar[3],1),ncol=2)
79+
80+
# p-value of the MET
81+
if(Z_C>c){
82+
lower1 <- c(abs(Z_rec),c)
83+
upper1 <- rep(Inf,2)
84+
lower2 <- c(abs(Z_rec),-c)
85+
upper2 <- c(Inf,c)
86+
lower3 <- c(abs(Z_rec),-Inf)
87+
upper3 <- c(Inf,-c)
88+
lower4 <- c(-Inf,c)
89+
upper4 <- c(-abs(Z_rec),Inf)
90+
lower5 <- c(-Inf,-c)
91+
upper5 <- c(-abs(Z_rec),c)
92+
lower6 <- c(-Inf,-Inf)
93+
upper6 <- c(-abs(Z_rec),-c)
94+
95+
met.pvalue <- pmvnorm(lower1,upper1,mean_met,sigma=covr_met)[[1]]+pmvnorm(lower2,upper2,mean_met,sigma=cova_met)[[1]]+pmvnorm(lower3,upper3,mean_met,sigma=covd_met)[[1]]+pmvnorm(lower4,upper4,mean_met,sigma=covr_met)[[1]]+pmvnorm(lower5,upper5,mean_met,sigma=cova_met)[[1]]+pmvnorm(lower6,upper6,mean_met,sigma=covd_met)[[1]]
96+
}else if(Z_C<(-c)){
97+
lower1 <- c(abs(Z_dom),c)
98+
upper1 <- rep(Inf,2)
99+
lower2 <- c(abs(Z_dom),-c)
100+
upper2 <- c(Inf,c)
101+
lower3 <- c(abs(Z_dom),-Inf)
102+
upper3 <- c(Inf,-c)
103+
lower4 <- c(-Inf,c)
104+
upper4 <- c(-abs(Z_dom),Inf)
105+
lower5 <- c(-Inf,-c)
106+
upper5 <- c(-abs(Z_dom),c)
107+
lower6 <- c(-Inf,-Inf)
108+
upper6 <- c(-abs(Z_dom),-c)
109+
110+
met.pvalue <- pmvnorm(lower1,upper1,mean_met,sigma=covr_met)[[1]]+pmvnorm(lower2,upper2,mean_met,sigma=cova_met)[[1]]+pmvnorm(lower3,upper3,mean_met,sigma=covd_met)[[1]]+pmvnorm(lower4,upper4,mean_met,sigma=covr_met)[[1]]+pmvnorm(lower5,upper5,mean_met,sigma=cova_met)[[1]]+pmvnorm(lower6,upper6,mean_met,sigma=covd_met)[[1]]
111+
}else{
112+
lower1 <- c(abs(Z_add),c)
113+
upper1 <- rep(Inf,2)
114+
lower2 <- c(abs(Z_add),-c)
115+
upper2 <- c(Inf,c)
116+
lower3 <- c(abs(Z_add),-Inf)
117+
upper3 <- c(Inf,-c)
118+
lower4 <- c(-Inf,c)
119+
upper4 <- c(-abs(Z_add),Inf)
120+
lower5 <- c(-Inf,-c)
121+
upper5 <- c(-abs(Z_add),c)
122+
lower6 <- c(-Inf,-Inf)
123+
upper6 <- c(-abs(Z_add),-c)
124+
125+
met.pvalue <- pmvnorm(lower1,upper1,mean_met,sigma=covr_met)[[1]]+pmvnorm(lower2,upper2,mean_met,sigma=cova_met)[[1]]+pmvnorm(lower3,upper3,mean_met,sigma=covd_met)[[1]]+pmvnorm(lower4,upper4,mean_met,sigma=covr_met)[[1]]+pmvnorm(lower5,upper5,mean_met,sigma=cova_met)[[1]]+pmvnorm(lower6,upper6,mean_met,sigma=covd_met)[[1]]
126+
}
127+
128+
}
129+
130+
list(met.pvalue)
131+
132+
}
133+

0 commit comments

Comments
 (0)