From d134541f3e708522950ac2b3270f1ba84ffa6740 Mon Sep 17 00:00:00 2001 From: mingjingsi <30649118+mingjingsi@users.noreply.github.com> Date: Sat, 13 Jan 2018 12:37:43 +0800 Subject: [PATCH 1/9] Update estLatent.R --- R/estLatent.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/estLatent.R b/R/estLatent.R index 8ee6af2..10525d7 100644 --- a/R/estLatent.R +++ b/R/estLatent.R @@ -11,7 +11,7 @@ assoc.SNP <- function(fit, FDRset = 0.1, fdrControl){ est$gamma[which(FDR <= FDRset)] <- 1 } if (fdrControl == "local"){ - est$gamma[which((1-fit$pi1) <= FDR.set)] <- 1 + est$gamma[which((1-fit$pi1) <= FDRset)] <- 1 } } else if(length(fit) == 6){ @@ -28,7 +28,7 @@ assoc.SNP <- function(fit, FDRset = 0.1, fdrControl){ } if (fdrControl == "local"){ est$gamma.stage1[which((1-fit$pi1.stage1) <= FDRset)] <- 1 - est$gamma[which((1-fit$pi1) <= FDR.set)] <- 1 + est$gamma[which((1-fit$pi1) <= FDRset)] <- 1 } } else { @@ -49,7 +49,7 @@ assoc.SNP <- function(fit, FDRset = 0.1, fdrControl){ if (fdrControl == "local"){ est$gamma.stage1[which((1-fit$pi1.stage1) <= FDRset)] <- 1 est$gamma.stage2[which((1-fit$pi1.stage2) <= FDRset)] <- 1 - est$gamma[which((1-fit$pi1) <= FDR.set)] <- 1 + est$gamma[which((1-fit$pi1) <= FDRset)] <- 1 } } From 9882c94926655a69a7a9a1007e2a6f4cafc002e4 Mon Sep 17 00:00:00 2001 From: mingjingsi <30649118+mingjingsi@users.noreply.github.com> Date: Fri, 30 Mar 2018 21:39:46 +0800 Subject: [PATCH 2/9] Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a669036..9dfdd97 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,13 @@ package?LSMM References ========== -Jingsi Ming, Mingwei Dai, Mingxuan Cai, Xiang Wan, Jin Liu and Can Yang. LSMM: A statistical approach to integrating functional annotations with genome-wide association studies. 2017. Under review. +Jingsi Ming, Mingwei Dai, Mingxuan Cai, Xiang Wan, Jin Liu, Can Yang; LSMM: A statistical approach to integrating functional annotations with genome-wide association studies, Bioinformatics, , bty187, https://doi.org/10.1093/bioinformatics/bty187 + + +Reproducibility +========== + +All the simulation results can be reproduced by using the code at [sim-LSMM](https://github.com/mingjingsi/sim-LSMM). Development From 67f37a1dc02e91f9e44da1b8bea94f110fd266d3 Mon Sep 17 00:00:00 2001 From: mingjingsi <30649118+mingjingsi@users.noreply.github.com> Date: Fri, 30 Mar 2018 21:57:06 +0800 Subject: [PATCH 3/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9dfdd97..32b3cd3 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ package?LSMM References ========== -Jingsi Ming, Mingwei Dai, Mingxuan Cai, Xiang Wan, Jin Liu, Can Yang; LSMM: A statistical approach to integrating functional annotations with genome-wide association studies, Bioinformatics, , bty187, https://doi.org/10.1093/bioinformatics/bty187 +Jingsi Ming, Mingwei Dai, Mingxuan Cai, Xiang Wan, Jin Liu, Can Yang; LSMM: A statistical approach to integrating functional annotations with genome-wide association studies, Bioinformatics, 2018, bty187 Reproducibility From a88ebf8df54bf65928c1b1c4ed7cee6eda5b3989 Mon Sep 17 00:00:00 2001 From: mingjingsi <30649118+mingjingsi@users.noreply.github.com> Date: Fri, 30 Mar 2018 21:59:18 +0800 Subject: [PATCH 4/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 32b3cd3..9eefd72 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ package?LSMM References ========== -Jingsi Ming, Mingwei Dai, Mingxuan Cai, Xiang Wan, Jin Liu, Can Yang; LSMM: A statistical approach to integrating functional annotations with genome-wide association studies, Bioinformatics, 2018, bty187 +Jingsi Ming, Mingwei Dai, Mingxuan Cai, Xiang Wan, Jin Liu, Can Yang; LSMM: A statistical approach to integrating functional annotations with genome-wide association studies, Bioinformatics, 2018, bty187, https://doi.org/10.1093/bioinformatics/bty187 Reproducibility From eb42af9ff0bbdceee0df4e64990ecc91e7d2d9be Mon Sep 17 00:00:00 2001 From: mingjingsi <30649118+mingjingsi@users.noreply.github.com> Date: Mon, 2 Apr 2018 22:43:58 +0800 Subject: [PATCH 5/9] Delete func.R --- demo/func.R | 796 ---------------------------------------------------- 1 file changed, 796 deletions(-) delete mode 100644 demo/func.R diff --git a/demo/func.R b/demo/func.R deleted file mode 100644 index c6d1c8c..0000000 --- a/demo/func.R +++ /dev/null @@ -1,796 +0,0 @@ -##### Functions to generate data ##### -generate_data <- function(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2){ - # fixed effects - Z <- rep(0, M*L) - indexZ <- sample(M*L, M*L*Z.perc) - Z[indexZ] <- 1 - Z <- matrix(Z, M, L) - - # random effects - A <- rep(0, M*K) - indexA <- sample(M*K, M*K*A.perc) - A[indexA] <- 1 - A <- matrix(A, M, K) - - # eta (latent variable which indicate whether the annotation is relevant to the phenotype) - eta <- rep(0, K) - indexeta <- sample(K, K*omega) - eta[indexeta] <- 1 - - # beta (coefficients of random effects) - beta <- rep(0, K) - beta[indexeta] <- rnorm(K*omega, 0, sqrt(sigma2)) - - # gamma (latent variable which indicate whether the SNP is associated with the phenotype) - pi1 <- sigma(beta0 + Z %*% b + A %*% beta) - gamma <- rep(0, M) - indexgamma <- (runif(M) < pi1) - gamma[indexgamma] <- 1 - - # Pvalue (p-values of the phenotype) - Pvalue <- runif(M) - Pvalue[indexgamma] <- rbeta(sum(indexgamma), alpha, 1) - - return( list(Z = Z, A = A, Pvalue = Pvalue, beta = beta, pi1 = pi1, eta = eta, - gamma = gamma)) -} - -generate_data_corr <- function(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2, q){ - # fixed effects - Z <- rep(0, M*L) - indexZ <- sample(M*L, M*L*Z.perc) - Z[indexZ] <- 1 - Z <- matrix(Z, M, L) - - # random effects - corr <- matrix(0, K, K) - corr[1:10, 1:10] <- matrix(q, 10, 10) - diag(corr) <- 1 - preA <- mvrnorm(M, rep(0, K), corr) - A <- t(t(preA) < apply(preA, 2, quantile, probs = A.perc)) - - # eta (latent variable which indicate whether the annotation is relevant to the phenotype) - eta <- rep(0, K) - indexeta <- sample(K, K*omega) - eta[indexeta] <- 1 - - # beta (coefficients of random effects) - beta <- rep(0, K) - beta[indexeta] <- rnorm(K*omega, 0, sqrt(sigma2)) - - # gamma (latent variable which indicate whether the SNP is associated with the phenotype) - pi1 <- sigma(beta0 + Z %*% b + A %*% beta) - gamma <- rep(0, M) - indexgamma <- (runif(M) < pi1) - gamma[indexgamma] <- 1 - - # Pvalue (p-values of the phenotype) - Pvalue <- runif(M) - Pvalue[indexgamma] <- rbeta(sum(indexgamma), alpha, 1) - - return( list(Z = Z, A = A, Pvalue = Pvalue, beta = beta, pi1 = pi1, eta = eta, - gamma = gamma)) -} - -generate_data_corr_ZA <- function(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2, q){ - # fixed effects & random effects - corr <- matrix(0, K+L, K+L) - corr[1:(L+50), 1:(L+50)] <- q - corr[1:(L+50), 1:(L+50)] <- q - diag(corr) <- 1 - preZA <- mvrnorm(M, rep(0, K+L), corr) - ZA <- t(t(preZA) < apply(preZA, 2, quantile, probs = A.perc)) - Z <- ZA[, 1:L] - A <- ZA[, (L+1):(K+L)] - - # eta (latent variable which indicate whether the annotation is relevant to the phenotype) - eta <- rep(0, K) - indexeta <- sample(K, K*omega) - eta[indexeta] <- 1 - - # beta (coefficients of random effects) - beta <- rep(0, K) - beta[indexeta] <- rnorm(K*omega, 0, sqrt(sigma2)) - - # gamma (latent variable which indicate whether the SNP is associated with the phenotype) - pi1 <- sigma(beta0 + Z %*% b + A %*% beta) - gamma <- rep(0, M) - indexgamma <- (runif(M) < pi1) - gamma[indexgamma] <- 1 - - # Pvalue (p-values of the phenotype) - Pvalue <- runif(M) - Pvalue[indexgamma] <- rbeta(sum(indexgamma), alpha, 1) - - return( list(Z = Z, A = A, Pvalue = Pvalue, beta = beta, pi1 = pi1, eta = eta, - gamma = gamma)) -} - -generate_data_probit <- function(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2, r){ - # fixed effects - Z <- rep(0, M*L) - indexZ <- sample(M*L, M*L*Z.perc) - Z[indexZ] <- 1 - Z <- matrix(Z, M, L) - - # random effects - A <- rep(0, M*K) - indexA <- sample(M*K, M*K*A.perc) - A[indexA] <- 1 - A <- matrix(A, M, K) - - # eta (latent variable which indicate whether the annotation is relevant to the phenotype) - eta <- rep(0, K) - indexeta <- sample(K, K*omega) - eta[indexeta] <- 1 - - # beta (coefficients of random effects) - beta <- rep(0, K) - beta[indexeta] <- rnorm(K*omega, 0, sqrt(sigma2)) - - # gamma (latent variable which indicate whether the SNP is associated with the phenotype) - sigmae2 <- var(Z %*% b + A %*% beta)/r # r is signal-noise ratio - y <- beta0 + Z %*% b + A %*% beta + sqrt(sigmae2) * rnorm(M) - gamma <- rep(0, M) - indexgamma <- (y > 0) - gamma[indexgamma] <- 1 - - # Pvalue (p-values of the phenotype) - Pvalue <- runif(M) - Pvalue[indexgamma] <- rbeta(sum(indexgamma), alpha, 1) - - return( list(Z = Z, A = A, Pvalue = Pvalue, beta = beta, eta = eta, gamma = gamma)) -} - -generate_data_probit_dist <- function(M, L, K, Z.perc, A.perc, beta0, b, omega, sigma2, r, dist){ - # fixed effects - Z <- rep(0, M*L) - indexZ <- sample(M*L, M*L*Z.perc) - Z[indexZ] <- 1 - Z <- matrix(Z, M, L) - - # random effects - A <- rep(0, M*K) - indexA <- sample(M*K, M*K*A.perc) - A[indexA] <- 1 - A <- matrix(A, M, K) - - # eta (latent variable which indicate whether the annotation is relevant to the phenotype) - eta <- rep(0, K) - indexeta <- sample(K, K*omega) - eta[indexeta] <- 1 - - # beta (coefficients of random effects) - beta <- rep(0, K) - beta[indexeta] <- rnorm(K*omega, 0, sqrt(sigma2)) - - # gamma (latent variable which indicate whether the SNP is associated with the phenotype) - sigmae2 <- var(Z %*% b + A %*% beta)/r # r is signal-noise ratio - y <- beta0 + Z %*% b + A %*% beta + sqrt(sigmae2) * rnorm(M) - gamma <- rep(0, M) - indexgamma <- (y > 0) - gamma[indexgamma] <- 1 - - # Pvalue (p-values of the phenotype) - Pvalue <- runif(M) - fz <- match.fun(dist) - z <- fz(sum(indexgamma)) - Pvalue[indexgamma] <- pnorm(abs(z), lower.tail = FALSE)*2 - - return( list(Z = Z, A = A, Pvalue = Pvalue, beta = beta, eta = eta, gamma = gamma)) -} - -spiky <- function(N){ - r <- runif(N) - z <- rnorm(N, 0, 0.25) - if(sum(r <= 0.2) != 0) - z[which(r <= 0.2)] <- rnorm(sum(r <= 0.2), 0, 0.5) - if(sum(r > 0.2 & r <= 0.4) != 0) - z[which(r > 0.2 & r <= 0.4)] <- rnorm(sum(r > 0.2 & r <= 0.4), 0, 1) - if(sum(r > 0.8) != 0) - z[which(r > 0.8)] <- rnorm(sum(r > 0.8), 0, 2) - - return(z) -} - -near_normal <- function(N){ - r <- runif(N) - z <- rnorm(N, 0, 1) - if(sum(r <= 1/3) != 0) - z[which(r <= 1/3)] <- rnorm(sum(r <= 1/3), 0, 2) - - return(z) -} - -skew <- function(N){ - r <- runif(N) - z <- rnorm(N, -2, 2) - if(sum(r <= 0.25) != 0) - z[which(r <= 0.25)] <- rnorm(sum(r <= 0.25), -1, 1.5) - if(sum(r > 0.25 & r <= (0.25+1/3)) != 0) - z[which(r > 0.25 & r <= (0.25+1/3))] <- rnorm(sum(r > 0.25 & r <= (0.25+1/3)), 0, 1) - if(sum(r > 5/6) != 0) - z[which(r > 5/6)] <- rnorm(sum(r > 5/6), 1, 1) - - return(z) -} - -big_normal <- function(N){ - r <- runif(N) - z <- rnorm(N, 0, 4) - - return(z) -} - -# sigmoid function -sigma <- function(x){ - y <- 1/(1+exp(-x)) - return (y) -} - - - -##### Functions in cmfdr ##### -run_cmlocfdr=function(Pvalue=1,P,X,bases_X=FALSE,K=2,knots=NULL, - nIter=160,thin=1,burnIn=10,SSA=1,SSG=1,MA=3,MG=3,theoNULL=FALSE,mu,inits=NULL){ - - library(pgnorm) - library(locfdr) - library(splines) - - ## Inputs: - ## P: N vector of P-values or Z scores based on the input from mainfile.R; - ## X: N x Q matrix of covariates - ## nIter: Number of MCMC iterations - ## thin: thinning rate - ## burnIn: burn-in number - ## SSA: increase step-size for alpha draw - ## SS: increase step-size for gamma draw - ## MA: num of multiple try for alpha - ## MG: num of multiple try for gamma - ## mu: origin of gamma distribution, do not change; not used for generalized normal - - if (Pvalue==1){ # input P value - N=length(P) - snpid=1:N - all.complete=complete.cases(cbind(P,X)) - X=X[all.complete,] - P=P[all.complete] - - P[P==0]=min(P[P>0]);P[P==1]=max(P[P<1]) - Z=-qnorm(P/2);N=length(Z) - if(!colnames(X)[1]=="Intcpt"){X=cbind(Intcpt=1,X)} - }else{ - Z=P; #input Z score; - } - - X_bases=NULL - if(!is.null(bases_X)){ - for(p in 1:length(bases_X)){ - X_p=X[,bases_X[p]] - range=c(min(X_p),max(X_p)) - delta=(range[2]-range[1])/200 - grid=seq(range[1],range[2]+delta,by=delta) - knots=c(min(grid),quantile(X_p,.5),quantile(X_p,.67),max(grid)) - phi.mat=bs(grid,knots=knots[2:(length(knots)-1)],degree=3,intercept=FALSE, - Boundary.knots=c(knots[1],knots[length(knots)])) - for(k in 1:(K+3)){ - phi.mat[,k]=phi.mat[,k]/(sum(phi.mat[,k])*delta) - } - #plot(grid,phi.mat[,1],type="l",ylab="density",xlab="annotation score") - #title(main="density basis functions") - #for(k in 2:K){ - # lines(grid,phi.mat[,k],type="l",col=k+1,lwd=.5) - #} - Phi.mat=phi.mat - for(k in 1:(K+3)){ - for(j in 1:length(grid)){Phi.mat[j,k]=sum(phi.mat[grid<=grid[j],k]*delta)} - } - #plot(grid,Phi.mat[,2],type="l") - #lines(grid,Phi.mat[,3],type="l",col=k) - X_bases_p=array(NA,dim=c(length(X_p),2)) - for(g in 1:length(grid)){ - #print(c(p,g)) - if(length(X_p[abs(X_p-grid[g])<=delta/2])>0){ - tmp=dim(rbind(X_bases_p[abs(X_p-grid[g])<=delta/2,]))[1] - X_bases_p[abs(X_p-grid[g])<=delta/2,]=cbind(rep(Phi.mat[g,2],tmp),rep(Phi.mat[g,3],tmp)) - } - } - X_bases=cbind(X_bases,X_bases_p) - } - name=colnames(X)[bases_X[1]] - colnames(X_bases)=rep(1:2,length(bases_X)) - colnames(X_bases)[1:2]=c(paste(name,"_1",sep=""),paste(name,"_2",sep="")) - if(length(bases_X)>1){ - for(p in 2:length(bases_X)){ - name=colnames(X)[bases_X[p]] - colnames(X_bases)[(2*(p-1)+1):(2*(p-1)+2)]=c(paste(name,"_1",sep=""),paste(name,"_2",sep="")) - } - } - colnames(X_bases) - X=cbind(Intcpt=1,X_bases,X[,-c(1,bases_X)]) - } - - save(file="data_inputs.R",Z,X,N) - - MCMCfit=cmlFDR_GammaDist(Z,X,nIter=nIter,burnIn=burnIn,thin=thin,SSA=SSA,SSG=SSG,MA=MA,MG=MG,mu=mu, - theoNULL=theoNULL,inits=inits) - - ALPHA_array=MCMCfit[[1]] - BETA_array=MCMCfit[[2]] - GAMMA_array=MCMCfit[[3]] - SIGMA_SQ_array=MCMCfit[[4]] - first=1 - Alpha=ALPHA_array[[first]] - Beta=BETA_array[[first]] - Gamma=GAMMA_array[[first]] - if(theoNULL==FALSE){Sigma_sq=SIGMA_SQ_array[[first]]} - for(j in (first+1):length(ALPHA_array)){ - Alpha=Alpha+ALPHA_array[[j]] - Beta=Beta+BETA_array[[j]] - Gamma=Gamma+GAMMA_array[[j]] - if(theoNULL==FALSE){Sigma_sq=Sigma_sq+SIGMA_SQ_array[[j]]} - } - Alpha=cbind(Alpha/length(first:length(ALPHA_array))) - Beta=Beta/length(first:length(ALPHA_array)) - Gamma=cbind(Gamma/length(first:length(ALPHA_array))) - if(theoNULL==FALSE){Sigma_sq=Sigma_sq/length(first:length(ALPHA_array))} - if(theoNULL==TRUE){Sigma_sq=1} - - f0<-2*dnorm(abs(Z),mean=0,sd=Sigma_sq^.5) - f1<-f0 - for (i in 1:length(Z)){ - X_i=rbind(X[i,]) - f1[i]<-2*dgamma(abs(Z[i])-.68,shape=exp(X_i%*%Alpha),rate=Beta) - } - p0=1; - p1=exp(X%*%Gamma) - pi0=p0/(p0+p1) - pi1=1-pi0 - cmfdr=pi0*f0/(pi0*f0+pi1*f1) - - X_mean=rbind(apply(X,2,mean)) - f1=2*dpgnorm(Z,p=Beta,mean=0,sigma=exp(X_mean%*%Alpha)*sqrt(gamma(3/Beta)/gamma(1/Beta))) - p1=exp(X_mean%*%Gamma) - pi0=p0/(p0+p1) - pi1=1-pi0 - fdr=pi0*f0/(pi0*f0+pi1*f1) - - z.locfdr=locfdr(c(Z,-Z),nulltype=1,plot=0) - efron_fdr=z.locfdr$fdr[1:length(Z)] - - results=list() - results[[1]]=MCMCfit[[1]] - results[[2]]=MCMCfit[[2]] - results[[3]]=MCMCfit[[3]] - results[[4]]=MCMCfit[[4]] - results[[5]]=MCMCfit[[5]] - results[[6]]=array(NA,dim=c(N,3)) - results[[6]][,1]=efron_fdr - results[[6]][,2]=fdr - results[[6]][,3]=cmfdr - - return(results) -} - -cmlFDR_GammaDist=function (Z,X,nIter=1100,burnIn=100,thin=5,initNULL=0.95,simulate=FALSE, - SSA=1,SSG=1,MA=3,MG=3,mu=0.68,theoNULL=FALSE,inits=NULL) -{ - #SSA:scale the diagnal of the covariance matrix in MH of Alpha draw to increase/decrease the step size - #SSG:scale the diagnal of the covariance matrix in MH of Gamma draw to increase/decrease the step size - - - ########################### - #Load packages/functions - ########################### - - library(tmvtnorm) - library(mnormt) - library(magic) - library(locfdr) - library(arm) - library(pscl) - - if(colnames(X)[1] != "Intcpt") X=cbind(Intcpt=1,X) - #print(X[1:10,]) - # hyperparameters - - B01=0.001;B02=0.001; #Prior: P(Beta) ~ Gamma(B01,B02) - a0=0.001;b0=0.001; #Prior: P(sigma^2) ~ IVG(a0,b0) #b0 is scale; - Sigma_Gamma=matrix(0,nrow=dim(X)[2],ncol=dim(X)[2]) - diag(Sigma_Gamma)=10000; #Prior: P(Gamma) ~ N(0,Sigma_Gamma) - - Sigma_Alpha=matrix(0,nrow=dim(X)[2],ncol=dim(X)[2]) - diag(Sigma_Alpha)=10000; #Prior: P(Alpha) ~ N(0,Sigma_Alpha) - df=4 # degrees of freedom for multivariate t proposal - - # data - N=dim(X)[1] - M=dim(X)[2] - - # Parameter arrays - - ALPHA_array=list() - BETA_array=list() - if(theoNULL==FALSE){ - SIGMA_SQ_array=list() - } - GAMMA_array=list() - Accp_Rate_array=list() #Alpha draw accept rate - Accp_Rate_array_g=list() #Gamma draw accept rate - - array_ind=0 - - # Initialize parameters - - if(is.null(inits)){ - Alpha=cbind(rep(0,M));Alpha_mean=Alpha - pi0=initNULL #min(.98,locfdr(Z,nulltype=1,plot=0)$fp0[5,3]); - gamma0=log((1-pi0)/pi0) #intercept for Non-NULL gamma - Gamma=array(0,dim=c(M,1));Gamma_mean=Gamma; Gamma[1,]=gamma0 - Beta=0.1;Beta_mean=Beta - Phi=1-as.numeric(abs(Z)< sort(abs(Z))[round(pi0*N)]);Phi_mean=0*Phi - Sigma_sq=1 - } - if(!is.null(inits)){ - last=length(inits[[1]]) - Alpha=cbind(inits[[1]][[last]]);Alpha_mean=Alpha - Beta=inits[[2]][[last]];Beta_mean=Beta - Gamma=cbind(inits[[3]][[last]]);Gamma_mean=Gamma - if(theoNULL==FALSE){ - Sigma_sq=inits[[4]][[last]];Sigma_sq_mean=Sigma_sq - } - if(theoNULL==TRUE){ - Sigma_sq=1 - } - Phi=inits[[5]];Phi_mean=0*Phi - } - PHI_match_rate=NULL - - - for(iter in 1:nIter){ - - print(iter) - - Z1=abs(Z[!Phi==0]) - X1=X[!Phi==0,] - - - ## Draw ALPHA - - if(det(t(X1)%*%X1) != 0){ #avoid singular - obj=Draw_Alpha_log_M_mu(Alpha,Z1,X1,Beta,Phi,df,MA,Sigma_Alpha,SSA,mu) - Alpha=obj$par; - } - print("Alpha"); - print(Alpha); - - - ## Draw BETA - - Beta=rgamma(1,shape=B01+sum(exp(X1%*%Alpha)),rate=B02+sum(Z1-mu)) - print(paste("Beta",Beta)); - - - ## Draw GAMMA - - #Gamma draw: Multiple try MH - objg=Draw_Gamma_log_M(Gamma,Z,X,Phi,df,Sigma_Gamma,SSG,MG) - - Gamma=objg$par; - print("Gamma"); - print(Gamma); - - - if(theoNULL==FALSE){ - ## Draw SIGMA_SQ; - Z0=abs(Z[Phi==0]) - Sigma_sq=rigamma(1,alpha=a0+length(Z0)/2,beta=b0+(Z0%*%Z0)/2); - print(paste("Sigma_sq",Sigma_sq)); - } - - - ## Draw PHI; - - log_P_phi=cbind(X%*%Gamma,0) - log_P_phi[abs(Z)>mu,1]=log_P_phi[abs(Z)>mu,1]+((exp(X[abs(Z)>mu,]%*%Alpha)-1)* - log(abs(Z[abs(Z)>mu])-mu)-Beta*(abs(Z[abs(Z)>mu])-mu))+(exp(X[abs(Z)>mu,]%*%Alpha))* - log(Beta)-lgamma(exp(X[abs(Z)>mu,]%*%Alpha)) - #log_P_phi[,2]=log_P_phi[,2]+log(2)-0.5*log(2*pi)-0.5*Z^2; - - if(theoNULL==TRUE){ - log_P_phi[,2]=log_P_phi[,2]+log(2)-0.5*log(2*pi)-0.5*Z^2; - }else{ - log_P_phi[,2]=log_P_phi[,2]+log(2)-0.5*log(2*pi*Sigma_sq)-(1/(2*Sigma_sq))*Z^2; - } - - P_phi=exp(log_P_phi)/apply(exp(log_P_phi),1,sum) #declare the variable P_phi; - P_phi[abs(Z)>mu,1]=1/(1+exp(log_P_phi[abs(Z)>mu,2]-log_P_phi[abs(Z)>mu,1])) - P_phi[,2]=1/(1+exp(log_P_phi[,1]-log_P_phi[,2])) - - P_phi[abs(Z)<=mu,1]=0;P_phi[abs(Z)<=mu,2]=1; - - Phi_new=Phi #declare variable Phi_new, create a vector; - for(i in 1:N){ - Phi_new[i]=sample(c(1,0),size=1,replace=TRUE,prob=P_phi[i,]) - } - Phi=Phi_new - - if(simulate == TRUE) print(sum(Phi == Phi_true)/N) - - - ## Save results after thin - - if(iter%%thin==0 & iter>=burnIn){ - array_ind=array_ind+1 - ALPHA_array[[array_ind]]=Alpha - - GAMMA_array[[array_ind]]=Gamma - - BETA_array[[array_ind]]=Beta - - if(theoNULL==FALSE){ - SIGMA_SQ_array[[array_ind]]=Sigma_sq - } - - if(det(t(X1)%*%X1) != 0){ - Accp_Rate_array[[array_ind]]=obj$accp - } - else Accp_Rate_array[[array_ind]]=0 - - Accp_Rate_array_g[[array_ind]]=objg$accp; - - print("Alpha mean:"); - Alpha_mean=((array_ind-1)*Alpha_mean+ALPHA_array[[array_ind]])/array_ind - if(simulate==TRUE) print(cbind(Alpha_mean,Alpha_true)) - if(simulate==FALSE) print(Alpha_mean) - - - print("Beta mean:"); - if(simulate==TRUE) print(cbind(mean(as.numeric(BETA_array)),BETA_true)) - if(simulate==FALSE) print(mean(as.numeric(BETA_array))) - - if(theoNULL==FALSE){ - print("Sigma_sq mean:"); - if(simulate==TRUE) print(cbind(mean(as.numeric(SIGMA_SQ_array)),SIGMA_SQ_true)) - if(simulate==FALSE) print(mean(as.numeric(SIGMA_SQ_array))) - - } - - print("Gamma mean:"); - Gamma_mean=((array_ind-1)*Gamma_mean+GAMMA_array[[array_ind]])/array_ind - if(simulate==TRUE) print(cbind(Gamma_mean,Gamma_true)) - if(simulate==FALSE) print(Gamma_mean) - - print(paste("Multiple-try MH Accept Rate for Alpha (mean):",mean(as.numeric(Accp_Rate_array)))); - print(paste("Multiple-try MH Accept Rate for Gamma (mean):",mean(as.numeric(Accp_Rate_array_g)))); - - if(simulate==TRUE) { - PHI_match_rate=rbind(PHI_match_rate,sum(Phi==Phi_true)/N); - print(paste("Phi matching rate (mean):",mean(PHI_match_rate))) - } - - #probability of each SNP being Non-NULL, average of Phi over the iterations saved; - Phi_mean=((array_ind-1)*Phi_mean+Phi)/array_ind; - - - results=list() - results[[1]]=ALPHA_array - results[[2]]=BETA_array - results[[3]]=GAMMA_array - if(theoNULL==TRUE){ - results[[4]]=1 - } - if(theoNULL==FALSE){ - results[[4]]=SIGMA_SQ_array - } - results[[5]]=Phi - save(X,Z,results,file="mcmc_intermediate_outputs.R") - - } - - - - } - - #Calculate SD; - #Alpah - print("Alpha SD:"); - for(i in 1:dim(X)[2]){ - print(sd(as.numeric(unlist(lapply(ALPHA_array, function(x) x[i]))))) - } - - #beta - print(paste("Beta SD:",sd(as.numeric(BETA_array)))) - - if(theoNULL==FALSE){ - #Sigma_sq - print(paste("Sigma SD:",sd(as.numeric(SIGMA_SQ_array)))) - } - - #Gamma - print("Gamma SD:"); - for(i in 1:dim(X)[2]){ - print(sd(as.numeric(unlist(lapply(GAMMA_array, function(x) x[i]))))) - } - - - #return results; - #return results; - results=list() - results[[1]]=ALPHA_array - results[[2]]=BETA_array - results[[3]]=GAMMA_array - if(theoNULL==TRUE){ - results[[4]]=1 - } - if(theoNULL==FALSE){ - results[[4]]=SIGMA_SQ_array - } - results[[5]]=Phi - - - return(results) -} - - -log_p_alpha=function(Alpha,Z,W,B,SA,MU){ - gammafcn=lgamma(exp(W%*%Alpha)); - #if (gammafcn == Inf || is.na (gammafcn) ) {print(paste("Gamma function",gammafcn));} - log_p=sum(exp(W%*%Alpha)*log(Z-MU)-gammafcn)+sum(exp(W%*%Alpha))*log(B)-0.5*t(Alpha)%*%solve(SA)%*%Alpha - #print(log_p) - return(log_p) -} - -## Draw Alpha,log-scale MH alg:multiple-try; -Draw_Alpha_log_M_mu=function(Alpha,Z,X,Beta,Phi,df,Multiple,Sigma_Alpha,SSA,mu) -{ - - log_p_Alpha_star=rep(0,Multiple) - log_p_Alpha_2star=rep(0,Multiple) - p=rep(0,Multiple) - den=0;num=0; - - sigma=solve(t(X)%*%X); - diag(sigma)=diag(sigma)*SSA; - - #if(det(sigma) == 0) {print(sigma); break} - - logp=log_p_alpha(Alpha,Z,X,B=Beta,SA=Sigma_Alpha,MU=mu); - if( logp == Inf | logp == -Inf | is.na(logp)) {alpha=Alpha} - else {alpha <-optim(Alpha,Z=Z,W=X,B=Beta,SA=Sigma_Alpha,MU=mu,log_p_alpha,method="Nelder-Mead", - hessian=FALSE,control=list(maxit=10,fnscale=-1))$par} - - Alpha_star=t(rmvt(n=Multiple,alpha,sigma=sigma,df=df)) - - for (i in 1:Multiple){ - log_p_Alpha_star[i]=log_p_alpha(Alpha_star[,i],Z,X,Beta,Sigma_Alpha,mu) - } - - #control overfloat, -max(log_p_Alpha_star); - p=exp(log_p_Alpha_star-max(log_p_Alpha_star))/sum(exp(log_p_Alpha_star - max(log_p_Alpha_star))) - - #in case there is still overfloat; - p[is.na(p)]=(1-sum(p[!is.na(p)]))/sum(is.na(p)) - j=sample(c(1:Multiple),1,prob=p); - - Alpha_2star=t(rmvt(n=Multiple-1,Alpha_star[,j],sigma=sigma,df=df)) - Alpha_2star <-cbind(Alpha_2star,Alpha) - - for (i in 1:Multiple){ - log_p_Alpha_2star[i]=log_p_alpha(Alpha_2star[,i],Z,X,Beta,Sigma_Alpha,mu) - } - - #control overfloat - num=sum(exp(log_p_Alpha_star -max(log_p_Alpha_star))) - den=sum(exp(log_p_Alpha_2star -max(log_p_Alpha_star))) - - rho=min(1,num/den) - - #in case overfloat again - if(is.na(rho)) {rho=0.5}; - - accp=0; - u=runif(1) - if(u Date: Mon, 2 Apr 2018 22:44:11 +0800 Subject: [PATCH 6/9] Delete simulation.R --- demo/simulation.R | 350 ---------------------------------------------- 1 file changed, 350 deletions(-) delete mode 100644 demo/simulation.R diff --git a/demo/simulation.R b/demo/simulation.R deleted file mode 100644 index 070365a..0000000 --- a/demo/simulation.R +++ /dev/null @@ -1,350 +0,0 @@ -library(LSMM) -library(pROC) -library(MASS) -library(GPA) - -demo(func) -##### 1. Performance of LSMM ##### - -M <- 100000 # No. of SNPs -L <- 10 # No. of fixed effects -K <- 500 # No. of random effects -Z.perc <- 0.1 # frequency of fixed effects Pr(Z=1) -A.perc <- 0.1 # frequency of random effects Pr(A=1) -alpha <- 0.2 # parameter in the Beta distribution -beta0 <- -2 # intercept of the logistic model -set.seed(1) -b <- rnorm(L) # coefficients of fixed effects -omega <- 0.2 # proportion of relevant random effects -sigma2 <- 1 # parameter in the spike-slab prior -rep <- 50 # repeat times - -result <- matrix(0, rep, 16) - -for (i in 1:rep){ - cat(i, "out of", rep, "\n") - - data <- generate_data(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2) - - fit <- LSMM(data$Pvalue, data$Z, data$A) - assoc.SNP <- assoc.SNP(fit, FDRset = 0.1, fdrControl = "global") - - result[i, 1:4] <- as.numeric(performance(data$gamma, assoc.SNP$gamma, 1-fit$pi1)) - result[i, 5:8] <- as.numeric(performance(data$gamma, assoc.SNP$gamma.stage1, 1-fit$pi1.stage1)) - result[i, 9:12] <- as.numeric(performance(data$gamma, assoc.SNP$gamma.stage2, 1-fit$pi1.stage2)) - - relev.Anno <- relev.Anno(fit, FDRset = 0.1, fdrControl = "global") - result[i, 13:16] <- as.numeric(performance(data$eta, relev.Anno, 1-fit$omegak)) -} - -result1 <- as.data.frame(result) -names(result1) <- c("FDR.SNP", "power.SNP", "AUC.SNP", "pAUC.SNP", "FDR.stage1", "power.stage1", - "AUC.stage1", "pAUC.stage1", "FDR.stage2", "power.stage2", "AUC.stage2", - "pAUC.stage2", "FDR.Anno", "power.Anno", "AUC.Anno", "pAUC.Anno") - -##### 2. Treat all covariates as fixed effects ##### - -M <- 100000 # No. of SNPs -L <- 10 # No. of fixed effects -K <- 500 # No. of random effects -Z.perc <- 0.1 # frequency of fixed effects Pr(Z=1) -A.perc <- 0.1 # frequency of random effects Pr(A=1) -alpha <- 0.2 # parameter in the Beta distribution -beta0 <- -2 # intercept of the logistic model -set.seed(1) -b <- rnorm(L) # coefficients of fixed effects -omega <- 0.2 # proportion of relevant random effects -sigma2 <- 1 # parameter in the spike-slab prior -rep <- 50 # repeat times - -result <- matrix(0, rep, 4) - -for (i in 1:rep){ - cat(i, "out of", rep, "\n") - - data <- generate_data(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2) - - fit <- LSMM(data$Pvalue, cbind(data$Z, data$A), NULL) - assoc.SNP <- assoc.SNP(fit, FDRset = 0.1, fdrControl = "global") - - result[i, 1:4] <- as.numeric(performance(data$gamma, assoc.SNP$gamma, 1-fit$pi1)) - -} - -result2 <- as.data.frame(result) -names(result2) <- c("FDR.SNP", "power.SNP", "AUC.SNP", "pAUC.SNP") - -##### 3. Adjustment of fixed effects ##### - -M <- 100000 # No. of SNPs -L <- 10 # No. of fixed effects -K <- 500 # No. of random effects -alpha <- 0.2 # parameter in the Beta distribution -Z.perc <- 0.1 # frequency of fixed effects Pr(Z=1) -A.perc <- 0.1 # frequency of random effects Pr(A=1) -beta0 <- -2 # intercept of the logistic model -set.seed(1) -b <- rnorm(L) # coefficients of fixed effects -omega <- 0.2 # proportion of relevant random effects -sigma2 <- 1 # parameter in the spike-slab prior -corr <- 0.2 # correlation coeffecient among fixed effects and the first 50 random effects -rep <- 50 # repeat times - -result <- matrix(0, rep, 8) - -for (i in 1:rep){ - cat(i, "out of", rep, "\n") - - # when fixed effects and random effects are not independent - data <- generate_data_corr_ZA(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2, corr) - - # LSMM - fit <- LSMM(data$Pvalue, data$Z, data$A) - relev.Anno <- relev.Anno(fit, FDRset = 0.1, fdrControl = "global") - result[i, 1:4] <- as.numeric(performance(data$eta, relev.Anno, 1-fit$omegak)) - - # LSMM without fixed effects - fit1 <- LSMM(data$Pvalue, NULL, data$A) - relev.Anno1 <- relev.Anno(fit1, FDRset = 0.1, fdrControl = "global") - result[i, 5:8] <- as.numeric(performance(data$eta, relev.Anno1, 1-fit$omegak)) -} - -result3 <- as.data.frame(result) -names(result3) <- c("FDR.LSMM", "power.LSMM", "AUC.LSMM", "pAUC.LSMM", "FDR.LSRM", - "power.LSRM", "AUC.LSRM", "pAUC.LSRM") - -##### 4. Simulations based on probit model ##### - -# 4.1 When the underlying distribution of p-values in non-null group is beta distribution -M <- 100000 # No. of SNPs -K <- 500 # No. of random effects -L <- 10 # No. of fixed effects -Z.perc <- 0.1 # frequency of fixed effects Pr(Z=1) -A.perc <- 0.1 # frequency of random effects Pr(A=1) -alpha <- 0.2 # parameter in the Beta distribution -beta0 <- -1 # intercept of the probit model -set.seed(1) -b <- rnorm(L) # coefficients of fixed effects -omega <- 0.2 # proportion of relevant random effects -sigma2 <- 1 # parameter in the spike-slab prior -r <- 5/5 # signal-noise ratio of probit model -rep <- 50 # repeat times - -result <- matrix(0, rep, 16) - -for (i in 1:rep){ - cat(i, "out of", rep, "\n") - - data <- generate_data_probit(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2, r) - - fit <- LSMM(data$Pvalue, data$Z, data$A) - assoc.SNP <- assoc.SNP(fit, FDRset = 0.1, fdrControl = "global") - - result[i, 1:4] <- as.numeric(performance(data$gamma, assoc.SNP$gamma, 1-fit$pi1)) - result[i, 5:8] <- as.numeric(performance(data$gamma, assoc.SNP$gamma.stage1, 1-fit$pi1.stage1)) - result[i, 9:12] <- as.numeric(performance(data$gamma, assoc.SNP$gamma.stage2, 1-fit$pi1.stage2)) - - relev.Anno <- relev.Anno(fit, FDRset = 0.1, fdrControl = "global") - out[i, 13:16] <- as.numeric(performance(data$eta, relev.Anno, 1-fit$omegak)) -} - -result4.1 <- as.data.frame(result) -names(result4.1) <- c("FDR.SNP", "power.SNP", "AUC.SNP", "pAUC.SNP", "FDR.stage1", "power.stage1", - "AUC.stage1", "pAUC.stage1", "FDR.stage2", "power.stage2", "AUC.stage2", - "pAUC.stage2", "FDR.Anno", "power.Anno", "AUC.Anno", "pAUC.Anno") - -# 4.2 When the underlying distribution of p-values in non-null group is not beta distribution -M <- 100000 # No. of SNPs -K <- 500 # No. of random effects -L <- 10 # No. of fixed effects -Z.perc <- 0.1 # frequency of fixed effects Pr(Z=1) -A.perc <- 0.1 # frequency of random effects Pr(A=1) -alpha <- 0.2 # parameter in the Beta distribution -beta0 <- -1 # intercept of the probit model -set.seed(1) -b <- rnorm(L) # coefficients of fixed effects -omega <- 0.2 # proportion of relevant random effects -sigma2 <- 1 # parameter in the spike-slab prior -r <- 5/5 # signal-noise ratio of probit model -dist <- "spiky" # It can also be "near_normal", "skew" and "big_normal" -rep <- 50 # repeat times - -result <- matrix(0, rep, 16) - -for (i in 1:rep){ - cat(i, "out of", rep, "\n") - - data <- generate_data_probit_dist(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2, r, dist) - - fit <- LSMM(data$Pvalue, data$Z, data$A) - assoc.SNP <- assoc.SNP(fit, FDRset = 0.1, fdrControl = "global") - - result[i, 1:4] <- as.numeric(performance(data$gamma, assoc.SNP$gamma, 1-fit$pi1)) - result[i, 5:8] <- as.numeric(performance(data$gamma, assoc.SNP$gamma.stage1, 1-fit$pi1.stage1)) - result[i, 9:12] <- as.numeric(performance(data$gamma, assoc.SNP$gamma.stage2, 1-fit$pi1.stage2)) - - relev.Anno <- relev.Anno(fit, FDRset = 0.1, fdrControl = "global") - out[i, 13:16] <- as.numeric(performance(data$eta, relev.Anno, 1-fit$omegak)) -} - -result4.2 <- as.data.frame(result) -names(result4.2) <- c("FDR.SNP", "power.SNP", "AUC.SNP", "pAUC.SNP", "FDR.stage1", "power.stage1", - "AUC.stage1", "pAUC.stage1", "FDR.stage2", "power.stage2", "AUC.stage2", - "pAUC.stage2", "FDR.Anno", "power.Anno", "AUC.Anno", "pAUC.Anno") - -##### 5. Comparison between LSMM and GPA ##### - -M <- 100000 # No. of SNPs -L <- 10 # No. of fixed effects -K <- 500 # No. of random effects -alpha <- 0.2 # parameter in the Beta distribution -Z.perc <- 0.1 # frequency of fixed effects Pr(Z=1) -A.perc <- 0.1 # frequency of random effects Pr(A=1) -beta0 <- -2 # intercept of the logistic model -set.seed(1) -b <- rnorm(L) # coefficients of fixed effects -omega <- 0.2 # proportion of relevant random effects -sigma2 <- 1 # parameter in the spike-slab prior -corr <- 0.2 # correlation coeffecient among the first 10 random effects -rep <- 50 # repeat times - -result <- matrix(0, rep, 16) - -for (i in 1:rep){ - cat(i, "out of", rep, "\n") - - data <- generate_data_corr(M, L, K, alpha, Z.perc, A.perc, beta0, b, omega, sigma2, corr) - - # LSMM - fit <- LSMM(data$Pvalue, data$Z, data$A) - assoc.SNP <- assoc.SNP(fit, FDRset = 0.1, fdrControl = "global") - result[i, 1:4] <- as.numeric(performance(data$gamma, assoc.SNP$gamma, 1-fit$pi1)) - - # LSMM without fixed effects - fit1 <- LSMM(data$Pvalue, NULL, data$A) - assoc1.SNP <- assoc.SNP(fit1, FDRset = 0.1, fdrControl = "global") - result[i, 5:8] <- as.numeric(performance(data$gamma, assoc.SNP$gamma, 1-fit$pi1)) - - # GPA - fit.GPA <- GPA(data$Pvalue, data$A) - assoc.GPA <- assoc(fit.GPA, FDR = 0.1, fdrControl="global") - out[i, 9:12] <- as.numeric(performance(data$gamma, assoc.GPA, fdr(fit.GPA))) -} - -result5 <- as.data.frame(result) -names(result5) <- c("FDR.LSMM", "power.LSMM", "AUC.LSMM", "pAUC.LSMM", "FDR.LSRM", "power.LSRM", - "AUC.LSRM", "pAUC.LSRM", "FDR.GPA", "power.GPA", "AUC.GPA", "pAUC.GPA") - -##### 6. Comparison between LSMM and cmfdr ##### - -M <- 5000 # No. of SNPs -L <- 5 # No. of fixed effects -alpha <- 0.2 # parameter in the Beta distribution -Z.perc <- 0.1 # frequency of fixed effects Pr(Z=1) -A.perc <- 0.1 # frequency of random effects Pr(A=1) -beta0 <- -2 # intercept of the logistic model -set.seed(1) -b <- rnorm(L) # coefficients of fixed effects -omega <- 0.2 # proportion of relevant random effects -sigma2 <- 1 # parameter in the spike-slab prior -Ks <- 5 # No. of random effects -rep <- 10 # repeat times - -# 6.1 cmfdr -library(locfdr) -library(pgnorm) -source("run_cmlocfdr.R") - -bases_X = NULL; -K = 2 -nIter = 2000; -thin = 10; -burnIn = 500; -SSA = 1 -SSG = 4 -MA = 8 -MG = 5 -theoNULL = FALSE -mu = .68 -inits = NULL - -result <- matrix(0, rep, 4) - -for (i in 1:rep){ - cat(i, "out of", rep, "\n") - - data <- generate_data(M, L, Ks, alpha, Z.perc, A.perc, beta0, b, omega, sigma2) - X <- cbind(rep(1, M), data$Z, data$A) - colnames(X) <- c("Intcpt", paste("Z", 1:L, sep = ""), paste("A", 1:Ks, sep = "")) - - results=run_cmlocfdr(Pvalue = 1, P = data$Pvalue, X = X,bases_X = bases_X, K = K, - nIter = nIter, thin = thin, burnIn = burnIn, SSA = SSA, SSG = SSG, - MA = MA, MG = MG, theoNULL = theoNULL, mu = mu, inits = inits) - - ALPHA_array=results[[1]] - BETA_array=results[[2]] - GAMMA_array=results[[3]] - SIGMA_SQ_array=results[[4]] - - first=1 - Alpha_vec=ALPHA_array[[first]] - Beta_vec=BETA_array[[first]] - Gamma_vec=GAMMA_array[[first]] - Alpha=ALPHA_array[[first]] - Beta=BETA_array[[first]] - Gamma=GAMMA_array[[first]] - if(theoNULL==FALSE){Sigma_sq=SIGMA_SQ_array[[first]]} - for(k in (first+1):length(ALPHA_array)){ - Alpha_vec=cbind(Alpha_vec,ALPHA_array[[k]]) - Beta_vec=cbind(Beta_vec,BETA_array[[k]]) - Gamma_vec=cbind(Gamma_vec,GAMMA_array[[k]]) - Alpha=Alpha+ALPHA_array[[k]] - Beta=Beta+BETA_array[[k]] - Gamma=Gamma+GAMMA_array[[k]] - if(theoNULL==FALSE){Sigma_sq=Sigma_sq+SIGMA_SQ_array[[k]]} - } - Alpha=cbind(Alpha/length(first:length(ALPHA_array))) - Beta=Beta/length(first:length(ALPHA_array)) - Gamma=cbind(Gamma/length(first:length(ALPHA_array))) - if(theoNULL==FALSE){Sigma_sq=Sigma_sq/length(first:length(ALPHA_array))} - if(theoNULL==TRUE){Sigma_sq=1} - - Z <- qnorm(data$Pvalue/2) - f0<-2*dnorm(abs(Z),mean=0,sd=Sigma_sq^.5) - f1<-f0 - for (l in 1:length(Z)){ - X_l=rbind(X[l,]) - f1[l]<-2*dgamma(abs(Z[l])-mu,shape=exp(X_l%*%Alpha),rate=Beta) - } - p1=exp(X%*%Gamma);p0=1; - pi0=p0/(p0+p1) - pi1=1-pi0 - cmfdr=pi0*f0/(pi0*f0+pi1*f1) - - est <- rep(0, length(cmfdr)) - cmFDR <- post2FDR(1-cmfdr) - est[which(cmFDR <= 0.1)] <- 1 - - result[i, 1:4] <- as.numeric(performance(data$gamma, est, cmfdr)) - -} - -result6.1 <- as.data.frame(result) -names(result6.1) <- c("FDR", "power", "AUC", "pAUC") - -# 6.2 LSMM -result <- matrix(0, rep, 4) - -for (i in 1:rep){ - cat(i, "out of", rep, "\n") - - data <- generate_data(M, L, Ks, alpha, Z.perc, A.perc, beta0, b, omega, sigma2) - - fit <- LSMM(data$Pvalue, data$Z, data$A) - assoc.SNP <- assoc.SNP(fit, FDRset = 0.1, fdrControl = "global") - - result[i, 1:4] <- as.numeric(performance(data$gamma, assoc.SNP$gamma, 1-fit$pi1)) -} - -result6.2 <- as.data.frame(result) -names(result6.2) <- c("FDR", "power", "AUC", "pAUC") From f3b343e948c78ee89030c496afc2702d2bcb12ff Mon Sep 17 00:00:00 2001 From: mingjingsi <30649118+mingjingsi@users.noreply.github.com> Date: Mon, 2 Apr 2018 22:44:27 +0800 Subject: [PATCH 7/9] Delete real_data.R --- demo/real_data.R | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 demo/real_data.R diff --git a/demo/real_data.R b/demo/real_data.R deleted file mode 100644 index f27fc82..0000000 --- a/demo/real_data.R +++ /dev/null @@ -1,10 +0,0 @@ -library(LSMM) - -Pvalue <- SCZsubset$pval -Z <- SCZsubset[, c(12:20)] -A <- SCZsubset[, 21:147] - -fit <- LSMM(Pvalue, Z, A) -assoc.SNP <- assoc.SNP(fit, FDRset = 0.1, fdrControl = "global") -relev.Anno <- relev.Anno(fit, FDRset = 0.1, fdrControl = "local") - From 029f525d85275ad67c4bf37543c4c94f551c063b Mon Sep 17 00:00:00 2001 From: mingjingsi <30649118+mingjingsi@users.noreply.github.com> Date: Mon, 2 Apr 2018 23:00:55 +0800 Subject: [PATCH 8/9] Add files via upload --- vignettes/LSMM_package.Rnw | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/vignettes/LSMM_package.Rnw b/vignettes/LSMM_package.Rnw index d848dd2..6ee1789 100644 --- a/vignettes/LSMM_package.Rnw +++ b/vignettes/LSMM_package.Rnw @@ -29,8 +29,8 @@ Xiang Wan$~^3$, Jin Liu$~^4$, and Can Yang$~^5$\\ \\ $~^1$ Department of Mathematics, Hong Kong Baptist University, Hong Kong.\\ $~^2$ School of Mathematics and Statistics, Xi'an Jiaotong University, Xi'an, China.\\ -$~^3$ Department of Computer Science, Hong Kong Baptist University, Hong Kong.\\ -$~^4$ Centre of Quantitative Medicine, Duke-NUS Graduate Medical School, Singapore.\\ +$~^3$ Shenzhen Research Institute of Big Data, Shenzhen, China.\\ +$~^4$ Centre for Quantitative Medicine, Duke-NUS Medical School, Singapore.\\ $~^5$ Department of Mathematics, The Hong Kong University of Science and Technology,\\ Hong Kong.\\ } @@ -139,11 +139,8 @@ table(relev.Anno.LSMM) \begin{thebibliography}{99} -Jingsi Ming, Mingwei Dai, Mingxuan Cai, Xiang Wan, Jin Liu and Can Yang. LSMM: A statistical approach to integrating functional annotations with genome-wide association studies. 2017. Under review. - +Jingsi Ming, Mingwei Dai, Mingxuan Cai, Xiang Wan, Jin Liu, Can Yang; LSMM: A statistical approach to integrating functional annotations with genome-wide association studies, Bioinformatics, 2018, bty187, https://doi.org/10.1093/bioinformatics/bty187 \end{thebibliography} -\end{document} - - +\end{document} \ No newline at end of file From d6921912abf4c4c46dbfab7ecfc86fa65b0854f6 Mon Sep 17 00:00:00 2001 From: mingjingsi <30649118+mingjingsi@users.noreply.github.com> Date: Mon, 2 Apr 2018 23:01:49 +0800 Subject: [PATCH 9/9] Add files via upload --- inst/doc/LSMM_package.pdf | Bin 142065 -> 142742 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/inst/doc/LSMM_package.pdf b/inst/doc/LSMM_package.pdf index 6a03392ff23546df532e1aacf2a74d640e3c2df9..30e7d4026b65540e3468326820732e97b78d6501 100644 GIT binary patch delta 45539 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