def compute_statistic(self, alphahat, R, RA, N, Nref, memoize=False): Rajd = Nadjust_after = None if self.params.Radjust == 'after': Nadjust_after = Nref Radj = R elif self.params.Radjust == 'before': Nadjust_after = None Radj = R.adjusted_before_inversion(Nref) else: Nadjust_after = None Radj = R if self.params.RAreg: print('regularizing RA') RA = RA.add_ridge(self.params.Lambda, renormalize=True) gs = GenomicSubset(self.params.region) A = SnpSubset(self.refpanel, bedtool=gs.bedtool) RA.zero_outside_irs(A.irs) if not memoize or not hasattr(self, 'bias'): print('adding lambda') Radjreg = Radj.add_ridge(self.params.Lambda, renormalize=True) print('computing inverse') self.Radjreginv = Radjreg.inv(Nadjust_after=Nadjust_after) print('done.computing bias...') A = SnpSubset(self.refpanel, bedtool=GenomicSubset(self.params.region).bedtool) W = self.window(A) if not self.params.avgunbiased: tr = self.Radjreginv.dot(RA).trace() self.scaling = 1 else: tr = RA.dot(self.Radjreginv).dot(R).dot( self.Radjreginv).trace() Q = R.dot(self.Radjreginv).dot(RA).dot(self.Radjreginv).dot(R) Q.zero_outside_irs(A.irs) self.scaling = A.num_snps() / Q.trace() # self.bias = tr / N + \ # float(self.refpanel.M-len(W.irs))/self.refpanel.M * \ # self.params.sigma2g * tr / self.params.pop_size self.bias = tr / N + \ self.params.sigma2g * tr / self.params.pop_size print('\nbias =', self.bias) print('scaling =', self.scaling) betahat = self.Radjreginv.dot(alphahat) return self.scaling * (betahat.dot(RA.dot(betahat)) - self.bias)
def compute_statistic(self, alphahat, R, RA, N, Nref, memoize=False): Rajd = Nadjust_after = None if self.params.Radjust == "after": Nadjust_after = Nref Radj = R elif self.params.Radjust == "before": Nadjust_after = None Radj = R.adjusted_before_inversion(Nref) else: Nadjust_after = None Radj = R if self.params.RAreg: print("regularizing RA") RA = RA.add_ridge(self.params.Lambda, renormalize=True) gs = GenomicSubset(self.params.region) A = SnpSubset(self.refpanel, bedtool=gs.bedtool) RA.zero_outside_irs(A.irs) if not memoize or not hasattr(self, "bias"): print("adding lambda") Radjreg = Radj.add_ridge(self.params.Lambda, renormalize=True) print("computing inverse") self.Radjreginv = Radjreg.inv(Nadjust_after=Nadjust_after) print("done.computing bias...") A = SnpSubset(self.refpanel, bedtool=GenomicSubset(self.params.region).bedtool) W = self.window(A) if not self.params.avgunbiased: tr = self.Radjreginv.dot(RA).trace() self.scaling = 1 else: tr = RA.dot(self.Radjreginv).dot(R).dot(self.Radjreginv).trace() Q = R.dot(self.Radjreginv).dot(RA).dot(self.Radjreginv).dot(R) Q.zero_outside_irs(A.irs) self.scaling = A.num_snps() / Q.trace() # self.bias = tr / N + \ # float(self.refpanel.M-len(W.irs))/self.refpanel.M * \ # self.params.sigma2g * tr / self.params.pop_size self.bias = tr / N + self.params.sigma2g * tr / self.params.pop_size print("\nbias =", self.bias) print("scaling =", self.scaling) betahat = self.Radjreginv.dot(alphahat) return self.scaling * (betahat.dot(RA.dot(betahat)) - self.bias)