Exemple #1
0
    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)
Exemple #2
0
    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)