EvalAdmix: Difference between revisions
No edit summary |
|||
Line 177: | Line 177: | ||
==Citation== | ==Citation== | ||
evalAdmix has a | evalAdmix has a preprint | ||
[https://doi.org/10.1101/708883 Evaluation of Model Fit of Inferred Admixture Proportions] | [https://doi.org/10.1101/708883 Evaluation of Model Fit of Inferred Admixture Proportions] |
Revision as of 12:35, 21 July 2019
evalAdmix allows to evaluate the results of an admixture analysis. It takes as input the genotype data (either called genotypes in plink files or genotype likelihoods beagle files) used in the admixture analysis and the frequency and admixture propotions (P and Q files) generated.
The output is a pairwise correlation of residuals matrix between individuals The correlation will be 0 in case of a good fit of the data to the admixture model. When something is wrong, individuals from the same population will be positively correlated; and individuals from different populationts but that share one or more ancestral populations as admixture sources will have a negative correlation. Positive correlation between a pair of individuals might also be due to relatedness.
Download and Installation
evalAdmix can be installed from github
git clone https://github.com/GenisGE/evalAdmix.git cd evalAdmix make
Quick start
./evalAdmix -beagle inputBeagleFile.gz -fname myoutfiles.fopt.gz -qname myoutfiles.qopt -P 10
./evalAdmix -plink inputPlinkPrefix -fname myoutfiles.fopt.gz -qname myoutfiles.qopt -P 10
- -beagle beagle file of genotype likelihoods
- -plink binary plink file prefix with genotype data
- -fname file with ancestral frequencies
- -qname file with admixture proportions
- -o prefix of output file names
- -P Number of threads used
Parameters
./evalAdmix
Arguments: -plink path to binary plink file (excluding the .bed) -beagle path to beagle file containing genotype likelihoods (alternative to -plink) -fname path to ancestral population frequencies file -qname path to admixture proportions file -o name of the output file Setup: -P 1 number of threads -autosomeMax 23 autosome ends with this chromsome -nIts 5 number of iterations to do for frequency correction; if set to 0 calculates correlation without correction (fast but biased) -useSites 1.0 proportion of sites to use to calculate correlation of residuals -misTol 0.05 tolerance for considering site as missing when using genotype likelihoods. Use same value as used in NGSadmix to keep compatibility when using genotype likelihoods (-beagle) -minMaf 0.05 minimum minor allele frequency to keep site. Use same value as used in NGSadmix to keep compatibility when using genotype likelihoods (-beagle)
Input File
Plink
Genotype data files in binary PLINK format (.bed .fam .bim).
Beagle genotype likelhoods
The input file contains genotype likelihoods in a .beagle file format [1]. and can be compressed with gzip.
BAM files
If you have BAM files you can use ANGSD to produce genotype likelihoods in .beagle format. Please see Creation of Beagle files with ANGSD
VCF files
If you already have made a VCF file that contains genotype likehood information then it should be possible to convert .vcf files with genotype likelihoods to .beagle file via vcftools [2]
vcftools --vcf input.vcf --out test --BEAGLE-GL --chr 1,2
Chromosome has to be specified.
You can also use bcftools' [3] 'query' option for generating a .beagle file from a .vcf file.
Output Files
The analysis performed by evalAdmix produces 1 file, containing a tab delimited N times N symmetric correlation matrix, where column i in line j contains the correlation of residuals between individual i and j, and the diagonal values (self-correlation) are set to NA:
NA 0.008609 -0.006919 0.002731 0.020224
0.008609 NA 0.000033 0.004968 -0.008470
-0.006919 0.000033 NA 0.006982 0.005664
0.002731 0.004968 0.006982 NA 0.000521
0.020224 -0.008470 0.005664 0.000521 NA
Run command example
Genotype data
Download the input file containing genotype in binary plink format
wget http://pontus.popgen.dk/albrecht/open/admixTjeck/plink/admixTjeck2.bed wget http://pontus.popgen.dk/albrecht/open/admixTjeck/plink/admixTjeck2.bim wget http://pontus.popgen.dk/albrecht/open/admixTjeck/plink/admixTjeck2.fam
Run ADMIXTURE to obtain admixture proprotions
admixture admixTjeck2.bed 3
Run evalAdmix
./evalAdmix -plink admixTjeck2 -fname admixTjeck2.3.P -qname admixTjeck2.3.Q -P 20
Plot results in R
# read population labels and estimated admixture proportions pop<-read.table("admixTjeck2.fam") q<-read.table("admixTjeck2.3.Q") # order according to population and plot the ADMIXTURE reults ord<-order(pop[,2]) barplot(t(q)[,ord],col=2:10,space=0,border=NA,xlab="Individuals",ylab="Demo2 Admixture proportions for K=3") text(tapply(1:nrow(pop),pop[ord,2],mean),-0.05,unique(pop[ord,2]),xpd=T) abline(v=cumsum(sapply(unique(pop[ord,2]),function(x){sum(pop[ord,2]==x)})),col=1,lwd=1.2) r<-read.table("output.corres.txt") # Plot correlation of residuals mypalette <- colorRampPalette(colors = c("blue", "green", "red"), space="Lab")(10) mylegend <- as.raster(mypalette, ncol=1)[10:1,] layout(matrix(1:2,ncol=2), width = c(4,1),height = c(1,1)) par(mar=c(5,4,4,0)) image(as.matrix(r)[ord,ord], col=mypalette, yaxt="n",xaxt="n", zlim=c(-0.25,0.25),useRaster=T, main="Correlation of residuals", oldstyle=T,cex.main=1) text(tapply(1:nrow(pop),pop[ord,2],mean)/length(pop[ord,2]),-0.1,unique(pop[ord,2]),xpd=T) text(-0.1,tapply(1:nrow(pop),pop[ord,2],mean)/length(pop[ord,2]),unique(pop[ord,2]),xpd=T) abline(v=cumsum(sapply(unique(pop[ord,2]),function(x){sum(pop[ord,2]==x)}))/length(pop[ord,2]),col=1,lwd=1.2) abline(h=cumsum(sapply(unique(pop[ord,2]),function(x){sum(pop[ord,2]==x)}))/length(pop[ord,2]),col=1,lwd=1.2) par(mar=c(5,0.5,4,2)) plot(c(0,1),c(0,1),type = 'n', axes = F,xlab = '', ylab = '', main = '') rasterImage(mylegend, 0, 0.25, 0.4,0.75) text(x=0.8, y = c(0.25,0.5, 0.75), labels = c(-0.25, 0, 0.25),cex=0.8)
Low depth sequencing data
Download the input file containing genotype likelihoods in beagle format
wget popgen.dk/software/download/NGSadmix/data/Demo2input.gz wget popgen.dk/software/download/NGSadmix/data/Demo2pop.info
Execute NGSadmix to obtain admixture proportions
./NGSadmix -likes Demo2input.gz -K 3 -P 20 -o myoutfiles -minMaf 0.05
- Input file = Demo2input.gz
- Ancestral Populations K=3
- Computer cores = 20 (-P 20).
- Output prefix = myoutfiles (-o myoutfiles)
- SNPs with MAF > 5% (-minMaf 0.05)
Run evalAdmix
./evalAdmix -beagle Demo2input.gz -fname myoutfiles.fopt.gz -qname myoutfiles.qopt -P 20
- Input file = input.gz
- Ancestral Populations frequency file myoutfiles.fopt.gz
- Computer cores = 20 (-P 20).
Plot results in R
# read population labels and estimated admixture proportions pop<-read.table("Demo2pop.info",as.is=T) q<-read.table("myoutfiles.qopt") # order according to population and plot the NGSadmix reults ord<-order(pop[,1]) barplot(t(q)[,ord],col=2:10,space=0,border=NA,xlab="Individuals",ylab="Demo2 Admixture proportions for K=3") text(tapply(1:nrow(pop),pop[ord,1],mean),-0.05,unique(pop[ord,1]),xpd=T) abline(v=cumsum(sapply(unique(pop[ord,1]),function(x){sum(pop[ord,1]==x)})),col=1,lwd=1.2) r<-read.table("output.corres.txt") image(as.matrix(r))
Citation
evalAdmix has a preprint