Mathematica Genetics Packages

Kenneth F. Manly, PhD
Molecular & Cellular Biology
Roswell Park Cancer Institute
Buffalo, NY 14263

Certain types of genetic crosses are commonly used with experimental plants and animals to identify and characterize genes which are important to human health and agriculture.  The Genetics packages simulate the results of genetic crosses in experimental plants or animals and to analyze the results of such crosses.  Although these packages were written to provide test data for development of genetic analysis software, they may also be useful for teaching genetics and for exploring the power or precision of proposed genetic experiments.

This tutorial assumes familiarity with Mathematica.  The Background section below provides a necessarily brief review of some terms and concepts in experimental genetics.

Background

Genetic traits

Mendelian and quantitative traits

There are two kinds of genetic traits, Mendelian and quantitative.  Mendelian traits are those in which individuals can be classified into a number (usually small number) of distinct classes.  For these traits, environmental effects are small enough to be ignored.  Quantitative traits are typically characterized by a numerical measurement; for these traits, individuals cannot be divided into distinct classes and environmental effects are significant.  Quantitative traits are often affected by several or many genes called quantitative trait loci.  The location of a quantitative trait locus (QTL) must be established by statistical methods and is therefore usually poorly defined.

Phenotype and genotype

For either kind of trait, individuals can be characterized either by their phenotype or by their genotype.  The phenotype refers to the observable trait; the genotype refers to the genes (one from each parent) which the individual carries.  In some cases, the genotype for one gene determines a phenotype unequivocally; in others, the genotypes of several genes interact with environmental factors to determine a phenotype.

Genes, loci and alleles

Genes have some function in the life of the organism; variation in the gene causes variation in the function.  Specific variants of a gene can be mapped to a specific location on a chromosome and are called loci to indicate the fact that they define a location.  Loci can also be defined by variation in DNA sequence which can be detected by molecular methods and which need not be part of a gene.  In fact, most loci used in current experiments are defined by DNA sequence.  Such loci may be called markers to emphasize the fact that they mark a location and to distinguish them from QTLs.  Variants at a locus are called alleles.  Parents of a genetic cross must carry different alleles at a locus if that locus is to be mapped.

Symbols

For Mendelian traits, individuals can be characterized by a single-letter symbols.  An individual who resembles a maternal grandparent is said to be an A type; one which resembles a paternal grandparent, a B type.  Progeny of an A x B mating are heterozygous, with one copy of a gene from each parent.  These individuals have an H genotype.  In many cases they also have a phenotype which is intermediate between the A and B phenotypes; this is called an H phenotype.  In some cases, however, heterozygous individuals resemble one of the parents.  In this case, one form of the gene is said to be dominant, heterozygotes cannot be distinguished from one of the parents, and the ambigous phenotype is given another code.  The C phenotype describes an individual which may be either B or H in genotype; the D phenotype, an individual which may be either A or H.

Genetic crosses

Two simple types of crosses are widely used.  Both start with the mating of two parents which are inbred or nearly inbred.  These parents typically differ in many genetic characteristics; and, for each characteristic, the maternal form is called A and the paternal form, B.  The mating of these parents produces a generation of offspring which are H genotype for all characteristics.  These heterozygous individuals are then mated in one of two ways.

Backcross

For a backcross, they are mated to one of the parents (or to individuals which are genetically identical with one of the parents).  Since there are two parents, there are two forms of backcross, A x H and B x H.  The parent chosen for this mating is known as the recurrent parent because it is contributing to the progeny for the second time. For any particular genetic characteristic, the offspring of this cross will either resemble the heterozygote or the recurrent parent.  That is, an A x H cross will yield progeny which are either A or H for any characteristic; a B x H cross will yield progeny which are B or H.  Moreover, the two types (either A and H or B and H) will normally appear in roughly equal numbers.  If one form of a gene is dominant, the result is the same, but the types are more properly symbolized as either A and C or B and D.

Advanced backcross

If backcross progeny are again mated with the recurrent parent, and progeny of this and each successive generation mated again with the recurrent parent, the resulting populations are known as advanced backcross populations. The construction of advanced backcross populations is useful for introducing a useful trait into a new genetic background and simultaneously mapping the gene or genes responsible for that trait.

Intercross

For an intercross heterozygous individuals are mated with each other.  For any particular genetic characteristic, the progeny of an intercross may resemble either grandparent or the heterozygous parents.  In the absence of dominance, the progeny population will contain A, H and B individuals roughly in a 1:2:1 ratio.  If one form of a gene is dominant, the progeny will contain either A and C types or B and D types for that gene; in either case, those types will be in a 1:3 ratio.

Advanced intercross

If intercross progeny are mated randomly with each other, the progeny of this and each successive generation are again mated randomly with each other, the resulting populations are known as advanced intercross populations. These populations are especially useful for mapping quantitative trait loci more precisely than is possible with backcross or intercross populations.

Linkage

If a pair of genetic characteristics is examined in either a backcross or intercross population, in most cases the types (A, H or B) for each characteristic will be independent of each other.  Such characteristics are said to be unlinked; the genes controlling the characteristics are probably located on different chromosomes.  In some cases, the types for two characteristics are correlated; that is, there is a preponderance of progeny in which both characteristics are A, both are H, or both are B.  Such characteristics are said to be linked; the genes which control these characteristics are inferred to be near each other on one chromosome.

Simulation

Mendelian traits

The Genetics`Simulation` package described here will generate data for simulated backcrosses and intercrosses.  The generated datasets will have a genetic characteristic (either A, H, B, C or D) for each of a number of simulated genetic traits in each of a number of simulated progeny individuals.  A typical simulation might include 5 to 50 genetic traits and 50 to 500 progeny individuals.

Needs["Genetics`Simulation`"]

Describing a set of genes or loci

The MakeDataset function, which is the heart of the simulation package, requires two arguments; the first is simply the number of progeny individuals to be created for the simulated dataset, the second is a list which defines the number of traits, the distances between the loci defining those traits, and the type of cross which the simulated progeny represent.  The type of cross is represented by codes: BC0 or BC1 for backcrosses (to the maternal or paternal parent, respectively)  and IC for intercrosses. The distance between loci is defined by numbers between 0 and 50 which represent the percent recombination between one locus and the next adjacent locus.  A descriptor is then a list of the form:
{{code, distance},{code, distance},{code, distance},...{code,0}}
Each {code, distance} pair represents a locus, and the distance defines the percent recombination between that locus and the next.  The last distance in the list is 0 because no locus follows (it is ignored even if it is not 0).

For example, the following descriptor describes a backcross which involves four loci at distances of 10, 15, and 20 centiMorgans (cM).

descriptor  =  {{BC0, 10}, {BC0, 15}, {BC0, 20}, {BC0, 0}}

The MakeDataset function

When you use the above descriptor in Makedataset, you obtain the following result:

data  =  MakeDataset[50,  descriptor]

The data returned by MakeDataset displays in the form shown above because it is a special Dataset data type, for which a special output format is defined.  Each genetic characteristic or locus is represented by a line of letters which represent each of the progeny individuals and tell which parent each progeny resembles for the genetic characteristic controlled by that locus.  Each set of four vertically aligned letters represents the four genetic characteristics for one individual.  In most cases all four letters are either A or H.  These individuals resemble either the A parent or the H parent in all characteristics.  They are said to be nonrecombinant.  Some individuals resemble the A parent in some characteristics and the H parent in others.  These individuals are said to be recombinant.  The display of the data uses x characters to mark recombinant individuals and to mark the location of the recombination events which gave rise to them.  Notice that there are more recombination events between the third and fourth loci, where the interval was defined to be larger.

MakeDataset works similarly for a backcross to the paternal parent

MakeDataset[50,  {{BC1, 20}, {BC1, 15}, {BC1, 10}, {BC1, 0}}]

and for an intercross

MakeDataset[50,  {{IC, 20}, {IC, 15}, {IC, 10}, {IC, 0}}]

In the case of an intercross, a few individuals may have two recombination events between a pair of adjacent loci.  The Dataset output format marks these double recombination events with a capital X character.

You can extract from a Dataset the data for each locus separately by using the Mathematica Part function or the equivalent [[]] notation.  The data for each locus is an ordinary list of phenotypes.

data[[2]]

Advanced crosses

Describing genes or loci in advanced crosses

Like simple crosses, advanced crosses are described with a list in which the type of cross is represented by codes. Advanced backcrosses are represented by the codes ABC0 and ABC1, for crosses to the maternal and paternal parent, and advanced intercrosses are represented by the code AIC. In addition, since advanced crosses involve additional generations of breeding, the number of generations is specified by a number greater than 2, the number which characterizes simple backcrosses and intercrosses. Thus, advanced crosses are fully described by a list of the form:
{{code, distance,generation},{code, distance,generation},{code, distance,generation},...{code,0,generation}}
As above, each {code, distance, generations} list represents a locus, and the distance defines the percent recombination between that locus and the next.  The generation number must be greater than 2 and it must be the same for each locus.

The following descriptor describes four loci in a fifth-generation advanced intercross, with distances of 10, 15, and 20 between adjacent loci.

descriptor  = 
       {{AIC, 10, 5}, {AIC, 15, 5}, {AIC, 20, 5}, {AIC, 0, 5}}

Makedataset can use such a descriptor to create a simulated advanced intercross population. Notice the higher amount of recombination compared with the simple intercross population shown above.

MakeDataset[50, 
       {{AIC, 10, 5}, {AIC, 15, 5}, {AIC, 20, 5}, {AIC, 0, 5}}]

Errors and missing data

The Simulation package includes the Ambiguate and MakeErrors functions to allow you to introduce missing data or typing errors into a dataset.  These functions are both useful for generating realistic test data.  The Simulation package also includes a Scramble function to allow you to generate a random permutation of the phenotypes for a locus or a random permutation of the loci in a dataset.  The Scramble function is useful for generating test data and it is useful for assessing the statistical significance of associations between traits.

Missing data

Ambiguate[dataset, fraction] or Ambiguate[dataset, percent] change a random fraction of the phenotypes to unknown, where fraction is a real number less than one or percent is an integer from 0 to 100.  Ambiguate returns the altered dataset.

Ambiguate[data,  5]

Phenotyping errors

Similarly, MakeErrors[model, dataset, percent] introduces random phenotyping errors into a dataset and returns the altered dataset.  Model is the segregation model code used to create the dataset and percent is an integer from 0 to 100.

MakeErrors[BC0,  data,  5]

Finally, the Scramble function takes either a dataset or a list as a parameter and returns a random permutation of the dataset or list.  The following expression creates a small dataset which compares the phenotypes for one locus with a scrambled version of the same data.

Dataset @@
       {data[[2]],  
        Scramble[data[[2]]]}

Quantitative traits

A quantitative trait is one which is represented by a numerical measurement, such as weight or blood pressure.  The Genetics`Simulation` package can generate simulated quantitative trait data according to a simple model.  In this package, the effect of each QTL is calculated with the following simple equation,

y  =  a  +  (Subscript[b, a]) (Subscript[x, a])  +  (Subscript[b, d]) (Subscript[x, d])  +  N (e)

where a is the average trait value of the A parent, (Subscript[b, a]) is half the difference between average trait values of the A and B parents and (Subscript[b, d]) is the difference between the average H trait value and (Subscript[b, a]).  The indicator variable (Subscript[x, a]) is 0, 1, and 2 for A, H, and B individuals, respectively; the variable (Subscript[x, d]) is 0, 1, and 0 for the same types.  N(e) is a random number representing environmental effects, from a normal distribution with a mean of 0 and a standard deviation of e.  A complex quantitative trait is simulated by adding or otherwise combining the values for two or more QTLs.

Describing a quantitative trait locus

The MakeDataset function can simulate QTLs mixed with Mendelian traits.  To specify a QTL, we use a variation of the descriptor list described above, a list consisting of a code followed by five numbers.  The code is either QTB or QTI, for a backcross or intercross, respectively.  The first number following the code is the distance to the next locus, as it is for Mendelian loci.  The next four numbers specify the desired a, (Subscript[b, a]), (Subscript[b, d]), and e, from equation (1).  For example, the descriptor

descriptor  =  {{BC0,  10}, {QTB, 10, 2, 2, 0, 1}, {BC0,  0}}

would describe a backcross in which a QTL lies midway between two Mendelian loci.  Since this is a BC0 cross, the progeny would include A and H types; the average trait value of the A type would be 2, the average trait value of the H type would be 4, and within each type, the standard deviation of the trait value would be 1.  Using this descriptor in MakeDataset yields

data  =  MakeDataset[50,  descriptor]

The output format of a Dataset does not include display of the QTLs.  However, you can see that the data for the QTL is there by extracting it with the [[]] notation.  The extracted data is an ordinary list of real numbers, shown here in an abbreviated form.

data[[2]]  //  Short

In addition, the trait values can be extracted from the Dataset with the GetQTLs function.  Notice that GetQTLs returns a list of lists, not a Dataset; if the Dataset has more than one QTL, this list will contain a sublist for each QTL.  The list of lists is shown here in an abbreviated form.

GetQTLs[data]  //  Short

Similarly, GetMarkers extracts only the Mendelian loci from a Dataset.

GetMarkers[data]

As mentioned above, to create a realistic quantitative trait, you may want to simulate the effect of several QTLs and add them together.  The following adds the effect of two linked QTLs and one unlinked QTL and displays the result in an abbreviated form.

\(data1\  = \ 
      MakeDataset[50, 
        \ {{IC, 10}, {QTI, 10, 0, 2, 0, 1}, {IC, 10}, {QTI, 10, 0, 3, 0, 1}, {
            IC, 0}}]; 

    data2\  = \ MakeDataset[50, {{IC, 20}, {QTI, 20, 0, 2, 2, 1}, {IC, 0}}]; 
    
trait\  = \ Plus\ @@\ Join[GetQTLs[data1], GetQTLs[data2]]; 

    trait\  // \ Short\)

Analysis of quantitative traits is a complex subject, depending on showing a statistical relationship between trait values and the genotypes of markers near hypothetical QTLS.  The following shows a graphical example of that process.  It plots separately the trait values for individuals who are A, H, or B at one of the markers near one of the QTLs.  The trait value is obviously correlated with the marker phenotype.  Analysis of this type of correlation is provided by the QTLRegression package.

t  =  
      data1[[1]]  /. 
         {A -> -1, H -> 0, B -> 1}; 
    ListPlot[Transpose[{t, trait}],  Axes -> {True, False}, 
      ImageSize -> 144]

Analysis

Analysis can be thought of as the reverse of the simulation process described above.

Segregation Analysis

Segregation analysis applies to Mendelian traits.  One of its goals is to estimate the probability of recombination between loci from the phenotype data of a cross.

Needs["Genetics`SegregationAnalysis`"];

Recombination Fraction

The package Genetics`SegregationAnalysis` provides the RecombinationFraction function which will estimate the probability of recombination between two genetic loci using data from a backcross or intercross.  This estimate is called the recombination fraction.  The following examples generate data for a pair of loci in different types of crosses and then apply RecombinationFraction to estimate the probability which was used in the simulation.  If you evaluate the following examples several times, you will see that the stochastic nature of the generated data cause the recombination fraction to be slightly different each time.

\(data\  = \ MakeDataset[100, \ {{BC0, 20}, {BC0, 0}}]; 

    RecombinationFraction[data, \ BC0]\)

\(data\  = \ MakeDataset[100, \ {{IC, 20}, {IC, 0}}]; 

    RecombinationFraction[data, \ IC]\)

RecombinationFraction can also be applied to any two loci from a dataset.  This example creates a four-locus Dataset and then estimates the recombination fraction between the first and third loci.

\(descriptor\  = \ {{BC0, 10}, {BC0, 15}, {BC0, 20}, {BC0, 0}}; 

    data\  = \ MakeDataset[100, \ descriptor]; 

    RecombinationFraction[data[[1]], \ 
      data[[3]], \ BC0]\)

The RecombinationFraction function requires that you specify the segregation code.  In case the segregation is unknown, the SegregationAnalysis package also includes a SegregationCode function, which will attempt to guess the segregation code for a list of phenotype codes, using the phenotype symbols which appear in the list and their ratios.  This works well for simulated datasets with large numbers of progeny, but real data from small sets of progeny may have abnormal ratios of phenotypes which will cause SegregationCode to fail.

SegregationCode[data[[2]]]

Mapping Functions

Recombination fractions are not additive.  That is, for three loci in the order A-B-C, the A-C recombination fraction will be less than the sum of the A-B and B-C recombination fractions.  The reason is that a second recombination event between two loci reverses the effect of the first and causes the loci to appear nonrecombinant in that individual.  Loci which are farther apart have a greater chance for a second recombination event.  Therefore, the observed recombination fraction is a nonlinear function of the true probability of recombination.  The situation is further complicated by interference, a term that refers to the fact that recombination events within one interval are not independent.  The first event reduces the probability of the second to a degree which is only partly understood and which may vary between species.

Needs["Genetics`MapFunctions`"];

Mapping functions provide an approximate correction for the missing recombination events.  They convert recombination fractions into map distances which are approximately additive.  Different mapping functions make different assumptions about the degree of interference.  The Haldane function assumes the recombination events are independent (no interference); the Morgan function assumes no muliple recombination (complete interference); and the Kosambi function assumes partial interference.  GeneticMap takes two parameters, a recombination fraction less than 0.5 and a function name, either Haldane, Kosambi, or Morgan.

{GeneticMap[0.11, Haldane], GeneticMap[0.11, Kosambi], 
      GeneticMap[0.11, Morgan]}

If GeneticMap is given numbers greater than 1, these are interpreted as percentages.

{GeneticMap[11, Haldane], GeneticMap[11, Kosambi], 
      GeneticMap[11, Morgan]}

The inverse function, called InverseMap, converts map distances back into recombination fractions.

{InverseMap[0.11, Haldane], InverseMap[0.11, Kosambi], 
      InverseMap[0.11, Morgan]}

GeneticMap[recfrac, function, False] is equivalent to GeneticMap[recfrac, function], and GeneticMap[recfrac, function, True] is equivalent to InverseMap[recfrac, function].

{GeneticMap[0.11, Haldane,  True], GeneticMap[0.11, Kosambi, True], 
      GeneticMap[0.11, Morgan, True]}

QTL Analysis

Quantitative trait loci (QTLs) are those genes (one or more) which are presumed to be at least partially responsible for a quantitative trait.  QTL analysis is currently a challenging research topic in statistical genetics.  This tutorial can only touch on some of the simplest methods for identifying QTLs.  The methods described here rely on regression analysis to detect significant statistical associations between the genotypes of marker loci and quantitative trait values in the progeny of a cross.  A significant association is interpreted as evidence for a QTL near the marker loci which show the association.

This package does not yet provide support for QTL mapping in advance intercross or advanced backcross populations.

Needs["Genetics`QTLRegression`"];

Single-locus association

QTL mapping includes three levels of increasing complexity.  First is single-locus mapping: statistical tests of association between trait values and the genotypes of individual marker loci throughout the genome.  SingleLocusAssociation expects two arguments: the first is a Dataset of phenotypes for marker loci in a backcross or intercross population.  The second argument is a list of trait values for the same population.

SingleLocusAssociation returns a list of lists, with one sublist for each marker in the input dataset, and two or three numbers in each sublist.  The first number is a regression coefficient expressing the additive effect of a hypothetical QTL closely linked to the marker in question.  The last is a likelihood ratio statistic expressing the statistical significance of the association (they begin to be interesting if they exceed 15).  The middle value, which only appears for an intercross when FitDominance->True, is a regression coefficient expressing the dominance effect of the hypothetical QTL.

The following simulates two pairs of markers each with a QTL between the members of the pair.  It extracts the markers from the dataset and creates a trait by adding the contributions of the two QTLs.  It then applies SingleLocusAssociation to the simulated data.  Although this is an intercross, the analysis uses the default FitDominance->False, and calculates only the additive regression coefficient.  Notice, for the first pair of markers, that the second marker, which is closer to the QTL, gives a more significant association and a more accurate estimate of the additive effect (simulated to be 2.0).

\(data\  = \ 
      MakeDataset[200, 
        \ {{IC, 20}, {QTI, 5, 0, 2, 0, 1}, {IC, 50}, {IC, 20}, {QTI, 5, 0, 2, 
            2, 1}, {IC, 0}}]; 
markers\  = \ GetMarkers[data]; 

    trait\  = \ Plus\ @@\ GetQTLs[data]; 

    SingleLocusAssociation[markers, trait]\)

Simple interval mapping

The second method, now called simple interval mapping (SIM), evaluates the association between the trait values and the expected genotype of an hypothetical QTL (the target QTL) at multiple analysis points between each pair of adjacent marker loci (the target interval).  The analysis point which yields the most significant association may be taken as the location of a putative QTL.

This type of mapping is implemented by the SimpleIntervalMap function, which like SingleLocusAssociation, takes a Dataset and a trait list as arguments.  In this case, however, the dataset should contain just two loci, the loci flanking the interval over which the trait is to be mapped.  SimpleIntervalMap returns a list similar to that returned by SingleLocusAssociation, except that the first number in each sublist is a position in the interval, expressed as a map distance from the left-hand marker.  The remaining values apply to a hypothetical QTL at that position; these values are (1) an additive regression coefficient, (2) an optional dominance regression coefficient, and (3) a likelihood ratio statistic.

The following maps the trait from the previous example over the interval defined by the first two loci.  The result, which has 29 sublists, is shown abbreviated.

\(stats\  = \ 
      SimpleIntervalMap[
        markers[[{1, 2}]], \ trait]; 

    Short[stats, \ 3]\)

SegregationModel  /.  Options[QTLRegression]

Genetics`QTLRegression`Private`RecFracSteps[
      RecombinationFraction[
        markers[[{1, 2}]],  IC]]

This plots the likelihood ratio statistic over the interval between the two loci.  It will usually come to a maximum near the right-hand side of the interval, but the exact position will vary with each different simulation.

t  =  Transpose[stats]; 
    ListPlot[Transpose[{t[[1]], 
          t[[3]]}],  ImageSize -> 144]

Composite interval mapping

The third method is called composite interval mapping (CIM) or multiple QTL mapping (MQM).  Like simple interval mapping, it evaluates the possibility of a QTL (the target QTL) at multiple analysis points across each interlocus interval (the target interval).  However, at each point it also includes in the analysis the effect of one or more loci (background loci) elsewhere in the genome.  Each of these loci has been shown to be associated with the trait (by SingleLocusAssociation, for example), and each of these loci therefore partially compensates for the effects of the QTL which is presumed to be located close to it.

Composite interval mapping is implemented by the CompositeIntervalMap function, which, in addition to the arguments described for SimpleIntervalMap, takes a third argument which is a Dataset.  This dataset contains one or more (usually only a few) background loci, loci associated with the trait but distant from the interval being analyzed.  Like SimpleIntervalMap, CompositeIntervalMap returns a list of lists.  Each sublist has five or seven values, depending on whether dominance regression coefficients are present.  The first three or four values are the values which would be returned by SimpleIntervalMap, ignoring the background markers.  The last two or three values are regression coefficients and a likelihood ratio statistic calculated by including the background markers.  In other words, the values in each sublist are: (1) a position for the hypothetical QTL, (2) an additive regression coefficient (ignoring background), (3) an optional dominance regression coefficient (ignoring background), (4) a likelihood ratio statistic (ignoring background),  (5) an additive regression coefficient (including background), (6) an optional dominance regression coefficient (including background), and (7) a likelihood ratio statistic (including background).

The following repeats the previous interval mapping but includes the third marker as a background locus.  The resulting list is displayed in an abbreviated form.

\(stats\  = \ 
      CompositeIntervalMap[
        markers[[{1, 2}]], \ trait, 
        markers[[{3}]]]; 

    Short[stats, \ 3]\)

The following plots the likelihood ratio statistics as a function of position in the interval.  The left-hand graph is the same as produced by the simple interval mapping; the right-hand graph shows the effect of including the background locus.  Notice that the likelihood ratio statistic reaches much higher values when the background locus is included, indicating that more of the trait variation is being explained.

\(t\  = \ Transpose[stats]; 

    a\  = \ ListPlot[
        Transpose[{t[[1]], 
            t[[3]]}], 
        DisplayFunction -> Identity]; 

    b\  = \ ListPlot[
        Transpose[{t[[1]], 
            t[[5]]}], 
        DisplayFunction -> Identity]; 
Show[GraphicsArray[{a, b}]]\)

Data Export

A variety of software is available for analysis of mapping experiments, both those involving Mendelian loci and those involving QTLs.  Each of these software programs has its own file format.  The Genetics`Export` package can store simulated Datasets in the formats of three of these programs: Mapmaker, Map Manager QT, and Map Manager XP.  Mapmaker, the original program of its type but still widely used, is available from ftp://xxxxxxxxx.  The two Map Manager programs, written more recently with a graphical user interface, are available from http://mcbio.med.buffalo.edu/mapmgr.html.

Needs["Genetics`Export`"];

Mapmaker

The StoreMapmaker function stores a Dataset in the form for Mapmaker.  StoreMapmaker takes four parameters: the first is the dataset (which must not contain any QTL data) and the optional second parameter is the descriptor list used to create the dataset.  Providing the descriptor list ensures that the segregation of the dataset will be recognized correctly.  The third and fourth parameters are names (in quotes) which specify a dataset name and a file name.  Names for each of the loci are generated from the dataset name by appending digits.

\(descriptor\  = \ {{BC0, 10}, {BC0, 15}, {BC0, 20}, {BC0, 0}}; 

    data\  = \ MakeDataset[50, \ descriptor]; 

    StoreMapmaker[data, \ descriptor, \ "BC", \ "Test"]\)

Map Manager QT

Similarly, StoreMapManagerQT stores a Dataset in the form for Map Manager QT.  This function also takes four parameters.  The first is a Dataset or a list of Datasets.  The Map Manager programs are designed to store mapping data separated into subsets which correspond to different chromosomes.  If StoreMapManagerQT is given a list of Datasets, it stores each dataset as a different chromosome.  The second parameter for StoreMapManagerQT is optional.  It is a list containing sublists of quantitative trait data, each sublist corresponding to a different trait, such as that returned by Genetics`Simulation`GetQTLs.

This example stores four loci for one chromosome and a trait made by adding the contributions of two QTLs.

\(descriptor\  = 
      \ {{BC0, 10}, {QTB, 10, 0, 2, 2, 1}, {BC0, 15}, {BC0, 20}, {QTB, 10, 0, 
          3, 0, 1}, {BC0, 0}}; 
data\  = \ MakeDataset[50, \ descriptor]; 

    markers\ \  = \ GetMarkers[data]; 
qtls\  = \ {Plus\ @@\ GetQTLs[data]}; 
    
StoreMapManagerQT[data, \ qtls, \ "BCQT", \ "QTTest"]\)

This example stores the loci for the chromosome used above along with three loci for another chromsome.

\(descriptor\  = \ {{BC0, 10}, {BC0, 15}, {BC0, 0}}; 

    moredata\  = \ MakeDataset[50, \ descriptor]; 

    StoreMapManagerQT[{data, moredata}, \ "BCQT", \ "QTMore"]\)

Map Manager XP

Finally, StoreMapManagerXP stores one or more Datasets in the form for Map Manager XP.  This function takes the same parameters as StoreMapmaker: a dataset, an optional descriptor list, a dataset name, and a file name.  In this case, however, as for StoreMapManagerQT, the dataset may be replaced by a list of datasets and, if it is, the descriptor list is replaced by a list of descriptor lists.

\(descriptor1\  = \ {{IC, 10}, {IC, 15}, {IC, 20}, {IC, 0}}; 

    descriptor2\  = \ {{IC, 10}, {IC, 20}, {IC, 0}}; 

    data\  = \ MakeDataset[50, \ descriptor1]; 

    moredata\  = \ MakeDataset[50, \ descriptor2]; 

    StoreMapManagerXP[{data, moredata}, {descriptor1, descriptor2}, 
      "ICXP", "XPTest"]\)

Bibliography

E.A. Carbonell, T.M. Gerig, E. Balansard, & M.J. Asins. Interval mapping in the analysis of nonadditive quantitative trait loci. Biometrics 48: 305-315 (1992)

G.A. Churchill & R.W. Doerge. Empirical threshold values for quantitative trait mapping. Genetics 138: 963-971 (1994)

J.F. Crow  Mapping Functions.  Genetics 125: 669-671 (1990)

A. Darvasi.  The effect of selective genotyping on QTL mapping accuracy. Mammalian Genome 8: 67-68 (1997)

A. Darvasi & M. Soller.  Advanced intercross lines, an experimental population for fine genetic mapping. Genetics 141: 1199-1207 (1995)

A. Darvasi, A. Weinreb, V. Minke, J.I. Weller and M. Soller.  Detecting marker-QTL linkage and estimating QTL gene effect and map location using a saturated genetic map. Genetics 134: 943-951 (1993)

R.W. Doerge & G.A. Churchill. Permutation tests for multiple loci affecting a quantitative character. Genetics 142: 285-294 (1996)

R.W. Doerge & A. Rebai. Significance thresholds for QTL interval mapping tests. Heredity 76: 459-464 (1996)

E.L. Green.  Genetics and Probability in Animal Breeding Experiments.  Oxford University Press, New York (1981)

J.B.S. Haldane and C.H. Waddington.  Inbreeding and Linkage. Genetics 16: 357-374, 1931.

C.S. Haley & S.A. Knott. A simple regression method for mapping quantitative trait loci in line crosses using flanking markers. Heredity 69: 315-324 (1992)

R.C. Jansen. A general mixture model for mapping quantitative trait loci by using molecular markers. Theor Appl Genet 85: 252-260 (1992)

R.C. Jansen. Interval mapping of multiple quantitative trait loci. Genetics 135: 205-211 (1993)

R.C. Jansen & P. Stam. High resolution of quantitative traits into multiple loci via interval mapping. Genetics 136: 1447-1455 (1994)

R.C. Jansen, J.W. Van Ooijen, P. Stam, C. Lister, & C. Dean.  Genotype-by-environment interaction in genetic mapping of multiple quantitative trait loci.  Theor Appl Genet 91: 33-37 (1995)

S.J. Knapp, W.C. Bridges, Jr. & D. Birkes. Mapping quantitative trait loci using molecular marker linkage maps. Theor Appl Genet 79: 583-592 (1990)

E.S. Lander & D. Botstein. Mapping Mendelian factors underlying quantitative traits using RFLP linkage maps. Genetics 121: 185-199 (1989)

E.S. Lander, P. Green, J. Abrahamson, A. Barlow, M.J. Daly, S.E. Lincoln, & L. Newburg.  MAPMAKER: An interactive computer package for constructing primary genetic linkage maps of experimental and natural populations.  Genomics 1: 174-181 (1987)

E. Lander & L. Kruglyak. Genetic dissection of complex traits: guidelines for interpreting and reporting linkage results. Nature Genetics 11: 241-247 (1995)

S.E. Lincoln and E.S. Lander.  Systematic detection of errors in genetic linkage data.  Genomics 14: 604-610 (1992)

K.F. Manly.  A Macintosh program for storage and analysis of experimental genetic mapping data.  Mammalian Genome 4, 303-313 (1993)

K.F. Manly and R.W. Elliott.  RI Manager, a microcomputer program for analysis of data from recombinant inbred strains.  Mammalian Genome 1: 123-126 (1991)

O. Martinez & R.N. Curnow. Estimating the locations and the sizes of the effects of quantitative trait loci using flanking markers. Theor Appl Genet 85: 480-488 (1992)

S.D. Tanksley & J.C. Nelson. Advanced backcross QTL analysis: A method for the simultaneous discovery and transfer of valuable QTLs from unadapted germplasm into elite breeding lines. Theor Appl Genet 92: 191-203 (1996)

N.A. Tinker & D.E. Mather. Methods for QTL analysis with progeny replicated in multiple environments. Journal of Quantitative Trait Analysis. http://probe.nalusda.gov:8000/otherdocs/jqtl/index.html

H.F. Utz and A.E. Melchinger.  PLABQTL: A program for composite interval mapping of QTL.  Journal of Quantitative Trait Loci 2 (1996) http://probe.nalusda.gov:8000/otherdocs/jqtl/

J.C. Whittaker, R. Thompson, & P.M. Visscher. On the mapping of QTL by regression of phenotype on marker-type. Heredity 77: 23-32 (1996)

Z.-B. Zeng. Theoretical basis for separation of multiple linked gene effects in mapping quantitative trait loci. Proc. Nat. Acad. Sci. USA 90: 10972-10976 (1993)

Z.-B. Zeng. Precision mapping of quantitative trait loci. Genetics 136: 1457-1468 (1994)