about summary refs log tree commit diff
path: root/src/lmm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lmm.h')
-rw-r--r--src/lmm.h49
1 files changed, 46 insertions, 3 deletions
diff --git a/src/lmm.h b/src/lmm.h
index 736c679..295602a 100644
--- a/src/lmm.h
+++ b/src/lmm.h
@@ -2,7 +2,7 @@
     Genome-wide Efficient Mixed Model Association (GEMMA)
     Copyright © 2011-2017, Xiang Zhou
     Copyright © 2017, Peter Carbonetto
-    Copyright © 2017, Pjotr Prins
+    Copyright © 2017-2025, Pjotr Prins
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@
 
 using namespace std;
 
-#define LMM_BATCH_SIZE 20000 // used for batch processing
+#define LMM_BATCH_SIZE 5000 // used for batch processing
 
 class FUNC_PARAM {
 
@@ -44,7 +44,42 @@ public:
   size_t e_mode;
 };
 
-typedef std::tuple<string,std::vector<double> > SnpNameValues;
+
+// typedef tuple< string, uint16_t, uint32_t, uint32_t > MarkerInfo; // name, chr, pos, line
+struct MarkerInfo {
+  string name;
+  uint8_t chr;
+  size_t pos, line_no, n_miss;
+  double maf;
+} ;
+
+typedef vector<MarkerInfo> Markers;
+typedef tuple< string,vector<double> > SnpNameValues;
+
+enum MarkerState {
+  FAIL,
+  COMPUTE,
+  SKIP,
+  LAST
+};
+
+typedef tuple< MarkerState,MarkerInfo,vector<double> > SnpNameValues2; // success, markerinfo (maf and n_miss are computed)
+// Results for LMM.
+class SUMSTAT2 {
+public:
+  MarkerInfo markerinfo;
+  double beta;         // REML estimator for beta.
+  double se;           // SE for beta.
+  double lambda_remle; // REML estimator for lambda.
+  double lambda_mle;   // MLE estimator for lambda.
+  double p_wald;       // p value from a Wald test.
+  double p_lrt;        // p value from a likelihood ratio test.
+  double p_score;      // p value from a score test.
+  double logl_H1;      // log likelihood under the alternative
+                       // hypothesis as a measure of goodness of fit,
+                       // see https://github.com/genetics-statistics/GEMMA/issues/81
+};
+
 
 class LMM {
 
@@ -100,6 +135,14 @@ public:
                const gsl_matrix *UtW, const gsl_vector *Uty,
                const gsl_matrix *W, const gsl_vector *y,
                const set<string> gwasnps);
+  void mdb_analyze(std::function< SnpNameValues2(size_t) >& fetch_snp,
+                   const gsl_matrix *U, const gsl_vector *eval,
+                   const gsl_matrix *UtW, const gsl_vector *Uty,
+                   const gsl_matrix *W, const gsl_vector *y, size_t num_markers);
+  void mdb_calc_gwa(const gsl_matrix *U, const gsl_vector *eval,
+                    const gsl_matrix *UtW, const gsl_vector *Uty,
+                    const gsl_matrix *W, const gsl_vector *y,
+                    const string loco);
   void AnalyzeBimbam(const gsl_matrix *U, const gsl_vector *eval,
                      const gsl_matrix *UtW, const gsl_vector *Uty,
                      const gsl_matrix *W, const gsl_vector *y,