Skip to content

Commit ab53f9a

Browse files
author
Sheng Yang
authored
Update dbslmmfit.cpp
1 parent 684b8c9 commit ab53f9a

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

scr/dbslmmfit.cpp

+27-6
Original file line numberDiff line numberDiff line change
@@ -436,13 +436,27 @@ mat DBSLMMFIT::PCGm(mat A, mat B, size_t maxiter, const double tol){
436436
int DBSLMMFIT::estBlock(int n_ref, int n_obs, double sigma_s, mat geno_s, mat geno_l, vec z_s, vec z_l, vec &beta_s, vec &beta_l) {
437437

438438
// LD matrix
439-
mat SIGMA_ls = geno_l.t() * geno_s;
440-
SIGMA_ls /= (double)n_ref;
439+
// mat SIGMA_ls = geno_l.t() * geno_s;
440+
// SIGMA_ls /= (double)n_ref;
441+
// mat SIGMA_ll = geno_l.t() * geno_l;
442+
// SIGMA_ll /= (double)n_ref;
443+
// mat SIGMA_ss = geno_s.t() * geno_s;
444+
// SIGMA_ss /= (double)n_ref;
445+
446+
double tau = 0.8;
447+
mat SIGMA_ls = geno_l.t() * geno_s;
448+
SIGMA_ls *= tau/(double)n_ref;
441449
mat SIGMA_ll = geno_l.t() * geno_l;
442-
SIGMA_ll /= (double)n_ref;
450+
SIGMA_ll *= tau/(double)n_ref;
451+
vec DIAG_l(geno_l.n_cols, fill::ones);
452+
DIAG_l *= (1.0-tau);
453+
SIGMA_ll += diagmat(DIAG_l);
443454
mat SIGMA_ss = geno_s.t() * geno_s;
444-
SIGMA_ss /= (double)n_ref;
445-
455+
SIGMA_ss *= tau/(double)n_ref;
456+
vec DIAG_s(geno_s.n_cols, fill::ones);
457+
DIAG_s *= (1.0-tau);
458+
SIGMA_ss += diagmat(DIAG_s);
459+
446460
// beta_l
447461
SIGMA_ss.diag() += 1.0 / (sigma_s * (double)n_obs);
448462
mat SIGMA_ss_inv_SIGMA_sl = PCGm(SIGMA_ss, SIGMA_ls.t(), 1000, 1e-7);
@@ -469,8 +483,15 @@ int DBSLMMFIT::estBlock(int n_ref, int n_obs, double sigma_s, mat geno_s, mat ge
469483
int DBSLMMFIT::estBlock(int n_ref, int n_obs, double sigma_s, mat geno_s, vec z_s, vec &beta_s) {
470484

471485
// LD matrix
486+
// mat SIGMA_ss = geno_s.t() * geno_s;
487+
// SIGMA_ss /= (double)n_ref;
488+
489+
double tau = 0.8;
472490
mat SIGMA_ss = geno_s.t() * geno_s;
473-
SIGMA_ss /= (double)n_ref;
491+
SIGMA_ss *= tau/(double)n_ref;
492+
vec DIAG_s(geno_s.n_cols, fill::ones);
493+
DIAG_s *= (1.0-tau);
494+
SIGMA_ss += diagmat(DIAG_s);
474495

475496
// beta_s
476497
SIGMA_ss.diag() += 1.0 / (sigma_s * (double)n_obs);

0 commit comments

Comments
 (0)