A few questions about multi-QTL analysis

474 views
Skip to first unread message

Hannah McIntosh

unread,
Jun 20, 2016, 11:39:43 AM6/20/16
to R/qtl discussion
Hello,

I'm running a multi-QTL analysis using makeqtl and fitqtl, and am wondering if there's a way to do a permutation test (as in the single-QTL analysis with scanone) for the multi-QTL model?

Additionally, I need to print the position and LOD of all markers in my genetic map. Is there a way to do this for the multi-QTL analysis similar to scanone for the single-QTL analysis?

Thanks!


Karl Broman

unread,
Jun 22, 2016, 10:48:25 AM6/22/16
to rqtl...@googlegroups.com
> I'm running a multi-QTL analysis using makeqtl and fitqtl, and am wondering if there's a way to do a permutation test (as in the single-QTL analysis with scanone) for the multi-QTL model?

I recommend using the stepwiseqtl() function and the related penalized LOD score criterion for comparing multiple-QTL models. See Ch 9 of the R/qtl book (http://rqtl.org/book) and Broman and Speed (2002) and Manichaikul et al (2009).
https://www.biostat.wisc.edu/~kbroman/publications/jrssb.pdf
https://www.biostat.wisc.edu/~kbroman/publications/multiqtl.pdf


> Additionally, I need to print the position and LOD of all markers in my genetic map. Is there a way to do this for the multi-QTL analysis similar to scanone for the single-QTL analysis?

The result of refineqtl(), when you use keeplodprofile=TRUE, includes the LOD profiles as an attribute.
The lodprofile is a list, with each component corresponding to a different QTL and being a table with chromosome, position, and profile LOD score.

data(fake.bc)
fake.bc <- calc.genoprob(fake.bc, step=1)
out <- scanone(fake.bc)
summary(out, threshold=3)
qtl <- makeqtl(fake.bc, chr=c(2,5), pos=c(34, 16), what="prob")
rqtl <- refineqtl(fake.bc, qtl=qtl, keeplodprofile=TRUE, method="hk")
lprof <- attr(rqtl, "lodprofile")
lprof[[1]]
lprof[[2]]

karl
Message has been deleted

Hannah McIntosh

unread,
Jun 23, 2016, 12:43:14 PM6/23/16
to R/qtl discussion
Thanks Karl. 

I have tried the stepwiseqtl function with the default penalties, which yielded weird results. The computation time of the scantwo permutation test seems to be very long; is there a way to shorten this (using a method besides hk, etc.) besides for using multiple processors or drastically reducing the number of permutations? 

Additionally, is there a way to get the LOD scores from stepwiseqtl? I have tried inputting the info into fitqtl, but none of the additional QTLs found by stepwiseqtl are significant (with LOD scores far below the significance threshold for the single QTL analysis). 

Karl Broman

unread,
Jun 23, 2016, 11:59:26 PM6/23/16
to rqtl...@googlegroups.com
> I have tried the stepwiseqtl function with the default penalties, which yielded weird results. The computation time of the scantwo permutation test seems to be very long; is there a way to shorten this (using a method besides hk, etc.) besides for using multiple processors or drastically reducing the number of permutations?

scantwo permutations are indeed painfully time consuming (and can require a lot of RAM).
Try using scantwopermhk (just for Haley-Knott permutations), which works better than permutations with scantwo directly. Any method other than Haley-Knott would be slower and more painful.

You could focus soley on additive QTL models, and use the threshold from scanone permutations.
(additive.only=TRUE in stepwiseqtl)

> Additionally, is there a way to get the LOD scores from stepwiseqtl? I have tried inputting the info into fitqtl, but none of the additional QTLs found by stepwiseqtl are significant (with LOD scores far below the significance threshold for the single QTL analysis).

stepwiseqtl will returns a single model. As with refineqtl, if you use keeplodprofile=TRUE, it'll include the profile LOD scores as an attribute "lodprofile".

If you want the "drop one QTL" type LOD scores as from fitqtl, stepwiseqtl doesn't give those; you need to run fitqtl directly, afterwards.

karl


Hannah McIntosh

unread,
Jun 24, 2016, 12:19:09 PM6/24/16
to R/qtl discussion
Thanks Karl, this has been really helpful.

If I use the permutation results from scanone in an additive model, is there another way besides calc.penalties to calculate the penalties for stepwiseqtl?

Thanks!

Karl Broman

unread,
Jun 24, 2016, 2:26:28 PM6/24/16
to rqtl...@googlegroups.com

You can use summary() to get the appropriate threshold from the scanone permutations, and then use that with Infs for the interactive penalties.

library(qtl)
data(hyper)
hyper <- calc.genoprob(hyper, step=1)
operm <- scanone(hyper, n.perm=1000, method="hk")
thr <- summary(operm, alpha=0.05)
pen <- c(thr, Inf, Inf)
out <- stepwiseqtl(hyper, method="hk", penalties=pen, additive.only=TRUE)

karl
> --
> You received this message because you are subscribed to the Google Groups "R/qtl discussion" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rqtl-disc+...@googlegroups.com.
> To post to this group, send email to rqtl...@googlegroups.com.
> Visit this group at https://groups.google.com/group/rqtl-disc.
> For more options, visit https://groups.google.com/d/optout.

Hannah McIntosh

unread,
Jul 13, 2016, 12:36:50 PM7/13/16
to R/qtl discussion
Karl,

One last question about this.

In stepwiseqtl, if I specify keeplodprofile=true, it only retains the info for the chromosomes with significant QTL. I need to print the info for all chromosomes. Is this possible? Also, along these lines, is it possible to plot the LOD scores from stepwiseqtl (or fitqtl) for all chromosomes, not just those with QTL?

Thanks!

Karl Broman

unread,
Jul 14, 2016, 8:28:15 AM7/14/16
to rqtl...@googlegroups.com
I'd recommend following the stepwiseqtl analysis with a call to addqtl() to scan the genome for an additional QTL; that'll give you the other chromosomes.

To plot all chromosomes, you might do something like this:

data(fake.bc)
fake.bc <- calc.genoprob(fake.bc, step=1)

out.sq <- stepwiseqtl(fake.bc, additive.only=TRUE, method="hk", max.qtl=5)
out.add <- addqtl(fake.bc, qtl=out.sq, method="hk")

plotLodProfile(out.sq, showallchr=TRUE, bandcol="gray85")
plot(out.add, add=TRUE, col="gray60")

karl
Reply all
Reply to author
Forward
0 new messages