A penetrance model models the probability that an individual has a certain disease provided that he or she has certain genetic (genotype) and environmental (information field) riske factors. A penetrance operator calculates this probability according to provided information and set his or her affection status randomly. For example, an individual will have probability 0.8 to be affected if the penetrance is 0.8. This class is the base class to all penetrance operators and defines a common interface for all penetrance operators.
A penetrance operator can be applied at any stage of an evolutionary cycle. If it is applied before or after mating, it will set affection status of all parents and offspring, respectively. If it is applied during mating, it will set the affection status of each offspring. You can also apply a penetrance operator to an individual using its applyToIndividual member function.
By default, a penetrance operator assigns affection status of individuals but does not save the actual penetrance value. However, if an information field is specified, penetrance values will be saved to this field for future analysis.
When a penetrance operator is applied to a population, it is only applied to the current generation. You can, however, use parameter ancGens to set affection status for all ancestral generations (ALL_AVAIL), or individuals in specified generations if a list of ancestral generations is specified. Note that this parameter is ignored if the operator is applied during mating.
This penetrance operator assigns individual affection status using a user-specified penetrance dictionary.
This operator is called a ‘multi-allele’ penetrance operator because it groups multiple alleles into two groups: wildtype and non-wildtype alleles. Alleles in each allele group are assumed to have the same effect on individual penetrance. If we denote all wildtype alleles as A, and all non-wildtype alleles a, this operator assign Individual penetrance according to genotype AA, Aa, aa in the diploid case, and A and a in the haploid case.
Creates a multi-allele penetrance operator that groups multiple alleles into a wildtype group (with alleles wildtype, default to ), and a non-wildtype group. A list of penetrance values is specified through parameter penetrance, for genotypes at one or more loci. Parameter loci can be a list of loci indexes, names or ALL_AVAIL. If we denote wildtype alleles using capital letters A, B ... and non-wildtype alleles using small letters a, b ..., the penetrance values should be for
This operator does not support haplodiploid populations and sex chromosomes.
This penetrance operator is created by a list of penetrance operators. When it is applied to an individual, it applies these penetrance operators to the individual, obtain a list of penetrance values, and compute a combined penetrance value from them and assign affection status accordingly. ADDITIVE, multiplicative, and a heterogeneour multi-locus model are supported. Please refer to Neil Rish (1989) “Linkage Strategies for
Genetically Complex Traits” for some analysis of these models.
Create a multiple-locus penetrance operator from a list penetrance operator ops. When this operator is applied to an individual (parents when used before mating and offspring when used during mating), it applies these operators to the individual and obtain a list of (usually single-locus) penetrance values. These penetrance values are combined to a single penetrance value using
0 or 1 will be returned if the combined penetrance value is less than zero or greater than 1.
This penetrance operator assigns penetrance values by calling a user provided function. It accepts a list of loci (parameter loci), and a Python function func which should be defined with one or more of parameters geno, gen, ind, pop, or names of information fields. When this operator is applied to a population, it passes genotypes at specified loci, generation number, a reference to an individual, a reference to the current population (usually used to retrieve population variables) and values at specified information fields to respective parameters of this function. The returned penetrance values will be used to determine the affection status of each individual.
This penetrance operator is a multi-locus Python penetrance operator that assigns penetrance values by combining locus and genotype specific penetrance values. It differs from a PyPenetrance in that the python function is responsible for penetrance values values for each gentoype type at each locus, which can potentially be random, and locus or gentoype-specific.
Create a penetrance operator that assigns individual affection status according to penetrance values combined from locus- specific penetrance values that are determined by a Python call- back function. The callback function accepts parameter loc, alleles (both optional) and returns location- or genotype- specific penetrance values that can be constant or random. The penetrance values for each genotype will be cached so the same penetrance values will be assigned to genotypes with previously assigned values. Note that a function that does not examine the genotype naturally assumes a dominant model where genotypes with one or two mutants have the same penetrance value. Because genotypes at a locus are passed separately and in no particular order, this function is also responsible for assigning consistent fitness values for genotypes at the same locus (a class is usually used). This operator currently ignores chromosome types so unused alleles will be passed for loci on sex or mitochondrial chromosomes. This operator also ignores the phase of genotype so genotypes (a,b) and (b,a) are assumed to have the same fitness effect.
Individual penetrance will be combined in ADDITIVE, MULTIPLICATIVE, or HETEROGENEITY mode from penetrance values of loci with at least one non-zero allele (See MlPenetrance for details).