#!/bin/sh
#
#SBATCH --job-name=treemix # Job Name
#SBATCH --nodes=1 # 40 nodes
#SBATCH --ntasks-per-node=1 # 40 CPU allocation per Task
#SBATCH --partition=sixhour # Name of the Slurm partition used
#SBATCH --chdir=/home/d669d153/work/phil.dicaeum/treemix # Set working d$
#SBATCH --mem-per-cpu=5gb # memory requested
#SBATCH --time=100
#convert vcf into treemix file
#/home/d669d153/work/stacks-2.41/populations --in_vcf filtered.85.unlinked.vcf -O . --treemix -M treemix.popmap.txt
#remove stacks header
#echo "$(tail -n +2 filtered.85.unlinked.p.treemix)" > filtered.85.unlinked.p.treemix
#gzip file for input to treemix
#gzip filtered.85.unlinked.p.treemix
#run treemix with m0
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i filtered.85.unlinked.p.treemix.gz -root nigrilore -o treem0
#add 1 migration edge
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i filtered.85.unlinked.p.treemix.gz -m 1 -g treem0.vertices.gz treem0.edges.gz -o treem1
#add 2 migration edges
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i filtered.85.unlinked.p.treemix.gz -m 1 -g treem1.vertices.gz treem1.edges.gz -o treem2
#add 3 migration edges
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i filtered.85.unlinked.p.treemix.gz -m 1 -g treem2.vertices.gz treem2.edges.gz -o treem3
Dicaeum TreeMix analysis
0.1 Step 1: move ulinked SNP dataset (as vcf) to the cluster, along with a popmap (text file) assigning all samples to tips.
popmap is a tab delimited text file with two columns, ‘sample ID’ and ‘population’.
0.2 Step 2: On the KU HPCC, use this job script to convert vcf to treemix input, then run TreeMix, and progressively add migration edges.
0.3 Step 3: copy the entire treemix outdirectory from the KU cluster to my local machine
scp -r d669d153@hpc.crc.ku.edu:/home/d669d153/work/phil.dicaeum/treemix /Users/devder/Desktop/phil.dicaeum/
0.4 Step 4: move into the treemix output directory and plot trees
#source plotting functions that are distributed with treemix
source("~/Downloads/plotting_funcs.R")
#0 edge
plot_tree("~/Desktop/phil.dicaeum/treemix/treem0")
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem0"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem0"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem0"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem0"): NAs introduced
by coercion
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 mind NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 16 4 1 1 1
3 3 zam NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 luz NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
5 15 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 2 2 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 15 1 16 3
V11
1 mind:0.000966099
2 (luz:0.00241644,mind:0.000966099):0.00171276
3 zam:0.0147955
4 luz:0.00241644
5 nigrilore:0.0738336
6 ((luz:0.00241644,mind:0.000966099):0.00171276,zam:0.0147955):0.0738336
7 (nigrilore:0.0738336,((luz:0.00241644,mind:0.000966099):0.00171276,zam:0.0147955):0.0738336);
x y ymin ymax
1 0.07651246 0.375 0.25 0.50
2 0.07554636 0.500 0.25 0.75
3 0.08862910 0.125 0.00 0.25
4 0.07796280 0.625 0.50 0.75
5 0.07383360 0.875 0.75 1.00
6 0.07383360 0.250 0.00 0.75
7 0.00000000 0.750 0.00 1.00
Warning in max(e[e[, 5] == "MIG", 4]): no non-missing arguments to max;
returning -Inf
[1] 0.07651246 0.08862910 0.07796280 0.07383360
[1] 0.003
[1] "mse 0.0010874170625"
$d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 mind NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 16 4 1 1 1
3 3 zam NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 luz NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
5 15 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 2 2 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 15 1 16 3
V11
1 mind:0.000966099
2 (luz:0.00241644,mind:0.000966099):0.00171276
3 zam:0.0147955
4 luz:0.00241644
5 nigrilore:0.0738336
6 ((luz:0.00241644,mind:0.000966099):0.00171276,zam:0.0147955):0.0738336
7 (nigrilore:0.0738336,((luz:0.00241644,mind:0.000966099):0.00171276,zam:0.0147955):0.0738336);
x y ymin ymax
1 0.07651246 0.375 0.25 0.50
2 0.07554636 0.500 0.25 0.75
3 0.08862910 0.125 0.00 0.25
4 0.07796280 0.625 0.50 0.75
5 0.07383360 0.875 0.75 1.00
6 0.07383360 0.250 0.00 0.75
7 0.00000000 0.750 0.00 1.00
$e
V1 V2 V3 V4 V5 V6 V7
1 2 4 0.002416440 1 NOT_MIG 0 1
2 2 1 0.000966099 1 NOT_MIG 0 1
3 16 2 0.001712760 1 NOT_MIG 0 1
4 17 15 0.073833600 1 NOT_MIG 0 1
5 17 16 0.073833600 1 NOT_MIG 0 1
6 16 3 0.014795500 1 NOT_MIG 0 1
#1 edge
plot_tree("~/Desktop/phil.dicaeum/treemix/treem1", plus = 0.02, arrow=.1, ybar = 0, scale=F, lwd=1.5)
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem1", plus = 0.02, :
NAs introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem1", plus = 0.02, :
NAs introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem1", plus = 0.02, :
NAs introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem1", plus = 0.02, :
NAs introduced by coercion
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 mind NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 16 1 1 4 1
3 3 zam NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 luz NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
5 15 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 2 2 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 15 1 16 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 2 4 NA NA NA
V11
1 mind:0.00096154
2 (mind:0.00096154,luz:0.002421):0.00190811
3 zam:0.0184821
4 luz:0.002421
5 nigrilore:0.0737359
6 ((mind:0.00096154,luz:0.002421):0.00190811,zam:0.0184821):0.0737359
7 (nigrilore:0.0737359,((mind:0.00096154,luz:0.002421):0.00190811,zam:0.0184821):0.0737359);
8 <NA>
x y ymin ymax
1 0.07660555 0.625 0.50 0.75
2 0.07564401 0.500 0.25 0.75
3 0.08870670 0.125 0.00 0.25
4 0.07806502 0.375 0.25 0.50
5 0.07373590 0.875 0.75 1.00
6 0.07373590 0.250 0.00 0.75
7 0.00000000 0.750 0.00 1.00
8 0.07573520 NA 0.25 0.50
[1] "0.037665 0.07564401 0.078065017"
[1] 0.07660555 0.08870670 0.07806502 0.07373590
[1] 0.003
$d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 mind NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 16 1 1 4 1
3 3 zam NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 luz NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
5 15 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 2 2 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 15 1 16 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 2 4 NA NA NA
V11
1 mind:0.00096154
2 (mind:0.00096154,luz:0.002421):0.00190811
3 zam:0.0184821
4 luz:0.002421
5 nigrilore:0.0737359
6 ((mind:0.00096154,luz:0.002421):0.00190811,zam:0.0184821):0.0737359
7 (nigrilore:0.0737359,((mind:0.00096154,luz:0.002421):0.00190811,zam:0.0184821):0.0737359);
8 <NA>
x y ymin ymax
1 0.07660555 0.6250000 0.50 0.75
2 0.07564401 0.5000000 0.25 0.75
3 0.08870670 0.1250000 0.00 0.25
4 0.07806502 0.3750000 0.25 0.50
5 0.07373590 0.8750000 0.75 1.00
6 0.07373590 0.2500000 0.00 0.75
7 0.00000000 0.7500000 0.00 1.00
8 0.07573520 0.4952919 0.25 0.50
$e
V1 V2 V3 V4 V5 V6 V7
1 2 1 0.000961540 1.0000000 NOT_MIG 1.000000 1.000000
2 16 2 0.001908110 1.0000000 NOT_MIG 1.000000 1.000000
3 17 15 0.073735900 1.0000000 NOT_MIG 1.000000 1.000000
4 17 16 0.073735900 1.0000000 NOT_MIG 1.000000 1.000000
5 16 3 0.014970800 0.9000090 NOT_MIG 1.000000 0.810017
6 2 18 0.000091187 1.0000000 NOT_MIG 1.000000 1.000000
7 18 4 0.002329820 1.0000000 NOT_MIG 0.037665 1.000000
8 18 3 0.000000000 0.0999906 MIG 0.037665 0.000000
#2 edges
plot_tree("~/Desktop/phil.dicaeum/treemix/treem2")
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem2"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem2"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem2"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem2"): NAs introduced
by coercion
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 mind NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 16 1 1 4 1
3 3 zam NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 luz NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
5 15 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 2 2 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 15 1 16 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 2 4 NA NA NA
V11
1 mind:0.00096154
2 (mind:0.00096154,luz:0.002421):0.0019081
3 zam:0.0184819
4 luz:0.002421
5 nigrilore:0.0737359
6 ((mind:0.00096154,luz:0.002421):0.0019081,zam:0.0184819):0.0737359
7 (nigrilore:0.0737359,((mind:0.00096154,luz:0.002421):0.0019081,zam:0.0184819):0.0737359);
8 <NA>
x y ymin ymax
1 0.07660554 0.625 0.50 0.75
2 0.07564400 0.500 0.25 0.75
3 0.08870670 0.125 0.00 0.25
4 0.07806500 0.375 0.25 0.50
5 0.07373590 0.875 0.75 1.00
6 0.07373590 0.250 0.00 0.75
7 0.00000000 0.750 0.00 1.00
8 0.07573519 NA 0.25 0.50
[1] "0.0376667 0.075644 0.0780650013"
[1] 0.07660554 0.08870670 0.07806500 0.07373590
[1] 0.003
[1] "mse 0.0010874170625"
$d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 mind NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 16 1 1 4 1
3 3 zam NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 luz NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
5 15 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 2 2 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 15 1 16 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 2 4 NA NA NA
V11
1 mind:0.00096154
2 (mind:0.00096154,luz:0.002421):0.0019081
3 zam:0.0184819
4 luz:0.002421
5 nigrilore:0.0737359
6 ((mind:0.00096154,luz:0.002421):0.0019081,zam:0.0184819):0.0737359
7 (nigrilore:0.0737359,((mind:0.00096154,luz:0.002421):0.0019081,zam:0.0184819):0.0737359);
8 <NA>
x y ymin ymax
1 0.07660554 0.6250000 0.50 0.75
2 0.07564400 0.5000000 0.25 0.75
3 0.08870670 0.1250000 0.00 0.25
4 0.07806500 0.3750000 0.25 0.50
5 0.07373590 0.8750000 0.75 1.00
6 0.07373590 0.2500000 0.00 0.75
7 0.00000000 0.7500000 0.00 1.00
8 0.07573519 0.4952917 0.25 0.50
$e
V1 V2 V3 V4 V5 V6 V7
1 2 1 9.61540e-04 1.0000000 NOT_MIG 1.0000000 1.000000
2 16 2 1.90810e-03 1.0000000 NOT_MIG 1.0000000 1.000000
3 17 15 7.37359e-02 1.0000000 NOT_MIG 1.0000000 1.000000
4 17 16 7.37359e-02 1.0000000 NOT_MIG 1.0000000 1.000000
5 16 3 1.49708e-02 0.9000140 NOT_MIG 1.0000000 0.810025
6 2 18 9.11913e-05 1.0000000 NOT_MIG 1.0000000 1.000000
7 18 4 2.32981e-03 1.0000000 NOT_MIG 0.0376667 1.000000
8 18 3 0.00000e+00 0.0999859 MIG 0.0376667 0.000000
#3 edges
plot_tree("~/Desktop/phil.dicaeum/treemix/treem3")
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem3"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem3"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem3"): NAs introduced
by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix/treem3"): NAs introduced
by coercion
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 mind NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 16 1 1 4 1
3 3 zam NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 luz NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
5 15 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 2 2 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 15 1 16 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 2 4 NA NA NA
V11
1 mind:0.00096154
2 (mind:0.00096154,luz:0.002421):0.00190809
3 zam:0.0184817
4 luz:0.002421
5 nigrilore:0.0737359
6 ((mind:0.00096154,luz:0.002421):0.00190809,zam:0.0184817):0.0737359
7 (nigrilore:0.0737359,((mind:0.00096154,luz:0.002421):0.00190809,zam:0.0184817):0.0737359);
8 <NA>
x y ymin ymax
1 0.07660553 0.625 0.50 0.75
2 0.07564399 0.500 0.25 0.75
3 0.08870671 0.125 0.00 0.25
4 0.07806500 0.375 0.25 0.50
5 0.07373590 0.875 0.75 1.00
6 0.07373590 0.250 0.00 0.75
7 0.00000000 0.750 0.00 1.00
8 0.07573519 NA 0.25 0.50
[1] "0.0376685 0.07564399 0.0780649956"
[1] 0.07660553 0.08870671 0.07806500 0.07373590
[1] 0.003
[1] "mse 0.0010874170625"
$d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 mind NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 16 1 1 4 1
3 3 zam NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 luz NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
5 15 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 2 2 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 15 1 16 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 2 4 NA NA NA
V11
1 mind:0.00096154
2 (mind:0.00096154,luz:0.002421):0.00190809
3 zam:0.0184817
4 luz:0.002421
5 nigrilore:0.0737359
6 ((mind:0.00096154,luz:0.002421):0.00190809,zam:0.0184817):0.0737359
7 (nigrilore:0.0737359,((mind:0.00096154,luz:0.002421):0.00190809,zam:0.0184817):0.0737359);
8 <NA>
x y ymin ymax
1 0.07660553 0.6250000 0.50 0.75
2 0.07564399 0.5000000 0.25 0.75
3 0.08870671 0.1250000 0.00 0.25
4 0.07806500 0.3750000 0.25 0.50
5 0.07373590 0.8750000 0.75 1.00
6 0.07373590 0.2500000 0.00 0.75
7 0.00000000 0.7500000 0.00 1.00
8 0.07573519 0.4952914 0.25 0.50
$e
V1 V2 V3 V4 V5 V6 V7
1 2 1 0.0009615400 1.0000000 NOT_MIG 1.0000000 1.000000
2 16 2 0.0019080900 1.0000000 NOT_MIG 1.0000000 1.000000
3 17 15 0.0737359000 1.0000000 NOT_MIG 1.0000000 1.000000
4 17 16 0.0737359000 1.0000000 NOT_MIG 1.0000000 1.000000
5 16 3 0.0149708091 0.9000190 NOT_MIG 1.0000000 0.810034
6 2 18 0.0000911956 1.0000000 NOT_MIG 1.0000000 1.000000
7 18 4 0.0023298100 1.0000000 NOT_MIG 0.0376685 1.000000
8 18 3 0.0000000000 0.0999812 MIG 0.0376685 0.000000
0.5 Step 5: evaluate the optimal number of migration edges
#plot to see how much variance is explained by each edge
=NULL
mfor(i in 0:3){
+1] <- get_f(paste0("~/Desktop/phil.dicaeum/treemix/treem",i))
m[i
}
#print variance explained by each tree with 0,1,2,3 mig edges
m
[1] 1 1 1 1
#plot
plot(seq(0,3),m,pch="*",cex=2,col="blue", type="b",xlab="migration edge number", ylab="% explained variance")
0.6 Repeat procedure after removing the admixed samples from Mt. Busa
library(vcfR)
***** *** vcfR *** *****
This is vcfR 1.14.0
browseVignettes('vcfR') # Documentation
citation('vcfR') # Citation
***** ***** ***** *****
library(SNPfiltR)
This is SNPfiltR v.1.0.2
Detailed usage information is available at: devonderaad.github.io/SNPfiltR/
If you use SNPfiltR in your published work, please cite the following papers:
DeRaad, D.A. (2022), SNPfiltR: an R package for interactive and reproducible SNP filtering. Molecular Ecology Resources, 22, 2443-2453. http://doi.org/10.1111/1755-0998.13618
Knaus, Brian J., and Niklaus J. Grunwald. 2017. VCFR: a package to manipulate and visualize variant call format data in R. Molecular Ecology Resources, 17.1:44-53. http://doi.org/10.1111/1755-0998.12549
#read in vcf
<-read.vcfR("~/Desktop/phil.dicaeum/filtered.85.unlinked.vcf") v
Scanning file to determine attributes.
File attributes:
meta lines: 14
header_line: 15
variant count: 2590
column count: 69
Meta line 14 read in.
All meta lines processed.
gt matrix initialized.
Character matrix gt created.
Character matrix gt rows: 2590
Character matrix gt cols: 69
skip: 0
nrows: 2590
row_num: 0
Processed variant 1000
Processed variant 2000
Processed variant: 2590
All variants processed
<-v[,colnames(v@gt) != "D_hypoleucum_1956" & colnames(v@gt) != "D_hypoleucum_2208" & colnames(v@gt) != "D_hypoleucum_2067" & colnames(v@gt) != "D_hypoleucum_2229" & colnames(v@gt) != "D_hypoleucum_2253"]
vcfR.trim vcfR.trim
***** Object of Class vcfR *****
55 samples
2590 CHROMs
2,590 variants
Object size: 12 Mb
11.36 percent missing data
***** ***** *****
<-min_mac(vcfR.trim, min.mac = 1) vcfR.trim
4.36% of SNPs fell below a minor allele count of 1 and were removed from the VCF
#vcfR::write.vcf(vcfR.trim, file="~/Desktop/phil.dicaeum/unlinked.nomtbusa.vcf.gz")
0.7 On the KU HPCC, use this job script to convert the downsampled vcf to treemix input, then run TreeMix, and progressively add migration edges.
#!/bin/sh
#
#SBATCH --job-name=treemix # Job Name
#SBATCH --nodes=1 # 40 nodes
#SBATCH --ntasks-per-node=1 # 40 CPU allocation per Task
#SBATCH --partition=sixhour # Name of the Slurm partition used
#SBATCH --chdir=/home/d669d153/work/phil.dicaeum/treemix.nomtbusa # Set working d$
#SBATCH --mem-per-cpu=5gb # memory requested
#SBATCH --time=100
#convert vcf into treemix file
/home/d669d153/work/stacks-2.41/populations --in_vcf unlinked.nomtbusa.vcf -O . --treemix -M treemix.popmap.txt
#remove stacks header
echo "$(tail -n +2 unlinked.nomtbusa.p.treemix)" > filtered.85.unlinked.p.treemix
#gzip file for input to treemix
gzip filtered.85.unlinked.p.treemix
#run treemix with m0
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i filtered.85.unlinked.p.treemix.gz -root nigrilore -o treem0
#add 1 migration edge
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i filtered.85.unlinked.p.treemix.gz -m 1 -g treem0.vertices.gz treem0.edges.gz -o treem1
#add 2 migration edges
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i filtered.85.unlinked.p.treemix.gz -m 1 -g treem1.vertices.gz treem1.edges.gz -o treem2
#add 3 migration edges
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i filtered.85.unlinked.p.treemix.gz -m 1 -g treem2.vertices.gz treem2.edges.gz -o treem3
0.8 Move into the treemix output directory and plot trees
#source plotting functions that are distributed with treemix
#source("~/Downloads/plotting_funcs.R")
#0 edge
plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem0")
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem0"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem0"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem0"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem0"): NAs
introduced by coercion
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 zam NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 1 1 16 2
3 3 mind NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
5 15 luz NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 2 15 1 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 4 1 2 3
V11
1 zam:0.0155116
2 (zam:0.0155116,(luz:0.00238025,mind:0.00147542):0.00193747):0.0771807
3 mind:0.00147542
4 nigrilore:0.0771807
5 luz:0.00238025
6 (luz:0.00238025,mind:0.00147542):0.00193747
7 (nigrilore:0.0771807,(zam:0.0155116,(luz:0.00238025,mind:0.00147542):0.00193747):0.0771807);
x y ymin ymax
1 0.09269230 0.625 0.50 0.75
2 0.07718070 0.500 0.00 0.75
3 0.08059359 0.125 0.00 0.25
4 0.07718070 0.875 0.75 1.00
5 0.08149842 0.375 0.25 0.50
6 0.07911817 0.250 0.00 0.50
7 0.00000000 0.750 0.00 1.00
Warning in max(e[e[, 5] == "MIG", 4]): no non-missing arguments to max;
returning -Inf
[1] 0.09269230 0.08059359 0.07718070 0.08149842
[1] 0.003
[1] "mse 0.001138198875"
$d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 zam NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 1 1 16 2
3 3 mind NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
5 15 luz NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 2 15 1 3 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 4 1 2 3
V11
1 zam:0.0155116
2 (zam:0.0155116,(luz:0.00238025,mind:0.00147542):0.00193747):0.0771807
3 mind:0.00147542
4 nigrilore:0.0771807
5 luz:0.00238025
6 (luz:0.00238025,mind:0.00147542):0.00193747
7 (nigrilore:0.0771807,(zam:0.0155116,(luz:0.00238025,mind:0.00147542):0.00193747):0.0771807);
x y ymin ymax
1 0.09269230 0.625 0.50 0.75
2 0.07718070 0.500 0.00 0.75
3 0.08059359 0.125 0.00 0.25
4 0.07718070 0.875 0.75 1.00
5 0.08149842 0.375 0.25 0.50
6 0.07911817 0.250 0.00 0.50
7 0.00000000 0.750 0.00 1.00
$e
V1 V2 V3 V4 V5 V6 V7
1 2 1 0.01551160 1 NOT_MIG 0 1
2 16 15 0.00238025 1 NOT_MIG 0 1
3 2 16 0.00193747 1 NOT_MIG 0 1
4 17 4 0.07718070 1 NOT_MIG 0 1
5 17 2 0.07718070 1 NOT_MIG 0 1
6 16 3 0.00147542 1 NOT_MIG 0 1
#1 edge
plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem1", plus = 0.02, arrow=.1, ybar = 0, scale=F, lwd=1.5)
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem1", plus =
0.02, : NAs introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem1", plus =
0.02, : NAs introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem1", plus =
0.02, : NAs introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem1", plus =
0.02, : NAs introduced by coercion
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 zam NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 1 1 16 2
3 3 mind NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
5 15 luz NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 2 3 1 15 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 4 1 2 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 16 15 NA NA NA
V11
1 zam:0.0194395
2 (zam:0.0194395,(mind:0.00142987,luz:0.00242581):0.00220334):0.0770478
3 mind:0.00142987
4 nigrilore:0.0770478
5 luz:0.00242581
6 (mind:0.00142987,luz:0.00242581):0.00220334
7 (nigrilore:0.0770478,(zam:0.0194395,(mind:0.00142987,luz:0.00242581):0.00220334):0.0770478);
8 <NA>
x y ymin ymax
1 0.09279411 0.625 0.50 0.75
2 0.07704780 0.500 0.00 0.75
3 0.08068101 0.375 0.25 0.50
4 0.07704780 0.875 0.75 1.00
5 0.08167695 0.125 0.00 0.25
6 0.07925114 0.250 0.00 0.50
7 0.00000000 0.750 0.00 1.00
8 0.08016231 NA 0.00 0.25
[1] "0.375613 0.07925114 0.081676945"
[1] 0.09279411 0.08068101 0.07704780 0.08167695
[1] 0.003
$d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 zam NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 1 1 16 2
3 3 mind NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
5 15 luz NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 2 3 1 15 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 4 1 2 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 16 15 NA NA NA
V11
1 zam:0.0194395
2 (zam:0.0194395,(mind:0.00142987,luz:0.00242581):0.00220334):0.0770478
3 mind:0.00142987
4 nigrilore:0.0770478
5 luz:0.00242581
6 (mind:0.00142987,luz:0.00242581):0.00220334
7 (nigrilore:0.0770478,(zam:0.0194395,(mind:0.00142987,luz:0.00242581):0.00220334):0.0770478);
8 <NA>
x y ymin ymax
1 0.09279411 0.6250000 0.50 0.75
2 0.07704780 0.5000000 0.00 0.75
3 0.08068101 0.3750000 0.25 0.50
4 0.07704780 0.8750000 0.75 1.00
5 0.08167695 0.1250000 0.00 0.25
6 0.07925114 0.2500000 0.00 0.50
7 0.00000000 0.7500000 0.00 1.00
8 0.08016230 0.2030484 0.00 0.25
$e
V1 V2 V3 V4 V5 V6 V7
1 2 1 0.015746310 0.9000090 NOT_MIG 1.000000 0.810017
2 2 16 0.002203340 1.0000000 NOT_MIG 1.000000 1.000000
3 17 4 0.077047800 1.0000000 NOT_MIG 1.000000 1.000000
4 17 2 0.077047800 1.0000000 NOT_MIG 1.000000 1.000000
5 16 3 0.001429870 1.0000000 NOT_MIG 1.000000 1.000000
6 16 18 0.000911165 1.0000000 NOT_MIG 1.000000 1.000000
7 18 15 0.001514640 1.0000000 NOT_MIG 0.375613 1.000000
8 18 1 0.000000000 0.0999906 MIG 0.375613 0.000000
#2 edges
plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem2")
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem2"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem2"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem2"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem2"): NAs
introduced by coercion
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 zam NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 1 1 16 2
3 3 mind NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
5 15 luz NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 2 3 1 15 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 4 1 2 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 16 15 NA NA NA
V11
1 zam:0.0194393
2 (zam:0.0194393,(mind:0.00142987,luz:0.00242581):0.00220332):0.0770478
3 mind:0.00142987
4 nigrilore:0.0770478
5 luz:0.00242581
6 (mind:0.00142987,luz:0.00242581):0.00220332
7 (nigrilore:0.0770478,(zam:0.0194393,(mind:0.00142987,luz:0.00242581):0.00220332):0.0770478);
8 <NA>
x y ymin ymax
1 0.09279412 0.625 0.50 0.75
2 0.07704780 0.500 0.00 0.75
3 0.08068099 0.375 0.25 0.50
4 0.07704780 0.875 0.75 1.00
5 0.08167693 0.125 0.00 0.25
6 0.07925112 0.250 0.00 0.50
7 0.00000000 0.750 0.00 1.00
8 0.08016233 NA 0.00 0.25
[1] "0.375631 0.07925112 0.081676927"
[1] 0.09279412 0.08068099 0.07704780 0.08167693
[1] 0.003
[1] "mse 0.001138198875"
$d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 zam NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 1 1 16 2
3 3 mind NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
5 15 luz NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 2 3 1 15 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 4 1 2 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 16 15 NA NA NA
V11
1 zam:0.0194393
2 (zam:0.0194393,(mind:0.00142987,luz:0.00242581):0.00220332):0.0770478
3 mind:0.00142987
4 nigrilore:0.0770478
5 luz:0.00242581
6 (mind:0.00142987,luz:0.00242581):0.00220332
7 (nigrilore:0.0770478,(zam:0.0194393,(mind:0.00142987,luz:0.00242581):0.00220332):0.0770478);
8 <NA>
x y ymin ymax
1 0.09279412 0.6250000 0.50 0.75
2 0.07704780 0.5000000 0.00 0.75
3 0.08068099 0.3750000 0.25 0.50
4 0.07704780 0.8750000 0.75 1.00
5 0.08167693 0.1250000 0.00 0.25
6 0.07925112 0.2500000 0.00 0.50
7 0.00000000 0.7500000 0.00 1.00
8 0.08016233 0.2030461 0.00 0.25
$e
V1 V2 V3 V4 V5 V6 V7
1 2 1 0.015746323 0.9000140 NOT_MIG 1.000000 0.810025
2 2 16 0.002203320 1.0000000 NOT_MIG 1.000000 1.000000
3 17 4 0.077047800 1.0000000 NOT_MIG 1.000000 1.000000
4 17 2 0.077047800 1.0000000 NOT_MIG 1.000000 1.000000
5 16 3 0.001429870 1.0000000 NOT_MIG 1.000000 1.000000
6 16 18 0.000911207 1.0000000 NOT_MIG 1.000000 1.000000
7 18 15 0.001514600 1.0000000 NOT_MIG 0.375631 1.000000
8 18 1 0.000000000 0.0999859 MIG 0.375631 0.000000
#3 edges
plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem3")
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem3"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem3"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem3"): NAs
introduced by coercion
Warning in plot_tree("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem3"): NAs
introduced by coercion
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 zam NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 1 1 16 2
3 3 mind NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
5 15 luz NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 2 3 1 15 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 4 1 2 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 16 15 NA NA NA
V11
1 zam:0.019439
2 (zam:0.019439,(mind:0.00142987,luz:0.00242581):0.00220331):0.0770478
3 mind:0.00142987
4 nigrilore:0.0770478
5 luz:0.00242581
6 (mind:0.00142987,luz:0.00242581):0.00220331
7 (nigrilore:0.0770478,(zam:0.019439,(mind:0.00142987,luz:0.00242581):0.00220331):0.0770478);
8 <NA>
x y ymin ymax
1 0.09279405 0.625 0.50 0.75
2 0.07704780 0.500 0.00 0.75
3 0.08068098 0.375 0.25 0.50
4 0.07704780 0.875 0.75 1.00
5 0.08167692 0.125 0.00 0.25
6 0.07925111 0.250 0.00 0.50
7 0.00000000 0.750 0.00 1.00
8 0.08016236 NA 0.00 0.25
[1] "0.375648 0.07925111 0.08167692"
[1] 0.09279405 0.08068098 0.07704780 0.08167692
[1] 0.003
[1] "mse 0.001138198875"
$d
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 zam NOT_ROOT NOT_MIG TIP 2 NA NA NA NA
2 2 <NA> NOT_ROOT NOT_MIG NOT_TIP 17 1 1 16 2
3 3 mind NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
4 4 nigrilore NOT_ROOT NOT_MIG TIP 17 NA NA NA NA
5 15 luz NOT_ROOT NOT_MIG TIP 16 NA NA NA NA
6 16 <NA> NOT_ROOT NOT_MIG NOT_TIP 2 3 1 15 1
7 17 <NA> ROOT NOT_MIG NOT_TIP 17 4 1 2 3
8 18 <NA> NOT_ROOT MIG NOT_TIP 16 15 NA NA NA
V11
1 zam:0.019439
2 (zam:0.019439,(mind:0.00142987,luz:0.00242581):0.00220331):0.0770478
3 mind:0.00142987
4 nigrilore:0.0770478
5 luz:0.00242581
6 (mind:0.00142987,luz:0.00242581):0.00220331
7 (nigrilore:0.0770478,(zam:0.019439,(mind:0.00142987,luz:0.00242581):0.00220331):0.0770478);
8 <NA>
x y ymin ymax
1 0.09279405 0.625000 0.50 0.75
2 0.07704780 0.500000 0.00 0.75
3 0.08068098 0.375000 0.25 0.50
4 0.07704780 0.875000 0.75 1.00
5 0.08167692 0.125000 0.00 0.25
6 0.07925111 0.250000 0.00 0.50
7 0.00000000 0.750000 0.00 1.00
8 0.08016236 0.203044 0.00 0.25
$e
V1 V2 V3 V4 V5 V6 V7
1 2 1 0.01574625 0.9000190 NOT_MIG 1.000000 0.810034
2 2 16 0.00220331 1.0000000 NOT_MIG 1.000000 1.000000
3 17 4 0.07704780 1.0000000 NOT_MIG 1.000000 1.000000
4 17 2 0.07704780 1.0000000 NOT_MIG 1.000000 1.000000
5 16 3 0.00142987 1.0000000 NOT_MIG 1.000000 1.000000
6 16 18 0.00091125 1.0000000 NOT_MIG 1.000000 1.000000
7 18 15 0.00151456 1.0000000 NOT_MIG 0.375648 1.000000
8 18 1 0.00000000 0.0999812 MIG 0.375648 0.000000
0.9 Evaluate the optimal number of migration edges
#plot to see how much variance is explained by each edge
=NULL
mfor(i in 0:3){
+1] <- get_f(paste0("~/Desktop/phil.dicaeum/treemix.nomtbusa/treem",i))
m[i
}
#print variance explained by each tree with 0,1,2,3 mig edges
m
[1] 0.9999993 1.0000000 1.0000000 1.0000000
#plot
plot(seq(0,3),m,pch="*",cex=2,col="blue", type="b",xlab="migration edge number", ylab="% explained variance")
0.10 Bootstrap the optimal tree with all samples included
#
#SBATCH \--job-name=treemix \# Job Name
#SBATCH \--nodes=1 \# 40 nodes
#SBATCH \--ntasks-per-node=1 \# 40 CPU allocation per Task
#SBATCH \--partition=bi \# Name of the Slurm partition used
#SBATCH \--chdir=/home/d669d153/work/phil.dicaeum/treemix/boots \# Set working d\$
#SBATCH \--mem-per-cpu=1000 \# memory requested
#SBATCH \--time=200
#100 bootstraps over 100 SNP blocks with 1 migration edge
for i in {1..100}; do
/panfs/pfs.local/work/bi/bin/treemix-1.13/src/treemix -i /home/d669d153/work/phil.dicaeum/treemix/filtered.85.unlinked.p.treemix.gz -m 1 -g /home/d669d153/work/phil.dicaeum/treemix/treem1.vertices.gz /home/d669d153/work/phil.dicaeum/treemix/treem1.edges.gz -bootstrap -k 100 -o \$i.treemix
done;
# unzip the tree files
for i in { ls \*treeout.gz }; do
gzip -d \$i
done;
# in R:
#summarize bootstraps into a single file called 'bootstraps.100.trees'
module load R
R \--no-save
setwd("/home/d669d153/work/phil.dicaeum/treemix/boots/")
x \<- list.files(pattern="\*treeout")
for(a in 1:length(x)) {
if (a==1) {
output \<- scan(x\[a\], what="character")\[1\]
} else {
output \<- c(output, scan(x\[a\], what="character")\[1\])
}
}
write(output, file="bootstraps.100.trees", ncolumns=1)
quit()
# in bash
# summarize bootstrap support info from the file '100.bootstraps.trees' as internal branch annotations on a summary tree called 'boots.summed.tre'
/home/d669d153/work/DendroPy/applications/sumtrees/sumtrees.py \--output=boots.summed.tre \--min-clade-freq=0.05 bootstraps.100.trees