This notebook can be used for testing functions to compute asymptotic selection responses.
asym_sel_res.R
#s_a <- "../inst/extdata/economic_values/AN_economic_values_Silvan" s_a <- "../inst/extdata/economic_values/LM_economic_values_Silvan" df_a <- read.table(file = s_a, sep=";", header=TRUE) mat_a <- as.matrix(df_a) pvec_economic_values <- as.vector(mat_a) n_r_trait <- length(pvec_economic_values) n_r_trait
pvec_proportion_progeny_adult <- 0.5 pvec_number_progeny <- c(20,5) proportion_calves <- 1 - pvec_proportion_progeny_adult proportion_calves pvec_proportion_selected <- c(0.1,0.5) pvec_generation_interval <- c(5.7,5.4)
male_number_adults <- floor(pvec_proportion_progeny_adult*pvec_number_progeny[[1]]) male_number_adults male_number_calves <- pvec_number_progeny[[1]] - male_number_adults male_number_calves
### ## Building Design Matrix Z ### ## Design Matrix for one calf male_designMatrix_calf <- cbind(c(1,0,0),c(0,0,0),c(0,1,0),c(0,0,0),c(0,0,1),c(0,0,0)) male_designMatrix_calf ### ## Design Matrix for one adult male_designMatrix_adult <- cbind(c(0,0,0),c(1,0,0),c(0,0,0),c(0,1,0),c(0,0,0),c(0,0,1)) male_designMatrix_adult ### ## Design Matrix for calves male_designMatrix_calves <- diag(1,male_number_calves)%x%male_designMatrix_calf dim(male_designMatrix_calves) male_designMatrix_calves <- cbind(male_designMatrix_calves, matrix(0, nrow=nrow(male_designMatrix_calves), ncol=male_number_adults*n_r_trait)) dim(male_designMatrix_calves) ### ## Design Matrix for adults male_designMatrix_adults <- diag(1,male_number_adults)%x%male_designMatrix_adult dim(male_designMatrix_adults) male_designMatrix_adults <- cbind(matrix(0, nrow=nrow(male_designMatrix_adults), ncol=male_number_calves*n_r_trait), male_designMatrix_adults) dim(male_designMatrix_adults) ### ## Bind Design Matrix for calves and adults male_designMatrixZ <- rbind(male_designMatrix_calves, male_designMatrix_adults) ### ## Add selection candidate male_designMatrixZ<-cbind(matrix(0, nrow=pvec_number_progeny[[1]]*(n_r_trait/2),ncol=n_r_trait),male_designMatrixZ)
## residual s_residual_var_cov <- "../inst/extdata/variance_component_values/adults_calves_residual_variances_covariances" df_residual_var_cov <- read.table(file = s_residual_var_cov, sep=";", header=TRUE) mat_residual_var_cov <- as.matrix(df_residual_var_cov) pmat_residual_varcov <- mat_residual_var_cov pmat_residual_varcov mat_residual_var_cov_calves <- pmat_residual_varcov[c(1,3,5),c(1,3,5)] mat_residual_var_cov_calves mat_residual_var_cov_adults <- pmat_residual_varcov[c(2,4,6),c(2,4,6)] mat_residual_var_cov_adults male_calves_kronecker_residual <- diag(male_number_calves) %x% mat_residual_var_cov_calves male_adults_kronecker_residual <- diag(male_number_adults) %x% mat_residual_var_cov_adults male_calves_kronecker_residual_extended <- cbind(male_calves_kronecker_residual, matrix(0,nrow=nrow(male_calves_kronecker_residual), ncol=ncol(male_adults_kronecker_residual))) male_adults_kronecker_residual_extended <- cbind(matrix(0,nrow=nrow(male_adults_kronecker_residual), ncol=ncol(male_calves_kronecker_residual)), male_adults_kronecker_residual) male_ResidualMatrix <- rbind(male_calves_kronecker_residual_extended,male_adults_kronecker_residual_extended)
mnumb <- pvec_number_progeny[[1]]+1 male_Pedigree <- pedigreemm::pedigree(sire = c(NA,rep(1,times = pvec_number_progeny[[1]])), dam =c(NA,rep(NA,times = pvec_number_progeny[[1]])), label = 1:mnumb) ### ## Compute inverse of A male_AInv <- as.matrix(pedigreemm::getAInv(male_Pedigree)) dim(male_AInv)
s_genetic_var_cov <- "../inst/extdata/variance_component_values/adults_calves_genetic_variances_covariances" df_genetic_var_cov <- read.table(file = s_genetic_var_cov, sep=";", header=TRUE) pmat_genetic_varcov <- as.matrix(df_genetic_var_cov) pmat_genetic_varcov
male_PEV <- solve(t(male_designMatrixZ)%*%solve(male_ResidualMatrix)%*%male_designMatrixZ+male_AInv%x%solve(pmat_genetic_varcov)) ### ## Computation of PEV for selection candidate male_PEV <- male_PEV[1:n_r_trait,1:n_r_trait]
mat_male_var_cov_pbv <- pmat_genetic_varcov - male_PEV
female_number_adults <- floor(pvec_proportion_progeny_adult*pvec_number_progeny[[2]]) female_number_calves <- pvec_number_progeny[[2]] - female_number_adults
### ## Design Matrix for one calf female_designMatrix_calf <- cbind(c(1,0,0),c(0,0,0),c(0,1,0),c(0,0,0),c(0,0,1),c(0,0,0)) ### ## Design Matrix for one adult female_designMatrix_adult <- cbind(c(0,0,0),c(1,0,0),c(0,0,0),c(0,1,0),c(0,0,0),c(0,0,1)) ### ## Design Matrix for calves female_designMatrix_calves <- diag(1,female_number_calves)%x%female_designMatrix_calf female_designMatrix_calves <- cbind(female_designMatrix_calves, matrix(0, nrow=nrow(female_designMatrix_calves), ncol=female_number_adults*n_r_trait)) ### ## Design Matrix for adults female_designMatrix_adults <- diag(1,female_number_adults)%x%female_designMatrix_adult female_designMatrix_adults <- cbind(matrix(0, nrow=nrow(female_designMatrix_adults), ncol=female_number_calves*n_r_trait), female_designMatrix_adults) ### ## Bind Design Matrix for calves and adults female_designMatrixZ <- rbind(female_designMatrix_calves, female_designMatrix_adults) ### ## Add selection candidate female_designMatrixZ<-cbind(matrix(0, nrow=pvec_number_progeny[[2]]*(n_r_trait/2),ncol=n_r_trait),female_designMatrixZ)
female_calves_kronecker_residual <- diag(female_number_calves) %x% mat_residual_var_cov_calves female_adults_kronecker_residual <- diag(female_number_adults) %x% mat_residual_var_cov_adults female_calves_kronecker_residual_extended <- cbind(female_calves_kronecker_residual, matrix(0,nrow=nrow(female_calves_kronecker_residual), ncol=ncol(female_adults_kronecker_residual))) female_adults_kronecker_residual_extended <- cbind(matrix(0,nrow=nrow(female_adults_kronecker_residual), ncol=ncol(female_calves_kronecker_residual)), female_adults_kronecker_residual) female_ResidualMatrix <- rbind(female_calves_kronecker_residual_extended,female_adults_kronecker_residual_extended)
fnumb <- pvec_number_progeny[[2]]+1 female_Pedigree <- pedigreemm::pedigree(sire = c(NA,rep(NA,times = pvec_number_progeny[[2]])), dam = c(NA,rep(1,times = pvec_number_progeny[[2]])), label = 1:fnumb) ### ## Compute inverse of A female_AInv <- as.matrix(pedigreemm::getAInv(female_Pedigree))
female_PEV <- solve(t(female_designMatrixZ)%*%solve(female_ResidualMatrix)%*%female_designMatrixZ+female_AInv%x%solve(pmat_genetic_varcov)) ### ## Computation of PEV for selection candidate female_PEV <- female_PEV[1:n_r_trait,1:n_r_trait]
mat_female_var_cov_pbv <- pmat_genetic_varcov - female_PEV
male_i <- dnorm(qnorm(1-pvec_proportion_selected[[1]]))/pvec_proportion_selected[[1]] male_x <- qnorm(pvec_proportion_selected[[1]], lower.tail = FALSE) male_k <- male_i*(male_i-male_x) female_i <- dnorm(qnorm(1-pvec_proportion_selected[[2]]))/pvec_proportion_selected[[2]] female_x <- qnorm(pvec_proportion_selected[[2]], lower.tail = FALSE) female_k <- female_i*(female_i-female_x)
mat_kInv <- solve(matrix(c(1+0.5*male_k, 0.5*female_k,0.5*male_k, 1+0.5*female_k),nrow = 2, ncol = 2, byrow=TRUE)) mat_var_fact_reduction <- mat_kInv%x%diag(1,n_r_trait) mat_var_cov_pbv <- rbind(mat_male_var_cov_pbv, mat_female_var_cov_pbv) mat_asympt_var_cov_pbv <- mat_var_fact_reduction%*%mat_var_cov_pbv
### ## Separate asymptotic variance covariance matrix for male and female mat_male_asympt_var_cov_pbv <- mat_asympt_var_cov_pbv[1:n_r_trait,] mat_female_asympt_var_cov_pbv <- mat_asympt_var_cov_pbv[(n_r_trait+1):nrow(mat_asympt_var_cov_pbv),] result_asym_sel_res <- (male_i*sqrt(t(as.matrix(pvec_economic_values))%*%mat_male_asympt_var_cov_pbv%*%as.matrix(pvec_economic_values))+ female_i*sqrt(t(as.matrix(pvec_economic_values))%*%mat_female_asympt_var_cov_pbv%*%as.matrix(pvec_economic_values)))/ sum(pvec_generation_interval) result_asym_sel_res
asym_sel_res.R
(res_LM_asym_select_response <- MeatValueIndex::compute_asym_selection_response(pvec_economic_values = pvec_economic_values, pvec_proportion_selected = pvec_proportion_selected, pvec_generation_interval = pvec_generation_interval, pvec_number_progeny = pvec_number_progeny, pvec_proportion_progeny_adult = pvec_proportion_progeny_adult, pmat_genetic_varcov = pmat_genetic_varcov, pmat_residual_varcov = pmat_residual_varcov, pb_out = FALSE))
s_a_OB_B <- "../inst/extdata/economic_values/OB_economic_values_SzenarioB" df_a_OB_B <- read.table(file = s_a_OB_B, sep=";", header=TRUE) mat_a_OB_B <- as.matrix(df_a_OB_B) pvec_economic_values_OB_szenarioB <- as.vector(mat_a_OB_B) (res_OB_szenarioB_asym_select_response <- MeatValueIndex::compute_asym_selection_response(pvec_economic_values = pvec_economic_values_OB_szenarioB, pvec_proportion_selected = pvec_proportion_selected, pvec_generation_interval = pvec_generation_interval, pvec_number_progeny = pvec_number_progeny, pvec_proportion_progeny_adult = pvec_proportion_progeny_adult, pmat_genetic_varcov = pmat_genetic_varcov, pmat_residual_varcov = pmat_residual_varcov, pb_out = FALSE))
s_a_OB_BStern <- "../inst/extdata/economic_values/OB_economic_values_SzenarioB*" df_a_OB_BStern <- read.table(file = s_a_OB_BStern, sep=";", header=TRUE) mat_a_OB_BStern <- as.matrix(df_a_OB_BStern) pvec_economic_values_OB_szenarioBStern <- as.vector(mat_a_OB_BStern) (res_OB_szenarioB_asym_select_response <- MeatValueIndex::compute_asym_selection_response(pvec_economic_values = pvec_economic_values_OB_szenarioBStern, pvec_proportion_selected = pvec_proportion_selected, pvec_generation_interval = pvec_generation_interval, pvec_number_progeny = pvec_number_progeny, pvec_proportion_progeny_adult = pvec_proportion_progeny_adult, pmat_genetic_varcov = pmat_genetic_varcov, pmat_residual_varcov = pmat_residual_varcov, pb_out = FALSE))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.