Nothing
#' LRT Threshold
#'
#' The LRT threshold for QTL interval mapping based on the
#' Gaussian stochastic process (Kao and Ho 2012).
#'
#' @param marker matrix. A k*2 matrix contains the marker information,
#' where the row dimension 'k' represents the number of markers in the
#' chromosomes. The first column labels the chromosomes where the markers
#' are located, and the second column labels the positions of markers (in
#' morgan (M) or centimorgan (cM)). It's important to note that chromosomes
#' and positions must be sorted in order.
#' @param type character. The population type of the dataset. Includes
#' backcross (type="BC"), advanced intercross population (type="AI"), and
#' recombinant inbred population (type="RI"). The default value is "RI".
#' @param ng integer. The generation number of the population type. For
#' instance, in a BC1 population where type="BC", ng=1; in an AI F3
#' population where type="AI", ng=3.
#' @param cM logical. Specify the unit of marker position. If cM=TRUE, it
#' denotes centimorgan; if cM=FALSE, it denotes morgan.
#' @param ns integer. The number of individuals for generating the
#' individual trait values. Changes in this value do not significantly
#' affect the outcome of the LRT threshold value.
#' @param gv numeric. The genetic variance for generating the
#' individual trait values. Changes in this value do not significantly
#' affect the outcome of the LRT threshold value.
#' @param speed numeric. The walking speed of the QTL analysis (in cM).
#' @param simu integer. Determines the number of simulation samples that
#' will be used to compute the LRT threshold using the Gaussian process.
#' @param d.eff logical. Specifies whether the dominant effect will be
#' considered in the parameter estimation for AI or RI population.
#' @param alpha numeric. The type I error rate for the LRT threshold.
#' @param console logical. Determines whether the process of the algorithm
#' will be displayed in the R console or not.
#'
#' @return
#'
#' The LRT threshold for QTL interval mapping.
#'
#' @export
#'
#' @references
#'
#' KAO, C.-H. and H.-A. Ho 2012 A score-statistic approach for determining
#' threshold values in QTL mapping. Frontiers in Bioscience. E4, 2670-2682. <doi: 10.2741/e582>
#'
#' @seealso
#' \code{\link[mvtnorm]{rmvnorm}}
#'
#' @examples
#' # load the example data
#' load(system.file("extdata", "exampledata.RDATA", package = "QTLEMM"))
#'
#' # run and result
#' LRTthre(marker, type = "RI", ng = 2, speed = 2, simu = 60)
LRTthre <- function(marker, type = "RI", ng = 2, cM = TRUE, ns = 200, gv = 25,
speed = 1, simu = 1000, d.eff = FALSE, alpha = 0.05, console = interactive()){
if(is.null(marker)){
stop("Input data is missing, please cheak and fix.", call. = FALSE)
}
markertest <- c(ncol(marker) != 2, NA %in% marker, marker[,1] != sort(marker[,1]))
datatry <- try(marker*marker, silent=TRUE)
if(class(datatry)[1] == "try-error" | TRUE %in% markertest){
stop("Marker data error, or the number of marker does not match the genetype data.", call. = FALSE)
}
if(!cM[1] %in% c(0,1) | length(cM > 1)){cM <- TRUE}
if(!type[1] %in% c("AI","RI","BC") | length(type) > 1){
stop("Parameter type error, please input AI, RI, or BC.", call. = FALSE)
}
if(!is.numeric(ng) | length(ng) > 1 | min(ng) < 1){
stop("Parameter ng error, please input a positive integer.", call. = FALSE)
}
ng <- round(ng)
datatry <- try(ns%*%gv, silent=TRUE)
if(class(datatry)[1] == "try-error" | length(ns) > 1 | length(gv) > 1){
stop("Parameter ns or gv error, please input a positive integer.", call. = FALSE)
}
if(!d.eff[1] %in% c(0,1) | length(d.eff) > 1){d.eff <- TRUE}
if(!is.numeric(simu) | length(simu) > 1 | min(simu) < 20 | max(simu) > 10^8){
simu = 1000
}
cs <- 100
if(simu < 200){cs <- 20}
if(!is.numeric(speed) | length(speed) > 1 | min(speed) < 0){
stop("Parameter speed error, please input a positive number.", call. = FALSE)
}
if(!is.numeric(alpha) | length(alpha) > 1 | min(alpha) < 0 | max(alpha) > 1){
stop("Parameter alpha error, please input a positive number between 0 and 1.", call. = FALSE)
}
if(!console[1] %in% c(0,1) | length(console) > 1){console <- TRUE}
if(cM){
marker[, 2] <- marker[, 2]/100
}
Diff.P <- function (Freq){
Diff22 <- (Freq[1]-Freq[3])/sum(Freq[1:3])
Diff21 <- (Freq[4]-Freq[7])/sum(Freq[4:7])
Diff20 <- (Freq[8]-Freq[10])/sum(Freq[8:10])
Diff12 <- (Freq[11]-Freq[14])/sum(Freq[11:14])
Diff <- c(Diff22, Diff21, Diff20, Diff12, 0, -Diff12, -Diff20, -Diff21, -Diff22)
return(Diff)
}
Diff.k <- function (Freq){
Diff22 <- (Freq[1]-Freq[3])/sum(Freq[1:3])
Diff21 <- (Freq[4]-Freq[7])/sum(Freq[4:7])
Diff20 <- (Freq[8]-Freq[10])/sum(Freq[8:10])
Diff12 <- (Freq[11]-Freq[14])/sum(Freq[11:14])
Diff <- c(Diff22, Diff21, Diff20, Diff12, 0, -Diff12, -Diff20, -Diff21, -Diff22)
return(Diff)
}
Diff.l <- function (Freq){
Diff22 <- (Freq[2]-Freq[1]-Freq[3])/sum(Freq[1:3])
Diff21 <- (Freq[5]+Freq[6]-Freq[4]-Freq[7])/sum(Freq[4:7])
Diff20 <- (Freq[9]-Freq[8]-Freq[10])/sum(Freq[8:10])
Diff12 <- (Freq[12]+Freq[13]-Freq[11]-Freq[14])/sum(Freq[11:14])
Diff11 <- (sum(Freq[17:20])-2*(Freq[15]+Freq[16]))/(sum(Freq[15:20])+Freq[15]+Freq[16])
Diff <- c(Diff22, Diff21, Diff20, Diff12, Diff11, Diff12, Diff20, Diff21, Diff22)
return(Diff)
}
cr <- unique(marker[, 1])
ncr <- length(cr)
thre <- c()
if(type == "BC"){
thre.fun <- function(d, nG, simu, nS, ss, console = FALSE, cr = 0, speed = 1){
d <- d*100
marker <- length(d)+1
D <- sum(d)
cov <- matrix(0, ncol = 2*marker, nrow = 2*marker)
bcp3M <- function(d1, d2, nG){
r1 <- (1-exp(-2*d1/100))/2
r2 <- (1-exp(-2*d2/100))/2
pABC <- pABc <- pAbC <- paBC <- pabC <- paBc <- pAbc <- pabc <- c()
pABC[1] <- (1-r1)*(1-r2)/2
pABc[1] <- (1-r1)*r2/2
pAbC[1] <- r1*r2/2
paBC[1] <- r1*(1-r2)/2
pabC[1] <- (1-r1)*r2/2
paBc[1] <- r1*r2/2
pAbc[1] <- r1*(1-r2)/2
pabc[1] <- (1-r1)*(1-r2)/2
if(nG > 1){
for(i in 2:nG){
pABC[i] <- pABC[i-1]+1/2*pABc[i-1]+1/2*pAbC[i-1]+1/2*paBC[i-1]+(1-r1)/2*pabC[i-1]+
((1-r1)*(1-r2)+r1*r2)/2*paBc[i-1]+(1-r2)/2*pAbc[i-1]+(1-r1)*(1-r2)/2*pabc[i-1]
pABc[i] <- 1/2*pABc[i-1]+(r1*(1-r2)+(1-r1)*r2)/2*paBc[i-1]+r2/2*pAbc[i-1]+(1-r1)*r2/2*pabc[i-1]
pAbC[i] <- 1/2*pAbC[i-1]+r1/2*pabC[i-1]+r2/2*pAbc[i-1]+r1*r2/2*pabc[i-1]
paBC[i] <- 1/2*paBC[i-1]+r1/2*pabC[i-1]+((1-r1)*r2+r1*(1-r2))/2*paBc[i-1]+r1*(1-r2)/2*pabc[i-1]
pabC[i] <- (1-r1)/2*pabC[i-1]+(1-r1)*r2/2*pabc[i-1]
paBc[i] <- ((1-r1)*(1-r2)+r1*r2)/2*paBc[i-1]+r1*r2/2*pabc[i-1]
pAbc[i] <- (1-r2)/2*pAbc[i-1]+r1*(1-r2)/2*pabc[i-1]
pabc[i] <- (1-r1)*(1-r2)/2*pabc[i-1]
}
}
re <- c(pABC[nG], pABc[nG], pAbC[nG], paBC[nG], pabC[nG], paBc[nG], pAbc[nG], pabc[nG])
return(re)
}
bcp2M <- function(d, nG){
r <- (1-exp(-2*d/100))/2
pAB <- pAb <- paB <- pab <- c()
pAB[1] <- (1-r)/2
pAb[1] <- r/2
paB[1] <- r/2
pab[1] <- (1-r)/2
if(nG > 1){
for(i in 2:nG){
pAB[i] <- pAB[i-1]+1/2*pAb[i-1]+1/2*paB[i-1]+(1-r)/2*pab[i-1]
pAb[i] <- 1/2*pAb[i-1]+r/2*pab[i-1]
paB[i] <- 1/2*paB[i-1]+r/2*pab[i-1]
pab[i] <- (1-r)/2*pab[i-1]
}
}
re <- c(pAB[nG], pAb[nG], paB[nG], pab[nG])
return(re)
}
b3.12 <- bcp3M(d[1], d[2], nG)
b2.1 <- bcp2M(d[1], nG)
b2.2 <- bcp2M(d[2], nG)
if(marker > 2){
cov[c(1:4), c(5, 6)] <- c(b3.12[1]/sqrt(b2.1[1]*b2.2[1]), 0,
b3.12[4]/sqrt(b2.1[3]*b2.2[1]), 0,
0, b3.12[3]/sqrt(b2.1[2]*b2.2[3]),
0, b3.12[5]/sqrt(b2.1[4]*b2.2[3]))
}
if(marker > 3){
for(k in 4:marker){
bcp4M <- function(d1, d2, d3, nG){
r1 <- (1-exp(-2*d1/100))/2
r2 <- (1-exp(-2*d2/100))/2
r3 <- (1-exp(-2*d3/100))/2
pABCD <- pABCd <- pABcD <- pAbCD <- paBCD <- pABcd <- c()
pAbCd <- paBCd <- pAbcD <- paBcD <- pabCD <- pabcD <- c()
pabCd <- paBcd <- pAbcd <- pabcd <- c()
pABCD[1] <- (1-r1)*(1-r2)*(1-r3)/2
pABCd[1] <- (1-r1)*(1-r2)*r3/2
pABcD[1] <- (1-r1)*r2*r3/2
pAbCD[1] <- r1*r2*(1-r3)/2
paBCD[1] <- r1*(1-r2)*(1-r3)/2
pABcd[1] <- (1-r1)*r2*(1-r3)/2
pAbCd[1] <- r1*r2*r3/2
paBCd[1] <- r1*(1-r2)*r3/2
pAbcD[1] <- r1*(1-r2)*r3/2
paBcD[1] <- r1*r2*r3/2
pabCD[1] <- (1-r1)*r2*(1-r3)/2
pabcD[1] <- (1-r1)*(1-r2)*r3/2
pabCd[1] <- (1-r1)*r2*r3/2
paBcd[1] <- r1*r2*(1-r3)/2
pAbcd[1] <- r1*(1-r2)*(1-r3)/2
pabcd[1] <- (1-r1)*(1-r2)*(1-r3)/2
if(nG > 1){
for(i in 2:nG){
pABCD[i] <- pABCD[i-1]+1/2*pABCd[i-1]+1/2*pABcD[i-1]+1/2*pAbCD[i-1]+1/2*paBCD[i-1]+(1-r3)/2*pABcd[i-1]+
((1-r2)*(1-r3)+r2*r3)/2*pAbCd[i-1]+
((1-r1)*(1-r2)*(1-r3)+r1*r2*(1-r3)+(1-r1)*r2*r3+r1*(1-r2)*r3)/2*paBCd[i-1]+
(1-r2)/2*pAbcD[i-1]+((1-r1)*(1-r2)+r1*r2)/2*paBcD[i-1]+ (1-r1)/2*pabCD[i-1]+(1-r1)*(1-r2)/2*pabcD[i-1]+
((1-r1)*(1-r2)*(1-r3)+(1-r1)*r2*r3)/2*pabCd[i-1]+ ((1-r1)*(1-r2)*(1-r3)+r1*r2*(1-r3))/2*paBcd[i-1]+
(1-r2)*(1-r3)/2*pAbcd[i-1]+(1-r1)*(1-r2)*(1-r3)/2*pabcd[i-1]
pABCd[i] <- 1/2*pABCd[i-1]+((1-r2)*r3+r2*r3)/2*pABcd[i-1]+ ((1-r2)*r3+r2*(1-r3))/2*pAbCd[i-1]+
(r1*(1-r2)*(1-r3)+r1*r2*r3+(1-r1)*r2*(1-r3)+ (1-r1)*(1-r2)*r3)/2*paBCd[i-1]+
(1-r1)*((1-r2)*r3+r2*(1-r3))/2*pabCd[i-1]+((1-r1)*(1-r2)+r1*r2)*r3/2*paBcd[i-1]+
(1-r2)*r3/2*pAbcd[i-1]+ (1-r1)*(1-r2)*r3/2*pabcd[i-1]
pABcD[i] <- 1/2*pABcD[i-1]+((1-r2)*r3+r2*r3)/2*pABcd[i-1]+ ((1-r1)*r2+r1*r2)/2*pAbcD[i-1]+
(r1*(1-r2)+(1-r1)*r2)/2*paBcD[i-1]+ (1-r1)*r2/2*pabcD[i-1]+
((1-r1)*r2+r1*(1-r2))*r3/2*paBcd[i-1]+ r2*r3/2*pAbcd[i-1]+(1-r1)*r2*r3/2*pabcd[i-1]
pAbCD[i] <- 1/2*pAbCD[i-1]+((1-r2)*r3+r2*(1-r3))/2*pAbCd[i-1]+r2/2*pAbcD[i-1]+r1/2*pabCD[i-1]+r1*r2/2*pabcD[i-1]+
r1*((1-r2)*r3+r2*(1-r3))/2*pabCd[i-1]+r2*(1-r3)/2*pAbcd[i-1]+ r1*r2*(1-r3)/2*pabcd[i-1]
paBCD[i] <- 1/2*paBCD[i-1]+(r1*(1-r2)*(1-r3)+r1*r2*r3+(1-r1)*r2*(1-r3)+ (1-r1)*(1-r2)*r3)/2*paBCd[i-1]+
(r1*(1-r2)+(1-r1)*r2)/2*paBcD[i-1]+ r1/2*pabCD[i-1]+r1*(1-r2)/2*pabcD[i-1]+ r1*((1-r2)*(1-r3)+r2*r3)/2*pabCd[i-1]+
((1-r1)*r2+r1*(1-r2))*(1-r3)/2*paBcd[i-1]+ r1*(1-r2)*(1-r3)/2*pabcd[i-1]
pABcd[i] <- (1-r3)/2*pABcd[i-1]+((1-r1)*r2+r1*(1-r2))*(1-r3)/2*paBcd[i-1]+
r2*(1-r3)/2*pAbcd[i-1]+(1-r1)*r2*(1-r3)/2*pabcd[i-1]
pAbCd[i] <- ((1-r2)*(1-r3)+r2*r3)/2*pAbCd[i-1]+ r1*((1-r2)*(1-r3)+r2*r3)/2*pabCd[i-1]+
r2*r3/2*pAbcd[i-1]+r1*r2*r3/2*pabcd[i-1]
paBCd[i] <- ((1-r1)*(1-r2)*(1-r3)+r1*r2*(1-r3)+(1-r1)*r2*r3+ r1*(1-r2)*r3)/2*paBCd[i-1]+
r1*((1-r2)*r3+r2*(1-r3))/2*pabCd[i-1]+ ((1-r1)*r2+r1*(1-r2))*r3/2*paBcd[i-1]+r1*(1-r2)*r3/2*pabcd[i-1]
pAbcD[i] <- (1-r2)/2*pAbcD[i-1]+r1*(1-r2)/2*pabcD[i-1]+(1-r2)*r3/2*pAbcd[i-1]+ r1*(1-r2)*r3/2*pabcd[i-1]
paBcD[i] <- ((1-r1)*(1-r2)+r1*r2)/2*paBcD[i-1]+r1*r2/2*pabcD[i-1]+
((1-r1)*(1-r2)+r1*r2)*r3/2*paBcd[i-1]+r1*r2*r3/2*pabcd[i-1]
pabCD[i] <- (1-r1)/2*pabCD[i-1]+(1-r1)*r2/2*pabcD[i-1]+
(1-r1)*((1-r2)*r3+r2*(1-r3))/2*pabCd[i-1]+(1-r1)*r2*(1-r3)/2*pabcd[i-1]
pabcD[i] <- (1-r1)*(1-r2)/2*pabcD[i-1]+(1-r1)*(1-r2)*r3/2*pabcd[i-1]
pabCd[i] <- (1-r1)*((1-r2)*(1-r3)+r2*r3)/2*pabCd[i-1]+(1-r1)*r2*r3/2*pabcd[i-1]
paBcd[i] <- ((1-r1)*(1-r2)+r1*r2)*(1-r3)/2*paBcd[i-1]+r1*r2*(1-r3)/2*pabcd[i-1]
pAbcd[i] <- (1-r2)*(1-r3)/2*pAbcd[i-1]+r1*(1-r2)*(1-r3)/2*pabcd[i-1]
pabcd[i] <- (1-r1)*(1-r2)*(1-r3)/2*pabcd[i-1]
}
}
re <- c(pABCD[nG], pABCd[nG], pABcD[nG], pAbCD[nG],
paBCD[nG], pABcd[nG], pAbCd[nG], paBCd[nG],
pAbcD[nG], paBcD[nG], pabCD[nG], pabcD[nG],
pabCd[nG], paBcd[nG], pAbcd[nG], pabcd[nG])
return(re)
}
b4.1k1 <- bcp4M(d[1], sum(d[2:(k-2)]), d[k-1], nG)
b2.k1 <- bcp2M(d[k-1], nG)
b2.k2 <- bcp2M(d[k-2], nG)
b3.k2k1 <- bcp3M(d[k-2], d[k-1], nG)
cov[1:4, c(2*k-1, 2*k)] <- c(b4.1k1[1]/sqrt(b2.1[1]*b2.k1[1]),
b4.1k1[4]/sqrt(b2.1[2]*b2.k1[1]),
b4.1k1[5]/sqrt(b2.1[3]*b2.k1[1]),
b4.1k1[11]/sqrt(b2.1[4]*b2.k1[1]),
b4.1k1[3]/sqrt(b2.1[1]*b2.k1[3]),
b4.1k1[9]/sqrt(b2.1[2]*b2.k1[3]),
b4.1k1[10]/sqrt(b2.1[3]*b2.k1[3]),
b4.1k1[12]/sqrt(b2.1[4]*b2.k1[3]))
cov[c(2*k-3, 2*k-2), 2*k-1] <- c(b3.k2k1[1]/sqrt(b2.k2[1]*b2.k1[1]),
b3.k2k1[4]/sqrt(b2.k2[3]*b2.k1[1]))
}
for(k in 4:(marker-1)){
for(l in 1:(marker-k)){
b4.k2kl <- bcp4M(d[k-2], sum(d[(k-1):(k+l-2)]), d[k+l-1], nG)
b2.k2 <- bcp2M(d[k-2], nG)
b2.kl <- bcp2M(d[k+l-1], nG)
cov[c(2*k-3, 2*k-2), c(2*k+2*l-1, 2*k+2*l)] <- c(b4.k2kl[1]/sqrt(b2.k2[1]*b2.kl[1]),
b4.k2kl[5]/sqrt(b2.k2[3]*b2.kl[1]),
b4.k2kl[3]/sqrt(b2.k2[1]*b2.kl[3]),
b4.k2kl[10]/sqrt(b2.k2[3]*b2.kl[3]))
}
}
}
cov <- cov+t(cov)
diag(cov) <- 1
a <- mvtnorm::rmvnorm(simu, rep(0, 2*marker), cov)
y <- array(NA, dim = c(simu, 4, marker-1))
for(i in 1:simu){
y[i, 1, 1] <- a[i, 1]
y[i, 2, 1] <- a[i, 2]
y[i, 3, 1] <- a[i, 3]
y[i, 4, 1] <- a[i, 4]
if(marker > 2){
for(j in 2:(marker-1)){
y[i, 1, j] <- a[i, 2*j+1]
y[i, 3, j] <- a[i, 2*(j+1)]
y[i, 2, j] <- 1/sqrt(nS*bcp2M(d[j], nG)[2])*
(sqrt(nS*bcp2M(d[j-1], nG)[1])*y[i, 1, j-1]+sqrt(nS*bcp2M(d[j-1], nG)[3])*
y[i, 3, j-1]-sqrt(nS*bcp2M(d[j], nG)[1])*y[i, 1, j])
y[i, 4, j] <- 1/sqrt(nS*bcp2M(d[j], nG)[4])*
(sqrt(nS*bcp2M(d[j-1], nG)[2])*y[i, 2, j-1]+sqrt(nS*bcp2M(d[j-1], nG)[4])*
y[i, 4, j-1]-sqrt(nS*bcp2M(d[j], nG)[3])*y[i, 3, j])
}
}
if(i%%cs == 0){
cat(paste(paste("BC", nG, "\t"), cr, i, "\n", sep = "\t")[console])
}
}
cat(paste(paste("BC", nG, "\t"), cr, "done", "\n", sep = "\t")[console])
Ds <- seq(0, D, speed)
Dsc0 <- cumsum(d)
Dsc1 <- c(0, Dsc0[-length(Dsc0)])
Dsl <- length(Ds)
loci0 <- c(Dsc0[1])
loci1 <- c(0)
k0 <- c(1)
for(i in 2:Dsl){
loci0[i] <- min(Dsc0[Dsc0 >= Ds[i]])
loci1[i] <- max(Dsc1[Dsc1 < Ds[i]])
k0[i] <- which(Dsc0 == min(Dsc0[Dsc0 >= Ds[i]]))
}
AA <- BB <- CC <- DD <- c()
for(j in 1:(min(which(Ds >= Dsc0[1]))-1)){
b3.j1 <- bcp3M(Ds[j], loci0[j]-Ds[j], nG)
AA[j] <- nS*b2.1[2]*(-b3.j1[1]/b2.1[1]+b3.j1[3]/b2.1[1]+b3.j1[2]/b2.1[2]-b3.j1[7]/b2.1[2])+
nS*b2.1[3]*(-b3.j1[1]/b2.1[1]+b3.j1[3]/b2.1[1]+b3.j1[4]/b2.1[3]-b3.j1[5]/b2.1[3])+
nS*b2.1[4]*(-b3.j1[1]/b2.1[1]+b3.j1[3]/b2.1[1]+b3.j1[6]/b2.1[4]-b3.j1[8]/b2.1[4])
BB[j] <- nS*b2.1[1]*( b3.j1[1]/b2.1[1]-b3.j1[3]/b2.1[1]-b3.j1[2]/b2.1[2]+b3.j1[7]/b2.1[2])+
nS*b2.1[3]*(-b3.j1[2]/b2.1[2]+b3.j1[7]/b2.1[2]+b3.j1[4]/b2.1[3]-b3.j1[5]/b2.1[3])+
nS*b2.1[4]*(-b3.j1[2]/b2.1[2]+b3.j1[7]/b2.1[2]+b3.j1[6]/b2.1[4]-b3.j1[8]/b2.1[4])
CC[j] <- nS*b2.1[1]*( b3.j1[1]/b2.1[1]-b3.j1[3]/b2.1[1]-b3.j1[4]/b2.1[3]+b3.j1[5]/b2.1[3])+
nS*b2.1[2]*( b3.j1[2]/b2.1[2]-b3.j1[7]/b2.1[2]-b3.j1[4]/b2.1[3]+b3.j1[5]/b2.1[3])+
nS*b2.1[4]*(-b3.j1[4]/b2.1[3]+b3.j1[5]/b2.1[3]+b3.j1[6]/b2.1[4]-b3.j1[8]/b2.1[4])
DD[j] <- nS*b2.1[1]*( b3.j1[1]/b2.1[1]-b3.j1[3]/b2.1[1]-b3.j1[6]/b2.1[4]+b3.j1[8]/b2.1[4])+
nS*b2.1[2]*( b3.j1[2]/b2.1[2]-b3.j1[7]/b2.1[2]-b3.j1[6]/b2.1[4]+b3.j1[8]/b2.1[4])+
nS*b2.1[3]*( b3.j1[4]/b2.1[3]-b3.j1[5]/b2.1[3]-b3.j1[6]/b2.1[4]+b3.j1[8]/b2.1[4])
}
if(marker > 2){
for(j2 in (j+1):Dsl){
b2.k <- bcp2M(loci0[j2],nG)
loci <- Ds[length(AA)+1]
b3.kkj <- bcp3M(loci-loci1[j2], loci0[j2]-loci, nG)
AA[j2] <- nS*b2.k[2]*(-b3.kkj[1]/b2.k[1]+b3.kkj[3]/b2.k[1]+b3.kkj[2]/b2.k[2]-b3.kkj[7]/b2.k[2])+
nS*b2.k[3]*(-b3.kkj[1]/b2.k[1]+b3.kkj[3]/b2.k[1]+b3.kkj[4]/b2.k[3]-b3.kkj[5]/b2.k[3])+
nS*b2.k[4]*(-b3.kkj[1]/b2.k[1]+b3.kkj[3]/b2.k[1]+b3.kkj[6]/b2.k[4]-b3.kkj[8]/b2.k[4])
BB[j2] <- nS*b2.k[1]*( b3.kkj[1]/b2.k[1]-b3.kkj[3]/b2.k[1]-b3.kkj[2]/b2.k[2]+b3.kkj[7]/b2.k[2])+
nS*b2.k[3]*(-b3.kkj[2]/b2.k[2]+b3.kkj[7]/b2.k[2]+b3.kkj[4]/b2.k[3]-b3.kkj[5]/b2.k[3])+
nS*b2.k[4]*(-b3.kkj[2]/b2.k[2]+b3.kkj[7]/b2.k[2]+b3.kkj[6]/b2.k[4]-b3.kkj[8]/b2.k[4])
CC[j2] <- nS*b2.k[1]*( b3.kkj[1]/b2.k[1]-b3.kkj[3]/b2.k[1]-b3.kkj[4]/b2.k[3]+b3.kkj[5]/b2.k[3])+
nS*b2.k[2]*( b3.kkj[2]/b2.k[2]-b3.kkj[7]/b2.k[2]-b3.kkj[4]/b2.k[3]+b3.kkj[5]/b2.k[3])+
nS*b2.k[4]*(-b3.kkj[4]/b2.k[3]+b3.kkj[5]/b2.k[3]+b3.kkj[6]/b2.k[4]-b3.kkj[8]/b2.k[4])
DD[j2] <- nS*b2.k[1]*( b3.kkj[1]/b2.k[1]-b3.kkj[3]/b2.k[1]-b3.kkj[6]/b2.k[4]+b3.kkj[8]/b2.k[4])+
nS*b2.k[2]*( b3.kkj[2]/b2.k[2]-b3.kkj[7]/b2.k[2]-b3.kkj[6]/b2.k[4]+b3.kkj[8]/b2.k[4])+
nS*b2.k[3]*( b3.kkj[4]/b2.k[3]-b3.kkj[5]/b2.k[3]-b3.kkj[6]/b2.k[4]+b3.kkj[8]/b2.k[4])
}
}
b2M <- array(NA, dim = c(marker-1, 4))
for(i in 1:(marker-1)){
for(j in 1:4){
b2M[i, j] <- bcp2M(d[i], nG)[j]
}
}
umax <- c()
u <- array(NA, dim = c(simu, Dsl))
u2 <- array(NA, dim = c(simu, Dsl))
for(i in 1:simu){
for(j in 1:(min(which(Ds >= Dsc0[1]))-1)){
u[i, j] <- (-sqrt(nS*b2M[1, 1])*AA[j]*y[i, 1, 1]-sqrt(nS*b2M[1, 2])*BB[j]*y[i, 2, 1]-
sqrt(nS*b2M[1, 3])*CC[j]*y[i, 3, 1]-sqrt(nS*b2M[1, 4])*DD[j]*y[i, 4, 1])/
sqrt(nS*b2M[1, 1]*AA[j]^2+nS*b2M[1, 2]*BB[j]^2+nS*b2M[1, 3]*CC[j]^2+nS*b2M[1, 4]*DD[j]^2)
u2[i, j] <- u[i, j]^2
}
if(marker > 2){
for(j2 in (j+1):Dsl){
k <- k0[j2]
u[i, j2] <- (-sqrt(nS*b2M[k, 1])*AA[j2]*y[i, 1, k]-sqrt(nS*b2M[k, 2])*BB[j2]*y[i, 2, k]-
sqrt(nS*b2M[k, 3])*CC[j2]*y[i, 3, k]-sqrt(nS*b2M[k, 4])*DD[j2]*y[i, 4, k])/
sqrt(nS*b2M[k, 1]*AA[j2]^2+nS*b2M[k, 2]*BB[j2]^2+nS*b2M[k, 3]*CC[j2]^2+nS*b2M[k, 4]*DD[j2]^2)
u2[i, j2] <- u[i, j2]^2
}
}
umax[i] <- max(u2[i, ], na.rm = TRUE)
}
return(umax)
}
} else if (type == "RI"){
RI2 <- function (d, n.Generation){
r <- (1-exp(-2*d))/2
TransMatrix <- matrix(1:25, nrow = 5)
TransMatrix[1,] <- c(4, 0, 2, (1-r)^2, r^2)/4
TransMatrix[2,] <- c(0, 4, 2, r^2, (1-r)^2)/4
TransMatrix[3,] <- c(0, 0, 1, r*(1-r), r*(1-r))/2
TransMatrix[4,] <- c(0, 0, 0, (1-r)^2, r^2)/2
TransMatrix[5,] <- c(0, 0, 0, r^2, (1-r)^2)/2
Freq <- c(0, 0, 0, 1, 0)
n.Iteration <- n.Generation-1
ZygoteFreq <- matrix(rep(0, (9*n.Generation-9)), nrow = 9)
for (i in 1:n.Iteration) {
Freq <- TransMatrix%*%Freq
ZygoteFreq[, i]<-c(Freq[c(1, 3, 2, 3)], sum(Freq[4:5]), Freq[c(3, 2, 3, 1)])
}
ZygoteFreq[, n.Iteration]
}
RI3 <- function (d1, d2, n.Generation){
r1 <- (1-exp(-2*d1))/2
r2 <- (1-exp(-2*d2))/2
r <- (1-exp(-2*(d1+d2)))/2
f <- r1*(1-r2)+r2*(1-r1)
TransMatrix <- matrix(rep(0, 20^2), nrow = 20)
TransMatrix[1, ] <- c(4, 1, 0, 1, (1-r2)^2, r2^2, 0, 0, 0, 0, 1, (1-r1)^2, r1^2,
0, (1-f)^2, f^2, ((1-r1)*(1-r2))^2, (r1*r2)^2, ((1-r1)*r2)^2,
(r1*(1-r2))^2)/4
TransMatrix[2, ] <- c(0, 1, 0, 0, r2*(1-r2), r2*(1-r2), 0, 0, 0, 0, 0, r1*(1-r1),
r1*(1-r1), 0, 0, 0, rep(r1*(1-r1)*r2*(1-r2), 4))/2
TransMatrix[3, ] <- c(0, 1, 4, 0, r2^2, (1-r2)^2, 1, 0, 0, 0, 0, r1^2, (1-r1)^2,
1, (1-f)^2, f^2, (r1*r2)^2, ((1-r1)*(1-r2))^2, (r1*(1-r2))^2,
((1-r1)*r2)^2)/4
TransMatrix[4, ] <- c(0, 0, 0, 1, r2*(1-r2), r2*(1-r2), rep(0, 8), f*(1-f), f*(1-f),
(1-r1)^2*r2*(1-r2), r1^2*r2*(1-r2), (1-r1)^2*r2*(1-r2),
r1^2*r2*(1-r2))/2
TransMatrix[5, ] <- c(0, 0, 0, 0, (1-r2)^2, r2^2, rep(0, 10), r1*(1-r1)*(1-r2)^2,
r1*(1-r1)*r2^2, r1*(1-r1)*r2^2, r1*(1-r1)*(1-r2)^2)/2
TransMatrix[6, ] <- c(0, 0, 0, 0, r2^2, (1-r2)^2, rep(0, 10), r1*(1-r1)*r2^2,
r1*(1-r1)*(1-r2)^2, r1*(1-r1)*(1-r2)^2, r1*(1-r1)*r2^2)/2
TransMatrix[7, ] <- c(0, 0, 0, 0, r2*(1-r2), r2*(1-r2), 1, rep(0, 7), f*(1-f), f*(1-f),
r1^2*r2*(1-r2), (1-r1)^2*r2*(1-r2), r1^2*r2*(1-r2), (1-r1)^2*r2*(1-r2))/2
TransMatrix[8, ] <- c(0, 0, 0, 1, r2^2, (1-r2)^2, 0, 4, 1, 0, 0, (1-r1)^2, r1^2, 1, f^2,
(1-f)^2, ((1-r1)*r2)^2, (r1*(1-r2))^2, ((1-r1)*(1-r2))^2, (r1*r2)^2)/4
TransMatrix[9, ] <- c(0, 0, 0, 0, r2*(1-r2), r2*(1-r2), 0, 0, 1, 0, 0, r1*(1-r1), r1*(1-r1), 0,
0, 0, rep(r1*(1-r1)*r2*(1-r2), 4))/2
TransMatrix[10, ] <- c(0, 0, 0, 0, (1-r2)^2, r2^2, 1, 0, 1, 4, 1, r1^2, (1-r1)^2, 0, f^2,
(1-f)^2, (r1*(1-r2))^2, ((1-r1)*r2)^2, (r1*r2)^2, ((1-r1)*(1-r2))^2)/4
TransMatrix[11, ] <- c(rep(0, 10), 1, r1*(1-r1), r1*(1-r1), 0, f*(1-f), f*(1-f),
r1*(1-r1)*(1-r2)^2, r1*(1-r1)*r2^2, r1*(1-r1)*r2^2, r1*(1-r1)*(1-r2)^2)/2
TransMatrix[12, ] <- c(rep(0, 11), (1-r1)^2, r1^2, 0, 0, 0, (1-r1)^2*r2*(1-r2), r1^2*r2*(1-r2),
(1-r1)^2*r2*(1-r2), r1^2*r2*(1-r2))/2
TransMatrix[13, ] <- c(rep(0, 11), r1^2, (1-r1)^2, 0, 0, 0, r1^2*r2*(1-r2), (1-r1)^2*r2*(1-r2),
r1^2*r2*(1-r2), (1-r1)^2*r2*(1-r2))/2
TransMatrix[14, ] <- c(rep(0, 11), r1*(1-r1), r1*(1-r1), 1, f*(1-f), f*(1-f), r1*(1-r1)*r2^2,
r1*(1-r1)*(1-r2)^2, r1*(1-r1)*(1-r2)^2, r1*(1-r1)*r2^2)/2
TransMatrix[15, ] <- c(rep(0, 14), (1-f)^2, f^2, rep(r1*(1-r1)*r2*(1-r2), 4))/2
TransMatrix[16, ] <- c(rep(0, 14), f^2, (1-f)^2, rep(r1*(1-r1)*r2*(1-r2), 4))/2
TransMatrix[17, ] <- c(rep(0, 16), ((1-r1)*(1-r2))^2, (r1*r2)^2, ((1-r1)*r2)^2, (r1*(1-r2))^2)/2
TransMatrix[18, ] <- c(rep(0, 16), (r1*r2)^2, ((1-r1)*(1-r2))^2, (r1*(1-r2))^2, ((1-r1)*r2)^2)/2
TransMatrix[19, ] <- c(rep(0, 16), ((1-r1)*r2)^2, (r1*(1-r2))^2, ((1-r1)*(1-r2))^2, (r1*r2)^2)/2
TransMatrix[20, ] <- c(rep(0, 16), (r1*(1-r2))^2, ((1-r1)*r2)^2, (r1*r2)^2, ((1-r1)*(1-r2))^2)/2
Freq <- c(rep(0, 16), 1, 0, 0, 0)
n.Iteration <- n.Generation-1
ZygoteFreq <- matrix(rep(0, (20*n.Generation-20)), nrow = 20)
for (i in 1:n.Iteration) {
Freq <- TransMatrix%*%Freq
ZygoteFreq[, i] <- Freq
}
ZygoteFreq[, n.Iteration]
}
RI4TM <- function (r1, r2, r3){
f1 <- r1*(1-r2)+r2*(1-r1)
f2 <- r2*(1-r3)+r3*(1-r2)
tm <- matrix(rep(0, 72^2), nrow = 72)
tm[1,] <- c(4, 1, 0, 1, (1-f2)^2, f2^2, rep(0, 4), 1, (1-r3)^2, r3^2, 0, (1-r2)^2, r2^2,
((1-r2)*(1-r3))^2, (r2*(1-r3))^2, (r2*r3)^2, ((1-r2)*r3)^2, rep(0, 16), 1,
((1-r1)*(1-f2)+r1*f2)^2, ((1-r1)*f2+r1*(1-f2))^2, 0, (1-r1)^2, r1^2,
((1-r1)*(1-f1))^2, (r1*f1)^2, (r1*(1-f1))^2, ((1-r1)*f1)^2, rep(0, 6),
(1-f1)^2, f1^2, ((1-f1)*(1-r3))^2, (f1*(1-r3))^2, ((1-f1)*r3)^2, (f1*r3)^2,
0, 0, ((1-r1)*(1-r2))^2, (r1*r2)^2, ((1-r1)*r2)^2, (r1*(1-r2))^2,
((1-r1)*(1-r2)*(1-r3))^2, (r1*(1-r2)*(1-r3))^2, ((1-r1)*r2*(1-r3))^2,
(r1*r2*r3)^2, ((1-r1)*(1-r2)*r3)^2, (r1*r2*(1-r3))^2, (r1*(1-r2)*r3)^2,
((1-r1)*r2*r3)^2)/4
tm[2,] <- c(0, 1, 0, 0, (1-f2)*f2, (1-f2)*f2, rep(0, 5), (1-r3)*r3, (1-r3)*r3, 0, 0, 0,
(1-r2)^2*(1-r3)*r3, r2^2*(1-r3)*r3, r2^2*(1-r3)*r3, (1-r2)^2*(1-r3)*r3,
rep(0, 17), ((1-r1)*(1-f2)+r1*f2)*((1-r1)*f2+r1*(1-f2)),
((1-r1)*(1-f2)+r1*f2)*((1-r1)*f2+r1*(1-f2)), 0, 0, 0, (1-r1)^2*f1*(1-f1),
r1^2*f1*(1-f1), r1^2*f1*(1-f1), (1-r1)^2*f1*(1-f1), rep(0, 8),
(1-f1)^2*r3*(1-r3), f1^2*r3*(1-r3), (1-f1)^2*r3*(1-r3), f1^2*r3*(1-r3),
rep(0, 6), (1-r1)^2*(1-r2)^2*r3*(1-r3), r1^2*(1-r2)^2*r3*(1-r3),
(1-r1)^2*r2^2*r3*(1-r3), r1^2*r2^2*r3*(1-r3), (1-r1)^2*(1-r2)^2*r3*(1-r3),
r1^2*r2^2*r3*(1-r3), r1^2*(1-r2)^2*r3*(1-r3), (1-r1)^2*r2^2*r3*(1-r3))/2
tm[3,] <- c(0, 1, 4, 0, f2^2, (1-f2)^2, 1, 0, 0, 0, 0, r3^2, (1-r3)^2, 1, 0, 0,
((1-r2)*r3)^2, (r2*r3)^2, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2, (1-r2)^2, r2^2,
rep(0, 15), ((1-r1)*f2+r1*(1-f2))^2, ((1-r1)*(1-f2)+r1*f2)^2, 1, 0, 0,
((1-r1)*f1)^2, (r1*(1-f1))^2, (r1*f1)^2, ((1-r1)*(1-f1))^2, (1-r1)^2, r1^2,
rep(0, 6), (r3*(1-f1))^2, (r3*f1)^2, ((1-r3)*(1-f1))^2, ((1-r3)*f1)^2,
(1-f1)^2, f1^2, ((1-r1)*(1-r2))^2, (r1*r2)^2, ((1-r1)*r2)^2, (r1*(1-r2))^2,
((1-r1)*(1-r2)*r3)^2, (r1*(1-r2)*r3)^2, ((1-r1)*r2*r3)^2, (r1*r2*(1-r3))^2,
((1-r1)*(1-r2)*(1-r3))^2, (r1*r2*r3)^2, (r1*(1-r2)*(1-r3))^2,
((1-r1)*r2*(1-r3))^2)/4
tm[4,] <- c(0, 0, 0, 1, rep((1-f2)*f2, 2), rep(0, 8), r2*(1-r2), r2*(1-r2),
r2*(1-r2)*c((1-r3)^2, (1-r3)^2, r3^2, r3^2), rep(0, 20), r1*(1-r1), r1*(1-r1),
rep(r1*(1-r1)*f1*(1-f1), 4), rep(0, 14), rep(r1*(1-r1)*r2*(1-r2), 4),
r1*(1-r1)*r2*(1-r2)*c((1-r3)^2, (1-r3)^2, (1-r3)^2, r3^2, r3^2, (1-r3)^2, r3^2, r3^2))/2
tm[5,] <- c(0, 0, 0, 0, (1-f2)^2, f2^2, rep(0, 10), rep(r2*(1-r2)*r3*(1-r3), 4), rep(0, 22),
r1*(1-r1)*(1-f1)^2, r1*(1-r1)*f1^2, r1*(1-r1)*(1-f1)^2, r1*(1-r1)*f1^2, rep(0, 18),
rep(r1*(1-r1)*r2*(1-r2)*r3*(1-r3), 8))/2
tm[6,] <- c(0, 0, 0, 0, f2^2, (1-f2)^2, rep(0, 10), rep(r2*(1-r2)*r3*(1-r3), 4), rep(0, 22),
r1*(1-r1)*f1^2, r1*(1-r1)*(1-f1)^2, r1*(1-r1)*f1^2, r1*(1-r1)*(1-f1)^2,rep(0, 18),
rep(r1*(1-r1)*r2*(1-r2)*r3*(1-r3), 8))/2
tm[7,] <- c(0, 0, 0, 0, f2*(1-f2), f2*(1-f2), 1, rep(0, 9), r2*(1-r2)*r3^2, r2*(1-r2)*r3^2,
r2*(1-r2)*(1-r3)^2, r2*(1-r2)*(1-r3)^2, r2*(1-r2), r2*(1-r2), rep(0, 20),
rep(r1*(1-r1)*f1*(1-f1), 4), r1*(1-r1), r1*(1-r1), rep(0, 12), rep(r1*(1-r1)*r2*(1-r2),4),
r1*(1-r1)*r2*(1-r2)*c(r3^2, r3^2,r3^2, (1-r3)^2, (1-r3)^2, r3^2, (1-r3)^2, (1-r3)^2))/2
tm[8,] <- c(0, 0, 0, 1, f2^2, (1-f2)^2, 0, 4, 1, rep(0, 5), r2^2, (1-r2)^2, (r2*(1-r3))^2,
((1-r2)*(1-r3))^2, ((1-r2)*r3)^2, (r2*r3)^2, 0, 0, 1, (1-r3)^2, r3^2, rep(0, 15), r1^2,
(1-r1)^2, (r1*f1)^2, ((1-r1)*(1-f1))^2, ((1-r1)*f1)^2, (r1*(1-f1))^2, 0, 0, 1,
((1-r1)*(1-f1)+r1*f1)^2, ((1-r1)*f1+r1*(1-f1))^2, 0, 0, 0, ((1-r3)*(1-f1))^2,
((1-r3)*f1)^2, (r3*(1-f1))^2, (r3*f1)^2, (1-f1)^2, f1^2, (r1*r2)^2, ((1-r1)*(1-r2))^2,
(r1*(1-r2))^2, ((1-r1)*r2)^2, (r1*r2*(1-r3))^2, ((1-r1)*r2*(1-r3))^2,
(r1*(1-r2)*(1-r3))^2, ((1-r1)*(1-r2)*r3)^2, (r1*r2*r3)^2, ((1-r1)*(1-r2)*(1-r3))^2,
((1-r1)*r2*r3)^2, (r1*(1-r2)*r3)^2)/4
tm[9,] <- c(0, 0, 0, 0, f2*(1-f2), f2*(1-f2), 0, 0, 1, rep(0, 7), r3*(1-r3)*r2^2, r3*(1-r3)*(1-r2)^2,
r3*(1-r3)*(1-r2)^2, r3*(1-r3)*r2^2, 0, 0, 0, r3*(1-r3), r3*(1-r3), rep(0, 17),
f1*(1-f1)*r1^2, f1*(1-f1)*(1-r1)^2, f1*(1-f1)*(1-r1)^2, f1*(1-f1)*r1^2, 0, 0, 0,
rep(((1-r1)*(1-f1)+r1*f1)*((1-r1)*f1+r1*(1-f1)), 2), 0, 0, 0, r3*(1-r3)*(1-f1)^2,
r3*(1-r3)*f1^2, r3*(1-r3)*(1-f1)^2, r3*(1-r3)*f1^2, rep(0, 6),
r3*(1-r3)*c(r1^2*r2^2, (1-r1)^2*r2^2, r1^2*(1-r2)^2, (1-r1)^2*(1-r2)^2, r1^2*r2^2,
(1-r1)^2*(1-r2)^2, (1-r1)^2*r2^2, r1^2*(1-r2)^2))/2
tm[10,] <- c(0, 0, 0, 0, (1-f2)^2, f2^2, 1, 0, 1, 4, rep(0, 6), r2^2*r3^2, (1-r2)^2*r3^2,
(1-r2)^2*(1-r3)^2, r2^2*(1-r3)^2, r2^2, (1-r2)^2, 0, r3^2, (1-r3)^2, 1, rep(0, 16),
(r1*(1-f1))^2, ((1-r1)*f1)^2, ((1-r1)*(1-f1))^2, (r1*f1)^2, r1^2, (1-r1)^2, 0,
((1-r1)*f1+r1*(1-f1))^2, ((1-r1)*(1-f1)+r1*f1)^2, 1, (1-f1)^2, f1^2, (r3*(1-f1))^2,
(r3*f1)^2, ((1-r3)*(1-f1))^2, ((1-r3)*f1)^2, 0, 0, (r1*r2)^2, ((1-r1)*(1-r2))^2,
(r1*(1-r2))^2, ((1-r1)*r2)^2, (r1*r2*r3)^2, ((1-r1)*r2*r3)^2, (r1*(1-r2)*r3)^2,
((1-r1)*(1-r2)*(1-r3))^2, (r1*r2*(1-r3))^2, ((1-r1)*(1-r2)*r3)^2, ((1-r1)*r2*(1-r3))^2,
(r1*(1-r2)*(1-r3))^2)/4
tm[11,] <- c(rep(0, 10), 1, r3*(1-r3), r3*(1-r3), 0, r2*(1-r2), r2*(1-r2), rep(r2*(1-r2)*r3*(1-r3), 4),
rep(0, 32), (1-f1)*f1, (1-f1)*f1, rep(r3*(1-r3)*(1-f1)*f1, 4), 0, 0,
r2*(1-r2)*c((1-r1)^2, r1^2, (1-r1)^2, r1^2),
r2*r3*(1-r2)*(1-r3)*c((1-r1)^2, r1^2, (1-r1)^2, r1^2, (1-r1)^2, r1^2, r1^2, (1-r1)^2))/2
tm[12,] <- c(rep(0, 11), (1-r3)^2, r3^2, 0, 0, 0, r2*(1-r2)*c((1-r3)^2, (1-r3)^2, r3^2, r3^2),
rep(0, 34), f1*(1-f1)*c((1-r3)^2, (1-r3)^2, r3^2, r3^2), rep(0, 6),
r2*(1-r2)*c(((1-r1)*(1-r3))^2, (r1*(1-r3))^2, ((1-r1)*(1-r3))^2, (r1*r3)^2, ((1-r1)*r3)^2,
(r1*(1-r3))^2, (r1*r3)^2, ((1-r1)*r3)^2))/2
tm[13,] <- c(rep(0, 11), r3^2, (1-r3)^2, 0, 0, 0, r2*(1-r2)*c(r3^2, r3^2, (1-r3)^2, (1-r3)^2),
rep(0, 34), f1*(1-f1)*c(r3^2, r3^2, (1-r3)^2, (1-r3)^2), rep(0, 6),
r2*(1-r2)*c(((1-r1)*r3)^2,(r1*r3)^2, ((1-r1)*r3)^2, (r1*(1-r3))^2, ((1-r1)*(1-r3))^2,
(r1*r3)^2, (r1*(1-r3))^2, ((1-r1)*(1-r3))^2))/2
tm[14,] <- c(rep(0, 11), r3*(1-r3), r3*(1-r3), 1, 0, 0, rep(r2*(1-r2)*r3*(1-r3), 4), r2*(1-r2), r2*(1-r2),
rep(0, 32), rep(r3*(1-r3)*f1*(1-f1), 4), f1*(1-f1), f1*(1-f1),
r2*(1-r2)*c((1-r1)^2, r1^2, (1-r1)^2, r1^2),
r2*(1-r2)*r3*(1-r3)*c((1-r1)^2, r1^2, (1-r1)^2, r1^2, (1-r1)^2, r1^2, r1^2, (1-r1)^2))/2
tm[15,] <- c(rep(0, 14), (1-r2)^2, r2^2, r3*(1-r3)*c((1-r2)^2, r2^2, r2^2, (1-r2)^2), rep(0, 40),
r1*(1-r1)*c((1-r2)^2, r2^2, r2^2, (1-r2)^2),
r1*(1-r1)*r3*(1-r3)*c((1-r2)^2, (1-r2)^2, r2^2, r2^2, (1-r2)^2, r2^2, (1-r2)^2, r2^2))/2
tm[16,] <- c(rep(0, 14), r2^2, (1-r2)^2, r3*(1-r3)*c(r2^2, (1-r2)^2, (1-r2)^2, r2^2), rep(0, 40),
r1*(1-r1)*c(r2^2, (1-r2)^2, (1-r2)^2, r2^2),
r1*(1-r1)*r3*(1-r3)*c(r2^2, r2^2, (1-r2)^2, (1-r2)^2, r2^2, (1-r2)^2, r2^2, (1-r2)^2))/2
tm[17,] <- c(rep(0, 16), ((1-r2)*(1-r3))^2, (r2*(1-r3))^2, (r2*r3)^2, ((1-r2)*r3)^2, rep(0, 44),
r1*(1-r1)*c(((1-r2)*(1-r3))^2, ((1-r2)*(1-r3))^2, (r2*(1-r3))^2, (r2*r3)^2,
((1-r2)*r3)^2, (r2*(1-r3))^2, ((1-r2)*r3)^2, (r2*r3)^2))/2
tm[18,] <- c(rep(0, 16), (r2*(1-r3))^2, ((1-r2)*(1-r3))^2, ((1-r2)*r3)^2, (r2*r3)^2, rep(0, 44),
r1*(1-r1)*c((r2*(1-r3))^2, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2, ((1-r2)*r3)^2, (r2*r3)^2,
((1-r2)*(1-r3))^2, (r2*r3)^2, ((1-r2)*r3)^2))/2
tm[19,] <- c(rep(0, 16), (r2*r3)^2, ((1-r2)*r3)^2, ((1-r2)*(1-r3))^2, (r2*(1-r3))^2, rep(0, 44),
r1*(1-r1)*c((r2*r3)^2, (r2*r3)^2, ((1-r2)*r3)^2, ((1-r2)*(1-r3))^2, (r2*(1-r3))^2,
((1-r2)*r3)^2, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2))/2
tm[20,] <- c(rep(0, 16), ((1-r2)*r3)^2, (r2*r3)^2, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2, rep(0, 44),
r1*(1-r1)*c(((1-r2)*r3)^2, ((1-r2)*r3)^2, (r2*r3)^2, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2,
(r2*r3)^2, ((1-r2)*(1-r3))^2, (r2*(1-r3))^2))/2
tm[21,] <- c(rep(0, 16), r3*(1-r3)*c((1-r2)^2, r2^2, r2^2, (1-r2)^2), (1-r2)^2, r2^2, rep(0, 38),
r1*(1-r1)*c((1-r2)^2, r2^2, r2^2, (1-r2)^2),
r1*(1-r1)*r3*(1-r3)*c((1-r2)^2, (1-r2)^2, r2^2, r2^2, (1-r2)^2, r2^2, (1-r2)^2, r2^2))/2
tm[22,] <- c(rep(0, 16), r3*(1-r3)*c(r2^2, (1-r2)^2, (1-r2)^2, r2^2), r2^2, (1-r2)^2, rep(0, 38),
r1*(1-r1)*c(r2^2, (1-r2)^2, (1-r2)^2, r2^2),
r1*(1-r1)*r3*(1-r3)*c(r2^2, r2^2, (1-r2)^2, (1-r2)^2, r2^2, (1-r2)^2, r2^2, (1-r2)^2))/2
tm[23,] <- c(rep(0, 14), r2*(1-r2), r2*(1-r2), rep(r2*(1-r2)*r3*(1-r3), 4), 0, 0, 1, r3*(1-r3),
r3*(1-r3), rep(0, 29), rep(r3*(1-r3)*f1*(1-f1), 4), f1*(1-f1), f1*(1-f1),
r2*(1-r2)*c(r1^2, (1-r1)^2, r1^2, (1-r1)^2),
r2*(1-r2)*r3*(1-r3)*c(r1^2, (1-r1)^2, r1^2, (1-r1)^2, r1^2, (1-r1)^2, (1-r1)^2, r1^2))/2
tm[24,] <- c(rep(0, 16), r2*(1-r2)*c((1-r3)^2, (1-r3)^2, r3^2, r3^2), 0, 0, 0, (1-r3)^2, r3^2,
rep(0, 29), f1*(1-f1)*c((1-r3)^2, (1-r3)^2, r3^2, r3^2), rep(0, 6),
r2*(1-r2)*c((r1*(1-r3))^2, ((1-r1)*(1-r3))^2, (r1*(1-r3))^2, ((1-r1)*r3)^2,
(r1*r3)^2, ((1-r1)*(1-r3))^2, ((1-r1)*r3)^2, (r1*r3)^2))/2
tm[25,] <- c(rep(0, 16), r2*(1-r2)*c(r3^2, r3^2, (1-r3)^2, (1-r3)^2), 0, 0, 0, r3^2, (1-r3)^2, rep(0, 29),
f1*(1-f1)*c(r3^2, r3^2, (1-r3)^2, (1-r3)^2), rep(0, 6),
r2*(1-r2)*c((r1*r3)^2, ((1-r1)*r3)^2, (r1*r3)^2, ((1-r1)*(1-r3))^2, (r1*(1-r3))^2,
((1-r1)*r3)^2, ((1-r1)*(1-r3))^2, (r1*(1-r3))^2))/2
tm[26,] <- c(rep(0, 16), rep(r2*(1-r2)*r3*(1-r3), 4), r2*(1-r2), r2*(1-r2), 0, r3*(1-r3), r3*(1-r3), 1,
rep(0, 26), f1*(1-f1), f1*(1-f1), rep(r3*(1-r3)*f1*(1-f1), 4), 0, 0,
r2*(1-r2)*c(r1^2, (1-r1)^2, r1^2, (1-r1)^2),
r2*(1-r2)*r3*(1-r3)*c(r1^2, (1-r1)^2, r1^2, (1-r1)^2, r1^2, (1-r1)^2, (1-r1)^2, r1^2))/2
tm[27,] <- c(rep(0, 10), 1, r3^2, (1-r3)^2, 0, r2^2, (1-r2)^2, (r2*r3)^2, ((1-r2)*r3)^2,
((1-r2)* (1-r3))^2, (r2*(1-r3))^2, rep(0, 6), 4, 1, 0, 1, (1-f2)^2, f2^2, rep(0, 10),
((1-r1)*(1-f2))^2, (r1*f2)^2, (r1*(1-f2))^2, ((1-r1)*f2)^2, (1-r1)^2, r1^2, 0,
((1-r1)*(1-f2)+r1*f2)^2, (r1*(1-f2)+(1-r1)*f2)^2, 1, f1^2, (1-f1)^2, (r3*f1)^2, (r3*(1-f1))^2,
((1-r3)*f1)^2, ((1-r3)*(1-f1))^2, 0, 0, ((1-r1)*r2)^2, (r1*(1-r2))^2, ((1-r1)*(1-r2))^2,
(r1*r2)^2, ((1-r1)*r2*r3)^2, (r1*r2*r3)^2, ((1-r1)*(1-r2)*r3)^2, (r1*(1-r2)*(1-r3))^2,
((1-r1)*r2*(1-r3))^2, (r1*(1-r2)*r3)^2, (r1*r2*(1-r3))^2, ((1-r1)*(1-r2)*(1-r3))^2)/4
tm[28,] <- c(rep(0, 11), r3*(1-r3), r3*(1-r3), 0, 0, 0, r3*(1-r3)*c(r2^2, (1-r2)^2, (1-r2)^2, r2^2),
rep(0, 7), 1, 0, 0, (1-f2)*f2, (1-f2)*f2, rep(0, 10),
f2*(1-f2)*c((1-r1)^2, r1^2, r1^2, (1-r1)^2), 0, 0, 0,
rep(((1-r1)*(1-f2)+r1*f2)*(r1*(1-f2)+(1-r1)*f2), 2), 0, 0, 0,
r3*(1-r3)*c(f1^2, (1-f1)^2, f1^2, (1-f1)^2), rep(0, 6),
r3*(1-r3)*c(((1-r1)*r2)^2, (r1*r2)^2, ((1-r1)*(1-r2))^2, (r1*(1-r2))^2, ((1-r1)*r2)^2,
(r1*(1-r2))^2, (r1*r2)^2, ((1-r1)*(1-r2))^2))/2
tm[29,] <- c(rep(0, 11), (1-r3)^2, r3^2, 1, 0, 0, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2, ((1-r2)*r3)^2,
(r2*r3)^2, r2^2, (1-r2)^2, rep(0, 5), 1, 4, 0, f2^2, (1-f2)^2, 1, rep(0, 7), (1-r1)^2,
r1^2, ((1-r1)*f2)^2, (r1*(1-f2))^2, (r1*f2)^2, ((1-r1)*(1-f2))^2, 0, 0, 1,
(r1*(1-f2)+(1-r1)*f2)^2, ((1-r1)*(1-f2)+r1*f2)^2, 0, 0, 0, ((1-r3)*f1)^2, ((1-r3)*(1-f1))^2,
(r3*f1)^2, (r3*(1-f1))^2, f1^2, (1-f1)^2, ((1-r1)*r2)^2, (r1*(1-r2))^2, ((1-r1)*(1-r2))^2,
(r1*r2)^2, ((1-r1)*r2*(1-r3))^2, (r1*r2*(1-r3))^2, ((1-r1)*(1-r2)*(1-r3))^2, (r1*(1-r2)*r3)^2,
((1-r1)*r2*r3)^2, (r1*(1-r2)*(1-r3))^2, (r1*r2*r3)^2, ((1-r1)*(1-r2)*r3)^2)/4
tm[30,] <- c(rep(0, 14), r2*(1-r2), r2*(1-r2), r2*(1-r2)*c(r3^2, r3^2, (1-r3)^2, (1-r3)^2), rep(0, 9), 1,
f2*(1-f2), f2*(1-f2), rep(0, 10), rep(r1*(1-r1)*f2*(1-f2), 4), r1*(1-r1), r1*(1-r1),
rep(0, 12), rep(r1*(1-r1)*r2*(1-r2), 4),
r1*(1-r1)*r2*(1-r2)*c(r3^2, r3^2, r3^2, (1-r3)^2, (1-r3)^2, r3^2, (1-r3)^2, (1-r3)^2))/2
tm[31,] <- c(rep(0, 16), rep(r2*(1-r2)*r3*(1-r3), 4), rep(0, 10), (1-f2)^2, f2^2, rep(0, 10),
r1*(1-r1)*c((1-f2)^2, f2^2, (1-f2)^2, f2^2), rep(0, 18),
rep(r1*(1-r1)*r2*(1-r2)*r3*(1-r3), 8))/2
tm[32,] <- c(rep(0, 16), rep(r2*(1-r2)*r3*(1-r3), 4), rep(0, 10), f2^2, (1-f2)^2, rep(0, 10),
r1*(1-r1)*c(f2^2, (1-f2)^2, f2^2, (1-f2)^2), rep(0,18),
rep(r1*(1-r1)*r2*(1-r2)*r3*(1-r3),8))/2
tm[33,] <- c(rep(0, 16), r2*(1-r2)*c((1-r3)^2, (1-r3)^2, r3^2, r3^2), r2*(1-r2), r2*(1-r2), rep(0, 8),
f2*(1-f2), f2*(1-f2), 1, rep(0, 7), r1*(1-r1), r1*(1-r1), rep(r1*(1-r1)*f2*(1-f2), 4),
rep(0, 14), rep(r1*(1-r1)*r2*(1-r2), 4),
r1*(1-r1)*r2*(1-r2)*c((1-r3)^2, (1-r3)^2, (1-r3)^2, r3^2, r3^2, (1-r3)^2, r3^2, r3^2))/2
tm[34,] <- c(rep(0, 14), (1-r2)^2, r2^2, ((1-r2)*r3)^2, (r2*r3)^2, ((1-r3)*r2)^2, ((1-r2)*(1-r3))^2, 0, 0, 1,
r3^2, (1-r3)^2, 0, 0, 0, 0, 1, f2^2, (1-f2)^2, 0, 4, 1, 0, 0, ((1-r1)*(1-f2)+r1*f2)^2,
((1-r1)*f2+r1*(1-f2))^2, 1, 0, 0, (r1*f2)^2, ((1-r1)*(1-f2))^2, ((1-r1)*f2)^2, (r1*(1-f2))^2,
r1^2, (1-r1)^2, rep(0, 6), (r3*f1)^2, (r3*(1-f1))^2, ((1-r3)*f1)^2, ((1-r3)*(1-f1))^2, f1^2,
(1-f1)^2, (r1*(1-r2))^2, ((1-r1)*r2)^2, (r1*r2)^2, ((1-r1)*(1-r2))^2, (r1*(1-r2)*r3)^2,
((1-r1)*(1-r2)*r3)^2, (r1*r2*r3)^2, ((1-r1)*r2*(1-r3))^2, (r1*(1-r2)*(1-r3))^2, ((1-r1)*r2*r3)^2,
((1-r1)*(1-r2)*(1-r3))^2, (r1*r2*(1-r3))^2)/4
tm[35,] <- c(rep(0, 16), r3*(1-r3)*c((1-r2)^2, r2^2, r2^2, (1-r2)^2, 0, 0, 0, 1, 1), rep(0, 5), f2*(1-f2),
f2*(1-f2), 0, 0, 1, 0, 0, rep(((1-r1)*(1-f2)+r1*f2)*((1-r1)*f2+r1*(1-f2)), 2), 0, 0, 0,
f2*(1-f2)*c(r1^2, (1-r1)^2, (1-r1)^2, r1^2), rep(0, 8),
r3*(1-r3)*c(f1^2, (1-f1)^2, f1^2, (1-f1)^2), rep(0, 6),
r3*(1-r3)*c((r1*(1-r2))^2, ((1-r1)*(1-r2))^2, (r1*r2)^2, ((1-r1)*r2)^2, (r1*(1-r2))^2,
((1-r1)*r2)^2, ((1-r1)*(1-r2))^2, (r1*r2)^2))/2
tm[36,] <- c(rep(0, 16), ((1-r2)*(1-r3))^2, (r2*(1-r3))^2, (r2*r3)^2, ((1-r2)*r3)^2, (1-r2)^2, r2^2, 0,
(1-r3)^2, r3^2, 1, 0, 0, 0, 0, (1-f2)^2, f2^2, 1, 0, 1, 4, 1, ((1-r1)*f2+r1*(1-f2))^2,
((1-r1)*(1-f2)+r1*f2)^2, 0, r1^2, (1-r1)^2, (r1*(1-f2))^2, ((1-r1)*f2)^2, ((1-r1)*(1-f2))^2,
(r1*f2)^2, rep(0, 6), f1^2, (1-f1)^2, ((1-r3)*f1)^2, ((1-r3)*(1-f1))^2, (r3*f1)^2, (r3*(1-f1))^2,
0, 0, (r1*(1-r2))^2, (r2*(1-r1))^2, (r1*r2)^2, ((1-r1)*(1-r2))^2, (r1*(1-r2)*(1-r3))^2,
((1-r1)*(1-r2)*(1-r3))^2, (r1*r2*(1-r3))^2, ((1-r1)*r2*r3)^2, (r1*(1-r2)*r3)^2,
((1-r1)*r2*(1-r3))^2, ((1-r1)*(1-r2)*r3)^2, (r1*r2*r3)^2)/4
tm[37,] <- c(rep(0, 36), 1, rep(((1-r1)*(1-f2)+r1*f2)*((1-r1)*f2+r1*(1-f2)), 2), 0,
r1*(1-r1)*c(1, 1, (1-f1)^2, f1^2, (1-f1)^2, f1^2), rep(0, 6),
f1*(1-f1)*c(1, 1, (1-r3)^2, (1-r3)^2, r3^2, r3^2), 0, 0,
r1*(1-r1)*c((1-r2)^2, r2^2, r2^2, (1-r2)^2),
r1*(1-r1)*c(((1-r2)*(1-r3))^2, ((1-r2)*(1-r3))^2, (r2*(1-r3))^2, (r2*r3)^2, ((1-r2)*r3)^2,
(r2*(1-r3))^2, ((1-r2)*r3)^2, (r2*r3)^2))/2
tm[38,] <- c(rep(0, 37), ((1-r1)*(1-f2)+r1*f2)^2, ((1-r1)*f2+r1*(1-f2))^2, 0, 0, 0, rep(r1*(1-r1)*f1*(1-f1), 4),
rep(0, 8), rep(r3*(1-r3)*f1*(1-f1), 4), rep(0, 6),
r1*(1-r1)*r3*(1-r3)*c((1-r2)^2, (1-r2)^2, r2^2, r2^2, (1-r2)^2, r2^2, (1-r2)^2, r2^2))/2
tm[39,] <- c(rep(0, 37), ((1-r1)*f2+r1*(1-f2))^2, ((1-r1)*(1-f2)+r1*f2)^2, 0, 0, 0, rep(r1*(1-r1)*f1*(1-f1), 4),
rep(0, 8), rep(r3*(1-r3)*f1*(1-f1), 4), rep(0, 6),
r1*(1-r1)*r3*(1-r3)*c((1-r2)^2, (1-r2)^2, r2^2, r2^2, (1-r2)^2, r2^2, (1-r2)^2, r2^2))/2
tm[40,] <- c(rep(0, 37), rep(((1-r1)*(1-f2)+r1*f2)*((1-r1)*f2+r1*(1-f2)), 2), 1, 0, 0,
r1*(1-r1)*c(f1^2, (1-f1)^2, f1^2, (1-f1)^2, 1, 1), rep(0, 6),
f1*(1-f1)*c(r3^2, r3^2, (1-r3)^2, (1-r3)^2, 1, 1), r1*(1-r1)*c((1-r2)^2, r2^2, r2^2, (1-r2)^2),
r1*(1-r1)*c(((1-r2)*r3)^2, ((1-r2)*r3)^2, (r2*r3)^2, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2,
(r2*r3)^2, ((1-r2)*(1-r3))^2, (r2*(1-r3))^2))/2
tm[41,] <- c(rep(0, 40), (1-r1)^2, r1^2, f1*(1-f1)*c((1-r1)^2, r1^2, r1^2, (1-r1)^2), rep(0, 14),
r2*(1-r2)*c((1-r1)^2, r1^2, (1-r1)^2, r1^2),
r2*(1-r2)*c(((1-r1)*(1-r3))^2, (r1*(1-r3))^2, ((1-r1)*(1-r3))^2, (r1*r3)^2,
((1-r1)*r3)^2, (r1*(1-r3))^2, (r1*r3)^2, ((1-r1)*r3)^2))/2
tm[42,] <- c(rep(0, 40), r1^2, (1-r1)^2, f1*(1-f1)*c(r1^2, (1-r1)^2, (1-r1)^2, r1^2), rep(0, 14),
r2*(1-r2)*c(r1^2, (1-r1)^2, r1^2, (1-r1)^2),
r2*(1-r2)*c((r1*(1-r3))^2, ((1-r1)*(1-r3))^2, (r1*(1-r3))^2, ((1-r1)*r3)^2, (r1*r3)^2,
((1-r1)*(1-r3))^2, ((1-r1)*r3)^2, (r1*r3)^2))/2
tm[43,] <- c(rep(0, 42), ((1-r1)*(1-f1))^2, (r1*f1)^2, (r1*(1-f1))^2, ((1-r1)*f1)^2, rep(0, 18),
r2*(1-r2)*r3*(1-r3)*((1-r1)^2*c(1, 0, 1, 0, 1, 0, 0, 1)+r1^2*c(0, 1, 0, 1, 0, 1, 1, 0)))/2
tm[44,] <- c(rep(0, 42), (r1*f1)^2, ((1-r1)*(1-f1))^2, ((1-r1)*f1)^2, (r1*(1-f1))^2, rep(0, 18),
r2*(1-r2)*r3*(1-r3)*(r1^2*c(1, 0, 1, 0, 1, 0, 0, 1)+(1-r1)^2*c(0, 1, 0, 1, 0, 1, 1, 0)))/2
tm[45,] <- c(rep(0, 42), (r1*(1-f1))^2, ((1-r1)*f1)^2, ((1-r1)*(1-f1))^2, (r1*f1)^2, rep(0, 18),
r2*(1-r2)*r3*(1-r3)*(r1^2*c(1, 0, 1, 0, 1, 0, 0, 1)+(1-r1)^2*c(0, 1, 0, 1, 0, 1, 1, 0)))/2
tm[46,] <- c(rep(0, 42), ((1-r1)*f1)^2, (r1*(1-f1))^2, (r1*f1)^2, ((1-r1)*(1-f1))^2, rep(0, 18),
r2*(1-r2)*r3*(1-r3)*((1-r1)^2*c(1, 0, 1, 0, 1, 0, 0, 1)+r1^2*c(0, 1, 0, 1, 0, 1, 1, 0)))/2
tm[47,] <- c(rep(0, 42), f1*(1-f1)*c((1-r1)^2, r1^2, r1^2, (1-r1)^2), (1-r1)^2, r1^2, rep(0, 12),
r2*(1-r2)*c((1-r1)^2, r1^2, (1-r1)^2, r1^2),
r2*(1-r2)*c(((1-r1)*r3)^2, (r1*r3)^2, ((1-r1)*r3)^2, (r1*(1-r3))^2, ((1-r1)*(1-r3))^2,
(r1*r3)^2, (r1*(1-r3))^2, ((1-r1)*(1-r3))^2))/2
tm[48,] <- c(rep(0, 42), f1*(1-f1)*c(r1^2, (1-r1)^2, (1-r1)^2, r1^2), r1^2, (1-r1)^2, rep(0, 12),
r2*(1-r2)*c(r1^2, (1-r1)^2, r1^2, (1-r1)^2),
r2*(1-r2)*c((r1*r3)^2, ((1-r1)*r3)^2, (r1*r3)^2, ((1-r1)*(1-r3))^2, (r1*(1-r3))^2,
((1-r1)*r3)^2, ((1-r1)*(1-r3))^2, (r1*(1-r3))^2))/2
tm[49,] <- c(rep(0, 40), r1*(1-r1)*c(1, 1, f1^2, (1-f1)^2, f1^2, (1-f1)^2), 0, 0, 1,
rep(((1-r1)*(1-f1)+r1*f1)*((1-r1)*f1+r1*(1-f1)), 2), rep(0, 3),
f1*(1-f1)*c((1-r3)^2, (1-r3)^2, r3^2, r3^2, 1, 1),
r1*(1-r1)*c(r2^2, (1-r2)^2, (1-r2)^2, r2^2),
r1*(1-r1)*c((r2*(1-r3))^2, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2, ((1-r2)*r3)^2, (r2*r3)^2,
((1-r2)*(1-r3))^2, (r2*r3)^2, ((1-r2)*r3)^2))/2
tm[50,] <- c(rep(0, 42), rep(r1*(1-r1)*f1*(1-f1), 4), 0, 0, 0, ((1-r1)*(1-f1)+r1*f1)^2,
((1-r1)*f1+r1*(1-f1))^2, 0, 0, 0, rep(r3*(1-r3)*f1*(1-f1), 4), rep(0, 6),
r1*(1-r1)*r3*(1-r3)*(r2^2*c(1, 1, 0, 0, 1, 0, 1, 0)+(1-r2)^2*c(0, 0, 1, 1, 0, 1, 0, 1)))/2
tm[51,] <- c(rep(0, 42), rep(r1*(1-r1)*f1*(1-f1), 4), 0, 0, 0, ((1-r1)*f1+r1*(1-f1))^2,
((1-r1)*(1-f1)+r1*f1)^2, 0, 0, 0, rep(r3*(1-r3)*f1*(1-f1), 4), rep(0, 6),
r1*(1-r1)*r3*(1-r3)*(r2^2*c(1, 1, 0, 0, 1, 0, 1, 0)+(1-r2)^2*c(0, 0, 1, 1, 0, 1, 0, 1)))/2
tm[52,] <- c(rep(0, 42), r1*(1-r1)*c((1-f1)^2, f1^2, (1-f1)^2, f1^2, 1, 1), 0,
rep(((1-r1)*(1-f1)+r1*f1)*((1-r1)*f1+r1*(1-f1)), 2), 1,
f1*(1-f1)*c(1, 1, r3^2, r3^2, (1-r3)^2, (1-r3)^2), 0, 0,
r1*(1-r1)*c(r2^2, (1-r2)^2, (1-r2)^2, r2^2),
r1*(1-r1)*c((r2*r3)^2, (r2*r3)^2, ((1-r2)*r3)^2, ((1-r2)*(1-r3))^2, (r2*(1-r3))^2,
((1-r2)*r3)^2, (r2*(1-r3))^2, ((1-r2)*(1-r3))^2))/2
tm[53,] <- c(rep(0, 52), (1-f1)^2, f1^2, r3*(1-r3)*c((1-f1)^2, f1^2, (1-f1)^2, f1^2), 0, 0,
rep(r1*(1-r1)*r2*(1-r2), 4), rep(r1*(1-r1)*r2*(1-r2)*r3*(1-r3), 8))/2
tm[54,] <- c(rep(0, 52), f1^2, (1-f1)^2, r3*(1-r3)*c(f1^2, (1-f1)^2, f1^2, (1-f1)^2), 0, 0,
rep(r1*(1-r1)*r2*(1-r2), 4), rep(r1*(1-r1)*r2*(1-r2)*r3*(1-r3), 8))/2
tm[55,] <- c(rep(0, 54), ((1-r3)*(1-f1))^2, ((1-r3)*f1)^2, (r3*(1-f1))^2, (r3*f1)^2, rep(0, 6),
r1*(1-r1)*r2*(1-r2)*((1-r3)^2*c(1, 1, 1, 0, 0, 1, 0, 0)+r3^2*c(0, 0, 0, 1, 1, 0, 1, 1)))/2
tm[56,] <- c(rep(0, 54), ((1-r3)*f1)^2, ((1-r3)*(1-f1))^2, (r3*f1)^2, (r3*(1-f1))^2, rep(0, 6),
r1*(1-r1)*r2*(1-r2)*((1-r3)^2*c(1, 1, 1, 0, 0, 1, 0, 0)+r3^2*c(0, 0, 0, 1, 1, 0, 1, 1)))/2
tm[57,] <- c(rep(0, 54), (r3*(1-f1))^2, (r3*f1)^2, ((1-r3)*(1-f1))^2, ((1-r3)*f1)^2, rep(0, 6),
r1*(1-r1)*r2*(1-r2)*(r3^2*c(1, 1, 1, 0, 0, 1, 0, 0)+(1-r3)^2*c(0, 0, 0, 1, 1, 0, 1, 1)))/2
tm[58,] <- c(rep(0, 54), (r3*f1)^2, (r3*(1-f1))^2, ((1-r3)*f1)^2, ((1-r3)*(1-f1))^2, rep(0, 6),
r1*(1-r1)*r2*(1-r2)*(r3^2*c(1, 1, 1, 0, 0, 1, 0, 0)+(1-r3)^2*c(0, 0, 0, 1, 1, 0, 1, 1)))/2
tm[59,] <- c(rep(0, 54), r3*(1-r3)*c((1-f1)^2, f1^2, (1-f1)^2, f1^2), (1-f1)^2, f1^2,
rep(r1*(1-r1)*r2*(1-r2), 4), rep(r1*(1-r1)*r2*(1-r2)*r3*(1-r3), 8))/2
tm[60,] <- c(rep(0, 54), r3*(1-r3)*c(f1^2, (1-f1)^2, f1^2, (1-f1)^2), f1^2, (1-f1)^2,
rep(r1*(1-r1)*r2*(1-r2), 4), rep(r1*(1-r1)*r2*(1-r2)*r3*(1-r3), 8))/2
tm[61,] <- c(rep(0, 60), ((1-r1)*(1-r2))^2, (r1*r2)^2, ((1-r1)*r2)^2, (r1*(1-r2))^2,
r3*(1-r3)*c(((1-r1)*(1-r2))^2, (r1*(1-r2))^2, ((1-r1)*r2)^2, (r1*r2)^2,
((1-r1)*(1-r2))^2, (r1*r2)^2, (r1*(1-r2))^2, ((1-r1)*r2)^2))/2
tm[62,] <- c(rep(0, 60), (r1*r2)^2, ((1-r1)*(1-r2))^2, (r1*(1-r2))^2, ((1-r1)*r2)^2,
r3*(1-r3)*c((r1*r2)^2, (r2*(1-r1))^2, ((1-r2)*r1)^2, ((1-r1)*(1-r2))^2, (r1*r2)^2,
((1-r1)*(1-r2))^2, ((1-r1)*r2)^2, (r1*(1-r2))^2))/2
tm[63,] <- c(rep(0, 60), ((1-r1)*r2)^2, (r1*(1-r2))^2, ((1-r1)*(1-r2))^2, (r1*r2)^2,
r3*(1-r3)*c(((1-r1)*r2)^2, (r1*r2)^2, ((1-r1)*(1-r2))^2, (r1*(1-r2))^2,
((1-r1)*r2)^2, (r1*(1-r2))^2, (r1*r2)^2, ((1-r1)*(1-r2))^2))/2
tm[64,] <- c(rep(0, 60), (r1*(1-r2))^2, ((1-r1)*r2)^2, (r1*r2)^2, ((1-r1)*(1-r2))^2,
r3*(1-r3)*c((r1*(1-r2))^2, ((1-r1)*(1-r2))^2, (r1*r2)^2, ((1-r1)*r2)^2, (r1*(1-r2))^2,
((1-r1)*r2)^2, ((1-r1)*(1-r2))^2, (r1*r2)^2))/2
tm[65,] <- c(rep(0, 64), ((1-r1)*(1-r2)*(1-r3))^2, (r1*(1-r2)*(1-r3))^2, ((1-r1)*r2*(1-r3))^2,
(r1*r2*r3)^2, ((1-r1)*(1-r2)*r3)^2, (r1*r2*(1-r3))^2, (r1*(1-r2)*r3)^2,
((1-r1)*r2*r3)^2)/2
tm[66,] <- c(rep(0, 64), (r1*(1-r2)*(1-r3))^2, ((1-r1)*(1-r2)*(1-r3))^2, (r1*r2*(1-r3))^2, ((1-r1)*r2*r3)^2,
(r1*(1-r2)*r3)^2, ((1-r1)*r2*(1-r3))^2, ((1-r1)*(1-r2)*r3)^2, (r1*r2*r3)^2)/2
tm[67,] <- c(rep(0, 64), ((1-r1)*r2*(1-r3))^2, (r1*r2*(1-r3))^2, ((1-r1)*(1-r2)*(1-r3))^2, (r1*(1-r2)*r3)^2,
((1-r1)*r2*r3)^2, (r1*(1-r2)*(1-r3))^2, (r1*r2*r3)^2, ((1-r1)*(1-r2)*r3)^2)/2
tm[68,] <- c(rep(0, 64), (r1*r2*r3)^2, ((1-r1)*r2*r3)^2, (r1*(1-r2)*r3)^2, ((1-r1)*(1-r2)*(1-r3))^2,
(r1*r2*(1-r3))^2, ((1-r1)*(1-r2)*r3)^2, ((1-r1)*r2*(1-r3))^2, (r1*(1-r2)*(1-r3))^2)/2
tm[69,] <- c(rep(0, 64), ((1-r1)*(1-r2)*r3)^2, (r1*(1-r2)*r3)^2, ((1-r1)*r2*r3)^2, (r1*r2*(1-r3))^2,
((1-r1)*(1-r2)*(1-r3))^2, (r1*r2*r3)^2, (r1*(1-r2)*(1-r3))^2, ((1-r1)*r2*(1-r3))^2)/2
tm[70,] <- c(rep(0, 64), (r1*r2*(1-r3))^2, ((1-r1)*r2*(1-r3))^2, (r1*(1-r2)*(1-r3))^2, ((1-r1)*(1-r2)*r3)^2,
(r1*r2*r3)^2, ((1-r1)*(1-r2)*(1-r3))^2, ((1-r1)*r2*r3)^2, (r1*(1-r2)*r3)^2)/2
tm[71,] <- c(rep(0, 64), (r1*(1-r2)*r3)^2, ((1-r1)*(1-r2)*r3)^2, (r1*r2*r3)^2, ((1-r1)*r2*(1-r3))^2,
(r1*(1-r2)*(1-r3))^2, ((1-r1)*r2*r3)^2, ((1-r1)*(1-r2)*(1-r3))^2, (r1*r2*(1-r3))^2)/2
tm[72,] <- c(rep(0, 64), ((1-r1)*r2*r3)^2, (r1*r2*r3)^2, ((1-r1)*(1-r2)*r3)^2, (r1*(1-r2)*(1-r3))^2,
((1-r1)*r2*(1-r3))^2, (r1*(1-r2)*r3)^2, (r1*r2*(1-r3))^2, ((1-r1)*(1-r2)*(1-r3))^2)/2
return(tm)
}
RI4 <- function(d1, d2, d3, n.Generation){
r1 <- (1-exp(-2*d1))/2
r2 <- (1-exp(-2*d2))/2
r3 <- (1-exp(-2*d3))/2
n.Iteration <- n.Generation-1
Freq <- rep(0, 72)
Freq[65] <- 1
ZygoteFreq <- matrix(rep(0, (72*n.Generation-72)), nrow = 72)
for (i in 1:n.Iteration) {
Freq <- RI4TM(r1, r2, r3)%*%Freq
ZygoteFreq[, i] <- Freq
}
re <- ZygoteFreq[, n.Iteration]
return(re)
}
V963R <- function(d1, d2, nG){
f.left <- RI2(d1, nG)
f.right <- RI2(d2, nG)
f <- RI3(d1, d2, nG)
f.right <- f.right[c(1, 3, 4, 6, 7, 9)]
floor <- matrix(1/f.left, ncol = 1)%*%matrix(1/f.right, nrow = 1)
ceiling <- matrix(rep(0, length(f.left)*length(f.right)), nrow = length(f.left))
ceiling[1, 1:2] <- c(f[1], f[8])
ceiling[2, 3:4] <- c(f[2], f[9])
ceiling[3, 5:6] <- c(f[3], f[10])
ceiling[4, 1:2] <- c(f[11], f[14])
ceiling[5, 3:4] <- rep((f[12]+f[13]), 2)
ceiling[6, 5:6] <- c(f[14], f[11])
ceiling[7, 1:2] <- c(f[10], f[3])
ceiling[8, 3:4] <- c(f[9], f[2])
ceiling[9, 5:6] <- c(f[8], f[1])
block <- floor*ceiling
return(block)
}
V663R <- function(d1, d2, nG){
f.left <- RI2(d1, nG)
f.right <- RI2(d2, nG)
f <- RI3(d1, d2, nG)
f.left <- f.left[c(1, 3, 4, 6, 7, 9)]
f.right <- f.right[c(1, 3, 4, 6, 7, 9)]
floor <- matrix(1/f.left, ncol = 1)%*%matrix(1/f.right, nrow = 1)
ceiling <- matrix(rep(0, length(f.left)^2), ncol = length(f.left))
ceiling[1, 1:2] <- c(f[1], f[8])
ceiling[2, 5:6] <- c(f[3], f[10])
ceiling[3, 1:2] <- c(f[11], f[14])
ceiling[4, 5:6] <- c(f[14], f[11])
ceiling[5, 1:2] <- c(f[10], f[3])
ceiling[6, 5:6] <- c(f[8], f[1])
block <- floor*ceiling
return(block)
}
V964R <- function(d1, d2, d3, nG){
f.left <- RI2(d1, nG)
f.right <- RI2(d3, nG)
f <- RI4(d1, d2, d3, nG)
f.right <- f.right[c(1, 3, 4, 6, 7, 9)]
floor <- matrix(1/f.left, ncol = 1)%*%matrix(1/f.right, nrow = 1)
ceiling <- matrix(rep(0, length(f.left)*length(f.right)), nrow = length(f.left))
ceiling[, 1] <- c(f[1], f[4], f[8], f[37], f[41]+f[42], f[49], f[36], f[33], f[29])
ceiling[, 2] <- c(f[3], f[7], f[10], f[40], f[47]+f[48], f[52], f[34], f[30], f[27])
ceiling[, 3] <- c(f[11], f[15]+f[16], f[23], f[53]+f[54], sum(f[61:64]), f[59]+f[60],
f[26], f[21]+f[22], f[14])
ceiling[, 4] <- rev(ceiling[, 3])
ceiling[, 5] <- rev(ceiling[, 2])
ceiling[, 6] <- rev(ceiling[, 1])
block <- floor*ceiling
return(block)
}
V664R <- function(d1, d2, d3, nG){
f.left <- RI2(d1, nG)
f.right <- RI2(d3, nG)
f <- RI4(d1, d2, d3, nG)
f.left <- f.left[c(1, 3, 4, 6, 7, 9)]
f.right <- f.right[c(1, 3, 4, 6, 7, 9)]
floor <- matrix(1/f.left, ncol = 1)%*%matrix(1/f.right, nrow = 1)
ceiling <- matrix(rep(0, length(f.left)^2), ncol = length(f.left))
ceiling[, 1] <- c(f[1], f[8], f[37], f[49], f[36], f[29])
ceiling[, 2] <- c(f[3], f[10], f[40], f[52], f[34], f[27])
ceiling[, 3] <- c(f[11], f[23], f[53]+f[54], f[59]+f[60], f[26], f[14])
ceiling[, 4] <- rev(ceiling[, 3])
ceiling[, 5] <- rev(ceiling[, 2])
ceiling[, 6] <- rev(ceiling[, 1])
block <- floor*ceiling
return(block)
}
cov4R=function (d, nG, nS, ss){
nI <- length(d)
dim <- 9+6*(nI-1)
cov <- matrix(rep(0, (dim^2)), ncol = dim)
cov[(1:9), (10:15)] <- V963R(d[1], d[2], nG)
for(i in 2:(nI-1)){
cov[(9+6*(i-2)+(1:6)), (15+6*(i-2)+(1:6))] <- V663R(d[i], d[i+1], nG)
}
for(i in 2:(nI-1)){
cov[(1:9), (15+6*(i-2)+(1:6))] <- V964R(d[1], sum(d[2:i]), d[i+1], nG)
}
for(i in 2:(nI-2)){
for (j in (i+1):(nI-1)) {
cov[(9+6*(i-2)+1:6), (15+6*(i-1)+6*(j-i-1)+1:6)] <- V664R(d[i], sum(d[(i+1):j]), d[j+1], nG)
}
}
cov <- (cov+t(cov))*ss/nS
diagnal <- rep(0, dim)
diagnal[1:9] <- RI2(d[1], nG)
for(i in 2:nI){
diagnal[(9+6*(i-2)+(1:6))] <- RI2(d[i], nG)[c(1, 3, 4, 6, 7, 9)]
}
diagnal <- 1/diagnal
diag(cov) <- diagnal*ss/nS
return(cov)
}
cov1R <- function(d, nG, nS, ss){
cov <- matrix(rep(0, 81), ncol = 9)
diagnal <- RI2(d, nG)
diag(cov) <- (1/diagnal)*ss/nS
return(cov)
}
cov2R <- function(d, nG, nS, ss){
cov <- matrix(rep(0, 225), ncol = 15)
cov[(1:9), (10:15)] <- V963R(d[1], d[2], nG)
cov <- (cov+t(cov))*ss/nS
diagnal <- rep(0, 15)
diagnal[1:9] <- RI2(d[1], nG)
diagnal[10:15] <- RI2(d[2], nG)[c(1, 3, 4, 6, 7, 9)]
diagnal <- 1/diagnal
diag(cov) <- diagnal*ss/nS
return(cov)
}
cov3R <- function(d, nG, nS, ss){
cov <- matrix(rep(0, 441), ncol = 21)
cov[(1:9), (10:15)] <- V963R(d[1], d[2], nG)
cov[(10:15), (16:21)] <- V663R(d[2], d[3], nG)
cov[(1:9), (16:21)] <- V964R(d[1], d[2], d[3], nG)
cov <- (cov+t(cov))*ss/nS
diagnal <- rep(0, 21)
diagnal[1:9] <- RI2(d[1], nG)
diagnal[10:15] <- RI2(d[2], nG)[c(1, 3, 4, 6, 7, 9)]
diagnal[16:21] <- RI2(d[3], nG)[c(1, 3, 4, 6, 7, 9)]
diagnal <- 1/diagnal
diag(cov) <- diagnal*ss/nS
return(cov)
}
sigmaR <- function(d, nG, nS, ss){
x <- length(d)
if(x > 3){
sigma <- cov4R(d, nG, nS, ss)
} else {
sigma <- switch(x, cov1R(d, nG, nS, ss), cov2R(d, nG, nS, ss), cov3R(d, nG, nS, ss))
}
return(sigma)
}
ZR <- function(y, Ls, Ns, Vr, Go, speed){
Ni <- length(Ls)
Lsr0 <- cumsum(Ls)
sl <- sum(Ls)
Lsp <- seq(0, sl, speed/100)
Lspl <- length(Lsp)
Lsr1 <- c(0, Lsr0[-length(Lsr0)])
loci0 <- c(Lsr0[1])
loci1 <- c(0)
k0 <- c(1)
for(i in 2:Lspl){
loci0[i] <- min(Lsr0[Lsr0 >= Lsp[i]])
loci1[i] <- max(Lsr1[Lsr1 < Lsp[i]])
k0[i] <- which(Lsr0 == min(Lsr0[Lsr0 >= Lsp[i]]))
}
TSC <- NULL
ff0 <- matrix(0, Ni, 9)
for(i in 1:Ni){
ff0[i,] <- RI2(Ls[Ni], Go)
}
ff <- ff0[1,]
for(x in 1:(min(which(Lsp>=Ls[1]))-1)){
loci <- Lsp[x]
mar <- Lsr0[1]
K <- Diff.k(RI3(loci, mar-loci, Go))
L <- Diff.l(RI3(loci, mar-loci, Go))
u1 <- sum((K-sum(K*ff))*ff*y[, 1])
u2 <- sum((L-0.5^(Go-2)+1)*ff*y[, 1])
a <- sum((K-sum(K*ff))^2*ff)
b <- sum((L-0.5^(Go-2)+1)^2*ff)
c <- sum((K-sum(K*ff))*(L-0.5^(Go-2)+1)*ff)
num <- a*u2^2+b*u1^2-2*c*u1*u2
den <- a*b-c^2
Usq <- (Ns/Vr)*num/den
TSC[x] <- Usq
}
if(Ni > 1){
for (x2 in (x+1):Lspl) {
ff <- ff0[k0[x2],]
loci <- Lsp[length(TSC)+1]
K <- Diff.k(RI3(loci-loci1[x2], loci0[x2]-loci, Go))
L <- Diff.l(RI3(loci-loci1[x2], loci0[x2]-loci, Go))
u1 <- sum((K-sum(K*ff))*ff*y[, k0[x2]])
u2 <- sum((L-0.5^(Go-2)+1)*ff*y[, k0[x2]])
a <- sum((K-sum(K*ff))^2*ff)
b <- sum((L-0.5^(Go-2)+1)^2*ff)
c <- sum((K-sum(K*ff))*(L-0.5^(Go-2)+1)*ff)
num <- a*u2^2+b*u1^2-2*c*u1*u2
den <- a*b-c^2
Usq <- (Ns/Vr)*num/den
TSC[x2] <- Usq
}
}
re <- max(TSC)
return(re)
}
thre.fun <- function(d, nG, simu, nS, ss, console = FALSE, cr = 0, speed = 1){
cov <- sigmaR(d, nG, nS, ss)
rawy <- mvtnorm::rmvnorm(simu, rep(0, ncol(cov)), cov)
TS <- rep(0, simu)
for(j in 1:simu){
if(length(d) > 1){
y <- matrix(rep(1, (9*length(d))), nrow = 9)
y[, 1] <- rawy[j, 1:9]
for (i in 2:length(d)) {
y[c(1, 3), i] <- rawy[j, 9+6*(i-2)+1:2]
y[c(4, 6), i] <- rawy[j, 9+6*(i-2)+3:4]
y[c(7, 9), i] <- rawy[j, 9+6*(i-2)+5:6]
}
for(i in 1:(length(d)-1)){
minuend <- RI2(d[i], nG)*y[, i]
subtrahend <- RI2(d[i+1], nG)*y[, i+1]
y[2, i+1] <- (sum(minuend[c(1, 4, 7)])-sum(subtrahend[c(1, 3)]))/subtrahend[2]
y[5, i+1] <- (sum(minuend[c(2, 5, 8)])-sum(subtrahend[c(4, 6)]))/subtrahend[5]
y[8, i+1] <- (sum(minuend[c(3, 6, 9)])-sum(subtrahend[c(7, 9)]))/subtrahend[8]
}
} else {
y <- matrix(rawy[j, ], nrow = 9)
}
TS[j] <- ZR(y, d, nS, ss, nG, speed)
if(j%%cs == 0){
cat(paste(paste("RI F", nG, " ad ", sep = ""), cr, j, "\n", sep = "\t")[console])
}
}
return(TS)
cat(paste(paste("RI F", nG, " ad ", sep = ""), cr, "done", "\n", sep = "\t")[console])
}
if(!d.eff){
thre.fun <- function(d, nG, simu, nS, ss, console = FALSE, cr = 0, speed = 1){
U.RI <- function(y, Ls, Ns, Vr, Go, sp){
Ni <- length(Ls)
Lsr0 <- cumsum(Ls)
sl <- sum(Ls)
Lsp <- seq(0, sl, sp/100)
Lspl <- length(Lsp)
Lsr1 <- c(0, Lsr0[-length(Lsr0)])
loci0 <- c(Lsr0[1])
loci1 <- c(0)
k0 <- c(1)
for(i in 2:Lspl){
loci0[i] <- min(Lsr0[Lsr0 >= Lsp[i]])
loci1[i] <- max(Lsr1[Lsr1 < Lsp[i]])
k0[i] <- which(Lsr0 == min(Lsr0[Lsr0 >= Lsp[i]]))
}
TSC <- NULL
ff0 <- matrix(0, Ni, 9)
for(i in 1:Ni){
ff0[i,] <- RI2(Ls[Ni], Go)
}
ff <- ff0[1,]
for(x in 1:(min(which(Lsp >= Ls[1]))-1)){
loci <- Lsp[x]
mar <- Lsr0[1]
Diff <- Diff.P(RI3(loci, mar-loci, Go))
num <- sum(Diff*ff*y[, 1])
den <- sum(Diff^2*ff)
Usq <- (Ns/Vr)*num^2/den
TSC[x] <- Usq
}
if(Ni > 1){
for(x2 in (x+1):Lspl){
ff <- ff0[k0[x2],]
loci <- Lsp[length(TSC)+1]
Diff <- Diff.P(RI3(loci-loci1[x2], loci0[x2]-loci, Go))
num <- sum(Diff*ff*y[, k0[x2]])
den <- sum(Diff^2*ff)
Usq <- (Ns/Vr)*num^2/den
TSC[x2] <- Usq
}
}
max(TSC, na.rm = TRUE)
}
cov <- sigmaR(d, nG, nS, ss)
rawy <- mvtnorm::rmvnorm(simu, rep(0, ncol(cov)), cov)
TS <- rep(0, simu)
for (j in 1:simu){
if(length(d) > 1){
y <- matrix(rep(1, (9*length(d))), nrow = 9)
y[, 1] <- rawy[j, 1:9]
for (i in 2:length(d)) {
y[c(1, 3), i] <- rawy[j, 9+6*(i-2)+1:2]
y[c(4, 6), i] <- rawy[j, 9+6*(i-2)+3:4]
y[c(7, 9), i] <- rawy[j, 9+6*(i-2)+5:6]
}
for(i in 1:(length(d)-1)){
minuend <- RI2(d[i], nG)*y[, i]
subtrahend <- RI2(d[i+1], nG)*y[, i+1]
y[2, i+1] <- (sum(minuend[c(1, 4, 7)])-sum(subtrahend[c(1, 3)]))/subtrahend[2]
y[5, i+1] <- (sum(minuend[c(2, 5, 8)])-sum(subtrahend[c(4, 6)]))/subtrahend[5]
y[8, i+1] <- (sum(minuend[c(3, 6, 9)])-sum(subtrahend[c(7, 9)]))/subtrahend[8]
}
} else {
y <- matrix(rawy[j, ], nrow = 9)
}
TS[j] <- U.RI(y, d, nS, ss, nG, speed)
if(j%%cs == 0){
cat(paste(paste("RI F", nG, " a ", sep = ""), cr, j, "\n", sep = "\t")[console])
}
}
cat(paste(paste("RI F", nG, " a ", sep = ""), cr, "done", "\n", sep = "\t")[console])
return(TS)
}
}
} else if (type == "AI"){
AI2 <- function(d, n.Generation){
r <- (1-exp(-2*d))/2
ZygoteFreq <- matrix(rep(0, (9*n.Generation-9)), nrow = 9)
GameteFreq <- c((1-r)/2, r/2)
C <- GameteFreq[1]^2
D <- GameteFreq[2]^2
E <- 2*GameteFreq[1]*GameteFreq[2]
F <- 2*GameteFreq[1]^2
G <- 2*GameteFreq[2]^2
ZygoteFreq[, 1] <- c(C, E, D, E, F+G, E, D, E, C)
if (n.Generation > 2) {
for(i in 3:(n.Generation)){
GameteFreq <- (1-r)*GameteFreq+r/4
C <- GameteFreq[1]^2
D <- GameteFreq[2]^2
E <- 2*GameteFreq[1]*GameteFreq[2]
F <- 2*GameteFreq[1]^2
G <- 2*GameteFreq[2]^2
ZygoteFreq[, (i-1)] <- c(C, E, D, E, F+G, E, D, E, C)
}
}
ZygoteFreq[, (n.Generation-1)]
}
AI3 <- function(d1, d2, n.Generation){
d <- d1+d2
r1 <- (1-exp(-2*d1))/2
r2 <- (1-exp(-2*d2))/2
r <- (1-exp(-2*d))/2
ZygoteFreq <- matrix(rep(0, (20*n.Generation-20)), nrow = 20)
N <- (1-r1)*(1-r2)/2
R <- (1-r1)*r2/2
B <- r1*r2/2
L <- r1*(1-r2)/2
COEF <- rep(2, 20)
COEF[c(1, 3, 8, 10)] <- rep(1, 4)
GS <- c(N, N, B, N, N, R, B, R, R, L, N, N, B, R, N, R, N, B, R, L)
GE <- c(N, B, B, R, L, B, L, R, L, L, L, R, L, B, B, L, N, B, R, L)
ZygoteFreq[, 1] <- COEF*GS*GE
if(n.Generation > 2){
for(i in 3:n.Generation){
F23 <- c(N+L, B+R, B+R, N+L)
F13 <- rep(c(N+B, L+R), 2)
F12 <- rep(c(N+R, L+B), each = 2)
NewGameteFreq <- (1-r1)*(1-r2)*c(N, R, B, L)+0.5*r1*(1-r2)*F23+0.5*r1*r2*F13+0.5*(1-r1)*r2*F12
N <- NewGameteFreq[1]
R <- NewGameteFreq[2]
B <- NewGameteFreq[3]
L <- NewGameteFreq[4]
GS <- c(N, N, B, N, N, R, B, R, R, L, N, N, B, R, N, R, N, B, R, L)
GE <- c(N, B, B, R, L, B, L, R, L, L, L, R, L, B, B, L, N, B, R, L)
ZygoteFreq[, (i-1)] <- COEF*GS*GE
}
}
re <- ZygoteFreq[, (n.Generation-1)]
return(re)
}
AI4 <- function(d1, d2, d3, n.Generation){
d <- d1+d2+d3
da <- d1+d2
db <- d2+d3
r <- (1-exp(-2*d))/2
r1 <- (1-exp(-2*d1))/2
r2 <- (1-exp(-2*d2))/2
r3 <- (1-exp(-2*d3))/2
ra <- (1-exp(-2*da))/2
rb <- (1-exp(-2*db))/2
ZygoteFreq <- matrix(rep(0, (72*n.Generation-72)), nrow = 72)
GG1 <- (1-r1)*(1-r2)*(1-r3)/2
GG2 <- (1-r1)*(1-r2)*r3/2
GG3 <- (1-r1)*r2*r3/2
GG4 <- (1-r1)*r2*(1-r3)/2
GG5 <- r1*r2*(1-r3)/2
GG6 <- r1*r2*r3/2
GG7 <- r1*(1-r2)*r3/2
GG8 <- r1*(1-r2)*(1-r3)/2
COEF <- rep(2, 72)
COEF[c(1, 3, 8, 10, 27, 29, 34, 36)] <- rep(1, 8)
GS <- c(GG1, GG1, GG2, GG1, GG1, GG2, GG2, GG5, GG5, GG6, GG1, GG1, GG2, GG2, GG1, GG3, GG1, GG4, GG6,
GG7, GG2, GG4, GG5, GG5, GG6, GG6, GG3, GG3, GG4, GG3, GG3, GG4, GG4, GG7, GG7, GG8, GG1, GG1,
GG2, GG2, GG1, GG5, GG1, GG5, GG6, GG2, GG2, GG6, GG5, GG5, GG6, GG6, GG1, GG3, GG1, GG4, GG2,
GG3, GG2, GG4, GG1, GG5, GG3, GG7, GG1, GG8, GG4, GG6, GG2, GG5, GG7, GG3)
GE <- c(GG1, GG2, GG2, GG5, GG6, GG5, GG6, GG5, GG6, GG6, GG3, GG4, GG3, GG4, GG7, GG5, GG8, GG5, GG3,
GG2, GG8, GG6, GG7, GG8, GG7, GG8, GG3, GG4, GG4, GG7, GG8, GG7, GG8, GG7, GG8, GG8, GG8, GG7,
GG8, GG7, GG4, GG8, GG3, GG7, GG8, GG4, GG3, GG7, GG4, GG3, GG4, GG3, GG6, GG8, GG5, GG8, GG6,
GG7, GG5, GG7, GG2, GG6, GG4, GG8, GG1, GG8, GG4, GG6, GG2, GG5, GG7, GG3)
ZygoteFreq[, 1] <- COEF*GS*GE
if(n.Generation > 2){
for(i in 3:n.Generation){
x <- c(GG1, GG2, GG3, GG4, GG5, GG6, GG7, GG8)
x1 <- c(GG1+GG8, GG2+GG7, GG3+GG6, GG4+GG5, GG4+GG5, GG3+GG6, GG2+GG7, GG1+GG8)
x2 <- rep(c(GG1+GG5, GG2+GG6, GG3+GG7, GG4+ GG8), 2)
x3 <- c(GG1+GG3, GG2+GG4, GG1+GG3, GG2+GG4, GG5+GG7, GG6+GG8, GG5+GG7, GG6+GG8)
x4 <- c(GG1+GG2, GG1+GG2, GG3+GG4, GG3+GG4, GG5+GG6, GG5+GG6, GG7+GG8, GG7+GG8)
x12 <- rep(c(GG1+GG2+GG3+GG4, GG5+GG6+ GG7+GG8), each = 4)
x34 <- rep(c((GG1+GG4+GG5+GG8), (GG2+GG3+GG6+GG7), (GG2+GG3+GG6+GG7), (GG1+GG4+GG5+GG8)), 2)
x13 <- rep(c(GG1+GG2+GG5+GG6, GG1+GG2+GG5+GG6, GG3+GG4+GG7+GG8, GG3+GG4+GG7+GG8), 2)
x24 <- c(rep(c(GG1+GG3+GG6+GG8, GG2+GG4+GG5+GG7), 2), rep(c(GG2+GG4+GG5+GG7, GG1+GG3+GG6+GG8), 2))
x14 <- rep(c(GG1+GG3+GG5+GG7, GG2+GG4+GG6+GG8), 4)
x23 <- c(rep(GG1+GG2+GG7+GG8, 2), rep(GG3+GG4+GG5+GG6, 4), rep(GG1+GG2+GG7+GG8, 2))
NewGameteFreq <- (1-r1)*(1-r2)*(1-r3)*x+0.5*r1*(1-r2)*(1-r3)*x1+0.5*r1*r2*(1-r3)*x2+
0.5*(1-r1)*r2*r3*x3+0.5*(1-r1)*(1-r2)*r3*x4+(1-r1)*r2*(1-r3)*x12*x34+r1*r2*r3*x13*x24+
r1*(1-r2)*r3*x14*x23
GG1 <- NewGameteFreq[1]
GG2 <- NewGameteFreq[2]
GG3 <- NewGameteFreq[3]
GG4 <- NewGameteFreq[4]
GG5 <- NewGameteFreq[5]
GG6 <- NewGameteFreq[6]
GG7 <- NewGameteFreq[7]
GG8 <- NewGameteFreq[8]
GS <- c(GG1, GG1, GG2, GG1, GG1, GG2, GG2, GG5, GG5, GG6, GG1, GG1, GG2, GG2, GG1, GG3, GG1, GG4,
GG6, GG7, GG2, GG4, GG5, GG5, GG6, GG6, GG3, GG3, GG4, GG3, GG3, GG4, GG4, GG7, GG7, GG8,
GG1, GG1, GG2, GG2, GG1, GG5, GG1, GG5, GG6, GG2, GG2, GG6, GG5, GG5, GG6, GG6, GG1, GG3,
GG1, GG4, GG2, GG3, GG2, GG4, GG1, GG5, GG3, GG7, GG1, GG8, GG4, GG6, GG2, GG5, GG7, GG3)
GE <- c(GG1, GG2, GG2, GG5, GG6, GG5, GG6, GG5, GG6, GG6, GG3, GG4, GG3, GG4, GG7, GG5, GG8, GG5,
GG3, GG2, GG8, GG6, GG7, GG8, GG7, GG8, GG3, GG4, GG4, GG7, GG8, GG7, GG8, GG7, GG8, GG8,
GG8, GG7, GG8, GG7, GG4, GG8, GG3, GG7, GG8, GG4, GG3, GG7, GG4, GG3, GG4, GG3, GG6, GG8,
GG5, GG8, GG6, GG7, GG5, GG7, GG2, GG6, GG4, GG8, GG1, GG8, GG4, GG6, GG2, GG5, GG7, GG3)
ZygoteFreq[, (i-1)] <- COEF*GS*GE
}
}
ZygoteFreq[, (n.Generation-1)]
}
V963A <- function(d1, d2, nG){
f.left <- AI2(d1, nG)
f.right <- AI2(d2, nG)
f <- AI3(d1, d2, nG)
f.right <- f.right[c(1, 3, 4, 6, 7, 9)]
floor <- matrix(1/f.left, ncol = 1)%*%matrix(1/f.right, nrow = 1)
ceiling <- matrix(rep(0, length(f.left)*length(f.right)), nrow = length(f.left))
ceiling[1, 1:2] <- c(f[1], f[8])
ceiling[2, 3:4] <- c(f[2], f[9])
ceiling[3, 5:6] <- c(f[3], f[10])
ceiling[4, 1:2] <- c(f[11], f[14])
ceiling[5, 3:4] <- rep((f[12]+f[13]), 2)
ceiling[6, 5:6] <- c(f[14], f[11])
ceiling[7, 1:2] <- c(f[10], f[3])
ceiling[8, 3:4] <- c(f[9], f[2])
ceiling[9, 5:6] <- c(f[8], f[1])
block <- floor*ceiling
return(block)
}
V663A <- function(d1, d2, nG){
f.left <- AI2(d1, nG)
f.right <- AI2(d2, nG)
f <- AI3(d1, d2, nG)
f.left <- f.left[c(1, 3, 4, 6, 7, 9)]
f.right <- f.right[c(1, 3, 4, 6, 7, 9)]
floor <- matrix(1/f.left, ncol = 1)%*%matrix(1/f.right, nrow = 1)
ceiling <- matrix(rep(0, length(f.left)^2), ncol = length(f.left))
ceiling[1, 1:2] <- c(f[1], f[8])
ceiling[2, 5:6] <- c(f[3], f[10])
ceiling[3, 1:2] <- c(f[11], f[14])
ceiling[4, 5:6] <- c(f[14], f[11])
ceiling[5, 1:2] <- c(f[10], f[3])
ceiling[6, 5:6] <- c(f[8], f[1])
block <- floor*ceiling
return(block)
}
V964A <- function(d1, d2, d3, nG){
f.left <- AI2(d1, nG)
f.right <- AI2(d3, nG)
f <- AI4(d1, d2, d3, nG)
f.right <- f.right[c(1, 3, 4, 6, 7, 9)]
floor <- matrix(1/f.left, ncol = 1) %*% matrix(1/f.right, nrow = 1)
ceiling <- matrix(rep(0, length(f.left)*length(f.right)), nrow = length(f.left))
ceiling[, 1] <- c(f[1], f[4], f[8], f[37], f[41]+f[42], f[49], f[36], f[33], f[29])
ceiling[, 2] <- c(f[3], f[7], f[10], f[40], f[47]+f[48], f[52], f[34], f[30], f[27])
ceiling[, 3] <- c(f[11], f[15]+f[16], f[23], f[53]+f[54], sum(f[61:64]), f[59]+f[60], f[26],
f[21]+f[22], f[14])
ceiling[, 4] <- rev(ceiling[, 3])
ceiling[, 5] <- rev(ceiling[, 2])
ceiling[, 6] <- rev(ceiling[, 1])
block <- floor*ceiling
return(block)
}
V664A <- function(d1, d2, d3, nG){
f.left <- AI2(d1, nG)
f.right <- AI2(d3, nG)
f <- AI4(d1, d2, d3, nG)
f.left <- f.left[c(1, 3, 4, 6, 7, 9)]
f.right <- f.right[c(1, 3, 4, 6, 7, 9)]
floor <- matrix(1/f.left, ncol = 1) %*% matrix(1/f.right, nrow = 1)
ceiling <- matrix(rep(0, length(f.left)^2), ncol = length(f.left))
ceiling[, 1] <- c(f[1], f[8], f[37], f[49], f[36], f[29])
ceiling[, 2] <- c(f[3], f[10], f[40], f[52], f[34], f[27])
ceiling[, 3] <- c(f[11], f[23], f[53]+f[54], f[59]+f[60], f[26], f[14])
ceiling[, 4] <- rev(ceiling[, 3])
ceiling[, 5] <- rev(ceiling[, 2])
ceiling[, 6] <- rev(ceiling[, 1])
block <- floor*ceiling
return(block)
}
cov4A <- function(d, nG, nS, ss){
nI <- length(d)
dim <- 9+6*(nI-1)
cov <- matrix(rep(0, (dim^2)), ncol = dim)
cov[(1:9), (10:15)] <- V963A(d[1], d[2], nG)
for(i in 2:(nI-1)){
cov[(9+6*(i-2)+(1:6)), (15+6*(i-2)+(1:6))] <- V663A(d[i], d[i+1], nG)
}
for(i in 2:(nI-1)){
cov[(1:9), (15+6*(i-2)+(1:6))] <- V964A(d[1], sum(d[2:i]), d[i+1], nG)
}
for(i in 2:(nI-2)){
for(j in (i+1):(nI-1)){
cov[(9+6*(i-2)+1:6), (15+6*(i-1)+6*(j-i-1)+1:6)] <- V664A(d[i], sum(d[(i+1):j]), d[j+1], nG)
}
}
cov <- (cov+t(cov))*ss/nS
diagnal <- rep(0, dim)
diagnal[1:9] <- AI2(d[1], nG)
for (i in 2:nI) {
diagnal[(9+6*(i-2)+(1:6))] <- AI2(d[i], nG)[c(1, 3, 4, 6, 7, 9)]
}
diagnal <- 1/diagnal
diag(cov) <- diagnal*ss/nS
return(cov)
}
cov1A <- function(d, nG, nS, ss){
cov <- matrix(rep(0, 81), ncol = 9)
diagnal <- AI2(d, nG)
diag(cov) <- (1/diagnal)*ss/nS
return(cov)
}
cov2A <- function(d, nG, nS, ss){
cov <- matrix(rep(0, 225), ncol = 15)
cov[(1:9), (10:15)] <- V963A(d[1], d[2], nG)
cov <- (cov+t(cov))*ss/nS
diagnal <- rep(0, 15)
diagnal[1:9] <- AI2(d[1], nG)
diagnal[10:15] <- AI2(d[2], nG)[c(1, 3, 4, 6, 7, 9)]
diagnal <- 1/diagnal
diag(cov) <- diagnal*ss/nS
return(cov)
}
cov3A <- function(d, nG, nS, ss){
cov <- matrix(rep(0, 441), ncol = 21)
cov[(1:9), (10:15)] <- V963A(d[1], d[2], nG)
cov[(10:15), (16:21)] <- V663A(d[2], d[3], nG)
cov[(1:9), (16:21)] <- V964A(d[1], d[2], d[3], nG)
cov <- (cov+t(cov))*ss/nS
diagnal <- rep(0, 21)
diagnal[1:9] <- AI2(d[1], nG)
diagnal[10:15] <- AI2(d[2], nG)[c(1, 3, 4, 6, 7, 9)]
diagnal[16:21] <- AI2(d[3], nG)[c(1, 3, 4, 6, 7, 9)]
diagnal <- 1/diagnal
diag(cov) <- diagnal*ss/nS
return(cov)
}
sigmaA <- function(d, nG, nS, ss){
x <- length(d)
if(x > 3){
sigma <- cov4A(d, nG, nS, ss)
} else {
sigma <- switch(x, cov1A(d, nG, nS, ss), cov2A(d, nG, nS, ss), cov3A(d, nG, nS, ss))
}
return(sigma)
}
ZA <- function(y, Ls, Ns, Vr, Go, sp){
Ni <- length(Ls)
Lsr0 <- cumsum(Ls)
sl <- sum(Ls)
Lsp <- seq(0, sl, sp/100)
Lspl <- length(Lsp)
Lsr1 <- c(0,Lsr0[-length(Lsr0)])
loci0 <- c(Lsr0[1])
loci1 <- c(0)
k0 <- c(1)
for(i in 2:Lspl){
loci0[i] <- min(Lsr0[Lsr0 >= Lsp[i]])
loci1[i] <- max(Lsr1[Lsr1 < Lsp[i]])
k0[i] <- which(Lsr0 == min(Lsr0[Lsr0 >= Lsp[i]]))
}
TSC <- NULL
ff0 <- matrix(0, Ni, 9)
for(i in 1:Ni){
ff0[i,] <- AI2(Ls[Ni], Go)
}
ff <- ff0[1,]
for(x in 1:(min(which(Lsp >= Ls[1]))-1)){
loci <- Lsp[x]
mar <- Lsr0[1]
K <- Diff.k(AI3(loci, mar-loci, Go))
L <- Diff.l(AI3(loci, mar-loci, Go))
u1 <- sum((K-sum(K*ff))*ff*y[, 1])
u2 <- sum((L-sum(L*ff))*ff*y[, 1])
a <- sum((K-sum(K*ff))^2*ff)
b <- sum((L-sum(L*ff))^2*ff)
c <- sum((K-sum(K*ff))*(L-sum(L*ff))*ff)
num <- a*u2^2+b*u1^2-2*c*u1*u2
den <- a*b-c^2
Usq <- (Ns/Vr)*num/den
TSC[x] <- Usq
}
if(Ni > 1){
for(x2 in (x+1):Lspl){
ff <- ff0[k0[x2],]
loci <- Lsp[length(TSC)+1]
K <- Diff.k(AI3(loci-loci1[x2], loci0[x2]-loci, Go))
L <- Diff.l(AI3(loci-loci1[x2], loci0[x2]-loci, Go))
u1 <- sum((K-sum(K*ff))*ff*y[, k0[x2]])
u2 <- sum((L-sum(L*ff))*ff*y[, k0[x2]])
a <- sum((K-sum(K*ff))^2*ff)
b <- sum((L-sum(L*ff))^2*ff)
c <- sum((K-sum(K*ff))*(L-sum(L*ff))*ff)
num <- a*u2^2+b*u1^2-2*c*u1*u2
den <- a*b-c^2
Usq <- (Ns/Vr)*num/den
TSC[x2] <- Usq
}
}
re <- max(TSC)
return(re)
}
thre.fun <- function(d, nG, simu, nS, ss, console = FALSE, cr = 0, speed = 1){
cov <- sigmaA(d, nG, nS, ss)
rawy <- mvtnorm::rmvnorm(simu, rep(0, ncol(cov)), cov)
TS <- rep(0, simu)
for(j in 1:simu){
if(length(d) > 1){
y <- matrix(rep(1, (9*length(d))), nrow = 9)
y[, 1] <- rawy[j, 1:9]
for(i in 2:length(d)){
y[c(1, 3), i] <- rawy[j, 9+6*(i-2)+1:2]
y[c(4, 6), i] <- rawy[j, 9+6*(i-2)+3:4]
y[c(7, 9), i] <- rawy[j, 9+6*(i-2)+5:6]
}
for(i in 1:(length(d)-1)){
minuend <- AI2(d[i], nG)*y[, i]
subtrahend <- AI2(d[i+1], nG)*y[, i+1]
y[2, i+1] <- (sum(minuend[c(1, 4, 7)])-sum(subtrahend[c(1, 3)]))/subtrahend[2]
y[5, i+1] <- (sum(minuend[c(2, 5, 8)])-sum(subtrahend[c(4, 6)]))/subtrahend[5]
y[8, i+1] <- (sum(minuend[c(3, 6, 9)])-sum(subtrahend[c(7, 9)]))/subtrahend[8]
}
} else {
y <- matrix(rawy[j, ], nrow = 9)
}
TS[j] <- ZA(y, d, nS, ss, nG, speed)
if(j%%cs == 0){
cat(paste(paste("AI F", nG, " ad ", sep = ""), cr, j, "\n", sep = "\t")[console])
}
}
cat(paste(paste("AI F", nG, " ad ", sep = ""), cr, "done", "\n", sep = "\t")[console])
return(TS)
}
if(!d.eff){
thre.fun <- function(d, nG, simu, nS, ss, console = FALSE, cr = 0, speed = 1){
U.AI <- function(y, Ls, Ns, Vr, Go, sp){
Ni <- length(Ls)
Lsr0 <- cumsum(Ls)
sl <- sum(Ls)
Lsp <- seq(0,sl,sp/100)
Lspl <- length(Lsp)
Lsr1 <- c(0,Lsr0[-length(Lsr0)])
loci0 <- c(Lsr0[1])
loci1 <- c(0)
k0 <- c(1)
for(i in 2:Lspl){
loci0[i] <- min(Lsr0[Lsr0 >= Lsp[i]])
loci1[i] <- max(Lsr1[Lsr1 < Lsp[i]])
k0[i] <- which(Lsr0 == min(Lsr0[Lsr0 >= Lsp[i]]))
}
TSC <- NULL
ff0 <- matrix(0, Ni, 9)
for(i in 1:Ni){
ff0[i,] <- AI2(Ls[Ni], Go)
}
ff <- ff0[1,]
for(x in 1:(min(which(Lsp >= Ls[1]))-1)){
loci <- Lsp[x]
mar <- Lsr0[1]
Diff <- Diff.P(AI3(loci, mar-loci, Go))
num <- sum(Diff*ff*y[, 1])
den <- sum(Diff^2*ff)
Usq <- (Ns/Vr)*num^2/den
TSC[x] <- Usq
}
if(Ni > 1){
for(x2 in (x+1):Lspl){
ff <- ff0[k0[x2],]
loci <- Lsp[length(TSC)+1]
Diff <- Diff.P(AI3(loci-loci1[x2], loci0[x2]-loci, Go))
num <- sum(Diff*ff*y[, k0[x2]])
den <- sum(Diff^2*ff)
Usq <- (Ns/Vr)*num^2/den
TSC[x2] <- Usq
}
}
re <- max(TSC, na.rm = TRUE)
return(re)
}
cov <- sigmaA(d, nG, nS, ss)
rawy <- mvtnorm::rmvnorm(simu, rep(0, ncol(cov)), cov)
TS <- rep(0, simu)
for(j in 1:simu){
if(length(d) > 1){
y <- matrix(rep(1, (9*length(d))), nrow = 9)
y[, 1] <- rawy[j, 1:9]
for(i in 2:length(d)){
y[c(1, 3), i] <- rawy[j, 9+6*(i-2)+1:2]
y[c(4, 6), i] <- rawy[j, 9+6*(i-2)+3:4]
y[c(7, 9), i] <- rawy[j, 9+6*(i-2)+5:6]
}
for(i in 1:(length(d)-1)){
minuend <- AI2(d[i], nG)*y[, i]
subtrahend <- AI2(d[i+1], nG)*y[, i+1]
y[2, i+1] <- (sum(minuend[c(1, 4, 7)])-sum(subtrahend[c(1, 3)]))/subtrahend[2]
y[5, i+1] <- (sum(minuend[c(2, 5, 8)])-sum(subtrahend[c(4, 6)]))/subtrahend[5]
y[8, i+1] <- (sum(minuend[c(3, 6, 9)])-sum(subtrahend[c(7, 9)]))/subtrahend[8]
}
} else {
y <- matrix(rawy[j, ], nrow = 9)
}
TS[j] <- U.AI(y, d, nS, ss, nG, speed)
if(j%%cs == 0){
cat(paste(paste("AI F", nG, " a ", sep = ""), cr, j, "\n", sep = "\t")[console])
}
}
cat(paste(paste("AI F", nG, " a ", sep = ""), cr, "done", "\n", sep = "\t")[console])
return(TS)
}
}
}
cat(paste("Generation", "chr", "simulation times", "\n", sep = "\t")[console])
for(i in 1:ncr){
d <- marker[marker[, 1] == cr[i], 2]
d <- d[-1]-d[-length(d)]
thre0 <- thre.fun(d, ng, simu, ns, gv, console, cr[i], speed)
thre <- cbind(thre, thre0)
}
max0 <- function(x){max(x, na.rm = TRUE)}
permu.max <- apply(thre,1,max0)
thre.all <- stats::quantile(permu.max, (1-alpha), type = 3)
return(thre.all)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.