context("Calculation of genetic similarity")
test_that("calc_genetic_sim works for RIL", {
    grav2 <- read_cross2(system.file("extdata", "grav2.zip", package="qtl2"))
    probs <- calc_genoprob(grav2, step=1, error_prob=0.002)
    sim <- calc_genetic_sim(probs)
    # pre-subset to grid
    probs_sub <- probs_to_grid(probs)
    sim2 <- calc_genetic_sim(probs_sub)
    expect_equal(sim, sim2)
    # row and colnames okay
    expect_equal(rownames(sim), rownames(grav2$geno[[1]]))
    expect_equal(colnames(sim), rownames(grav2$geno[[1]]))
    # check a few values
    set.seed(88213118)
    n_ind <- nrow(probs[[1]])
    pairs <- list(c(1,2))
    for(i in 1:5)
        pairs <- c(pairs, list(sample(n_ind, 2), sample(n_ind, 2)))
    expected <- rep(0, length(pairs))
    tot_pos <- 0
    for(i in seq(along=probs)) {
        for(k in seq(along=pairs))
            expected[k] <- expected[k] + sum(probs_sub[[i]][pairs[[k]][1],,] * probs_sub[[i]][pairs[[k]][2],,])
        tot_pos <- tot_pos + ncol(probs_sub[[i]])
    }
    expected <- expected/tot_pos
    for(k in seq(along=pairs))
        expect_equal(sim[pairs[[k]][1],pairs[[k]][2]], expected[k])
})
test_that("calc_genetic_sim works for F2", {
    iron <- read_cross2(system.file("extdata", "iron.zip", package="qtl2"))
    probs <- calc_genoprob(iron, step=1, error_prob=0.002)
    sim <- calc_genetic_sim(probs)
    # pre-subset to grid
    probs_sub <- probs_to_grid(probs)
    sim2 <- calc_genetic_sim(probs_sub)
    expect_equal(sim, sim2)
    # row and colnames okay
    expect_equal(rownames(sim), rownames(iron$geno[[1]]))
    expect_equal(colnames(sim), rownames(iron$geno[[1]]))
    f2_geno2alle <-
        function(prob)
        {
            prob[,,1] <- prob[,,1]+prob[,,2]/2
            prob[,,2] <- prob[,,3]+prob[,,2]/2
            prob[,,1:2]
        }
    # check a few values
    set.seed(54028069)
    n_ind <- nrow(probs[[1]])
    pairs <- list(c(1,2))
    for(i in 1:5)
        pairs <- c(pairs, list(sample(n_ind, 2), sample(n_ind, 2)))
    expected <- rep(0, length(pairs))
    tot_pos <- 0
    is_x_chr <- attr(probs_sub, "is_x_chr")
    for(i in which(!is_x_chr)) { # just use autosomes
        for(k in seq(along=pairs)) {
            prob_1 <- probs_sub[[i]][pairs[[k]][1],,,drop=FALSE]
            prob_2 <- probs_sub[[i]][pairs[[k]][2],,,drop=FALSE]
            # autosomes: convert to allele probs
            prob_1 <- f2_geno2alle(prob_1)
            prob_2 <- f2_geno2alle(prob_2)
            expected[k] <- expected[k] + sum(prob_1 * prob_2)
        }
        tot_pos <- tot_pos + ncol(probs_sub[[i]])
    }
    expected <- expected/tot_pos
    for(k in seq(along=pairs))
        expect_equal(sim[pairs[[k]][1],pairs[[k]][2]], expected[k])
    # version using genotype probabilities
    sim <- calc_genetic_sim(probs, use_allele_probs=FALSE)
    sim2 <- calc_genetic_sim(probs, use_allele_probs=FALSE)
    expect_equal(sim, sim2)
    # check a few values
    expected <- rep(0, length(pairs))
    tot_pos <- 0
    for(i in which(!is_x_chr)) { # just use autosomes
        for(k in seq(along=pairs)) {
            prob_1 <- probs_sub[[i]][pairs[[k]][1],,,drop=FALSE]
            prob_2 <- probs_sub[[i]][pairs[[k]][2],,,drop=FALSE]
            expected[k] <- expected[k] + sum(prob_1 * prob_2)
        }
        tot_pos <- tot_pos + ncol(probs_sub[[i]])
    }
    expected <- expected/tot_pos
    for(k in seq(along=pairs))
        expect_equal(sim[pairs[[k]][1],pairs[[k]][2]], expected[k])
    # also try with X chr
    sim <- calc_genetic_sim(probs, omit_x=FALSE)
    # pre-subset to grid
    sim2 <- calc_genetic_sim(probs_sub, omit_x=FALSE)
    expect_equal(sim, sim2)
    # row and colnames okay
    expect_equal(rownames(sim), rownames(iron$geno[[1]]))
    expect_equal(colnames(sim), rownames(iron$geno[[1]]))
    # check a few values
    set.seed(54028069)
    n_ind <- nrow(probs[[1]])
    pairs <- list(c(1,2))
    for(i in 1:5)
        pairs <- c(pairs, list(sample(n_ind, 2), sample(n_ind, 2)))
    expected <- rep(0, length(pairs))
    tot_pos <- 0
    for(i in seq(along=probs_sub)) {
        for(k in seq(along=pairs)) {
            prob_1 <- probs_sub[[i]][pairs[[k]][1],,,drop=FALSE]
            prob_2 <- probs_sub[[i]][pairs[[k]][2],,,drop=FALSE]
            if(!is_x_chr[i]) { # autosomes: convert to allele probs
                prob_1 <- f2_geno2alle(prob_1)
                prob_2 <- f2_geno2alle(prob_2)
            }
            expected[k] <- expected[k] + sum(prob_1 * prob_2)
        }
        tot_pos <- tot_pos + ncol(probs_sub[[i]])
    }
    expected <- expected/tot_pos
    for(k in seq(along=pairs))
        expect_equal(sim[pairs[[k]][1],pairs[[k]][2]], expected[k])
    # version using genotype probabilities
    sim <- calc_genetic_sim(probs, omit_x=FALSE, use_allele_probs=FALSE)
    sim2 <- calc_genetic_sim(probs, omit_x=FALSE, use_allele_probs=FALSE)
    expect_equal(sim, sim2)
    # check a few values
    expected <- rep(0, length(pairs))
    tot_pos <- 0
    for(i in seq(along=probs_sub)) {
        for(k in seq(along=pairs)) {
            prob_1 <- probs_sub[[i]][pairs[[k]][1],,,drop=FALSE]
            prob_2 <- probs_sub[[i]][pairs[[k]][2],,,drop=FALSE]
            expected[k] <- expected[k] + sum(prob_1 * prob_2)
        }
        tot_pos <- tot_pos + ncol(probs_sub[[i]])
    }
    expected <- expected/tot_pos
    for(k in seq(along=pairs))
        expect_equal(sim[pairs[[k]][1],pairs[[k]][2]], expected[k])
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.