Heritability estimationΒΆ
We provide heritability estimation for Normal, Bernoulli, Probit, Binomial, and Poisson phenotypes. A standard LMM is used for Normal traits:
where
A GLMM is used to model the other type of traits:
and π― and π are defined as before.
In both cases, the parameters are the same: π, πβ, and πβ. They are fitted via restricted maximum likelihood for LMM and via maximum likelihood for GLMM. The covariancematrix πΊ given by the user is normalised before the model is fitted as follows:
K = K / K.diagonal().mean()

limix.her.
estimate
(y, lik, K, M=None, verbose=True)[source] Estimate the socalled narrowsense heritability.
It supports Normal, Bernoulli, Probit, Binomial, and Poisson phenotypes.
 Parameters
y (array_like) β Array of trait values of n individuals.
lik (tuple, "normal", "bernoulli", "probit", "binomial", "poisson") β Sample likelihood describing the residual distribution. Either a tuple or a string specifying the likelihood is required. The Normal, Bernoulli, Probit, and Poisson likelihoods can be selected by providing a string. Binomial likelihood on the other hand requires a tuple because of the number of trials:
("binomial", array_like)
. Defaults to"normal"
.K (nΓn array_like) β Sample covariance, often the socalled kinship matrix. It might be, for example, the estimated kinship relationship between the individuals. The provided matrix will be normalised as
K = K / K.diagonal().mean()
.M (nΓc array_like, optional) β Covariates matrix. If an array is passed, it will used as is; no normalisation will be performed. If
None
is passed, an offset will be used as the only covariate. Defaults toNone
.verbose (bool, optional) β
True
to display progress and summary;False
otherwise.
 Returns
Estimated heritability.
 Return type
Examples
>>> from numpy import dot, exp, sqrt >>> from numpy.random import RandomState >>> from limix.her import estimate >>> >>> random = RandomState(0) >>> >>> G = random.randn(150, 200) / sqrt(200) >>> K = dot(G, G.T) >>> z = dot(G, random.randn(200)) + random.randn(150) >>> y = random.poisson(exp(z)) >>> >>> print(estimate(y, 'poisson', K, verbose=False)) 0.18311439918863426
Notes
It will raise a
ValueError
exception if nonfinite values are passed. Please, refer to thelimix.qc.mean_impute()
function for missing value imputation.