Functions are provided for quantifying evolution and selection on complex traits. The package implements effective handling and analysis algorithms scaled for genome-wide data and calculates a composite statistic, denoted Ghat, which is used to test for selection on a trait. The package provides a number of simple examples for handling and analysing the genome data and visualising the output and results. Beissinger et al., (2018) doi:10.1534/genetics.118.300857


Medhat Mahmoud, ‡,§,1, Mila Tost,1, ‡, Ngoc-Thuy Ha †, Henner Simianer †, ‡, and Timothy Beissinger*, ‡,1

*Department of Crop Science, University of Goettingen, Goettingen, Germany

†Department of Animal Sciences, University of Goettingen, Goettingen, Germany

‡Center for Integrated Breeding Research, University of Goettingen, Goettingen, Germany




Latest development build

To install the latest development snapshot (see latest changes below), type the following commands into the R console:


Official, stable release

To install the latest stable release from CRAN, type the following command into the R console:


Documentation and examples

Example-1 Both SNP effects and change in allele frequency are known

maize       <- Maize_wqs[[1]]
result.adf  <- Ghat(effects =maize[,1], change=maize[,2], method="scale",
                     perms=1000, plot="Ghat", num_eff=54.74819)
mtext(paste("WQS ADF test for selection, pval = ", round(result.adf$p.val,4)))
message (c(result.adf$Ghat , result.adf$Cor , result.adf$

Example-2 Both SNP effects and change in allele frequency are known

Step 1: Run rrBLUP and estimating allels effects

phe                 <- Maize_wqs[[2]]
map                 <- Maize_wqs[[3]]
gen                 <- Maize_wqs[[4]]
phe                 <-phe[which([,2])==FALSE),]
gen                 <-gen[which([,2])==FALSE),]
result              <- mixed.solve(phe[,2],
                                   Z= as.matrix(gen[,2:ncol(gen)]),
                                   X= model.matrix(phe[,2]~phe[,3]),
                                   K=NULL, SE=FALSE, return.Hinv=FALSE,

Step 2: Is to calculate the allele frequency at Cycle 1 and 3

CycleIndicator      <- as.numeric(unlist(strsplit(gen$X,
                       split="_C")) [seq(2,2*nrow(gen),2)])
Cycle1              <- gen[which(CycleIndicator == 1),]
Cycle3              <- gen[which(CycleIndicator == 3),]
CycleList           <- list(Cycle1,Cycle3)
frequencies         <- matrix(nrow=ncol(gen)-1,ncol=2)
for(i in 1:2){
  frequencies[,i]   <- colMeans(CycleList[[i]][,-1],na.rm=TRUE)/2
frequencies         <-
names(frequencies)  <- c("Cycle1","Cycle3")

Step 3: Calculate LD Decay

ld                  <- ld_decay (gen=gen, map=map,
                                 max_win_snp=2000, max.chr=10,
                                 cores=1, max_r2=0.03)

Step 4: Calculate Ghat

Ghat.adf    <- Ghat(effects=result$u, change=change, method = "scale",
                    perms=1000,plot="Ghat", num_eff = 54.74819)

message (paste("Ghat=" , Ghat.adf$Ghat,
            "Cor="  , Ghat.adf$Cor ,
            "P-val=", Ghat.adf$, sep = " "))

Please visit for documentation and examples.