Пример #1
0
    def _altModelMixedEffectNonLinear1Kernel(self, G1, approx, link, penalty):
        if self.forcefullrank:
            assert False, 'Not working, call Danilo'
            assert False, "Not implemented yet."
        else:
            glmm1 = inference.getGLMM(approx, link, self.Y, G1, None, penalty=penalty)

        glmm1.setX(self.X)

        glmm1.sety(self.Y)

        glmm1.setG(G1)
        glmm1.optimize()

        assert glmm1.sig02 >= 0.0 and glmm1.sign2 >= 0

        if glmm1.sig02 + glmm1.sign2 <= NP.sqrt(NP.finfo(NP.float).eps):
            h2 = NP.nan
        else:
            h2 = glmm1.sig02 / (glmm1.sig02 + glmm1.sign2)

        a2 = NP.nan

        lik1 = {'nLL':-glmm1.marginal_loglikelihood(),
                'h2':h2,
                'a2':a2}

        lik1['sig02'] = glmm1.sig02
        lik1['sig12'] = glmm1.sig12
        lik1['sign2'] = glmm1.sign2
        for i in range(len(glmm1.beta)):
            lik1['beta' + str(i)] = glmm1.beta[i]

        stat = 2.0*(self.model0['nLL'] - lik1['nLL'])
        return (lik1,stat)
Пример #2
0
    def _nullModelMixedEffectNonLinear2Kernel(self, G0, approx, link, penalty):
        if self.forcefullrank:
            assert False, "Not implemented yet."
        else:
            glmm0 = inference.getGLMM(approx,
                                      link,
                                      self.Y,
                                      G0,
                                      None,
                                      penalty=penalty)
        glmm0.setX(self.X)
        glmm0.setG(G0)
        glmm0.sety(self.Y)
        glmm0.optimize()
        self.model0 = {}

        if glmm0.sig02 + glmm0.sign2 <= NP.sqrt(NP.finfo(NP.float).eps):
            h2 = NP.nan
        else:
            h2 = glmm0.sig02 / (glmm0.sig02 + glmm0.sign2)

        self.model0['h2'] = h2
        self.model0['a2'] = 0.0
        self.model0['nLL'] = -glmm0.marginal_loglikelihood()
        self.model0['sig02'] = glmm0.sig02
        self.model0['sig12'] = glmm0.sig12
        self.model0['sign2'] = glmm0.sign2
        for i in range(len(glmm0.beta)):
            self.model0['beta' + str(i)] = glmm0.beta[i]
Пример #3
0
 def _nullModelMixedEffectNonLinear1Kernel(self, approx, link, penalty):
     if self.forcefullrank:
         assert False, "Not implemented yet."
     else:
         glmm0 = inference.getGLMM(approx, link, self.Y, None, None, penalty=penalty)
     glmm0.setX(self.X)
     glmm0.sety(self.Y)
     glmm0.optimize()
     self.model0 = {}        
     self.model0['h2']=0.0
     self.model0['a2']=NP.nan
     self.model0['nLL']=-glmm0.marginal_loglikelihood()
     self.model0['sig02'] = glmm0.sig02
     self.model0['sig12'] = glmm0.sig12
     self.model0['sign2'] = glmm0.sign2
     for i in range(len(glmm0.beta)):
         self.model0['beta' + str(i)] = glmm0.beta[i]
Пример #4
0
    def _altModelMixedEffectNonLinear2Kernel(self, G1, approx, link, penalty):
        if self.forcefullrank:
            assert False, "Not implemented yet."
        else:
            glmm1 = inference.getGLMM(approx,
                                      link,
                                      self.Y,
                                      self.G0,
                                      G1,
                                      penalty=penalty)

        glmm1.setX(self.X)

        glmm1.sety(self.Y)

        glmm1.setG(self.G0, G1)
        glmm1.optimize()

        assert glmm1.sig02 >= 0.0 and glmm1.sig12 >= 0.0 and glmm1.sign2 >= 0

        if glmm1.sig02 + glmm1.sig12 + glmm1.sign2 <= NP.sqrt(
                NP.finfo(NP.float).eps):
            # in this case we don't have enough precision to calculate the
            # proportion between sig02+sig12 and the total or it does not make sense
            # because the covariance of the posterior tends to zero
            h2 = NP.nan
        else:
            h2 = (glmm1.sig02 + glmm1.sig12) / (glmm1.sig02 + glmm1.sig12 +
                                                glmm1.sign2)

        if glmm1.sig02 + glmm1.sig12 <= NP.sqrt(NP.finfo(NP.float).eps):
            a2 = NP.nan
        else:
            a2 = glmm1.sig12 / (glmm1.sig02 + glmm1.sig12)

        lik1 = {'nLL': -glmm1.marginal_loglikelihood(), 'h2': h2, 'a2': a2}

        lik1['sig02'] = glmm1.sig02
        lik1['sig12'] = glmm1.sig12
        lik1['sign2'] = glmm1.sign2
        for i in range(len(glmm1.beta)):
            lik1['beta' + str(i)] = glmm1.beta[i]

        stat = 2.0 * (self.model0['nLL'] - lik1['nLL'])
        return (lik1, stat)
Пример #5
0
    def _altModelMixedEffectNonLinear2Kernel(self, G1, approx, link, penalty):
        if self.forcefullrank:
            assert False, "Not implemented yet."
        else:
            glmm1 = inference.getGLMM(approx, link, self.Y, self.G0,
                                                 G1, penalty=penalty)

        glmm1.setX(self.X)

        glmm1.sety(self.Y)

        glmm1.setG(self.G0, G1)
        glmm1.optimize()

        assert glmm1.sig02 >= 0.0 and glmm1.sig12 >= 0.0 and glmm1.sign2 >= 0


        if glmm1.sig02 + glmm1.sig12 + glmm1.sign2 <= NP.sqrt(NP.finfo(NP.float).eps):
            # in this case we don't have enough precision to calculate the
            # proportion between sig02+sig12 and the total or it does not make sense
            # because the covariance of the posterior tends to zero
            h2 = NP.nan
        else:
            h2 = (glmm1.sig02+glmm1.sig12) / (glmm1.sig02 + glmm1.sig12 + glmm1.sign2)

        if glmm1.sig02 + glmm1.sig12 <= NP.sqrt(NP.finfo(NP.float).eps):
            a2 = NP.nan
        else:
            a2 = glmm1.sig12 / (glmm1.sig02+glmm1.sig12)

        lik1 = {'nLL':-glmm1.marginal_loglikelihood(),
                'h2':h2,
                'a2':a2}

        lik1['sig02'] = glmm1.sig02
        lik1['sig12'] = glmm1.sig12
        lik1['sign2'] = glmm1.sign2
        for i in range(len(glmm1.beta)):
            lik1['beta' + str(i)] = glmm1.beta[i]

        stat = 2.0*(self.model0['nLL'] - lik1['nLL'])
        return (lik1,stat)