Source code for limix.qtl._model

from __future__ import division

import sys
from limix.stats import effsizes_se, lrt_pvalues

if sys.version_info < (3, 0):
    PY2 = True
else:
    PY2 = False


[docs]class QTLModel(object): r"""Result of a QTL analysis. An instance of this class is returned by :func:`limix.qtl.scan`. """
[docs] def __init__(self, null_lml, alt_lmls, effsizes, null_covariate_effsizes): self._null_lml = null_lml self._alt_lmls = alt_lmls self._effsizes = effsizes self._null_covariate_effsizes = null_covariate_effsizes alt_lmls.name = "alt lmls" effsizes.name = "effsizes"
@property def null_lml(self): r"""Log of the marginal likelihood under the null hypothesis. Returns ------- float Log of marginal likelihood. """ return self._null_lml @property def alt_lmls(self): r"""Log of the marginal likelihoods across tested variants. Returns ------- array_like Log of marginal likelihoods. """ return self._alt_lmls @property def variant_effsizes(self): r"""Variant effect-sizes. Returns ------- array_like Estimated variant effect sizes. """ return self._effsizes @property def variant_pvalues(self): r"""Variant p-values. Returns ------- array_like Association significance between variant and phenotype. """ from xarray import zeros_like pv = zeros_like(self._alt_lmls) pv[:] = lrt_pvalues(self.null_lml, self._alt_lmls.values) pv.name = "pv" return pv @property def variant_effsizes_se(self): r"""Standard errors of the variant effect sizes. Returns ------- array_like Estimated standard errors of the variant effect sizes. """ from xarray import zeros_like ese = zeros_like(self._alt_lmls) ese[:] = effsizes_se( self.variant_effsizes.values.ravel(), self.variant_pvalues.values.ravel() ) ese.name = "effsizes std" return ese @property def null_covariate_effsizes(self): r"""Covariate effect-sizes under the null hypothesis. Returns ------- array_like Estimated covariant effect sizes under the null hypothesis. """ return self._null_covariate_effsizes def __repr__(self): from pandas import DataFrame data = dict( effsizes=self.variant_effsizes.values.ravel(), effsizes_se=self.variant_effsizes_se.values.ravel(), pvalues=self.variant_pvalues.values.ravel(), ) variant_msg = str(DataFrame(data=data).describe()) data = self.null_covariate_effsizes k = data.index.values v = [[vi] for vi in data.values] df = DataFrame(data=dict(zip(list(k), list(v)))).sort_index(axis=1) covariate_msg = str(df) covariate_msg = "\n".join([x[2:] for x in covariate_msg.split("\n")]) msg = "Variants\n--------\n" + variant_msg msg += "\n\nCovariate effect sizes for H0\n" msg += "-----------------------------\n" msg += covariate_msg return msg def __str__(self): if PY2: return self.__unicode__().encode("utf-8") return self.__repr__() def __unicode__(self): return self.__repr__()