Mapping and QTL detection with dominant markers

209 views
Skip to first unread message

Paweł Sulima

unread,
May 16, 2016, 6:53:51 AM5/16/16
to R/qtl discussion
Dear all,
I am a beginner in using R/qtl software. Is it possible to construct a genetic map and detect QTL based on dominant markers (such as RAPD)? I would be very grateful for your help in this matter. Best regards

Karl Broman

unread,
May 16, 2016, 10:53:45 AM5/16/16
to rqtl...@googlegroups.com
It's possible to construct genetic maps with RAPD and other dominant markers; the bigger restriction is on the type of cross: R/qtl is written for simple crosses between inbred lines (backcross, intercross, recombinant inbred lines).

And if you are doing an intercross, you'll need a large number of codominant markers (such as microsatellites or SNPs) in order to piece the two sides of the map together.

karl


> On May 16, 2016, at 4:13 AM, Paweł Sulima <amilus...@gmail.com> wrote:
>
> Dear all,
> I am a beginner in using R/qtl software. Is it possible to construct a genetic map and detect QTL based on dominant markers (such as RAPD)? I would be very grateful for your help in this matter. Best regards
>
> --
> 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.

Paweł Sulima

unread,
May 17, 2016, 3:51:10 AM5/17/16
to R/qtl discussion
Dear Karl,

thanks a lot for the information. I have data on backcross (Salix purpurea, 81 individuals; 300 RAPD and + 60 ISSR - only segregating 3: 1 and 1: 1; biometric data for 7 phenotypic traits) and I would try to construct a simple genetic map and identify QTLs. If this is possible in the R / qtl, I have a few questions (I promise not to take your time too much :). Slowly I begin to learn about the environment R and basis of R / qtl. I'm starting really to like it and I think, that R/qtl is highly addictive :) Few question:
- How I should encode my data? I saw somewhere C (present) and D (absent) for dominant markers, is this correct? 
- Should I create a genetic map separately for RAPD and ISSR?
- Is better to put all the markers data, or already segregating 1: 1 and 3: 1. I saw i n your pdf (Genetic map construction with R/qtl), taht in R/qtl is very simple to look for markers with distorted segregation patterns (1:2:1), but is this the same for 3:1 and 1:1?

I realy would be very grateful for your help.

Best regards,

Pawel

Karl Broman

unread,
May 17, 2016, 7:08:59 AM5/17/16
to rqtl...@googlegroups.com
R/qtl is written for the case of inbred founders, in which markers would segregate 1:1.
And one then codes the genotypes as AA, AB for the homozygote and heterozygote.

If you have markers segregating as 3:1, then I take it that the parents are not inbred?
Analysis of such a cross is possible but difficult: you can treat it as a phase-known 4-way cross ("4way"), but you first need to infer phase, and R/qtl includes no functions for that.

I would create a genetic map containing both the RAPD and ISSR markers, rather than separate ones.

karl

Paweł Sulima

unread,
May 18, 2016, 5:23:40 AM5/18/16
to R/qtl discussion
Dear Karl,

willow is very heterozygous and it is imposible to receive homozygotic parents. For this reason, I have mapping population from backcross a female form A1 with a randomly selected male form Z1/1 (= F1 hybrid of A1 x A2). If I understood correctly, in this case I can treat it as a phase-known 4-way cross ("4way")? And coding must be AA (for present marker = dominant homozygote and heterozygote) and AB (for absent marker = recessive homozygote) or for "4way" is other coding?
One more time - sorry for these basis questions, but I really want do something with my data:)

Thanks again for your help and I hope, that I can construct the genetic map with these assumptions:)

Pawel

Karl Broman

unread,
May 18, 2016, 8:53:05 AM5/18/16
to rqtl...@googlegroups.com
Unfortunately, R/qtl doesn't have much facility for crosses with outbred individuals.

You won't be able to treat the genotypes as AA/AB.

Rather, you'll need to infer phase in the A1 and Z1/1 parents. It'd be ideal to have genotyped the grandparents, too.
At a RAPD, say B is the band allele and N is the non-band allele. Then you need to determine which markers are

BN x NN vs NB x NN vs NN x BN vs NN x NB

This goes hand-in-hand with constructing the genetic map, because you have to find the linked markers in order to determine phase.

Once phase has been determined, then you can use R/qtl for QTL analysis or to estimate inter-marker distances, but you need to treat it as a phase-known 4-way cross. And the encoding of genotypes is complicated. Described in the help file for read.cross:

For a 4-way cross, the mother and father are assumed to have genotypes AB and CD, respectively. The genotype data for the progeny is assumed to be phase-known, with the following coding scheme: NA = missing, 1 = AC, 2 = BC, 3 = AD, 4 = BD, 5 = A = AC or AD, 6 = B = BC or BD, 7 = C = AC or BC, 8 = D = AD or BD, 9 = AC or BD, 10 = AD or BC, 11 = not AC, 12 = not BC, 13 = not AD, 14 = not BD.

karl
Message has been deleted

Karl Broman

unread,
May 26, 2016, 10:32:02 AM5/26/16
to rqtl...@googlegroups.com
Include the argument genotypes=1:15

I used:

library(qtl)
x <- read.cross("csv", file="P5new do Rqtl.csv", genotypes=1:15,
estimate.map=FALSE, crosstype="4way")

There were a couple of genotypes coded as "144", which will be treated as missing.
There were two markers that appeared twice: OPA11a and OPA11c.

Feel free to send me data files privately rather than to the Rqtl-disc list, because if you send data files to the list, you've made them public.

karl


> On May 25, 2016, at 4:55 AM, Paweł Sulima <amilus...@gmail.com> wrote:
>
> Dear Karl,
>
> I have tried to code with the 4-way cross coding scheme as You propose before, but something is going wrong and...
> sorry for that... I realy don't know what I have do it uncorrect? When I use <- read.cross:
> P5 <- read.cross("csv", "C:/Users/Pracownia Biotech-1/Desktop/PAWEŁ/Rqtl", "P5new do Rqtl.csv", crosstype="4way")
> I get the following message:
> --Read the following data:
> 79 individuals
> 461 markers
> 1 phenotypes
> --Estimating genetic map
> Błąd w poleceniu 'if ((is.matrix(map) && (any(diff(map[1, ]) < 0) || any(diff(map[2, ':
> brakuje wartości tam, gdzie wymagane jest TRUE/FALSE
> Dodatkowo: Komunikaty ostrzegawcze:
> 1: W poleceniu 'read.cross.csv(dir, file, na.strings, genotypes, estimate.map, ':
> The following unexpected genotype codes were treated as missing.
> |4|14|5|6|8|7|144|
> 2: W poleceniu 'read.cross.csv(dir, file, na.strings, genotypes, estimate.map, ':
> There is no genotype data!
> 3: W poleceniu 'summary.cross(cross)':
> The genetic maps should all be matrices with two rows.
> Probably my csv file is not correct prepared (csv file I have included as P5new do Rqtl.csv). I could not find any csv file for 4-way cross.
> Only example fake.4way, but this is not in csv format.
>
> I will be very grateful for your response and help.
>
> Best regards,
>
> Pawel
> <P5new do Rqtl.csv>

Paweł Sulima

unread,
May 27, 2016, 4:34:07 AM5/27/16
to R/qtl discussion
Dear Karl,

again many thanks for Your help. Csv files works:) I prepare my data in R/qtl to the point "form linkage group" and here I have another question:
When I use (I think in this combination of max.rf and min.lod - I become the best results): 
lg <- formLinkageGroups(P5, max.rf=0.35, min.lod=3.7)
table(lg[,2])
,
I get 38 groups with 2 or more markers (with 19 chromosomes in the case of S. purpurea - probably would be OK), but + many groups
with only one marker (157 groups = 157 markers). How could I omit these not linked markers by another step:
plotRF(P5, alternate.chrid=TRUE) ?

Best regards,

Pawel

P.S. Thank You for warning about placing my data online, next time I will send You per mail and now I have deleted from list :)

Karl Broman

unread,
May 27, 2016, 7:13:04 AM5/27/16
to rqtl...@googlegroups.com
You can use either subset.cross (removing a set of linkage groups)
or drop.markers() (removing a set of markers).

karl

> On May 27, 2016, at 3:34 AM, Paweł Sulima <amilus...@gmail.com> wrote:
>
> Dear Karl,
>

Paweł Sulima

unread,
Jun 23, 2016, 4:28:30 AM6/23/16
to R/qtl discussion
Dear Karl,

I must say that r/qtl is very addictive :) I am very satisfied with work in r/qtl. I was able to prepare my map, but it is possible
to export my prepared data to the MapChart? If not MapChart, maybe another free and good software for graphical presentation
of linkage maps?

Best regards,

Pawel

Karl Broman

unread,
Jun 23, 2016, 11:53:17 PM6/23/16
to rqtl...@googlegroups.com
I'm not familiar with MapChart.

There's a map2table() function that reorganizes the map as table with one marker per row. This might be what you need.

data(hyper)
map <- pull.map(hyper)
map_as_table <- map2table(map)
map_as_table[1:5,]

karl


> On Jun 23, 2016, at 3:28 AM, Paweł Sulima <amilus...@gmail.com> wrote:
>
> Dear Karl,
>
> I must say that r/qtl is very addictive :) I am very satisfied with work in r/qtl. I was able to prepare my map, but it is possible
> to export my prepared data to the MapChart? If not MapChart, maybe another free and good software for graphical presentation
> of linkage maps?
>
> Best regards,
>
> Pawel
>
> W dniu piątek, 27 maja 2016 13:13:04 UTC+2 użytkownik Karl Broman napisał:
> You can use either subset.cross (removing a set of linkage groups)
> or drop.markers() (removing a set of markers).
>
> karl
>
> > On May 27, 2016, at 3:34 AM, Paweł Sulima <amilus...@gmail.com> wrote:
> >
> > Dear Karl,
> >
> > again many thanks for Your help. Csv files works:) I prepare my data in R/qtl to the point "form linkage group" and here I have another question:
> > When I use (I think in this combination of max.rf and min.lod - I become the best results):
> > lg <- formLinkageGroups(P5, max.rf=0.35, min.lod=3.7)
> > table(lg[,2]),
> > I get 38 groups with 2 or more markers (with 19 chromosomes in the case of S. purpurea - probably would be OK), but + many groups
> > with only one marker (157 groups = 157 markers). How could I omit these not linked markers by another step:
> > plotRF(P5, alternate.chrid=TRUE) ?
> >
> > Best regards,
> >
> > Pawel
>
>

Paweł Sulima

unread,
Jul 13, 2016, 12:23:29 PM7/13/16
to R/qtl discussion
Dear Karl,

thank You for all. My map is done, but bothers me one thing:
How I should encode mother and father in "4-way cross"?
In description is: AB and CD, but I have got such a message:
"The following unexpected genotype codes were treated as missing. |AB|CD|"
Is this a problem or not?

Paweł

Karl Broman

unread,
Jul 14, 2016, 8:22:02 AM7/14/16
to rqtl...@googlegroups.com
In a phase known 4-way cross, the four grandparents are labeled A, B, C, and D, with one parent being AxB and the other CxD. At a fully informative marker, the offspring would have genotypes AC, AD, BC, or BD. But with typical markers, not all four alleles can be distinguished. You need to know "phase" (that is, which allele came from which grandparent), and then at each marker code the genotypes using numbers 1-14: 1 = AC, 2 = BC, 3 = AD, 4 = BD, 5 = A = AC or AD, 6 = B = BC or BD, 7 = C = AC or BC, 8 = D = AD or BD, 9 = AC or BD, 10 = AD or BC, 11 = not AC, 12 = not BC, 13 = not AD, 14 = not BD.

Then in the read.cross function, use the argument genotypes=1:14

karl

Paweł Sulima

unread,
Jul 14, 2016, 9:29:53 AM7/14/16
to R/qtl discussion
Dear Karl,

thank You. Yes, I think, that I understand correct this coding for phase known 4-way cross.
Further I thought, that I should also add parental forms too, but perhaps is this not advisable.
I must analyze data only from offspring - I'm right?

Second question:
Is it possible, to have all results (or at least more than the standard) in summary after use function ripple? Beacouse normally they display results from 2-5 orders of markers. Usually is this enough, but sometimes
I would have more orders to compare. Is any arguments or function for that?

Best regards,

Pawel

Karl Broman

unread,
Jul 15, 2016, 12:17:58 AM7/15/16
to rqtl...@googlegroups.com

> On Jul 14, 2016, at 9:29 AM, Paweł Sulima <amilus...@gmail.com> wrote:
>
> Second question:
> Is it possible, to have all results (or at least more than the standard) in summary after use function ripple
> ?
>
> Beacouse normally they display results from 2-5 orders of markers. Usually is this enough, but sometimes
> I would have more orders to compare. Is any arguments or function for that?

While the summary of the ripple() results only show a few rows of results, the results themselves are a matrix containing *all* of the orders that were considered.

data(hyper)
hyper <- est.rf(hyper)
rip <- ripple(hyper, chr=1, window=7)

nrow(rip) # 69840 rows
rip[60001:60005,] # some really bad orders

karl
Reply all
Reply to author
Forward
0 new messages