Bugs and bug fixes for R/qtl
----------------------------------------------------------------------
This file is intended to contain known bugs in the R/qtl package,
version by version.  The bugs marked with ">>" are not yet fixed.  See
https://github.com/kbroman/qtl/blob/main/NEWS.md
for further information on changes to the package.

The list is not comprehensive.  I don't do a terribly good job of
keeping track of things I find and fix. The git log gives an explicit
of source code changes, and contains descriptions of bug fixes.

If you find a potential bug in R/qtl, please send an email, with as
many details as possible and possibly example data, to Karl Broman,
<broman@wisc.edu>.
----------------------------------------------------------------------

Version 1.33 bugs:

   1. read.cross with format="mapqtl" is not working in some cases.
      [Fixed in version 1.34.]


Version 1.32 bugs:

>> 1. mqmscan has problems when there are just two markers on a
      chromosome. It gives a seg fault if you scan just that
      chromosome, and it gives Infs in the "info" column in the
      results if you scan that and other chromosomes.


Version 1.23 bugs:

   1. Bug in scantwo permutations if markers on chr span < step and one
      uses incl.markers=FALSE. [Fixed in Version 1.24-9.]

   2. Bug in checkcovar (in util.R) regarding omitting individuals with
      missing phenotypes when there's an ID column with numeric values.
      The wrong individuals get omitted from the cross. [Fixed in
      Version 1.24-9.]


Version 1.16 bugs:

   1. Bug in estimates from fitqtl for RIL: they need to be divided in
      half.  The estimates for a backcross are correct, and we're not
      making the appropriate correction in RIL. [Fixed in Verison 1.16.]


Version 1.11 bugs:

   1. Problem in cim() in the case that multiple marker covariates are
      within the "window". [Fixed in Version 1.12.]

>> 2. fitqtl doesn't handle covariates with the X chromosome
      appropriately in the drop-one-term analysis.  When the X
      chromosome is omitted, the special covariates we need are also
      omitted, and so the LOD score for the X chromosome includes the
      effects of these special covariates.  Also, if such covariates
      were included specifically in a call to fitqtl, the LOD score
      attached to the X chromosome would be correct, but the model df
      in the "full model result" is wrong, as these covariates get
      double-counted.


Version 1.08 bugs:

   1. LOD curves from plotLodProfile are misaligned in the case of
      linked QTL.  [Fixed in Version 1.09.]

   2. refineqtl doesn't use the correct range in the case of more than
      two QTL on a chromosome. [Fixed in Version 1.09.]


Version 1.06 bugs:

    1. Bug in fitqtl.  Incorrect results can be obtained if covariates
       are placed before QTL terms in the formula.  [Fixed in Version
       1.07.]


Version 1.05 bugs:

    1. Bug in sim.cross regarding the QTL effects for a backcross.
       [Fixed in Version 1.06.]

    2. Bug in write.cross concerning X chromosome genotypes in an
       intercross with all males and all pgm==1.
       [Fixed in Version 1.06.]

    3. Bug in 2d scans via scanqtl; the first row of LOD scores are
       wrong. [Fixed in Version 1.06.]


Version 1.04 bugs:

>>  1. scanone with method="ehk" still shows convergences problems in
       the presence of interactive covariates, in some cases.

    2. I don't completely trust the results of calc.errorlod.  It
       seems to me that the LODs should be larger with a larger error
       probability, but this is not the case.  I think I need to
       re-write this so that all genotypes but that under test are
       assumed to be correct.  [Fixed in version 1.06; that the LOD
       scores decrease with increases in error probability appears to
       be correct, but the previous version missed*R cases of the
       following form:  1-1-1-...-1-1-1-2-1-2-2-2-...-2-2-2.]

    3. Bug in scanone and scantwo permutations: covariates aren't
       permuted to match the phenotypes.  [Fixed in Version 1.05.]


Version 1.03 bugs:

    1. In the "batch mode" permutations in scanone and scantwo
       with method="hk" or ="imp", sex and pgm were stripped
       off, and so the results were wrong in the presence of an
       X chromosome if there are some individuals of each sex
       and/or direction.  [Fixed in version 1.04.]


Version 1.01 bugs:

    1. plot.pxg for X chr and autosome: results can be messed up,
       depending on the order of the markers.  [Fixed in version
       1.03.]

    2. plot.geno() can give a bus error.  This is due to a problem
       in locate.xo().  [Fixed in version 1.02.]

>>  3. read.cross for "qtx" sometimes doesn't seem to take the
       genotype pattern appropriately; read in a backcross as if it
       were an F2.

>>  4. An NA in the mapmaker data file caused an error in read.cross;
       the line became too long.  Maybe this is true whenever an item
       doesn't match what is expected.

    5. summary.scantwo doesn't work if there's just two positions on a
       chromosome (or maybe it's for one position).  [Fixed in version
       1.05.]


Version 0.99 bugs:

    1. est.rf() treats the X chromosome in an intercross incorrectly.
       [Fixed in version 1.00.]


Version 0.98 bugs:

    1. makeqtl() dies if the cross object contains QTL genotype
       probabilities and one seeks a QTL on the X chromosome. [Fixed
       in version 0.99.]

    2. scanone gives incorrect results for the X chromosome with
       method="imp", when sex is included as an additive or
       interactive covariate. [Fixed in version 0.99.]


Version 0.97 bugs:

    1. In read.cross.qtlcart, it seems to print out the number of
       individuals as the number of phenotypes read. (A problem with
       "nrow" rather than "ncol".)  [Fixed in version 0.98.]

>>  2. In read.cross for the mapmaker format, when one uses a mapmaker
       map file, if a marker in that map file is indicated as unlinked
       (not placed on a chromosome), the data are read incorrectly.

    3. In plot.scantwo, if the chromosomes are given in a different
       order, they are re-ordered to the standard one in the plot, but
       the chromosome labels and lines are not.  An even weirder thing
       happens in plot.scanone.  [Fixed in version 0.98.]

    4. calc.errorlod dies for the X chromosome in an
       intercross. [Fixed in version 0.98.]

    5. In read.cross for the mapmaker format, an error results if a
       marker name is listed on a line without any genotype data.
       [Fixed in version 0.98.]

    6. Bug in read.cross for the QTL Cartographer format when there is
       exactly one individual. [Fixed in version 0.98.]


Version 0.96 bugs:

    1. Bug in summary.cross: when there are duplicate marker names, it
       fails to find them.  [Fixed in version 0.97.]

    2. Bug in read.cross: problem if a phenotype has values like "1x2".
       [Fixed in version 0.97.]

    3. Bug in scanone for X chromosome with EM algorithm when there is
       a "sex" column in the phenotype data but all individuals have
       the same sex.  [Fixed in version 0.98.]

    4. There's likely an error in write.cross.qtlcart.  See
       the line with "lo <- seq(1,n.ind-1,by=40)"
       [Fixed in version 0.97.]

    5. Problem in makeqtl in the case of a four-way cross:  the
       function doesn't take into account of the result of
       create.map() being a vector. [Fixed in version 0.97.]

    6. Problem in fitqtl: it doesn't seem to recognize the case of
       there being no available "draws" data.  [Fixed in version 0.97.]

    7. fitqtl: doesn't work when you give only one qtl. [Fixed in
       version 0.97.]

    8. scanone: when model="binary" and method="mr", a warning message
       should be displayed, and method="em" should be used.  [This
       isn't really a bug; the software does do the binary trait
       analysis with just the single marker genotype information.]


Version 0.95 bugs:

    1. scantwo is not working well for the EM algorithm, in the case
       of the X chromosome [Fixed in version 1.02.]

    2. I suspect that the treatment of the X chromosome is still not
       correct for scanone and scantwo.  I think the null model needs
       to take sex into account.

    3. In read.cross for format "csv", if not all lines have equal
       numbers of fields, a somewhat cryptic error message is given.
       Similarly, if there are missing values in the marker names,
       chromosome IDs, or marker poisitons, there are very cryptic
       error messages.  (Thanks to Leo Schalkwyk for reporting this
       error.) [Fixed in version 0.96.]


Version 0.94 bugs:

    1. There was a bug in read.cross; the order of "C" and "D" in the
       genotypes argument needed to be reversed.  [Fixed in version
       0.95.]

    2. For read.cross with format="csv", if there is a missing
       phenotype in the first individual (and a genetic map is not
       included) the function halts with an error. [Fixed in version
       0.95.]


Version 0.93 bugs:

    1. There is a bug in summary.scanone for the case where several
       positions jointly share the maximum LOD score...all are given;
       it'd be best to just pick one. [Fixed in version 0.98.]

    2. In ripple, error if window < 2. [Fixed in version 0.94.]

    3. Make sure error.prob and similar arguments are always between 0
       and 1 (e.g., in sim.cross and est.map) [Fixed in version 0.94.]


Version 0.92 bugs:

    1. There was a problem with read.cross with format="csv";
       if the marker positions were missing, the first individual was
       skipped.  [Fixed in version 0.93.]

    2. Should use file.path() in the read.cross and write.cross
       functions.  [Fixed in version 0.93.]

    3. sim.cross gives incorrect results when the specified QTLs are
       not in order by chromosome.  The QTLs are reordered, but their
       effects are not.  [Fixed in version 0.93.]


Version 0.91 bugs:

    1. There was a problem with read.cross with method="csv" in R
       version 1.4.0.  This was partly a bug in R, which has been
       fixed in version 1.4.1.  But by changing the use of
       as.is=TRUE to colClasses="character", the new package should
       work in R ver 1.4.0 as well.  [Fixed in version 0.92.]


Version 0.90 bugs:

    1. The X chromosome is not treated properly in either read.cross
       or, most importantly, in scanone and scantwo.  I should have
       written this down some time ago, as this bug has been known for
       a long time. [Fixed in version 0.95, except for EM in scantwo.
       For now, we just use Haley-Knott regression in place of EM, if
       there is X chromosome data and multiple sexes and/or cross
       directions.]


Version 0.88 bugs:

    1. In the windows version, Rprintf in the C code only print after
       all of the calculations are complete.  We should flush the
       print buffer after each line. [Not really a bug; the issue with
       Rgui in Windows could be fixed by simply unchecking the
       "buffered output" option in "Misc" on the menu bar.]

    2. scantwo.mr gives really bad results for the hypertension data.
       Lots of lod scores are extremely large. [Fixed in version
       0.89-9.]

>>  3. scantwo with method EM can give interactive LOD scores < 0.
       This is a multiple modes problem.  In my experience so far,
       this only occurs at uninteresting loci, and so probably is not
       a big deal.  It'd be best to have some automatic selection of
       multiple starting points, at least as an option.


Version 0.87 bugs:

    1. Problem with subset.cross when one pulls out just one
       individual: cross$geno[[1]]$data is a vector rather than a
       matrix.  Look at $prob, $argmax, $draws, $errorlod, too.
       Similar problem for more than 1 individual if the $draws
       argument has one one simulation replicate.  [Fixed in version
       0.88-12.]

    2. plot.scanone puts the chromosome numbers in the wrong place.
       Something to do with the argument gap.  [Fixed in version
       0.88-12.]

    3. There is apparently a problem reading in data when a chromosome
       has only one marker.  This suggests a study of *all* functions
       to ensure that they work in the unusual case of a single
       marker. [Fixed in version 0.88-12.]

    4. sim.cross.f2 wasn't capturing an X chromosome in the input map
       appropriately.  [Fixed in version 0.88-11.]


Version 0.86 bugs:

    1. I suspect that there is a bug in sim.geno.  I have no
       evidence, to support this, but I'll be doing my best to verify
       that it is working correctly. [There isn't a bug in sim.geno,
       as far as I can see.  The problem I'd noticed was in the
       imputation method in scanone.  The return value was
       mean{L}+var{L}/2, but should be mean{L}+log(10)*var{L}/2.
       This is fixed in version 0.86-12.]


Version 0.85 bugs:

    1. There really was a bug in argmax.geno!  [Fixed in version
       0.86.]

    2. scanone.perm is wrong: I was doing independent permutations
       for each chromosome and then maximizing across chromosomes.
       I've scrapped the C code and am now just doing the simple
       thing: repeated calls of the R function scanone. [Fixed in
       version 0.86.]

    3. There's a problem with the convergence criteria in vbscan:
       The function is faster with tol=1e-8 than with tol=1e-5.
       [Fixed in version 0.86.]


Version 0.84 bugs:

    1. The "hyper" data has some markers out of order. [Fixed in
       version 0.85]


Version 0.83 bugs:

>>  1. In scanone, when there is a spike in the phenotype,
       sometimes the LOD curve has huge peaks and sometimes not.  I
       believe this is due to multiple modes in the likelihood surface,
       and with floating point errors, sometimes you go to one mode
       and sometimes another.  (I've seen the same problem in
       vbscan as well.)

    2. There seems to be an error in summary.scanone when there is
       only one chromosome.  Also, if there is more than one location
       sharing the maximum LOD, it returns all of them. [Fixed in
       version 0.85.]


Version 0.81 bugs:

    1. I often getting the following warning message when reading data
       with read.cross in "karl" format:

         "no finite arguments to min/max; returning extreme. in:
          max(..., na.rm = na.rm)"
       [But who ever uses the "karl" format?  I've not fixed this,
        but it's not worth emphasizing.]

    2. read.cross.karl can give an error when it's trying to
       determine the number (and thus autosomal/sex-linked status) of
       each chromosome using the marker names, if the marker names are
       not of the usual mouse form. [I believe this is fixed in
       version 0.84.]

    3. Regarding the function read.cross.mm (for reading data in
       mapmaker format):

       a. It gives an error when the map file has *'s in front of each
          of the marker names. [Fixed in version 0.82.]

       b. It leaves 0's where there is missing data; these should be
          NAs. [Fixed in version 0.82.]

       c. It fails to assign the correct chr type ("A" vs "X") to each
          chromosome. [Fixed in version 0.82.]

       d. It doesn't give marker names to the columns in the data
          matrices.  This causes major problems in argmax.geno.
          [Fixed in version 0.82.]

    4. summary.cross should ensure that there are marker names in
       the appropriate places. [Fixed in version 0.82.]


Version 0.80 bugs:

    1. Slight bug in replace.map for 4way crosses.  [Fixed in
       version 0.81.]


Version 0.78 bugs:

    1. There is a bug in argmax.geno, in the case step > 0.
       I saw some data like 2-2-2-2-2-1, where with error.prob=0.01,
       it gave argmax=2-2-2-2-2-2 when step=1 but not when step=0.
       [This isn't really a bug, but rather a sad truth in result of
       the Viterbi algorithm.  The current code does, however,
       incorrectly chose among the most likely sequences, if there are
       several possible such.]  [NOTE: See version 0.85 above; there
       really was a bug, though Viterbi is still not to be trusted in
       the presence of appreciable missing data when error.prob > 0.]


version 0.77 bugs:

    1. In create.map (used in calc.genoprob), there's a "names"
       problem (resulting in an error) when the markers are
       equally-spaced and the "step" argument is at exactly that
       spacing. [Fixed in version 0.78.]


version 0.76 bugs:

    1. In sim.cross, there's a problem with the dimnames for
       the error indicator component, when simulating genotyping
       errors with a QTL present. [Fixed in version 0.77.]

----------------------------------------------------------------------
end of BUGS.txt
