This operates on the output of segregate to add up the lengths of all the segments segregated to different individuals to thus compute the admixture fractions of each sampled individual.

computeQs_from_segments(S, check_total_length = TRUE)

Arguments

S

the tibble output from segregate

check_total_length

TRUE means it checks the total genome length in each individual to make sure it checks out.

Value

This function returns a tibble with the following columns:

  • gpp: the genomic simulation pedigree within which the individual sample was simulated.

  • index: the index which gives which instance of the GSP the sample is from

  • ped_sample_id: the id number of that the sampled individual had in the genomic simulation pedigree.

  • samp_index: the index of the sample taken. Some individuals in some genomic simulation pedigrees can produce more than one sample. This number tells you which sample it is.

  • pop_origin: the "pedigree" population of origin of the segments that contributed to the group_length. These are the simple "A", "B", "C", etc. designations given in the genomic simulation pedigree.

  • group_origin: Which group of samples the segments contributing to the group_length originated from. These are the groups of samples that were mapped onto the simple pedigree pop_origins by the reppop request.

  • group_length: the total length of segments from this group in this individual in this reppop index from this gpp (in bases).

  • tot_length: the total number of bases from all origins carried by this individual.

  • admixture_fraction: the fraction of all bases in the simulated individual that originate from the group in group_origin.

Examples

#### Get output from segregate to use as input ####
# We construct an example here where we will request segregation
# down a GSP with two F1s and F1B backcrosses between two hypothetical
# populations, A and B.
gsp_f1f1b <- create_GSP("A", "B", F1 = TRUE, F1B = TRUE)

# We will imagine that in our marker data there are three groups
# labelled "grp1", "grp2", and "grp3", and we want to create the F1Bs with backcrossing
# only to grp3.
reppop <- tibble::tibble(
  index = as.integer(c(1, 1, 2, 2)),
  pop = c("A", "B", "A", "B"),
  group = c("grp3", "grp1", "grp3", "grp2")
)

# combine those into a request
request <- tibble::tibble(
  gpp = list(gsp_f1f1b),
  reppop = list(reppop)
)

# now run it through segregate()
set.seed(5)  # just for reproducibility in example...
simSegs <- segregate(request, RecRates)

#### Now we can run those through computeQs_from_segments() ####
Qs <- computeQs_from_segments(simSegs)

Qs
#> # A tibble: 12 × 9
#>      gpp index ped_sample_id samp_index pop_origin group_origin group_length
#>    <int> <int> <chr>              <int> <chr>      <chr>               <dbl>
#>  1     1     1 4                      1 A          grp3           194086448 
#>  2     1     1 4                      1 B          grp1           194086448 
#>  3     1     1 5                      1 A          grp3           372323876.
#>  4     1     1 5                      1 B          grp1            15849020.
#>  5     1     1 5                      2 A          grp3           209935468.
#>  6     1     1 5                      2 B          grp1           178237428.
#>  7     1     2 4                      1 A          grp3           194086448 
#>  8     1     2 4                      1 B          grp2           194086448 
#>  9     1     2 5                      1 A          grp3           325654769.
#> 10     1     2 5                      1 B          grp2            62518127.
#> 11     1     2 5                      2 A          grp3           256604575.
#> 12     1     2 5                      2 B          grp2           131568321.
#> # ℹ 2 more variables: tot_length <dbl>, admixture_fraction <dbl>