Economic selection indices for multiple traits

Overview

We will build economic selection indices for multiple traits using birth weight (BWT) and calving difficulty (CD) in the beef cattle data.

Phenotypic covariance matrix

Variance of BWT is 110.5760529 and variance of z-score transformed CD is 0.9840235, and covariance between BWT and CD is 0.9727331.

P <- matrix(c(110.5760529, 0.9727331, 0.9727331, 0.9840235), ncol = 2)

Genetic covariance matrix (pedigree)

Additive genetic variance of BWT is 84.561 and additive genetic variance of z-score transformed CD is 0.385, and additive genetic covariance between BWT and CD is 3.635.

G.A <- matrix(c(84.561, 3.635, 3.635, 0.385), ncol = 2)

Genetic covariance matrix (genomics)

Additive genomic variance of BWT is 23.780 and additive genomic variance of z-score transformed CD is 0.862, and additive genomic covariance between BWT and CD is 0.077.

G.G <- matrix(c(23.78, 0.862, 0.862, 0.077), ncol = 2)

Shiny package

Install the shiny package and load to your R environment.

install.packages("shiny")
library(shiny)

Interactive Shiny application

Select ecnomic values for BWT and CD and see how selection index parameters vary between pedigree and genomic information.

server <- function(input, output) {
    
    P <- matrix(c(110.5760529, 0.9727331, 0.9727331, 0.9840235), ncol = 2)
    G.A <- matrix(c(84.561, 3.635, 3.635, 0.385), ncol = 2)
    G.G <- matrix(c(23.78, 0.862, 0.862, 0.077), ncol = 2)
    
    react <- reactive({
        w1 <- input$obs
        w2 <- input$obs2
        w <- c(input$obs, input$obs2)
        # b
        b.A <- solve(P) %*% G.A %*% w
        b.G <- solve(P) %*% G.G %*% w
        # sigma HI
        sigmaHI.A <- t(b.A) %*% G.A %*% w
        sigmaHI.G <- t(b.G) %*% G.G %*% w
        # sigma2 I
        sigma2I.A <- t(b.A) %*% P %*% b.A
        sigma2I.G <- t(b.G) %*% P %*% b.G
        # sigma2 H
        sigma2H.A <- t(w) %*% G.A %*% w
        sigma2H.G <- t(w) %*% G.G %*% w
        # r HI accuracy
        rHI.A <- sigmaHI.A/(sqrt(sigma2I.A * sigma2H.A))
        rHI.G <- sigmaHI.G/(sqrt(sigma2I.G * sigma2H.G))
        # RH
        RH.A <- sigmaHI.A/sqrt(sigma2I.A)
        RH.G <- sigmaHI.G/sqrt(sigma2I.G)
        # RE
        RE.A <- RH.A/RH.G
        RE.G <- RH.G/RH.A
        
        df <- data.frame(Pedigree = c(b.A[1], b.A[2], sigmaHI.A, sigma2I.A, 
            sigma2H.A, rHI.A, RH.A, RE.A), Genomics = c(b.G[1], b.G[2], sigmaHI.G, 
            sigma2I.G, sigma2H.G, rHI.G, RH.G, RE.G))
        row.names(df) <- c("Selection index coefficient for BWT (b1)", "Selection index coefficient for CD (b2)", 
            "Covariance between index and aggregate genotype (sigma_HI)", "Variance of the index (sigma2_I)", 
            "Variance of aggregate genotype (sigma2_H)", "Selection accuracy (r_HI)", 
            "Response (R_H)", "Relative efficiency")
        df
    })
    
    output$view <- renderTable({
        react()
    }, include.rownames = TRUE)
    
}




ui <- fluidPage(sidebarLayout(sidebarPanel(numericInput("obs", "Economic value for BWT (w1):", 
    -1), numericInput("obs2", "Economic value for CD (w2):", -2)), mainPanel(tableOutput("view"))))



shinyApp(ui = ui, server = server)

Gota Morota

April 25, 2017