about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorxiangzhou2016-07-24 15:58:31 -0400
committerxiangzhou2016-07-24 15:58:31 -0400
commit60f86db94ee2b4f826300cb0e73cb658ac7bdfd8 (patch)
tree4f3eeb1b0575493b8f29262a2acdc8f6a432633c /src
parentd222159e9629f50aed78b8ecc42faef33ee96e1a (diff)
downloadpangemma-60f86db94ee2b4f826300cb0e73cb658ac7bdfd8.tar.gz
version 0.95alpha
Diffstat (limited to 'src')
-rw-r--r--src/gemma.cpp19
-rw-r--r--src/lmm.cpp29
-rw-r--r--src/mvlmm.cpp27
3 files changed, 51 insertions, 24 deletions
diff --git a/src/gemma.cpp b/src/gemma.cpp
index 55eb1ee..c85670d 100644
--- a/src/gemma.cpp
+++ b/src/gemma.cpp
@@ -43,7 +43,7 @@
 #include "lmm_float.h"  //for LMM class, and functions CalcLambda, CalcPve, CalcVgVe
 #include "mvlmm_float.h"  //for MVLMM class
 #include "prdt_float.h"	//for PRDT class
-
+#include "varcov_float.h"  //for MVLMM class
 #include "mathfunc_float.h"	//for a few functions
 #else
 #include "io.h"
@@ -51,11 +51,11 @@
 #include "vc.h"
 #include "lm.h"
 #include "bslmm.h"
-
+#include "ldr.h"
 #include "lmm.h"
 #include "mvlmm.h"
 #include "prdt.h"
-
+#include "varcov.h"
 #include "mathfunc.h"
 #endif
 
@@ -65,7 +65,7 @@ using namespace std;
 
 
 GEMMA::GEMMA(void):
-version("0.95alpha"), date("07/11/2015"), year("2011")
+version("0.95alpha"), date("07/24/2016"), year("2011")
 {}
 
 void GEMMA::PrintHeader (void)
@@ -1351,7 +1351,6 @@ void GEMMA::BatchRun (PARAM &cPar)
 		gsl_matrix_free (G);
 	}
 
-	/*
 	//Compute the LDSC weights (not implemented yet)
 	if (cPar.a_mode==72) {
 		cout<<"Calculating Weights ... "<<endl;
@@ -1367,7 +1366,7 @@ void GEMMA::BatchRun (PARAM &cPar)
 
 		cVarcov.CopyToParam(cPar);
 	}
-	*/
+
 
 	//Compute the S matrix (and its variance), that is used for variance component estimation using summary statistics
 	if (cPar.a_mode==25 || cPar.a_mode==26) {
@@ -1475,7 +1474,7 @@ void GEMMA::BatchRun (PARAM &cPar)
 	  gsl_vector_free (s);
 	}
 
-	/*
+
     //Calculate SNP covariance
 	if (cPar.a_mode==71) {
 	  VARCOV cVarcov;
@@ -1489,7 +1488,7 @@ void GEMMA::BatchRun (PARAM &cPar)
 
 	  cVarcov.CopyToParam(cPar);
 	}
-	*/
+
 
 	//LM
 	if (cPar.a_mode==51 || cPar.a_mode==52 || cPar.a_mode==53 || cPar.a_mode==54) {  //Fit LM
@@ -2403,7 +2402,7 @@ void GEMMA::BatchRun (PARAM &cPar)
 	}
 
 
-	/*
+
 	//LDR
 	if (cPar.a_mode==14) {
 		gsl_vector *y=gsl_vector_alloc (cPar.ni_test);
@@ -2431,7 +2430,7 @@ void GEMMA::BatchRun (PARAM &cPar)
 		gsl_matrix_free (W);
 		gsl_matrix_free (G);
 	}
-	*/
+
 	cPar.time_total=(clock()-time_begin)/(double(CLOCKS_PER_SEC)*60.0);
 
 	return;
diff --git a/src/lmm.cpp b/src/lmm.cpp
index af6ff8a..044f33c 100644
--- a/src/lmm.cpp
+++ b/src/lmm.cpp
@@ -1243,7 +1243,11 @@ void LMM::AnalyzeBimbam (const gsl_matrix *U, const gsl_vector *eval, const gsl_
 //	}
 
 	//start reading genotypes and analyze
-	size_t c=0;
+	size_t c=0, t_last=0;
+	for (size_t t=0; t<indicator_snp.size(); ++t) {
+	  if (indicator_snp[t]==0) {continue;}
+	  t_last++;
+	}
 	for (size_t t=0; t<indicator_snp.size(); ++t) {
 //		if (t>1) {break;}
 		!safeGetline(infile, line).eof();
@@ -1275,7 +1279,7 @@ void LMM::AnalyzeBimbam (const gsl_matrix *U, const gsl_vector *eval, const gsl_
 
 		for (size_t i=0; i<ni_test; ++i) {
 			if (gsl_vector_get (x_miss, i)==0) {gsl_vector_set(x, i, x_mean);}
-			geno=gsl_vector_get(x, i);
+			//geno=gsl_vector_get(x, i);
 			//if (x_mean>1) {
 			//	gsl_vector_set(x, i, 2-geno);
 			//}
@@ -1292,7 +1296,7 @@ void LMM::AnalyzeBimbam (const gsl_matrix *U, const gsl_vector *eval, const gsl_
 		gsl_vector_memcpy (&Xlarge_col.vector, x);
 		c++;
 
-		if (c%msize==0 || t==indicator_snp.size()-1 ) {
+		if (c%msize==0 || c==t_last) {
 		  size_t l=0;
 		  if (c%msize==0) {l=msize;} else {l=c%msize;}
 
@@ -1332,12 +1336,14 @@ void LMM::AnalyzeBimbam (const gsl_matrix *U, const gsl_vector *eval, const gsl_
 		      p_lrt=gsl_cdf_chisq_Q (2.0*(logl_H1-logl_mle_H0), 1);
 		    }
 
+		    //if (p_wald<0) {cout<<t<<"\t"<<i<<"\t"<<l<<endl;}
 		    //if (x_mean>1) {beta*=-1;}
 
 		    time_opt+=(clock()-time_start)/(double(CLOCKS_PER_SEC)*60.0);
 
 		    //store summary data
 		    SUMSTAT SNPs={beta, se, lambda_remle, lambda_mle, p_wald, p_lrt, p_score};
+
 		    sumStat.push_back(SNPs);
 		  }
 		}
@@ -1412,7 +1418,11 @@ void LMM::AnalyzePlink (const gsl_matrix *U, const gsl_vector *eval, const gsl_m
 		b=ch[0];
 	}
 
-	size_t c=0;
+	size_t c=0, t_last=0;
+	for (size_t t=0; t<snpInfo.size(); ++t) {
+	  if (indicator_snp[t]==0) {continue;}
+	  t_last++;
+	}
 	for (vector<SNPINFO>::size_type t=0; t<snpInfo.size(); ++t) {
 		if (t%d_pace==0 || t==snpInfo.size()-1) {ProgressBar ("Reading SNPs  ", t, snpInfo.size()-1);}
 		if (indicator_snp[t]==0) {continue;}
@@ -1463,7 +1473,7 @@ void LMM::AnalyzePlink (const gsl_matrix *U, const gsl_vector *eval, const gsl_m
 		gsl_vector_memcpy (&Xlarge_col.vector, x);
 		c++;
 
-		if (c%msize==0 || t==indicator_snp.size()-1 ) {
+		if (c%msize==0 || c==t_last) {
 		  size_t l=0;
 		  if (c%msize==0) {l=msize;} else {l=c%msize;}
 
@@ -1612,12 +1622,17 @@ void LMM::Analyzebgen (const gsl_matrix *U, const gsl_vector *eval, const gsl_ma
 
 
 	//start reading genotypes and analyze
-	size_t c=0;
+	size_t c=0, t_last=0;
+	for (size_t t=0; t<indicator_snp.size(); ++t) {
+	  if (indicator_snp[t]==0) {continue;}
+	  t_last++;
+	}
 	for (size_t t=0; t<indicator_snp.size(); ++t)
 	{
 
 //		if (t>1) {break;}
 		if (t%d_pace==0 || t==(ns_total-1)) {ProgressBar ("Reading SNPs  ", t, ns_total-1);}
+		if (indicator_snp[t]==0) {continue;}
 		// read SNP header
 		id.clear();
 		rs.clear();
@@ -1737,7 +1752,7 @@ void LMM::Analyzebgen (const gsl_matrix *U, const gsl_vector *eval, const gsl_ma
 		gsl_vector_memcpy (&Xlarge_col.vector, x);
 		c++;
 
-		if (c%msize==0 || t==indicator_snp.size()-1 ) {
+		if (c%msize==0 || c==t_last ) {
 		  size_t l=0;
 		  if (c%msize==0) {l=msize;} else {l=c%msize;}
 
diff --git a/src/mvlmm.cpp b/src/mvlmm.cpp
index 7655b50..5deda06 100644
--- a/src/mvlmm.cpp
+++ b/src/mvlmm.cpp
@@ -3185,12 +3185,17 @@ void MVLMM::Analyzebgen (const gsl_matrix *U, const gsl_vector *eval, const gsl_
 
 
 	//start reading genotypes and analyze
-	size_t csnp=0;
+	size_t csnp=0, t_last=0;
+	for (size_t t=0; t<indicator_snp.size(); ++t) {
+	  if (indicator_snp[t]==0) {continue;}
+	  t_last++;
+	}
 	for (size_t t=0; t<indicator_snp.size(); ++t) {
 
 
 //		if (t>1) {break;}
 		if (t%d_pace==0 || t==(ns_total-1)) {ProgressBar ("Reading SNPs  ", t, ns_total-1);}
+		if (indicator_snp[t]==0) {continue;}
 		// read SNP header
 		id.clear();
 		rs.clear();
@@ -3293,7 +3298,7 @@ void MVLMM::Analyzebgen (const gsl_matrix *U, const gsl_vector *eval, const gsl_
 
 		for (size_t i=0; i<ni_test; ++i) {
 			if (gsl_vector_get (x_miss, i)==0) {gsl_vector_set(x, i, x_mean);}
-			geno=gsl_vector_get(x, i);
+			//geno=gsl_vector_get(x, i);
 			//if (x_mean>1) {
 			//gsl_vector_set(x, i, 2-geno);
 			//}
@@ -3310,7 +3315,7 @@ void MVLMM::Analyzebgen (const gsl_matrix *U, const gsl_vector *eval, const gsl_
 		gsl_vector_memcpy (&Xlarge_col.vector, x);
 		csnp++;
 
-		if (csnp%msize==0 || t==indicator_snp.size()-1 ) {
+		if (csnp%msize==0 || c==t_last ) {
 		  size_t l=0;
 		  if (csnp%msize==0) {l=msize;} else {l=csnp%msize;}
 
@@ -3656,7 +3661,11 @@ void MVLMM::AnalyzeBimbam (const gsl_matrix *U, const gsl_vector *eval, const gs
 	gsl_matrix_memcpy (B_null, B);
 
 	//start reading genotypes and analyze
-	size_t csnp=0;
+	size_t csnp=0, t_last=0;
+	for (size_t t=0; t<indicator_snp.size(); ++t) {
+	  if (indicator_snp[t]==0) {continue;}
+	  t_last++;
+	}
 	for (size_t t=0; t<indicator_snp.size(); ++t) {
 		//if (t>=1) {break;}
 		!safeGetline(infile, line).eof();
@@ -3705,7 +3714,7 @@ void MVLMM::AnalyzeBimbam (const gsl_matrix *U, const gsl_vector *eval, const gs
 		gsl_vector_memcpy (&Xlarge_col.vector, x);
 		csnp++;
 
-		if (csnp%msize==0 || t==indicator_snp.size()-1 ) {
+		if (csnp%msize==0 || c==t_last ) {
 		  size_t l=0;
 		  if (csnp%msize==0) {l=msize;} else {l=csnp%msize;}
 
@@ -4068,7 +4077,11 @@ void MVLMM::AnalyzePlink (const gsl_matrix *U, const gsl_vector *eval, const gsl
 		b=ch[0];
 	}
 
-	size_t csnp=0;
+	size_t csnp=0, t_last=0;
+	for (size_t t=0; t<indicator_snp.size(); ++t) {
+	  if (indicator_snp[t]==0) {continue;}
+	  t_last++;
+	}
 	for (vector<SNPINFO>::size_type t=0; t<snpInfo.size(); ++t) {
 		if (t%d_pace==0 || t==snpInfo.size()-1) {ProgressBar ("Reading SNPs  ", t, snpInfo.size()-1);}
 		if (indicator_snp[t]==0) {continue;}
@@ -4135,7 +4148,7 @@ void MVLMM::AnalyzePlink (const gsl_matrix *U, const gsl_vector *eval, const gsl
 		gsl_vector_memcpy (&Xlarge_col.vector, x);
 		csnp++;
 
-		if (csnp%msize==0 || t==indicator_snp.size()-1 ) {
+		if (csnp%msize==0 || c==t_last ) {
 		  size_t l=0;
 		  if (csnp%msize==0) {l=msize;} else {l=csnp%msize;}