├── encoding.rda ├── sequence.rda ├── vectorise.jpeg ├── weka-low.jpg ├── faster-graph.png ├── xkcd-optimise.png ├── touch.R ├── ssvd.R ├── conv.R ├── README.md ├── glidergun.txt ├── examplebp.R ├── examplebp2.R ├── power.R ├── examplebp3.R ├── examplebp4.R ├── life-basic.R ├── life.R ├── fasteR.Rmd ├── fasteR.html └── examplebp.csv /encoding.rda: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tslumley/useRfasteR/HEAD/encoding.rda -------------------------------------------------------------------------------- /sequence.rda: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tslumley/useRfasteR/HEAD/sequence.rda -------------------------------------------------------------------------------- /vectorise.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tslumley/useRfasteR/HEAD/vectorise.jpeg -------------------------------------------------------------------------------- /weka-low.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tslumley/useRfasteR/HEAD/weka-low.jpg -------------------------------------------------------------------------------- /faster-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tslumley/useRfasteR/HEAD/faster-graph.png -------------------------------------------------------------------------------- /xkcd-optimise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tslumley/useRfasteR/HEAD/xkcd-optimise.png -------------------------------------------------------------------------------- /touch.R: -------------------------------------------------------------------------------- 1 | system.time({ 2 | touch<-function(z) {force(z); NULL} 3 | x<-integer(1e5) 4 | y<-integer(1e5) 5 | for(i in 1:1e5){ 6 | touch(x) 7 | x[i]<-i^2 8 | } 9 | }) 10 | 11 | #also try profvis, tracemem, Rprofmem 12 | # with compiler:::enableJIT(0) 13 | -------------------------------------------------------------------------------- /ssvd.R: -------------------------------------------------------------------------------- 1 | load("sequence.rda") 2 | # devtools::install_github("tslumley/bigQF") 3 | library(bigQF) 4 | 5 | system.time(s1<-svd(sequence,nu=10,nv=10)) 6 | system.time(s2<-ssvd(sequence, n=10,U=TRUE,V=TRUE)) 7 | spseq<-sparse.matrixfree(Matrix(sequence)) 8 | system.time(s3<-ssvd(spseq, n=10,U=TRUE,V=TRUE)) 9 | 10 | plot(s1$u[,1:2],pch=19) 11 | points(s2$u[,1:2],col="red") 12 | 13 | plot(s1$u[,1:2],pch=19) 14 | points(s3$v[,1],-s3$v[,2],col="green") 15 | -------------------------------------------------------------------------------- /conv.R: -------------------------------------------------------------------------------- 1 | conv1<-function(x,y){ 2 | m <- length(x) 3 | n <- length(y) 4 | z <- numeric(m+n-1) 5 | for(j in 1:m){ 6 | for (k in 1:n){ 7 | z[j+k-1] <- z[j+k-1] + x[j]*y[k] 8 | } 9 | } 10 | z 11 | } 12 | 13 | conv2<-function(x,y){ 14 | m <- length(x) 15 | n <- length(y) 16 | z <- numeric(m+n-1) 17 | for(j in 1:m){ 18 | z[j+(1:n)-1] <- z[j+(1:n)-1] + x[j]*y[(1:n)] 19 | } 20 | z 21 | } 22 | 23 | conv3<-function(x,y){ 24 | m <- length(x) 25 | n <- length(y) 26 | 27 | xy<-outer(x,y,"*") 28 | xyshift<-matrix(rbind(xy,matrix(0,n,n))[1:((m+n-1)*n)],ncol=n) 29 | rowSums(xyshift) 30 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## fasteR 2 | 3 | This repository will contain slides and examples for my tutorial at useR Brisbane, on ways of speeding up R code 4 | 5 | The tutorial will run from 1:30-5pm on Tuesday 10 July, in room P10 6 | 7 | 8 | Along with a recent version of R, please install the following packages: 9 | 10 | dplyr 11 | dbplyr 12 | Matrix 13 | MonetDBlite 14 | profvis 15 | 16 | 17 | I'll also show an example using bigQF, which is available as 18 | 19 | devtools::install_github("tslumley/bigQF") 20 | 21 | but you'll need a C compiler to install the package 22 | 23 | 24 | ![](https://imgs.xkcd.com/comics/is_it_worth_the_time.png) 25 | 26 | 27 | -------------------------------------------------------------------------------- /glidergun.txt: -------------------------------------------------------------------------------- 1 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 3 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 4 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 5 | 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 1 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | -------------------------------------------------------------------------------- /examplebp.R: -------------------------------------------------------------------------------- 1 | one.snp = function(snp, perm, df){ 2 | coef(summary(lm(sbp~as.numeric(snp)[perm]+sex,data=df)))[2,3] 3 | } 4 | 5 | one.gene<-function(snps, perm, df){ 6 | p<-ncol(snps) 7 | zs<-sapply(1:p, function(i) one.snp(snps[,i], perm, df)) 8 | max(abs(zs)) 9 | } 10 | 11 | one.perm<-function(snps, df){ 12 | n<-nrow(snps) 13 | one.gene(snps,perm=sample(1:n), df) 14 | } 15 | 16 | ## start with no missing data 17 | genedata<-na.omit(read.csv("https://raw.githubusercontent.com/tslumley/AKLfaster/master/examplebp.csv")) 18 | 19 | snps<-genedata[,4:14] 20 | phenotype<-genedata[,2:3] 21 | 22 | many.perm <- replicate(1000, one.perm(snps, phenotype)) 23 | 24 | real.max.Z <- one.gene(snps,1:nrow(snps),phenotype) 25 | mean(many.perm < real.max.Z) -------------------------------------------------------------------------------- /examplebp2.R: -------------------------------------------------------------------------------- 1 | one.snp = function(snp, perm, df){ 2 | coef(summary(lm(sbp~snp[perm]+ismale,data=df)))[2,3] 3 | } 4 | 5 | one.gene<-function(snps, perm, df){ 6 | p<-ncol(snps) 7 | zs<-sapply(1:p, function(i) one.snp(snps[,i], perm, df)) 8 | max(abs(zs)) 9 | } 10 | 11 | one.perm<-function(snps, df){ 12 | n<-nrow(snps) 13 | one.gene(snps,perm=sample(1:n), df) 14 | } 15 | 16 | genedata<-na.omit(read.csv("https://raw.githubusercontent.com/tslumley/AKLfaster/master/examplebp.csv")) 17 | 18 | snps<-genedata[,4:14] 19 | for(i in 1:ncol(snps)) 20 | snps[[i]]<-as.numeric(snps[[i]])-1 #0/1/2 coding 21 | phenotype<-genedata[,2:3] 22 | phenotype$ismale <-as.integer(phenotype$sex=="MALE") 23 | 24 | many.perm <- replicate(1000, one.perm(snps, phenotype)) 25 | 26 | real.max.Z <- one.gene(snps,1:nrow(snps),phenotype) 27 | mean(many.perm < real.max.Z) -------------------------------------------------------------------------------- /power.R: -------------------------------------------------------------------------------- 1 | ## simple code 2 | system.time({ 3 | my.sims <- replicate(10000, { 4 | mydiff <- rnorm(100, 2, 7) 5 | t.test(mydiff)$p.value 6 | }) 7 | }) 8 | 9 | 10 | ## strip it down 11 | system.time({ 12 | my.sims <- replicate(10000, { 13 | mydiff <- rnorm(100, 2, 7) 14 | t <- mean(mydiff)/sd(mydiff)*sqrt(100) 15 | 2*pt(-abs(t), df=99) 16 | }) 17 | }) 18 | 19 | 20 | ## only call qt() once 21 | crit.t <- qt(0.975, df=99) 22 | 23 | system.time({ 24 | my.sims <- replicate(10000, { 25 | mydiff <- rnorm(100, 2, 7) 26 | t <- mean(mydiff)/sd(mydiff)*sqrt(100) 27 | abs(t)>crit.t 28 | }) 29 | }) 30 | 31 | 32 | ## Vectorise 33 | system.time({ 34 | mydiffs <- matrix(rnorm(100*100000,2,7),nrow=100) 35 | m <- colMeans(mydiffs) 36 | s <- sqrt(colMeans(mydiffs*mydiffs)-m*m) 37 | m*sqrt(100)/s > crit.t 38 | }) 39 | 40 | 41 | ## Strip out square root 42 | crit2<-crit.t^2/100 43 | system.time({ 44 | mydiffs <- matrix(rnorm(100*100000,2,7),nrow=100) 45 | m2 <- colMeans(mydiffs)^2 46 | s2 <- colMeans(mydiffs*mydiffs)-m2 47 | m2/s2 > crit2 48 | }) 49 | -------------------------------------------------------------------------------- /examplebp3.R: -------------------------------------------------------------------------------- 1 | 2 | mylm<-function(X,y){ 3 | n<-nrow(X) 4 | p<-ncol(X) 5 | model<-lm.fit(X,y) 6 | R <- chol2inv(qr.R(model$qr)) 7 | se <- sqrt(diag(R) * sum(model$residuals^2)/(n-p)) 8 | list(beta=model$coefficients, se=se) 9 | } 10 | 11 | one.snp = function(snp, perm, df){ 12 | X<-cbind(1,df$ismale,snp[perm]) 13 | y<-df$sbp 14 | model<-mylm(X,y) 15 | model$beta[3]/model$se[3] 16 | } 17 | 18 | one.gene<-function(snps, perm, df){ 19 | p<-ncol(snps) 20 | zs<-sapply(1:p, function(i) one.snp(snps[,i], perm, df)) 21 | max(abs(zs)) 22 | } 23 | 24 | one.perm<-function(snps, df){ 25 | n<-nrow(snps) 26 | one.gene(snps,perm=sample(1:n), df) 27 | } 28 | 29 | genedata<-na.omit(read.csv("https://raw.githubusercontent.com/tslumley/AKLfaster/master/examplebp.csv")) 30 | 31 | snps<-genedata[,4:14] 32 | for(i in 1:ncol(snps)) 33 | snps[[i]]<-as.numeric(snps[[i]])-1 #0/1/2 coding 34 | phenotype<-genedata[,2:3] 35 | phenotype$ismale <-as.integer(phenotype$sex=="MALE") 36 | 37 | many.perm <- replicate(1000, one.perm(snps, phenotype)) 38 | 39 | real.max.Z <- one.gene(snps,1:nrow(snps),phenotype) 40 | mean(many.perm < real.max.Z) -------------------------------------------------------------------------------- /examplebp4.R: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## If we didn't adjust for sex we could permute y instead 4 | 5 | all.perm<-function(snps, df,LOTS=1000){ 6 | ystar<-matrix(nrow=nrow(snps),ncol=LOTS) 7 | for(i in 1:LOTS) 8 | ystar[,i]<-sample(df$sbp) 9 | p<-ncol(snps) 10 | allZ<-matrix(nrow=LOTS,ncol=p) 11 | for(i in 1:p){ 12 | models<-coef(summary(lm(ystar~snps[,i],data=df))) 13 | allZ[,i]<-sapply(models, function(model) model[2,3]) 14 | } 15 | apply(abs(allZ),1,max) 16 | } 17 | 18 | genedata<-na.omit(read.csv("https://raw.githubusercontent.com/tslumley/AKLfaster/master/examplebp.csv")) 19 | 20 | snps<-genedata[,4:14] 21 | for(i in 1:ncol(snps)) 22 | snps[[i]]<-as.numeric(snps[[i]])-1 #0/1/2 coding 23 | phenotype<-genedata[,2:3] 24 | phenotype$ismale <-as.integer(phenotype$sex=="MALE") 25 | 26 | 27 | many.perm <- all.perm(snps,phenotype,LOTS=1000) 28 | 29 | 30 | ## Or if adjust SBP for sex first 31 | 32 | all.permadj<-function(snps, df,LOTS=1000){ 33 | y<-resid(lm(sbp~ismale,data=df)) 34 | ystar<-matrix(nrow=nrow(snps),ncol=LOTS) 35 | for(i in 1:LOTS) 36 | ystar[,i]<-sample(y) 37 | p<-ncol(snps) 38 | allZ<-matrix(nrow=LOTS,ncol=p) 39 | for(i in 1:p){ 40 | models<-coef(summary(lm(ystar~snps[,i],data=df))) 41 | allZ[,i]<-sapply(models, function(model) model[2,3]) 42 | } 43 | apply(abs(allZ),1,max) 44 | } 45 | -------------------------------------------------------------------------------- /life-basic.R: -------------------------------------------------------------------------------- 1 | ## basic life 2 | get.nbhs = function(alive, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 3 | nbhs = matrix(0, nrows+2, ncols+2) 4 | for(i in 2:(nrows+1)){ 5 | for(j in 2:(ncols+1)){ 6 | nbhs[i,j] = alive[i-1,j-1] + 7 | alive[i-1,j ] + 8 | alive[i-1,j+1] + 9 | alive[i ,j-1] + 10 | alive[i ,j+1] + 11 | alive[i+1,j-1] + 12 | alive[i+1,j ] + 13 | alive[i+1,j+1] # adding over the 8 neighbors 14 | } # close j loop 15 | } # close i loop 16 | nbhs} 17 | 18 | do.basic.plot = function(nrows, ncols){ 19 | plot(0,0, type="n", xlab="", ylab="", axes=F, 20 | xlim=c(0.5,nrows+0.5), ylim=c(0.5,ncols+0.5), asp=1) 21 | invisible() 22 | } 23 | 24 | update.plot = function(alive, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 25 | for(i in 1:nrows){ 26 | for(j in 1:ncols){ 27 | rect(j-0.5,i-0.5,j+0.5,i+0.5, 28 | col=alive[i+1,j+1]*6 + 1, border="blue") 29 | } # NB cols here are 1 or 7 - black or yellow 30 | } 31 | invisible() 32 | } 33 | 34 | 35 | 36 | update.alive = function(alive, nbhs, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 37 | alive.new = matrix(0, nrows+2, ncols+2) # note full of zeros 38 | for(i in 2:(nrows+1)){ 39 | for(j in 2:(ncols+1)){ 40 | if(alive[i,j]==1 & nbhs[i,j]<2 ){ alive.new[i,j] = 0 } 41 | if(alive[i,j]==1 & nbhs[i,j]%in%2:3){ alive.new[i,j] = 1 } 42 | if(alive[i,j]==1 & nbhs[i,j]>3 ){ alive.new[i,j] = 0 } 43 | if(alive[i,j]==0 & nbhs[i,j]==3 ){ alive.new[i,j] = 1 } 44 | } 45 | } 46 | alive = alive.new 47 | alive 48 | } 49 | 50 | nrows = 40 51 | ncols = 40 52 | n.updates = 100 53 | 54 | set.seed(4) 55 | alive = matrix(rbinom((nrows+2)*(ncols*2),1, 0.3), nrows+2, ncols+2) # "+2" is adding the gray border 56 | 57 | do.basic.plot(nrows, ncols) 58 | update.plot(alive) 59 | for(k in 1:n.updates){ 60 | nbhs = get.nbhs(alive) 61 | alive = update.alive(alive, nbhs) 62 | update.plot(alive) 63 | } -------------------------------------------------------------------------------- /life.R: -------------------------------------------------------------------------------- 1 | get.nbhs = function(alive, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 2 | nbhs = matrix(0, nrows+2, ncols+2) 3 | for(i in 2:(nrows+1)){ 4 | for(j in 2:(ncols+1)){ 5 | nbhs[i,j] = alive[i-1,j-1] + 6 | alive[i-1,j ] + 7 | alive[i-1,j+1] + 8 | alive[i ,j-1] + 9 | alive[i ,j+1] + 10 | alive[i+1,j-1] + 11 | alive[i+1,j ] + 12 | alive[i+1,j+1] # adding over the 8 neighbors 13 | } # close j loop 14 | } # close i loop 15 | nbhs} 16 | 17 | do.basic.plot = function(nrows, ncols){ 18 | plot(0,0, type="n", xlab="", ylab="", axes=F, 19 | xlim=c(0.5,nrows+0.5), ylim=c(0.5,ncols+0.5), asp=1) 20 | invisible() 21 | } 22 | 23 | update.plot = function(alive, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 24 | for(i in 1:nrows){ 25 | for(j in 1:ncols){ 26 | rect(j-0.5,i-0.5,j+0.5,i+0.5, 27 | col=alive[i+1,j+1]*6 + 1, border="blue") 28 | } # NB cols here are 1 or 7 - black or yellow 29 | } 30 | invisible() 31 | } 32 | 33 | 34 | 35 | update.alive = function(alive, nbhs, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 36 | alive.new = matrix(0, nrows+2, ncols+2) # note full of zeros 37 | for(i in 2:(nrows+1)){ 38 | for(j in 2:(ncols+1)){ 39 | if(alive[i,j]==1 & nbhs[i,j]<2 ){ alive.new[i,j] = 0 } 40 | if(alive[i,j]==1 & nbhs[i,j]%in%2:3){ alive.new[i,j] = 1 } 41 | if(alive[i,j]==1 & nbhs[i,j]>3 ){ alive.new[i,j] = 0 } 42 | if(alive[i,j]==0 & nbhs[i,j]==3 ){ alive.new[i,j] = 1 } 43 | } 44 | } 45 | alive = alive.new 46 | alive 47 | } 48 | 49 | nrows = 40 50 | ncols = 40 51 | n.updates = 100 52 | 53 | set.seed(4) 54 | alive = matrix(rbinom((nrows+2)*(ncols*2),1, 0.3), nrows+2, ncols+2) # "+2" is adding the gray border 55 | 56 | do.basic.plot(nrows, ncols) 57 | update.plot(alive) 58 | for(k in 1:n.updates){ 59 | nbhs = get.nbhs(alive) 60 | alive = update.alive(alive, nbhs) 61 | update.plot(alive) 62 | } 63 | 64 | ### 65 | # faster: vectorise the plotting 66 | ### 67 | 68 | update.plot2 = function(alive, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 69 | i = rep(1:nrows,ncols) 70 | j = rep(1:ncols,each=nrows) 71 | rect(j-0.5,i-0.5,j+0.5,i+0.5, 72 | col=alive[2:(nrows+1),2:(ncols+1)]*6 + 1, border="blue") 73 | 74 | invisible() 75 | } 76 | 77 | 78 | 79 | set.seed(4) 80 | alive = matrix(rbinom((nrows+2)*(ncols*2),1, 0.3), nrows+2, ncols+2) # "+2" is adding the gray border 81 | 82 | do.basic.plot(nrows, ncols) 83 | update.plot2(alive) 84 | for(k in 1:n.updates){ 85 | nbhs = get.nbhs(alive) 86 | alive = update.alive(alive, nbhs) 87 | update.plot2(alive) 88 | } 89 | 90 | ## bigger example 91 | 92 | nrows = 100 93 | ncols = 100 94 | n.updates = 100 95 | set.seed(4) 96 | alive = matrix(rbinom((nrows+2)*(ncols*2),1, 0.3), nrows+2, ncols+2) # "+2" is adding the gray border 97 | 98 | do.basic.plot(nrows, ncols) 99 | update.plot2(alive) 100 | for(k in 1:n.updates){ 101 | nbhs = get.nbhs(alive) 102 | alive = update.alive(alive, nbhs) 103 | update.plot2(alive) 104 | } 105 | 106 | ## 107 | ## vectorise the neighbour computations 108 | ## 109 | 110 | get.nbhs2 = function(alive, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 111 | nbhs = matrix(0, nrows+2, ncols+2) 112 | nbhs[2:(nrows+1),2:(ncols+1)] = alive[-c(nrows+1,nrows+2),-c(ncols+1,ncols+2)] + 113 | alive[-c(nrows+1,nrows+2),-c(1,ncols+2)] + 114 | alive[-c(nrows+1,nrows+2),-c(1,2)] + 115 | alive[-c(1,nrows+2),-c(ncols+1,ncols+2)] + 116 | alive[-c(1,nrows+2) ,-c(1,2)] + 117 | alive[-c(1,2),-c(ncols+1,ncols+2)] + 118 | alive[-c(1,2),-c(1,ncols+2) ] + 119 | alive[-c(1,2),-c(1,2)] 120 | 121 | nbhs 122 | } 123 | 124 | 125 | update.alive2 = function(alive, nbhs, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 126 | alive.new = (nbhs==3) | (alive & (nbhs %in% 2:3)) 127 | alive.new[1,] = 0 128 | alive.new[,1] = 0 129 | alive.new[nrows+2,] = 0 130 | alive.new[,ncols+2] = 0 131 | alive.new 132 | } 133 | 134 | update.plot3 = function(alive, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 135 | i = rep(1:nrows,ncols) 136 | j = rep(1:ncols,each=nrows) 137 | rect(j-0.5,i-0.5,j+0.5,i+0.5, 138 | col=alive[2:(nrows+1),2:(ncols+1)]*6 + 1, border=alive[2:(nrows+1),2:(ncols+1)]*6 + 1) 139 | 140 | invisible() 141 | } 142 | 143 | ## 144 | ## 145 | ## 146 | 147 | nrows = 200 148 | ncols = 200 149 | n.updates = 200 150 | set.seed(4) 151 | alive = matrix(rbinom((nrows+2)*(ncols*2),1, 0.3), nrows+2, ncols+2) # "+2" is adding the gray border 152 | 153 | do.basic.plot(nrows, ncols) 154 | update.plot3(alive) 155 | for(k in 1:n.updates){ 156 | nbhs = get.nbhs2(alive) 157 | alive = update.alive2(alive, nbhs) 158 | update.plot3(alive) 159 | } 160 | 161 | 162 | ##glider-gun 163 | gun<-as.matrix(read.table("AKLfaster/glidergun.txt")) 164 | 165 | nrows=100 166 | ncols=100 167 | alive=matrix(0,nrows+2,ncols+2) 168 | alive[5+(1:9),5+(1:36)]=as.matrix(gun) 169 | n.updates = 400 170 | 171 | do.basic.plot(nrows, ncols) 172 | update.plot3(alive) 173 | for(k in 1:n.updates){ 174 | nbhs = get.nbhs2(alive) 175 | alive = update.alive2(alive, nbhs) 176 | update.plot3(alive) 177 | } 178 | 179 | nrows=150 180 | ncols=150 181 | alive=matrix(0,nrows+2,ncols+1) 182 | alive[5+(1:9),5+(1:36)]=as.matrix(gun) 183 | alive[50+(1:9),50+(1:36)]=as.matrix(gun) 184 | n.updates = 1000 185 | 186 | do.basic.plot(nrows, ncols) 187 | update.plot3(alive) 188 | for(k in 1:n.updates){ 189 | nbhs = get.nbhs2(alive) 190 | alive = update.alive2(alive, nbhs) 191 | update.plot3(alive) 192 | } 193 | 194 | 195 | ### 196 | # fast-forward: don't plot every iteration 197 | ### 198 | 199 | nrows=150 200 | ncols=150 201 | alive=matrix(0,nrows+2,ncols+2) 202 | alive[5+(1:9),5+(1:36)]=as.matrix(gun) 203 | alive[50+(1:9),50+(1:36)]=as.matrix(gun) 204 | n.updates = 1000 205 | 206 | do.basic.plot(nrows, ncols) 207 | update.plot3(alive) 208 | for(k in 1:n.updates){ 209 | for(j in 1:5){ 210 | nbhs = get.nbhs2(alive) 211 | alive = update.alive2(alive, nbhs) 212 | } 213 | update.plot3(alive) 214 | } 215 | 216 | 217 | ### 218 | # Draw only the changes 219 | ### 220 | 221 | update.plot4 = function(alive, wasalive, nrows=dim(alive)[1]-2, ncols=dim(alive)[2]-2){ 222 | changed= as.vector((alive!=wasalive)[2:(nrows+1),2:(ncols+1)]) 223 | i = rep(1:nrows,ncols)[changed] 224 | j = rep(1:ncols,each=nrows)[changed] 225 | rect(j-0.5,i-0.5,j+0.5,i+0.5, 226 | col=as.vector(alive[2:(nrows+1),2:(ncols+1)])[changed]*6 + 1, 227 | border=as.vector(alive[2:(nrows+1),2:(ncols+1)])[changed]*6 + 1) 228 | 229 | invisible() 230 | } 231 | 232 | nrows=250 233 | ncols=250 234 | alive=matrix(0,nrows+2,ncols+2) 235 | alive[5+(1:9),5+(1:36)]=as.matrix(gun) 236 | alive[205+(9:1),210+(36:1)]=as.matrix(gun) 237 | alive[100+(1:9),100+(1:36)]=as.matrix(gun) 238 | n.updates = 4000 239 | 240 | do.basic.plot(nrows, ncols) 241 | update.plot3(alive) 242 | for(k in 1:n.updates){ 243 | wasalive=alive 244 | nbhs = get.nbhs2(alive) 245 | alive = update.alive2(alive, nbhs) 246 | update.plot4(alive,wasalive) 247 | } 248 | -------------------------------------------------------------------------------- /fasteR.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "*fasteR*" 3 | author: "Thomas Lumley" 4 | date: "10 July 2018" 5 | output: 6 | xaringan::moon_reader: 7 | chakra: libs/remark-latest.min.js 8 | nature: 9 | highlightLines: true 10 | 11 | --- 12 | 13 | ### Who am I? 14 | 15 | - Biostatistician 16 | - used R since 1996 17 | - simulations 18 | - air pollution data 19 | - genomic data 20 | - big surveys 21 | - wrote the R memory profiler 22 | 23 | 24 | --- 25 | 26 | ### Questions weka wants you to ask questions! 27 | 28 | 29 | 30 | --- 31 | 32 | ## Slow R is slow 33 | 34 | R is slow because 35 | 36 | - it's flexible: things can be redefined dynamically 37 | - it passes arguments by value 38 | - the bottlenecks in hardware have changed since R started. 39 | - R Core don't have the resources to do optimisations that break lots of things. 40 | 41 | 42 | --- 43 | 44 | ## Speeding up R code 45 | 46 | **Syllabus** 47 | 48 | - Timing and profiling 49 | - Memory allocation 50 | - Matrices and lists vs data frames 51 | - Slow functions to watch out for 52 | - Vectorisation (and memory tradeoffs) 53 | - Embarassingly Parallel-isation 54 | - The right tools: databases, netCDF, sparse matrices 55 | 56 | **Epilogue** 57 | 58 | Randomness: SSVD, subsampling 59 | 60 | --- 61 | 62 | 63 | 64 | ## Old White Guys 65 | 66 | > *We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.* (Knuth) 67 | 68 | > *Life is short, the craft long; opportunity fleeting, experiment perilous, judgement difficult* (Hippocrates of Kos) 69 | 70 | > *R has changed quite a lot recently, and older preconceptions do need to be checked against current information.* (Brian D. Ripley) 71 | 72 | 73 | 74 | --- 75 | 76 | ## Strategy 77 | 78 | 79 | 80 | 81 | --- 82 | 83 | ## Strategy 84 | 85 | ![](xkcd-optimise.png) 86 | 87 | https://xkcd.com/1205/ 88 | --- 89 | 90 | ## Timing and profiling 91 | 92 | *Measure* your code to find out what needs to be optimised -- if anything. 93 | 94 | **Tools**: `Rprof`, `Rprofmem`, `tracemem`, `profvis`, `microbenchmark` 95 | 96 | ### Note: the compiler 97 | 98 | In recent R versions, the Just-In-Time compiler defaults to 'on' and code gets faster as you run it. 99 | 100 | - `compiler:::enableJIT(0)` to turn it off 101 | - or run a few times before timing. 102 | 103 | --- 104 | 105 | ## Rprof() and profvis 106 | 107 | A time-sampling profiler: takes notes on the state of R every so often (50ms default) 108 | 109 | - Stack trace 110 | - Optionally, current memory usage and number of vector duplications 111 | 112 | `profvis` is a package for displaying `Rprof()` output better 113 | 114 | --- 115 | 116 | ## Rprofmem() 117 | 118 | A memory-allocation profiler: writes a stack trace at every 119 | 120 | - allocation of a 'large' object (>128bytes *[sic]*) 121 | - allocation of a page on the R heap 122 | 123 | Most useful if you need to trace allocations of a particular **size** (eg columns of your data) 124 | 125 | --- 126 | 127 | ## tracemem() 128 | 129 | Marks an object so that a message is printed when the object is duplicated. 130 | 131 | Useful for a single big object where duplications hurt. 132 | 133 | --- 134 | 135 | ## microbenchmark() 136 | 137 | High-resolution timing for small bits of code 138 | 139 | - useful for learning about principles 140 | - typically not relevant for optimising real code 141 | 142 | 143 | --- 144 | 145 | ## "Growing" objects 146 | 147 | Dumb example 148 | 149 | ``` 150 | > system.time({ 151 | + x<-integer(0) 152 | + for(i in 1:1e5) 153 | + x<-c(x,i^2) 154 | + }) 155 | user system elapsed 156 | 19.601 4.804 24.644 157 | ``` 158 | 159 | --- 160 | 161 | ## Preallocating 162 | 163 | Dumb example 164 | 165 | ``` 166 | > system.time({ 167 | + x<-integer(1e5) 168 | + for(i in 1:1e5) 169 | + x[i]<-i^2 170 | + }) 171 | user system elapsed 172 | 0.047 0.011 0.058 173 | ``` 174 | 175 | ### (Vectorising) 176 | 177 | ``` 178 | > microbenchmark(x<-(1:1e5)^2) 179 | Unit: microseconds 180 | expr min lq mean median uq max neval 181 | x <- (1:1e+05)^2 268.401 325.831 1037.601 416.456 769.639 36868.98 100 182 | ``` 183 | 184 | --- 185 | 186 | ## Real example 187 | 188 | - Computing accurate $p$-values for DNA-sequence association tests 189 | - need $\sum_i \lambda_i \chi^2_1$ distributions 190 | - algorithm using symbolic operations on a basis of gamma functions [Bausch, arXiv:1208.2691] 191 | 192 | --- 193 | 194 | ## Old (90% of time in "c") 195 | 196 | ``` 197 | for(i in 1:length(x@power)){ 198 | for(j in 1:length(y@power)){ 199 | if (x@exp[i]==y@exp[j]) {cat("#");next} 200 | term<-convone(x@exp[i],x@power[i],y@exp[j],y@power[j]) 201 | * allcoef<-c(allcoef,term@coef*x@coef[i]*y@coef[j]) 202 | * allpower<-c(allpower,term@power) 203 | * allexp<-c(allexp,term@exp) 204 | } 205 | } 206 | 207 | new("gammaconv", coef=allcoef,power=allpower,exp=allexp) 208 | ``` 209 | 210 | --- 211 | 212 | ## New 213 | 214 | ``` 215 | for(i in 1:length(x@power)){ 216 | for(j in 1:length(y@power)){ 217 | term<-convone(x@exp[i],x@power[i],y@exp[j],y@power[j]) 218 | * size<-nrow(term) 219 | if(here+size>maxterms) stop("thomas can't count") 220 | * allcoef[here+(1:size)]<-term@coef*x@coef[i]*y@coef[j] 221 | * allpower[here+(1:size)]<-term@power 222 | * allexp[here+(1:size)]<-term@exp 223 | * here<-here+size 224 | } 225 | } 226 | 227 | new("gammaconv", coef=allcoef[1:here],power=allpower[1:here], 228 | exp=allexp[1:here]) 229 | ``` 230 | 231 | Or preallocate a list, put short vectors in as elements, use `do.call(c, the_list)` at the end 232 | 233 | --- 234 | 235 | ## Memory copying 236 | 237 | - "Pass by value illusion": R behaves as if functions get **copies** of their arguments 238 | - Actually not copied unless modified 239 | - *Sometimes* not copied, if R *knows* it doesn't need to. 240 | - .Primitive operations 241 | - on local variables 242 | - that have never been passed to a function 243 | 244 | --- 245 | 246 | R doesn't know `x` is safe 247 | 248 | ``` 249 | > system.time({ 250 | *+ touch<-function(z) {force(z); NULL} 251 | + x<-integer(1e5) 252 | + y<-integer(1e5) 253 | + for(i in 1:1e5){ 254 | *+ touch(x) 255 | + x[i]<-i^2 256 | + } 257 | + }) 258 | user system elapsed 259 | 36.195 10.854 47.061 260 | ``` 261 | 262 | --- 263 | 264 | R does know `x` is safe 265 | 266 | ``` 267 | > system.time({ 268 | *+ touch<-function(z) {force(z); NULL} 269 | + x<-integer(1e5) 270 | + y<-integer(1e5) 271 | + for(i in 1:1e5){ 272 | *+ touch(y) 273 | + x[i]<-i^2 274 | + } 275 | + }) 276 | user system elapsed 277 | 0.166 0.025 0.190 278 | ``` 279 | 280 | --- 281 | 282 | ## Dataframes are slower 283 | 284 | ``` 285 | > dim(acsdf) 286 | [1] 151885 298 287 | > microbenchmark(sum(acsdf[,100])) 288 | Unit: microseconds 289 | expr min lq mean median uq max neval 290 | sum(acsdf[, 100]) 7.654 8.6315 11.29369 9.117 9.784 75.909 100 291 | > microbenchmark(sum(acslist[[100]])) 292 | Unit: nanoseconds 293 | expr min lq mean median uq max neval 294 | sum(acslist[[100]]) 330 340.5 740.67 447 561.5 10817 100 295 | ``` 296 | 297 | --- 298 | 299 | ## Dataframes are slower 300 | 301 | 302 | ``` 303 | > str(sequence) 304 | num [1:5000, 1:4028] 0 0 0 0 0 0 0 0 0 0 ... 305 | > system.time(colMeans(sequence)) 306 | user system elapsed 307 | 0.026 0.000 0.026 308 | > system.time(colMeans(sequencedf)) 309 | user system elapsed 310 | 0.186 0.059 0.246 311 | > microbenchmark(sequence[200:250,200:250]) 312 | Unit: microseconds 313 | expr 314 | sequence[200:250, 200:250] 315 | min lq mean median uq max neval 316 | 8.938 9.4135 11.76206 10.0835 10.4745 34.582 100 317 | > microbenchmark(sequencedf[200:250,200:250]) 318 | Unit: microseconds 319 | expr 320 | sequencedf[200:250, 200:250] 321 | min lq mean median uq max neval 322 | 437.748 484.339 1565.898 567.917 666.1715 95096.32 100 323 | 324 | ``` 325 | --- 326 | 327 | ## Other alternatives 328 | 329 | `data.table` and `tbl` are both faster. 330 | 331 | They both claim to be drop-in replacements for `data.frame`. 332 | 333 | Neither actually is, but they're *close*, and if you're editing the code anyway... 334 | 335 | 336 | --- 337 | 338 | ## Encodings 339 | 340 | There's no such thing as plain text 341 | 342 | - UTF-8 343 | - Latin1 344 | - *your local encoding* 345 | - plain bytes 346 | 347 | UTF-8 is flexible, general, and space-efficient, but has variable character lengths. 348 | 349 | --- 350 | 351 | ```{r} 352 | library(microbenchmark) 353 | load("encoding.rda") 354 | substr(xx,1,10) 355 | substr(yy,1,10) 356 | substr(zz,1,10) 357 | c(Encoding(xx), Encoding(yy),Encoding(zz)) 358 | ``` 359 | 360 | --- 361 | 362 | ```{r} 363 | microbenchmark(grep("user!", xx)) 364 | microbenchmark(grep("user!", yy)) 365 | microbenchmark(grep("user!", zz)) 366 | ``` 367 | 368 | --- 369 | 370 | ```{r} 371 | microbenchmark(substr(xx,1000,1100)) 372 | microbenchmark(substr(yy,1000,1100)) 373 | microbenchmark(substr(zz,1000,1100)) 374 | ``` 375 | 376 | --- 377 | 378 | ## Matrices: BLAS 379 | 380 | The *Basic Linear Algebra Subsystem* has the elementary matrix and vector operations in standardised form 381 | 382 | - Matrix operations in R are already in efficient C 383 | - Data flow onto the CPU is main bottleneck 384 | - Using an optimised version of BLAS can still help **a lot** 385 | - Apple vecLib, Intel MKL, OpenBLAS 386 | - Don't write your own linear algebra, let the professionals do it. 387 | 388 | --- 389 | 390 | ### Reference BLAS 391 | 392 | ``` 393 | x<-matrix(rnorm(1000*2000),ncol=1000) 394 | > system.time(m<-crossprod(x)) 395 | user system elapsed 396 | 1.040 0.002 1.043 397 | > system.time(solve(m)) 398 | user system elapsed 399 | 1.116 0.008 1.131 400 | ``` 401 | 402 | ### Apple vecLib BLAS 403 | 404 | ``` 405 | > x<-matrix(rnorm(1000*2000),ncol=1000) 406 | > system.time(m<-crossprod(x)) 407 | user system elapsed 408 | 0.399 0.007 0.112 409 | > system.time(solve(m)) 410 | user system elapsed 411 | 0.244 0.014 0.105 412 | ``` 413 | 414 | --- 415 | 416 | ## Slow functions 417 | 418 | `ifelse()`, `pmax()`, `pmin()` 419 | 420 | Why? Flexibility (eg, what is the output type?) 421 | 422 | Instead of 423 | 424 | ``` 425 | x <- ifelse(y, a, b) 426 | ``` 427 | 428 | try 429 | 430 | ``` 431 | x<-a 432 | x[y]<-b[y] 433 | ``` 434 | 435 | --- 436 | 437 | ### Example 438 | 439 | ``` 440 | x<-1:1000 441 | z<-1000:1 442 | 443 | microbenchmark(ifelse(x+z>1000,x,z)) 444 | microbenchmark({i<-(x+z>1000); y<-x;y[i]<-z[i]}) 445 | 446 | x<-rnorm(10000) 447 | microbenchmark(pmax(0,pmin(x,1))) 448 | microbenchmark( 449 | {i<-x>1 450 | x[i]<-1 451 | i<-x<0 452 | x[i]<-0} 453 | ) 454 | ``` 455 | 456 | --- 457 | 458 | ## Slow functions 459 | 460 | `lm`, `glm` are user-friendly wrappers for `lm.fit`, `lm.wfit`, `glm.fit` 461 | 462 | Can be worth constructing the design matrix yourself if 463 | 464 | - it's big 465 | - there are a lot of them and they're simple 466 | - you know enough linear algebra to use the functions 467 | 468 | For **very** large cases, try the `biglm` package. 469 | 470 | --- 471 | 472 | ## NA, NaN, Inf 473 | 474 | ``` 475 | > x<-matrix(rnorm(1e7),ncol=1e3) 476 | > system.time(cor(x)) 477 | user system elapsed 478 | 6.255 0.022 6.281 479 | > system.time(crossprod(scale(x))) 480 | user system elapsed 481 | 1.377 0.195 1.049 482 | ``` 483 | 484 | With no allowance for missing data these would be the same computation. 485 | 486 | R can't assume complete data. **You** may be able to. 487 | 488 | 489 | 490 | --- 491 | 492 | ## Vectorisation 493 | 494 | Try to use vector and matrix operations in R's internals, even if it's theoretically inefficient 495 | 496 | 497 | 498 | --- 499 | 500 | ### Convolution 501 | 502 | $$z_i=\sum_{j+k=i}x_iy_i$$ 503 | 504 | If $x_i=\Pr(X=i)$ and $y_j=\Pr(Y=j)$, then $z_i=\Pr(X+Y=i)$ 505 | 506 | ``` 507 | conv1<-function(x,y){ 508 | m <- length(x) 509 | n <- length(y) 510 | z <- numeric(m+n-1) 511 | for(j in 1:m){ 512 | for (k in 1:n){ 513 | z[j+k-1] <- z[j+k-1] + x[j]*y[k] 514 | } 515 | } 516 | z 517 | } 518 | ``` 519 | 520 | 521 | --- 522 | 523 | 524 | ## Partly vectorised 525 | 526 | ``` 527 | conv2<-function(x,y){ 528 | m <- length(x) 529 | n <- length(y) 530 | z <- numeric(m+n-1) 531 | for(j in 1:m){ 532 | z[j+(1:n)-1] <- z[j+(1:n)-1] + x[j]*y[(1:n)] 533 | } 534 | z 535 | } 536 | ``` 537 | 538 | 539 | 540 | --- 541 | 542 | ### Fully vectorised 543 | 544 | ``` 545 | conv3<-function(x,y){ 546 | m <- length(x) 547 | n <- length(y) 548 | 549 | xy<-outer(x,y,"*") 550 | xyshift<-matrix(rbind(xy,matrix(0,n,n))[1:((m+n-1)*n)],ncol=n) 551 | rowSums(xyshift) 552 | } 553 | ``` 554 | 555 | 556 | --- 557 | 558 | ### Timings 559 | 560 | ``` 561 | > system.time(conv1(x,y)) 562 | user system elapsed 563 | 19.440 0.159 19.585 564 | > system.time(conv2(x,y)) 565 | user system elapsed 566 | 0.533 0.116 0.650 567 | > system.time(conv3(x,y)) 568 | user system elapsed 569 | 0.876 0.051 0.891 570 | > compiler::enableJIT(3) 571 | [1] 0 572 | *> system.time(conv1(x,y)) 573 | * user system elapsed 574 | * 1.722 0.065 1.795 575 | > system.time(conv2(x,y)) 576 | user system elapsed 577 | 0.518 0.164 0.684 578 | > system.time(conv3(x,y)) 579 | user system elapsed 580 | 0.848 0.051 0.863 581 | ``` 582 | 583 | Your mileage may vary: try it 584 | 585 | --- 586 | 587 | ### Example: power calculation 588 | 589 | Power for detecting a 2mmHg blood pressure change with standard deviation 7mmHg 590 | 591 | ``` 592 | system.time({ 593 | my.sims <- replicate(10000, { 594 | mydiff <- rnorm(100, 2, 7) 595 | t.test(mydiff)$p.value 596 | }) 597 | }) 598 | ``` 599 | 600 | **How do we speed it up?** 601 | 602 | ### talk to your neighbour 603 | 604 | --- 605 | 606 | 607 | ## Example: genetic permutation test 608 | 609 | 10 genetic variants (SNPs) in a gene 610 | 611 | Regress blood pressure on each one (adjusted for age, sex) 612 | 613 | Is largest $Z$-statistic interestingly large? For genome-wide values of interesting? 614 | 615 | --- 616 | 617 | ### Simple code 618 | 619 | ``` 620 | one.snp = function(snp, perm, df){ 621 | coef(summary(lm(sbp~as.numeric(snp)[perm]+sex,data=df)))[2,3] 622 | } 623 | 624 | one.gene<-function(snps, perm, df){ 625 | p<-ncol(snps) 626 | zs<-sapply(1:p, function(i) one.snp(snps[,i], perm, df)) 627 | max(abs(zs)) 628 | } 629 | 630 | one.perm<-function(snps, df){ 631 | n<-nrow(snps) 632 | one.gene(snps,perm=sample(1:n), df) 633 | } 634 | 635 | many.perm <- replicate(1000, one.perm(snps, phenotype)) 636 | 637 | real.max.Z <- one.gene(snps,1:nrow(snps),phenotype) 638 | mean(many.perm < real.max.Z) 639 | ``` 640 | 641 | --- 642 | 643 | ## Where will it be slow? 644 | 645 | ### (talk to your neighbour) 646 | 647 | 648 | 649 | 650 | 651 | 652 | --- 653 | 654 | ## Parallel 655 | 656 | Relatively unusual in stats for explicit parallel processing to be *faster* than just running lots of copies of R (can be simpler) 657 | 658 | - if parallel section is short, explicit parallelisation may be less expensive (lower average load) 659 | - **shared memory** may allow more R processes to fit in memory 660 | 661 | --- 662 | 663 | ``` 664 | x<-matrix(rnorm(1e8),ncol=4) 665 | y<-rnorm(nrow(x)) 666 | > system.time(mclapply(1:4, function(i) { cor(x[,i],y)},mc.cores=4)) 667 | user system elapsed 668 | 3.024 1.192 1.142 669 | > system.time(lapply(1:4, function(i) { cor(x[,i],y)})) 670 | user system elapsed 671 | 1.797 0.272 2.077 672 | ``` 673 | 674 | Common tradeoff: more CPU-seconds used, less elapsed time. 675 | 676 | --- 677 | 678 | ## Variations 679 | 680 | Redoing setup work 681 | 682 | ``` 683 | > system.time(mclapply(1:4, 684 | + function(i) { 685 | + set.seed(1) 686 | + x<-matrix(rnorm(1e8),ncol=4) 687 | + y<-rnorm(nrow(x)) 688 | + cor(x[,i],y) 689 | + },mc.cores=4)) 690 | 691 | user system elapsed 692 | 34.158 7.689 32.162 693 | ``` 694 | 695 | --- 696 | 697 | Forcing memory duplication 698 | 699 | ``` 700 | x<-matrix(rnorm(1e8),ncol=4) 701 | y<-rnorm(nrow(x)) 702 | > system.time(mclapply(1:4, 703 | function(i) {x[1]<-x[1] 704 | cor(x[,i],y) 705 | },mc.cores=4)) 706 | user system elapsed 707 | 3.100 2.138 4.843 708 | ``` 709 | 710 | --- 711 | 712 | 713 | ## Data storage 714 | 715 | - large data frames in database tables 716 | - large arrays in netCDF or similar 717 | - large sparse matrices in sparse formats 718 | 719 | 720 | --- 721 | 722 | ### Database storage 723 | 724 | The American Community Survey five-year person file 725 | 726 | - 16GB of CSVs 727 | - over 8 million records 728 | - won't fit in R on laptop 729 | 730 | Use MonetDB for simple database analyses, behind `dbplyr` 731 | 732 | (Data reading took 5-10 minutes) 733 | 734 | --- 735 | 736 | ## Example 737 | 738 | ``` 739 | library(MonetDBLite) 740 | library(dplyr) 741 | library(dbplyr) 742 | 743 | ms <- MonetDBLite::src_monetdblite("~/acs") 744 | acstbl<-tbl(ms, "acs") 745 | acstbl %>% summarise(count(agep)) 746 | acstbl %>% group_by(st) %>% summarise(avg(agep)) 747 | 748 | acstbl %>% group_by(st) %>% summarise(sum(pwgtp*agep*1.0)/sum(pwgtp)) 749 | ``` 750 | 751 | MonetDB is optimised for this sort of computation on a single computer: advantageous when data size ~ 1/3 physical memory 752 | 753 | --- 754 | 755 | ## Sparse matrices 756 | 757 | In some applications, there are large matrices with mostly zero entries. 758 | 759 | The zeroes don't need to be stored: this can help a lot with memory use and matrix multiplication speed. 760 | 761 | Support in the `Matrix` package 762 | 763 | Example: (simulated) human DNA sequence data: 5000 people, 4028 variants 764 | 765 | --- 766 | 767 | ``` 768 | > load("AKLfaster/sequence.rda") 769 | > str(sequence) 770 | num [1:5000, 1:4028] 0 0 0 0 0 0 0 0 0 0 ... 771 | > library(Matrix) 772 | > M<-Matrix(sequence) 773 | > str(M) 774 | Formal class 'dgCMatrix' [package "Matrix"] with 6 slots 775 | ..@ i : int [1:287350] 713 4006 12 20 37 41 67 80 102 103 ... 776 | ..@ p : int [1:4029] 0 2 468 934 935 937 1032 1034 1035 1037 ... 777 | ..@ Dim : int [1:2] 5000 4028 778 | ..@ Dimnames:List of 2 779 | .. ..$ : NULL 780 | .. ..$ : NULL 781 | ..@ x : num [1:287350] 1 1 1 1 1 1 1 1 1 1 ... 782 | ..@ factors : list() 783 | > object.size(M) 784 | 3465736 bytes 785 | > object.size(sequence) 786 | 161120200 bytes 787 | > system.time(crossprod(M)) 788 | user system elapsed 789 | 0.207 0.028 0.238 790 | > system.time(crossprod(sequence)) 791 | user system elapsed 792 | 5.493 0.052 1.614 793 | ``` 794 | 795 | --- 796 | 797 | ### "Matrix-free" operations 798 | 799 | Many uses of matrices (iterative solvers, eigenthingies) don't need the individual elements, just the ability to compute $y\mapsto My$. 800 | 801 | Fast for 802 | 803 | - Sparse matrices 804 | - Projections 805 | 806 | Trivial: $n$ vs $n^2$ operations 807 | ``` 808 | y-mean(y) 809 | ``` 810 | 811 | Less trivial: $np^2+p^3$ vs $n^2$ operations 812 | 813 | 814 | ``` 815 | qr.resid(qr(X),y) 816 | ``` 817 | 818 | 819 | --- 820 | 821 | ``` 822 | > x<-rnorm(5000) 823 | > system.time({ 824 | + P<-matrix(-1/5000,ncol=5000,nrow=5000) 825 | + diag(P)<-diag(P)+1 826 | + P%*%x 827 | + }) 828 | user system elapsed 829 | 0.473 0.185 0.646 830 | 831 | > microbenchmark(x-mean(x)) 832 | Unit: microseconds 833 | expr min lq mean median uq max neval 834 | x - mean(x) 18.663 19.2265 19.80241 19.4575 19.747 46.837 100 835 | > microbenchmark(x-sum(x)/5000) 836 | Unit: microseconds 837 | expr min lq mean median uq max neval 838 | x - sum(x)/5000 10.792 20.1035 24.52196 25.0765 28.9615 41.306 100 839 | ``` 840 | --- 841 | 842 | 843 | ## Conway's "Life" 844 | 845 | 846 | Cellular automaton: 847 | 848 | - grid of cells,'alive' or 'dead' 849 | - cells with 0,1,5,6 neighbours 'die' 850 | - empty cells with 3 neighbour 'born' 851 | 852 | **Look at `life-basic.R` and think about optimisation.** 853 | 854 | ### talk to your neighbour 855 | 856 | 857 | --- 858 | 859 | ## Epilogue: random algorithms 860 | 861 | Statisticians should know that sampling works 862 | 863 | - Sampling from a database 864 | - including stratified sampling, case-control sampling 865 | - random projections for nearest neighbours 866 | - Stochastic SVD 867 | 868 | --- 869 | 870 | ## Stochastic SVD 871 | 872 | - Principal components on an $n\times m$ matrix takes $nm^2$ time 873 | - Statisticians usually want $k\ll m$ dimensions 874 | - Take random $k+p$ dimensional projection $\Omega$ 875 | - compute $A\Omega$ 876 | - project $A$ on to the subspace spanned by $A\Omega$ 877 | - SVD the projection 878 | - Gives almost the same leading $k$ singular vectors, for small $p$. 879 | - Takes only $nm(k+p)$ time 880 | 881 | **Only** accurate if $m$, $n$ large, $k+p$ at least moderate 882 | 883 | --- 884 | 885 | ### Example 886 | 887 | ``` 888 | load("sequence.rda") 889 | # devtools::install_github("tslumley/bigQF") 890 | library(bigQF) 891 | 892 | system.time(s1<-svd(sequence,nu=10,nv=10)) 893 | system.time(s2<-ssvd(sequence, n=10,U=TRUE,V=TRUE)) 894 | spseq<-sparse.matrixfree(Matrix(sequence)) 895 | system.time(s3<-ssvd(spseq, n=10,U=TRUE,V=TRUE)) 896 | 897 | plot(s1$u[,1:2],pch=19) 898 | points(s2$u[,1:2],col="red") 899 | 900 | plot(s1$u[,1:2],pch=19) 901 | points(s3$v[,1],-s3$v[,2],col="green") 902 | ``` 903 | 904 | --- 905 | 906 | ## Subsampling plus polishing 907 | 908 | For generalized linear models on large datasets in a database 909 | 910 | - fit the model to a random subset 911 | - do a one-step update computed in the database 912 | 913 | My talk on Thursday 914 | 915 | --- 916 | 917 | 918 | # Simple Rule: There are no simple rules 919 | 920 | ### Measure twice; debug once 921 | 922 | ### Vectorise 923 | 924 | ### Experiment 925 | 926 | ### Keep up with modern tools 927 | 928 | -------------------------------------------------------------------------------- /fasteR.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | fasteR 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1019 | 1020 | 1032 | 1033 | 1040 | 1041 | 1051 | 1052 | 1053 | -------------------------------------------------------------------------------- /examplebp.csv: -------------------------------------------------------------------------------- 1 | "","sex","sbp","snp1","snp2","snp3","snp4","snp5","snp6","snp7","snp8","snp9","snp10","snp11" 2 | "1","MALE",152,"CC","TT","TT","TT","CC","AG","TT","CC","TT","CT","TT" 3 | "2","FEMALE",187,"TT","TT","CC","CC","CC","AA","AT","CT","CT","CC","TT" 4 | "3","MALE",135,"CT","AT","TC","TT",NA,"AG","AT","CC","TT","CT","TT" 5 | "4","FEMALE",148,"CT","TT","CC","CC","CC","AA","AT","CC","TT","CT","CT" 6 | "5","FEMALE",133,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 7 | "6","FEMALE",112,"CT","AT",NA,"CT","CT","AG","AT","CT","CT","CC","CT" 8 | "7","FEMALE",165,"CT","AT","TC","CT","CC","AG","TT","CC","TT","TT","TT" 9 | "8","FEMALE",181,"TT",NA,"TC",NA,"CC","AA",NA,"CC","CT",NA,NA 10 | "9","FEMALE",162,"CC","TT","TC",NA,"CC","AA","AT","CT","CT","CC","CT" 11 | "10","MALE",161,"CT","AT","TC","TT",NA,"GG","AT","CT","TT","CC","TT" 12 | "11","FEMALE",129,"TT","TT","CC","CT","CC","GG","AA","TT","CC","CC","TT" 13 | "12","FEMALE",147,"TT","AA","CC","TT","CT","AG","TT","CC","TT","CT","TT" 14 | "13","MALE",144,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CT","TT" 15 | "14","FEMALE",117,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 16 | "15","FEMALE",174,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 17 | "16","FEMALE",144,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 18 | "17","MALE",170,"CT","TT","TC","CT","CC","AA","AT","CC","TT","TT","TT" 19 | "18","MALE",130,"CC","AA","TT","TT","CC","GG","AA","TT","TT","CC","TT" 20 | "19","MALE",127,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 21 | "20","MALE",131,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 22 | "21","FEMALE",187,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 23 | "22","FEMALE",112,"CT","AT","CC","CT",NA,"AG","AA","CC","CT","CT","CT" 24 | "23","MALE",127,"CT","AT","TC","TT",NA,"AA","AT","CT",NA,"CC","TT" 25 | "24","MALE",138,"CT","TT","TC","CT","CC",NA,"AT","CC","TT","TT","TT" 26 | "25","MALE",145,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 27 | "26","MALE",127,"TT","AT","CC","CT","CT","AA","AT","CT","CT","CT","TT" 28 | "27","FEMALE",139,"TT","AA","CC","TT","CC","AA","TT","CC","TT","CT","TT" 29 | "28","MALE",147,"TT","AT","CC","CT","CC","AA","AT",NA,"TT","CT","TT" 30 | "29","FEMALE",133,"TT","AT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 31 | "30","MALE",130,"CT","TT","TC","CT","CC","AG","TT","CC","TT","TT","TT" 32 | "31","FEMALE",129,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 33 | "32","FEMALE",123,"CT","AT","TC","TT",NA,NA,"AT","CT","CT","CT","TT" 34 | "33","FEMALE",152,"TT","AT","CC","CT",NA,"AG","AT","CT","CT","CC","TT" 35 | "34","MALE",164,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 36 | "35","FEMALE",156,"TT","AT","CC","CT","CT","AG","AT","CT",NA,"CT","TT" 37 | "36","FEMALE",119,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 38 | "37","MALE",132,"TT","TT","CC","CC","CC",NA,"TT","CC","TT","CT","TT" 39 | "38","MALE",149,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CC","TT" 40 | "39","FEMALE",129,"CT","TT","CC","CC","CT","AG","AT","CT","CT","TT","CT" 41 | "40","MALE",139,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CC","CT" 42 | "41","MALE",140,"CC","TT","CC",NA,"CC","AA","TT","CC","TT","CT","CC" 43 | "42","MALE",134,"CT","AT","TC","TT",NA,"GG","AT","CT","CT","CT","TT" 44 | "43","MALE",132,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 45 | "44","MALE",145,"TT","AT","CC",NA,"CT","AG","TT","CC","TT","CT","TT" 46 | "45","MALE",146,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 47 | "46","MALE",108,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 48 | "47","FEMALE",171,"CC","TT","TT","TT","CC","GG","AA","TT","TT","CC","TT" 49 | "48","MALE",133,"CT","TT","CC","CT","CC","AA","TT",NA,"TT","TT","CT" 50 | "49","MALE",155,"CT","TT","TC",NA,"CC","AG","AT","CT","CT","CC","TT" 51 | "50","MALE",181,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 52 | "51","MALE",168,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 53 | "52","MALE",127,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 54 | "53","FEMALE",140,"TT","AT","CC",NA,"CT","AG","AT","CT","CT","CC","TT" 55 | "54","MALE",142,"TT","AT","CC","CT","CT","GG","AA","CT","CT","CC","CT" 56 | "55","FEMALE",164,"CC","AT","TC","CT","CC","AG","TT","CC","TT","TT","CT" 57 | "56","FEMALE",177,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 58 | "57","FEMALE",161,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 59 | "58","MALE",150,"TT","TT","CC","CC",NA,NA,"AT","CT","CT","CC","TT" 60 | "59","MALE",141,"CT","TT","CC","CC","CC","AA","AT","CC","TT","TT","CT" 61 | "60","FEMALE",144,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 62 | "61","FEMALE",147,"CT","TT",NA,"CT","CC","AA","TT","CC","TT","CT","TT" 63 | "62","MALE",111,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 64 | "63","MALE",139,"CT","TT",NA,"CC","CC","AA","TT","CC","TT","TT","CT" 65 | "64","MALE",151,"TT","AT","CC","CT","CT",NA,"AT","CT","CT","CC","TT" 66 | "65","MALE",161,"TT","TT","CC","CC","CC","AA","AT","CC","TT","CC","TT" 67 | "66","MALE",119,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 68 | "67","MALE",151,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 69 | "68","MALE",150,"TT","AT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 70 | "69","FEMALE",156,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 71 | "70","MALE",133,"CT","AT","TC","TT",NA,"GG","AT","CC","TT","CT","TT" 72 | "71","FEMALE",127,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 73 | "72","FEMALE",129,"CT","AT","CC","TT","CC",NA,"AT","CC","TT","CT","TT" 74 | "73","FEMALE",150,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 75 | "74","FEMALE",150,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 76 | "75","MALE",135,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 77 | "76","MALE",152,"CT","TT","CC",NA,"CC","AA","AT","CC","CT","CC","CT" 78 | "77","FEMALE",120,"CT","TT","CC","CC","CC","AA","AT","CC","CT","CT","CT" 79 | "78","MALE",130,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 80 | "79","MALE",129,"TT","AT","CC","CT",NA,"AA","AT","CT","CT","CC","TT" 81 | "80","MALE",128,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 82 | "81","MALE",126,"CT","TT","TC","CT","CC","AG","AT","CT",NA,"CT","TT" 83 | "82","FEMALE",129,"CT","AT","TC","TT","CT","AG","TT","CC","TT","TT","TT" 84 | "83","MALE",132,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 85 | "84","FEMALE",125,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CC","TT" 86 | "85","MALE",136,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 87 | "86","MALE",159,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 88 | "87","MALE",129,"TT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","TT" 89 | "88","FEMALE",142,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 90 | "89","FEMALE",129,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 91 | "90","MALE",158,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CC","TT" 92 | "91","MALE",141,"TT","TT","CC","CC","CC","AA","TT","CC","TT",NA,"TT" 93 | "92","FEMALE",150,"CC","TT","TC","CT","CC","AA","TT","CC","TT","TT","CT" 94 | "93","MALE",149,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CT","CT" 95 | "94","FEMALE",129,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 96 | "95","MALE",150,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 97 | "96","FEMALE",132,"CT","TT","CC","CC","CC",NA,"TT","CC","TT","TT","CT" 98 | "97","MALE",151,"CT","TT",NA,"CC","CC","AG","AT","CT","CT","CT","CT" 99 | "98","MALE",142,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 100 | "99","MALE",160,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CT","TT" 101 | "100","FEMALE",168,"TT","AA","CC","TT","CT","GG","AA","TT","CC","CC","TT" 102 | "101","FEMALE",117,"TT","TT","CC",NA,"CC","AA",NA,"CC","TT","CC","TT" 103 | "102","MALE",142,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 104 | "103","MALE",161,"TT","AT","CC","CT","CC","AG","AT","CT","CT","CC","TT" 105 | "104","FEMALE",125,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CT","TT" 106 | "105","MALE",121,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 107 | "106","FEMALE",136,"TT","TT","CC","CT",NA,NA,"TT","CC","TT","CT","TT" 108 | "107","MALE",151,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 109 | "108","MALE",171,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 110 | "109","FEMALE",140,"TT","AT","CC",NA,"CT","AA","AT","CT","CT","CC","TT" 111 | "110","FEMALE",141,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 112 | "111","MALE",136,"CT","TT","TC","CT","CC","GG","AA","TT","CC","CT","TT" 113 | "112","FEMALE",124,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 114 | "113","MALE",131,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 115 | "114","FEMALE",126,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 116 | "115","FEMALE",132,"CC","TT","TC","CT","CC","AA","TT","CC","TT","TT","CT" 117 | "116","MALE",127,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 118 | "117","MALE",129,"CT","AT","TC","TT",NA,"GG","AT","CT","TT","CT","TT" 119 | "118","FEMALE",154,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 120 | "119","MALE",135,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 121 | "120","MALE",138,"CC","AT","TT","TT","CC","AG","TT","CC","TT","CT","TT" 122 | "121","FEMALE",162,"CT","TT","TC","CT","CC","GG","AT","CC","CT","CT","CT" 123 | "122","FEMALE",125,"CT","AT","TC","TT","CC","AA","TT","CC","TT","CT","TT" 124 | "123","MALE",156,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 125 | "124","FEMALE",154,"CT","AT","TC","TT",NA,"GG","AA",NA,"CT","CT","TT" 126 | "125","FEMALE",131,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 127 | "126","MALE",160,"TT","TT","CC",NA,"CC","AG","AT","CC","CT","CC","CT" 128 | "127","MALE",139,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 129 | "128","FEMALE",168,"CT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","CT" 130 | "129","MALE",158,"CT","AT","TC","TT",NA,"GG","AT","CT","CT","CT","TT" 131 | "130","MALE",132,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 132 | "131","FEMALE",133,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 133 | "132","MALE",116,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 134 | "133","MALE",114,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 135 | "134","FEMALE",132,"CC","TT","TT","TT","CC","AA","TT","CC","TT","CC","TT" 136 | "135","FEMALE",179,"CT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","CT" 137 | "136","FEMALE",105,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 138 | "137","FEMALE",145,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 139 | "138","MALE",141,"CT","AT","CC","CT","CC","AA","TT","CC","TT","CC","CT" 140 | "139","FEMALE",144,"TT","TT","CC","CC","CC","AA","AT","CC","TT","TT","TT" 141 | "140","MALE",141,"TT","TT","CC","CC","CC",NA,"TT","CC","TT","CC","TT" 142 | "141","FEMALE",163,"TT","TT","CC","CC","CC","AA","AA","CC","TT","TT","TT" 143 | "142","FEMALE",132,"TT","TT","CC","CT","CT","AA","TT","CC","TT","CT","TT" 144 | "143","MALE",147,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 145 | "144","FEMALE",130,"TT","AT","CC","CT","CT","AA","AT","CT","CT","CT","TT" 146 | "145","MALE",142,"CC","AT","TC","TT","CC","GG","AA","TT","TT","CC","TT" 147 | "146","FEMALE",158,"CC","TT","TC","CT","CC",NA,"TT","CC","TT","TT","CT" 148 | "147","MALE",110,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 149 | "148","FEMALE",184,"CC","TT","TT","TT","CC","AG","TT","CC","TT","CC","TT" 150 | "149","MALE",169,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 151 | "150","MALE",121,"CC","TT","TC","CT","CC","AG","AT","CT","CT","CC","CT" 152 | "151","MALE",143,"CT","TT","CC",NA,"CC","AG","AT","CC","TT","TT","CT" 153 | "152","MALE",140,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 154 | "153","MALE",118,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 155 | "154","FEMALE",142,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 156 | "155","FEMALE",127,"TT",NA,"CC","CC","CC","AA","TT","CC","TT","CC","TT" 157 | "156","MALE",168,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CC","TT" 158 | "157","MALE",114,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 159 | "158","FEMALE",137,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 160 | "159","MALE",150,"TT","TT","CC","CC","CC",NA,"TT","CC","TT","CT","TT" 161 | "160","MALE",149,"CC","TT","TC",NA,"CC","AG","AT","CT","CT","TT","CT" 162 | "161","MALE",118,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 163 | "162","MALE",129,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CC" 164 | "163","FEMALE",131,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 165 | "164","FEMALE",164,"TT",NA,"CC",NA,"CC","AA","TT","CC","TT","TT","TT" 166 | "165","MALE",184,"CT","AT","TT","TT","CC","GG","AA","TT","TT","CC","TT" 167 | "166","MALE",152,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 168 | "167","FEMALE",143,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 169 | "168","MALE",140,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 170 | "169","MALE",142,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 171 | "170","FEMALE",121,"TT","TT","CC","CC","CC","AG","AT","CC","TT","CT","TT" 172 | "171","MALE",162,NA,"AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 173 | "172","FEMALE",113,"TT","AT","CC","CT","CC","AA","AT","CC","TT","TT","TT" 174 | "173","MALE",148,"CT","AT","CC","CT","CT","AG","AA","CT","CT","CC","CT" 175 | "174","FEMALE",131,"CT","AT","TC","TT",NA,"GG","AA","CT","TT","TT","TT" 176 | "175","FEMALE",122,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 177 | "176","FEMALE",170,"TT","AT","CC","CT","CT",NA,"AT","CT","CT","CC","TT" 178 | "177","MALE",125,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 179 | "178","MALE",133,"TT","AT","CC","CT","CT","AA","AA",NA,"CC","CC","TT" 180 | "179","FEMALE",123,"CT","TT","CC","CC","CC","AG","AT","CT","CT","CT","CT" 181 | "180","MALE",128,"TT","AT","CC","CT","CT","AG","TT","CC","TT","CT","TT" 182 | "181","MALE",121,"CC","TT","CC","CC","CC","AG","AA","TT","CC","CC","CC" 183 | "182","MALE",109,"CT","TT","TC","CT","CC","AG","AA","CC","TT","TT","TT" 184 | "183","FEMALE",156,"TT","AT","CC","CT","CT","AG","AT","CT","TT","CT","TT" 185 | "184","MALE",156,"CT","TT","TC","CT","CT","AA","TT","CC","TT","CT","TT" 186 | "185","MALE",197,"CT","TT",NA,"CC",NA,NA,"AT","CC","TT","TT","CT" 187 | "186","FEMALE",115,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CC","CT" 188 | "187","FEMALE",149,"CC","TT","TC","CT","CC","AG","AT","CC","TT","TT","CT" 189 | "188","MALE",128,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 190 | "189","FEMALE",114,"CT","AT","TC","TT","CC","AG","AT","CC","TT","TT","TT" 191 | "190","FEMALE",138,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 192 | "191","FEMALE",147,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 193 | "192","MALE",149,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CC","CT" 194 | "193","FEMALE",148,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 195 | "194","FEMALE",140,"CT",NA,NA,"CC","CC",NA,"TT","CC","TT","TT","CT" 196 | "195","MALE",141,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 197 | "196","FEMALE",150,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 198 | "197","MALE",148,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 199 | "198","FEMALE",173,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CT","CT" 200 | "199","MALE",156,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 201 | "200","MALE",159,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CC","TT" 202 | "201","FEMALE",126,"CT","TT","TC","CT","CC","AG","TT","CC","TT","TT","TT" 203 | "202","FEMALE",152,"TT","TT","CC","CC","CC","AA","AT","CC","TT","CT","TT" 204 | "203","MALE",139,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 205 | "204","MALE",163,"CT","TT","CC","CC","CC","AA","TT",NA,"TT","CC","CT" 206 | "205","FEMALE",116,"TT","AT","CC","CT","CT",NA,"AT","CT","CT","CC","TT" 207 | "206","MALE",121,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CT","TT" 208 | "207","MALE",150,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CC","TT" 209 | "208","MALE",138,"CT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","CT" 210 | "209","MALE",151,"CT","TT",NA,NA,"CC","AA","TT","CC",NA,"CC","CT" 211 | "210","MALE",121,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 212 | "211","MALE",135,"TT","AT","CC","CT","CC","AG","AT","CT","CT","CT","TT" 213 | "212","MALE",151,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 214 | "213","FEMALE",157,"TT","TT","CC",NA,"CC",NA,"TT","CC","TT","CT","TT" 215 | "214","FEMALE",128,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 216 | "215","MALE",148,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 217 | "216","FEMALE",125,"CT","AT","TC","TT",NA,"GG","AA","CT","CT","CC","TT" 218 | "217","FEMALE",134,"TT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","TT" 219 | "218","FEMALE",148,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CC","CT" 220 | "219","FEMALE",140,"TT","AT","CC","CT","CT","AG","AT","CT","CT","TT","TT" 221 | "220","MALE",120,"TT","TT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 222 | "221","FEMALE",123,"TT","TT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 223 | "222","MALE",167,"CT","AT","TC","TT",NA,"GG","AT","CT","CT","CC","TT" 224 | "223","MALE",138,"TT","AT","CC","CT","CT",NA,"AT","CT","TT","CT","TT" 225 | "224","MALE",112,"TT","AA","CC","TT","CT","AG","AT","CT","CT","CC","TT" 226 | "225","FEMALE",136,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 227 | "226","FEMALE",183,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 228 | "227","MALE",131,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CC","TT" 229 | "228","FEMALE",134,"CT","TT","CC",NA,"CC","AA","AT","CT","CT","TT","CT" 230 | "229","FEMALE",153,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 231 | "230","MALE",180,"TT","TT","CC","CC","CC",NA,"AT","CC",NA,"TT","TT" 232 | "231","MALE",118,"CT","TT","CC","CC","CC","AG","TT","CC","TT","TT","CT" 233 | "232","FEMALE",149,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 234 | "233","FEMALE",118,"TT","TT","CC","CC","CC","AG","TT","CC","TT","TT","TT" 235 | "234","FEMALE",143,"CC","TT","TT","TT","CC","GG","AT","CT","TT","CT","TT" 236 | "235","FEMALE",160,"CT","AT","TC","TT",NA,"GG","AT","CC","TT","CT","TT" 237 | "236","FEMALE",164,"TT","AT","CC","CT","CT","AG","AA","CT","TT","CC","TT" 238 | "237","MALE",135,"TT","AA","CC","TT","CC","AA","TT","CC","TT","CC","TT" 239 | "238","MALE",132,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 240 | "239","MALE",137,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 241 | "240","MALE",113,"CC","TT","TT","TT","CC",NA,"AA","CT","TT","CC","TT" 242 | "241","FEMALE",140,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 243 | "242","MALE",136,"CT","TT","TC","CT","CC","AA","TT","CC",NA,"CT","TT" 244 | "243","FEMALE",134,"TT","AT","CC","CT","CT","AG","AA","CT","CC","CC","TT" 245 | "244","MALE",140,"TT","AT","CC","TT","TT","AG","TT","CC","TT","TT","TT" 246 | "245","FEMALE",160,"TT",NA,"CC",NA,"CT","AG","TT","CC","TT","CC","TT" 247 | "246","MALE",156,"TT","AT","CC","CT","CT","AG","AT","CT","CT","TT","TT" 248 | "247","FEMALE",183,"TT","AT","CC","CT","CC",NA,"TT","CC","TT","CC","TT" 249 | "248","MALE",120,"CT","AT","TC","TT",NA,"GG","AT","CT","CT","TT","TT" 250 | "249","FEMALE",180,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 251 | "250","MALE",131,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 252 | "251","FEMALE",168,"CT","AT","TC","TT","CC",NA,"AT","CT","CT","CC","TT" 253 | "252","MALE",122,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 254 | "253","MALE",136,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CC","TT" 255 | "254","FEMALE",117,"CC","TT","TC","CT","CC","AA","TT","CC","TT","TT","CT" 256 | "255","MALE",128,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 257 | "256","MALE",147,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 258 | "257","FEMALE",136,"TT","TT","CC","CC","CC","AG","AT","CC","CT","CT","CT" 259 | "258","MALE",128,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 260 | "259","MALE",124,"CC","TT","TC","CT","CC","AG","TT","CC","TT","TT","CT" 261 | "260","MALE",130,"CT","TT","CC","CC","CC","AA","TT","CC","TT",NA,"CT" 262 | "261","MALE",148,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 263 | "262","MALE",149,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 264 | "263","MALE",141,"CT","AT","TC","TT",NA,"AG","AA",NA,"CC","CC","TT" 265 | "264","FEMALE",118,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CC","CT" 266 | "265","FEMALE",142,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 267 | "266","FEMALE",134,"TT","AT","CC",NA,NA,"GG","AA","CT","CT","TT","TT" 268 | "267","MALE",116,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 269 | "268","MALE",134,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CT","TT" 270 | "269","FEMALE",121,"TT","TT","CC","CC","CC","AG","AT","CT","CT","TT","TT" 271 | "270","FEMALE",139,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 272 | "271","FEMALE",146,"CT","TT","CC","CC","CC","GG","AA","TT","CC","CC","CT" 273 | "272","FEMALE",148,"TT","AT","CC",NA,"CT","AG","AA","CT","CT","CT","TT" 274 | "273","MALE",156,"TT","AA","CC","TT","CT","AG","AT","CT","TT","CT","TT" 275 | "274","FEMALE",144,"CT","TT","CC","CC","CC","AG","AT","CT","CT","CT","CT" 276 | "275","MALE",148,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 277 | "276","FEMALE",122,"TT","AA","CC",NA,"TT","GG","AA","TT","CC","TT","TT" 278 | "277","FEMALE",168,"CC","TT","TT","TT","CC","AG","AT","CC","TT","CT","TT" 279 | "278","FEMALE",157,"CC","AT","TT","TT","CC","AG","TT","CC","TT","TT","TT" 280 | "279","FEMALE",149,"CT","AT","TC","TT",NA,"GG","AA","TT","CC","CC","TT" 281 | "280","FEMALE",180,"CT","TT","TC","CT","CC","AA","AT","CC","TT","TT","TT" 282 | "281","MALE",130,"CC","TT","TT","TT",NA,"GG","AT","CT","CT","CC","TT" 283 | "282","MALE",139,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 284 | "283","FEMALE",138,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 285 | "284","FEMALE",190,"CC","TT","TC",NA,"CC","AA","AT","CT","CT","CC","CT" 286 | "285","MALE",130,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 287 | "286","MALE",148,"TT","AT","CC",NA,"CC","AG","AT","CT","CT","CC","TT" 288 | "287","FEMALE",130,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 289 | "288","MALE",148,"CT","AT","CC","CT","CT","AG","AA","CT","CT","CC","CT" 290 | "289","FEMALE",140,"CC","TT","TT","TT","CC","AG","AT","CC","TT","CC","TT" 291 | "290","MALE",124,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 292 | "291","FEMALE",141,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 293 | "292","FEMALE",124,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 294 | "293","MALE",141,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CT","TT" 295 | "294","FEMALE",135,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 296 | "295","MALE",178,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 297 | "296","FEMALE",143,"CC","TT","TC","CT","CC","AG","AT","CC","TT","CT","CT" 298 | "297","MALE",186,"CT","AA","TC","TT","CC","AG","TT","CC","TT","TT","TT" 299 | "298","MALE",132,"CC","AA","TT","TT","CC","GG","AA","TT","TT","CC","TT" 300 | "299","FEMALE",122,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 301 | "300","FEMALE",158,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 302 | "301","FEMALE",142,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 303 | "302","MALE",159,"CT","TT","CC","CC","CC","AA","AT","CC","TT","TT","CT" 304 | "303","FEMALE",108,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 305 | "304","MALE",149,"CT","AT","TC","TT","CT","AG","AT","CT","CT","CT","TT" 306 | "305","FEMALE",149,"TT","AT","CC","CT","TT","GG","AT","CT","CT","CC","TT" 307 | "306","FEMALE",150,"CT","TT","CC","CC","CC","AA","AT","CC","TT","TT","CT" 308 | "307","MALE",136,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 309 | "308","MALE",140,"CT","TT","CC","CC","CC","AG","TT","CC","TT","TT","CT" 310 | "309","FEMALE",128,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 311 | "310","MALE",150,"CT","AT","TC","TT","CC","AG","AT","CC","TT","CC","TT" 312 | "311","FEMALE",110,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CC","CT" 313 | "312","FEMALE",141,"TT","TT",NA,"CC","CC","AA","TT","CC",NA,"CT","TT" 314 | "313","FEMALE",151,"TT","TT","CC","CC","CC","AA","AT","CC","TT","CT","TT" 315 | "314","MALE",131,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 316 | "315","FEMALE",135,"TT","AT","CC","TT","CT","AG","AT","CT","CT","CC","TT" 317 | "316","MALE",129,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 318 | "317","FEMALE",112,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 319 | "318","MALE",146,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 320 | "319","FEMALE",119,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CT","TT" 321 | "320","MALE",128,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CC","TT" 322 | "321","MALE",129,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 323 | "322","FEMALE",159,"CC","TT","TC","CT","CC","AG","TT","CC","TT","CC","CT" 324 | "323","MALE",131,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 325 | "324","MALE",142,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 326 | "325","FEMALE",158,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 327 | "326","FEMALE",183,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 328 | "327","MALE",140,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 329 | "328","FEMALE",112,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 330 | "329","FEMALE",141,"CT","TT","TC","CT","CC","AA","AT","CT","TT","CT","TT" 331 | "330","MALE",121,"CT","TT","CC","CC","CC","AA","AT","CC","TT","CT","CT" 332 | "331","FEMALE",140,"TT","TT","CC","CC","CC","AA","AT","CC","TT","CT","TT" 333 | "332","FEMALE",137,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 334 | "333","MALE",127,"CC","TT","CC","CC","CC","AA","AT","CT","CT","CT","CC" 335 | "334","FEMALE",164,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 336 | "335","MALE",141,"CT","TT","TC","TT","CC","AG","AT","CT","CT","CT","TT" 337 | "336","MALE",150,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 338 | "337","FEMALE",137,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 339 | "338","FEMALE",141,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 340 | "339","MALE",166,"CC","TT","TC","CT","CC","AA","AT","CT","CT","CT","CT" 341 | "340","MALE",144,NA,"AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 342 | "341","MALE",128,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 343 | "342","MALE",130,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 344 | "343","FEMALE",143,"CC","AT","TT","TT","CC","AA","TT","CC","TT","CT","TT" 345 | "344","FEMALE",160,"TT","AT","CC","CT","CT","AA","AT","CT","CT","CT","TT" 346 | "345","MALE",165,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 347 | "346","FEMALE",152,"CC","TT","TC","CT","CC","AG","AT","CT","CT","CT","CT" 348 | "347","FEMALE",129,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 349 | "348","MALE",119,"CT","TT","CC","CC","CC","AA","AT","CC","TT","CT","CT" 350 | "349","FEMALE",108,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 351 | "350","MALE",129,"CT","TT","TC","CT","CC","AG","TT","CC","TT","TT","TT" 352 | "351","MALE",150,"TT","TT","CC",NA,"CC","AA",NA,"CC","TT","CT","TT" 353 | "352","FEMALE",157,"CC","TT","TC","CT","CC","AG","TT","CC","TT","TT","CT" 354 | "353","FEMALE",141,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 355 | "354","FEMALE",155,"TT","TT","CC","CT","CT","AG","AT","CT","TT","CC","TT" 356 | "355","FEMALE",181,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CC","CT" 357 | "356","FEMALE",173,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 358 | "357","FEMALE",146,"CT","AT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 359 | "358","FEMALE",129,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 360 | "359","MALE",119,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 361 | "360","MALE",145,"CT","TT","TC","CT","CC","AG","TT","CC","TT","TT","TT" 362 | "361","MALE",117,"CT","AT","CC","CT","CT","AG","AT","CT","TT","CC","CT" 363 | "362","MALE",160,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 364 | "363","FEMALE",126,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 365 | "364","FEMALE",133,"TT","AT","CC","CT","CT","AG","AT","CT",NA,"CT","TT" 366 | "365","MALE",168,"TT","AT","CC","CT","CC","AA","AT","CC","TT","CT","TT" 367 | "366","MALE",153,"TT","TT","CC","CT","CT","AA","TT","CC","TT","CT","TT" 368 | "367","MALE",132,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 369 | "368","MALE",163,"CC","TT","TC","CT","CC","AG","TT","CC","TT","TT","CT" 370 | "369","MALE",124,"CT",NA,NA,"CC","CC","AA","TT","CC",NA,NA,"CT" 371 | "370","MALE",145,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CC","TT" 372 | "371","MALE",129,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CT","CT" 373 | "372","MALE",158,"CT","AT","TC","TT","CC","AG","AT","CC","TT","CT","TT" 374 | "373","MALE",140,"TT","TT","CC",NA,"CC","AA","TT","CC","TT","TT","TT" 375 | "374","MALE",154,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 376 | "375","FEMALE",129,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 377 | "376","FEMALE",112,"CT","TT","TC","CT","CT","AG","AA","CT","CT","CC","TT" 378 | "377","FEMALE",173,"CC","TT","CC","CC","CC",NA,"AA","TT","CC","CC","CC" 379 | "378","FEMALE",169,"TT","TT","CC",NA,"CC",NA,"TT","CC","TT","CT","TT" 380 | "379","MALE",147,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 381 | "380","MALE",145,"CT","TT","TC","CT","CC","AA","AT","CT","CT","CC","TT" 382 | "381","FEMALE",151,"CC","TT","TC","CT","CC","AG","AA","TT","CC","CT","CT" 383 | "382","MALE",121,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 384 | "383","MALE",165,"CT",NA,"TC","TT",NA,NA,NA,"CT","CT",NA,NA 385 | "384","MALE",151,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 386 | "385","FEMALE",149,"CT","AT","TC","TT","CC","AG","TT","CC","TT","TT","TT" 387 | "386","FEMALE",103,"CT","TT","CC","CC","CC",NA,"AT","CC","TT","TT","CT" 388 | "387","MALE",150,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 389 | "388","MALE",181,"CT",NA,"TC","CT","CC","AA","TT","CC","TT","CT","TT" 390 | "389","MALE",142,"CT",NA,"TC","CT","CC","AA","TT","CC",NA,NA,"TT" 391 | "390","FEMALE",109,"TT","AT","CC","CT","CC","AG","AT","CT","CT","CT","TT" 392 | "391","FEMALE",174,"TT","AT","CC","TT","CT","AA","TT","CC","TT","CC","TT" 393 | "392","MALE",131,"CC","TT","TC","CT","CC","AG","TT","CC","TT","CC","CT" 394 | "393","MALE",180,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CC","TT" 395 | "394","FEMALE",150,"CT","TT","TC","CT","CC","GG","AA","CT","CC","CC","CT" 396 | "395","FEMALE",153,"TT","TT","CC",NA,"CC","AG","TT","CC","TT","TT","TT" 397 | "396","FEMALE",122,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CT","TT" 398 | "397","FEMALE",144,NA,"TT","CC","CC","CC","AA","TT","CC",NA,"CT",NA 399 | "398","MALE",119,"CC","TT","TC","CT","CC","AG","AT","CC","TT","TT","CT" 400 | "399","MALE",132,"TT","AT","CC","CT","CT","AG","AA","CT","CT","CT","TT" 401 | "400","FEMALE",158,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CC","TT" 402 | "401","FEMALE",138,"TT","AT","CC",NA,"CT","AG","AA","CT","CT","TT","TT" 403 | "402","MALE",161,"CC","TT","TC","CT","CC",NA,"AA","TT","CC","CC","CT" 404 | "403","MALE",140,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CC","CT" 405 | "404","FEMALE",90,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 406 | "405","FEMALE",127,"TT","TT","CC","CC","CC",NA,"AT","CT","CT","CC","TT" 407 | "406","MALE",175,NA,"TT","TC","CT","CC","AA","AT","CT","CT","CC","TT" 408 | "407","MALE",111,"CT","AT","TC","TT",NA,"GG","AA","CT","CT","CT","TT" 409 | "408","FEMALE",139,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 410 | "409","MALE",168,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 411 | "410","MALE",108,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 412 | "411","MALE",165,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 413 | "412","MALE",146,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 414 | "413","FEMALE",154,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 415 | "414","MALE",134,"CT","TT","CC","CC","CC",NA,"TT","CC","TT","CT","CT" 416 | "415","FEMALE",119,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 417 | "416","MALE",137,"TT","AT","CC","CT","CT","AG","TT","CC","TT","CT","TT" 418 | "417","FEMALE",129,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 419 | "418","MALE",145,"CT","TT","TC","CT",NA,"AA","TT","CC","TT","CT",NA 420 | "419","MALE",114,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CC","CT" 421 | "420","FEMALE",177,"CT","AT","TC","TT",NA,"GG","AA","CT","CT","CT","TT" 422 | "421","FEMALE",120,"CT","AT","TC","TT",NA,"GG","AA","TT","CC","CT","TT" 423 | "422","FEMALE",142,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 424 | "423","MALE",138,"CT","TT","CC","CC",NA,"AA","TT","CC","TT","CT","TT" 425 | "424","FEMALE",87,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 426 | "425","MALE",136,"TT","TT","CC",NA,"CC","AA","TT","CC","TT","TT","TT" 427 | "426","FEMALE",122,"TT","AT","CC","CT","CT","AG","AA","CT","CT","CT","TT" 428 | "427","MALE",152,"CC","TT","TC",NA,"CC","AA","TT","CC","TT",NA,"CT" 429 | "428","MALE",161,"CT","TT","TC","CT",NA,"AG","AT","CT","CT","CC","TT" 430 | "429","MALE",143,"TT","AA","CC","TT","TT","GG","AT","CT","CT","CT","TT" 431 | "430","FEMALE",118,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 432 | "431","FEMALE",132,"TT","AT","CC","CT","CT","AG","AT","CT","TT","CT","TT" 433 | "432","MALE",127,"CT","AT",NA,NA,NA,"AA","TT","CC",NA,"CT","CT" 434 | "433","MALE",127,"CT","AT",NA,"TT",NA,NA,"AT","CT",NA,"CT",NA 435 | "434","FEMALE",119,"CC","AT","TT","TT","CC","GG","AT","CC","TT","CT","TT" 436 | "435","FEMALE",174,"CT","AT","CC","CT","CT",NA,"TT","CC","TT","TT","CT" 437 | "436","FEMALE",125,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 438 | "437","FEMALE",136,"CC","TT","TC","CT","CC","AA","AT","CT","CT","CT",NA 439 | "438","MALE",137,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 440 | "439","FEMALE",132,"CT","AT","CC","CC","CT","AG","AT","CT","CT","CT","CT" 441 | "440","MALE",161,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 442 | "441","FEMALE",174,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 443 | "442","FEMALE",119,"CT","AT","TC","TT",NA,"AG","AT","CT","TT","CC","TT" 444 | "443","MALE",160,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 445 | "444","MALE",150,"TT","AT","CC","CT","CT","AG","TT","CC","TT","CT","TT" 446 | "445","FEMALE",131,"CT","TT","TC",NA,"CC","AG","AT","CT","CT","CC","TT" 447 | "446","FEMALE",140,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 448 | "447","FEMALE",138,"TT","TT","CC","CC","CC",NA,"TT","CC","TT","CT","TT" 449 | "448","FEMALE",120,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT",NA 450 | "449","MALE",157,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 451 | "450","FEMALE",146,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CT","CT" 452 | "451","FEMALE",155,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 453 | "452","MALE",202,"CT","TT",NA,"CC","CC","AA","AA","CT","CT","CC","CT" 454 | "453","MALE",132,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CC","TT" 455 | "454","MALE",140,"CC","TT","CC",NA,"CC","AA","AT","CC","TT","CT","CC" 456 | "455","FEMALE",162,"TT","AA","CC","TT","CT","AG","AT","CT","CT","CC","TT" 457 | "456","MALE",121,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CT","CT" 458 | "457","FEMALE",145,"TT","TT","CC","CC","CC",NA,"TT","CC","TT","TT","TT" 459 | "458","FEMALE",145,"CT","TT","CC","CC","CC","AA","AT","CC","CT","CT","CT" 460 | "459","MALE",116,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 461 | "460","FEMALE",162,"TT","AT","CC","CT","CC","AA","TT","CC","TT","TT","TT" 462 | "461","FEMALE",131,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 463 | "462","FEMALE",122,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 464 | "463","MALE",126,"CT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","CT" 465 | "464","MALE",161,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CT","TT" 466 | "465","MALE",149,"TT","TT",NA,"CC","CC","AA","TT","CC","TT","CT","TT" 467 | "466","MALE",162,"TT","TT","CC","CC","CC","AA","AT","CC","TT","TT","TT" 468 | "467","MALE",146,"TT","TT",NA,"CC","CC",NA,"TT","CC",NA,"CT","TT" 469 | "468","MALE",150,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 470 | "469","MALE",151,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 471 | "470","MALE",150,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 472 | "471","FEMALE",142,"CT","TT","CC","CC","CC","AA","AT","CC","TT","CT","CT" 473 | "472","FEMALE",139,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 474 | "473","MALE",123,"TT","AA","CC","TT","CT","AG",NA,"CC","TT","CT","TT" 475 | "474","MALE",131,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 476 | "475","MALE",101,"TT","TT","CC","CC","CC","AG","TT","CC","TT","CT","TT" 477 | "476","FEMALE",145,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 478 | "477","MALE",140,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 479 | "478","MALE",131,"CT","TT","TC",NA,"CC","AG","AT","CT","CT","CC","TT" 480 | "479","FEMALE",133,"TT","AT","CC","CT","CT","AG","AT","CT","TT","CT","TT" 481 | "480","FEMALE",201,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 482 | "481","MALE",118,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 483 | "482","MALE",131,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 484 | "483","MALE",176,"CT","TT","TC","CT","CC","GG","AA","CT","CT","TT","TT" 485 | "484","FEMALE",131,"TT","AA","CC","TT","CT","AG","TT","CC","TT","CT","TT" 486 | "485","FEMALE",142,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 487 | "486","FEMALE",148,"CC","TT","TC","CT","CC","AG","AT","CC","TT","CT","CT" 488 | "487","FEMALE",128,"CT","TT","TC","CT","CC","AG","AT","CT","TT","CT","TT" 489 | "488","MALE",150,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CC","CT" 490 | "489","FEMALE",124,"TT","AT",NA,NA,NA,"AG","AT","CC","TT",NA,"TT" 491 | "490","MALE",150,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 492 | "491","MALE",139,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 493 | "492","FEMALE",153,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CC","TT" 494 | "493","MALE",125,"CT","AT","CC","CT","CC","AA","TT","CC","TT","TT","CT" 495 | "494","MALE",119,"CT","TT","TC","CT","CC",NA,"AT","CC","TT","CT",NA 496 | "495","MALE",166,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 497 | "496","MALE",140,"CT","TT","CC","CT","CC","AA","TT","CC","TT","TT","CT" 498 | "497","MALE",142,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 499 | "498","MALE",128,"TT","AT","CC","CT",NA,"AG","AT","CT","CT","CC","TT" 500 | "499","FEMALE",159,"TT","AT","CC","CT","CT","AA","AT","CT","CT","CT","TT" 501 | "500","FEMALE",142,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 502 | "501","FEMALE",122,"TT",NA,NA,"CC","CC",NA,"TT","CC",NA,"TT",NA 503 | "502","FEMALE",129,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 504 | "503","MALE",122,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 505 | "504","MALE",138,"CT","TT",NA,"CT","CC","AA","TT","CC","TT","CC","TT" 506 | "505","MALE",126,"TT","AA","TC","TT","CC","GG","AT","CT","TT","CC","TT" 507 | "506","MALE",160,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 508 | "507","FEMALE",121,"TT","TT","CC","CC","CC","AA","AA","CC","TT","CT","TT" 509 | "508","MALE",106,"CT","TT","TC","TT","CC","AA","TT","CC","TT","TT","TT" 510 | "509","MALE",150,"CT","TT","TC","CT","CC","AG","AA","CC","TT","CT","TT" 511 | "510","FEMALE",119,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 512 | "511","MALE",120,"CT","TT","CC","CC","CC","AA","AT","CC","TT","TT","CT" 513 | "512","FEMALE",162,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 514 | "513","MALE",128,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 515 | "514","MALE",140,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 516 | "515","MALE",163,"TT","TT",NA,"CC","CC",NA,"TT","CC","TT","CT","TT" 517 | "516","MALE",149,"CT","AT","TC","TT",NA,"GG","AA","TT","CC","CC","TT" 518 | "517","FEMALE",140,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 519 | "518","MALE",159,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 520 | "519","FEMALE",150,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT",NA 521 | "520","FEMALE",145,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 522 | "521","MALE",121,"CT","AT","CC","CT","CT","AG","AA","CT","TT","CC","CT" 523 | "522","FEMALE",149,"CT","TT","TC","CT","CC","AA","AT","CC","TT","TT","TT" 524 | "523","FEMALE",178,"TT","AA","TC","TT","CC","GG","AA","CT","TT","CC","TT" 525 | "524","MALE",128,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CC","TT" 526 | "525","MALE",149,"TT","AT","CC","CT","CC",NA,"TT","CC","TT","CC","TT" 527 | "526","FEMALE",122,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 528 | "527","FEMALE",162,"TT","AT","CC","CT","CT","AG","TT","CC","TT","CC","TT" 529 | "528","FEMALE",110,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 530 | "529","FEMALE",147,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 531 | "530","MALE",152,"TT","AT","CC","CT","CT",NA,"AA","TT","CC","CT","TT" 532 | "531","MALE",133,"TT","AT","CC","CT","CT","AG","AA","CT","CT","TT","TT" 533 | "532","FEMALE",142,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 534 | "533","FEMALE",144,"CC","AT","TC","TT","CC","GG","AA","CC","TT","CT","TT" 535 | "534","MALE",111,"CC","TT","TT","TT","CC","GG","AT","CC","TT","CT","TT" 536 | "535","MALE",123,"CT","TT","CC","CC","CC","AA","AT","CC","TT","CC","CT" 537 | "536","MALE",121,"CT","TT","CC","CC","CC",NA,"AT","CC","TT","TT","CT" 538 | "537","MALE",121,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 539 | "538","MALE",142,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 540 | "539","MALE",153,"TT","AT","CC","CT","CT","AA","AT","CT","CT","CT","TT" 541 | "540","FEMALE",159,"TT","AT","CC","CT","CT","AG","AT",NA,"TT","CT","TT" 542 | "541","MALE",144,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 543 | "542","FEMALE",152,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 544 | "543","MALE",135,"CC","TT","TC","CT","CC",NA,"AT","CC","TT","CT","CT" 545 | "544","FEMALE",143,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CT","CT" 546 | "545","MALE",122,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 547 | "546","FEMALE",199,"CT","AT","TC","TT",NA,"GG","AA","CT","CT","CC","TT" 548 | "547","MALE",182,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 549 | "548","FEMALE",154,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CT","TT" 550 | "549","FEMALE",150,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 551 | "550","FEMALE",138,"TT","AT","CC","CT","CT","AG","AT","CT","CT","TT","TT" 552 | "551","FEMALE",183,"CC","TT","CC","CC","CC",NA,"TT","CC","TT","CT","CC" 553 | "552","FEMALE",134,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 554 | "553","FEMALE",129,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 555 | "554","FEMALE",139,"CC","TT","TC","CT","CC","AG","AT","CT","CT","CT","CT" 556 | "555","MALE",124,"TT","AT","CC",NA,"CT","AA","AT","CC","TT","CT","TT" 557 | "556","MALE",121,"CT","TT","TC","CT","CC","AA","AT","CT","CT","CT","TT" 558 | "557","FEMALE",136,"CT","AA","TC","TT","CC","AG","AT",NA,"TT","CC","TT" 559 | "558","MALE",124,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 560 | "559","FEMALE",140,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CC","TT" 561 | "560","MALE",120,"TT","AA","CC","TT",NA,"AG","TT","CC","TT","CT","TT" 562 | "561","FEMALE",126,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 563 | "562","FEMALE",146,"CT","AT","TC","TT","CC","AA","AT","CC","TT","CT","TT" 564 | "563","FEMALE",128,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 565 | "564","FEMALE",149,"CC","TT","TC","CT","CC","AG","AT","CC","TT","CT","CT" 566 | "565","MALE",136,"CT","TT","CC","CC","CC","AA",NA,"CC","TT","CT","CT" 567 | "566","FEMALE",135,"CC","TT","TC","CT","CC","AG","AT","CT","CT","TT","CT" 568 | "567","MALE",162,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CT","TT" 569 | "568","MALE",173,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 570 | "569","MALE",129,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CT","TT" 571 | "570","MALE",117,"TT","AT","CC",NA,"CC","AA","TT","CC","TT","CT","TT" 572 | "571","MALE",122,"CT","TT","TC","CT","CC",NA,"TT","CC","TT","TT","TT" 573 | "572","FEMALE",129,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 574 | "573","FEMALE",139,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 575 | "574","MALE",130,"CT","TT","CC","CC","CC","AA","TT",NA,"TT","CT","CT" 576 | "575","MALE",115,"CT","TT","TC","CT","CC",NA,"AT","CC","TT","CT","TT" 577 | "576","MALE",134,"CT","TT","CC","CC","CC","AA","AT","CC","CT","CT","CT" 578 | "577","FEMALE",120,"TT","AT","CC","CT","CC","AG","AT","CT","CT","CT","TT" 579 | "578","MALE",151,"TT","TT","CC",NA,"CC","AA","TT","CC","TT","CC","TT" 580 | "579","FEMALE",128,"TT","AT","CC","CT","CT","AG","AT","CT","TT","CT","TT" 581 | "580","MALE",171,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CT","TT" 582 | "581","FEMALE",159,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 583 | "582","MALE",132,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CC","TT" 584 | "583","MALE",149,"CT","TT","TC",NA,"CC","AA","TT","CC","TT","CT","TT" 585 | "584","FEMALE",149,"TT","TT","CC","CC","CC","AA","AT","CC","TT","CT","TT" 586 | "585","FEMALE",139,"TT","TT","CC","CC","CC","AA",NA,"CC","TT","TT","TT" 587 | "586","MALE",133,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CT","CT" 588 | "587","MALE",159,"TT","AT","CC","CT","CC","AA","TT","CC","TT","TT","TT" 589 | "588","FEMALE",134,"CT","TT","CC","CC","CC","AG","AT","CT","CT","CT","CT" 590 | "589","FEMALE",125,"TT","AT","CC","CT",NA,"AG","AT","CT","CT","CC","TT" 591 | "590","MALE",154,"TT","AT","CC","CT","CT","AG","TT","CC","TT","CT","TT" 592 | "591","FEMALE",155,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 593 | "592","MALE",157,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 594 | "593","MALE",116,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CC","TT" 595 | "594","FEMALE",161,"CC","TT","CC","CC","CC","AA","TT",NA,"TT","CT","CC" 596 | "595","MALE",142,"CC","TT","CC","CC","CC","AA","AT","CT","CT","CT","CC" 597 | "596","MALE",152,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 598 | "597","MALE",151,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CT","CT" 599 | "598","MALE",160,"CT","AT","TC","TT","CC",NA,"AT","CT","CT","CT","TT" 600 | "599","FEMALE",127,"CC","TT","TT","CT","CC","AG","AA","CT","TT","CC","TT" 601 | "600","MALE",147,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 602 | "601","FEMALE",148,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 603 | "602","MALE",116,"CC","TT","TC","CT","CT","AG",NA,"CT","CC","CC","CT" 604 | "603","MALE",145,"CT","AT","CC","CT","CT","AG","AT","CC","TT","CT","CT" 605 | "604","FEMALE",160,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 606 | "605","FEMALE",140,"CT","AT","CC","CT","CT","GG","AA","CT","CT","CC","CT" 607 | "606","MALE",139,"CT","TT","CC","CC","CC","AG","AT","CT","CT","CT","CT" 608 | "607","FEMALE",163,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 609 | "608","FEMALE",131,"TT","TT","CC","CC","CC","AG","AT","CT","CT","CT","TT" 610 | "609","MALE",136,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 611 | "610","MALE",127,"CT","AT","CC","CT","CC","AA","TT","CC","TT","CC","CT" 612 | "611","FEMALE",141,"TT","AA","CC","TT","TT","GG","AA","TT","CC","CC","TT" 613 | "612","MALE",121,"TT",NA,NA,"CC","CC","AA","TT","CC",NA,NA,"TT" 614 | "613","MALE",150,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 615 | "614","MALE",140,"TT","TT","CC","CC","CC","AA","TT","CC","TT",NA,"TT" 616 | "615","FEMALE",175,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 617 | "616","FEMALE",185,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CT","CT" 618 | "617","MALE",167,"CC","TT","TT","TT","CC","GG","AA","TT","TT","CC","TT" 619 | "618","FEMALE",158,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CT",NA 620 | "619","MALE",162,"CC","TT","TT","TT","CC","GG","AA","TT","TT","CC","TT" 621 | "620","MALE",110,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CC","TT" 622 | "621","FEMALE",129,"CC","TT","TC","CT","CC","AA","AT","CT","CT","CC","CT" 623 | "622","FEMALE",153,"TT","AT","CC","CT",NA,"AG","AT","CT","CT","CC","TT" 624 | "623","FEMALE",168,"CT","AT","TC","TT",NA,"AA","AT","CC","TT","CC","TT" 625 | "624","MALE",129,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 626 | "625","MALE",128,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CC","TT" 627 | "626","MALE",150,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 628 | "627","MALE",138,"TT","AT","CC","CT","CT","AA","AT","CC","TT","CC","TT" 629 | "628","FEMALE",145,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 630 | "629","FEMALE",121,"TT","AA","CC","TT","TT","GG","AT","CT","TT","CT","TT" 631 | "630","FEMALE",141,"CC","TT","TT","TT","CC",NA,"AA","CC","TT","CT","TT" 632 | "631","MALE",160,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 633 | "632","FEMALE",160,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 634 | "633","FEMALE",157,"CC","TT","TC","CT","CC","AG","AT","CT","CT","CT","CT" 635 | "634","FEMALE",139,"CT","TT","TC","CT","CC","AA",NA,"CC","TT",NA,"TT" 636 | "635","MALE",141,"CT","TT","CC",NA,"CC","AG","AT","CC","TT","TT","CT" 637 | "636","MALE",167,"CT","TT","TC","CT","CC","AG","TT","CC","TT","TT","TT" 638 | "637","MALE",128,"TT","AT","CC","CT","CC","AA","TT","CC","TT",NA,"TT" 639 | "638","FEMALE",140,"CT","AT","CC","CT","CC","AA","TT","CC","TT","TT","CT" 640 | "639","MALE",138,"TT","TT","CC","CC","CC","AA","AT","CC","TT","TT","TT" 641 | "640","MALE",147,"TT","AT","CC","CT","CT","AG","TT","CC","TT","CT","TT" 642 | "641","MALE",158,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 643 | "642","FEMALE",113,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 644 | "643","FEMALE",167,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 645 | "644","MALE",110,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 646 | "645","MALE",153,"CT","AT","TC","TT",NA,"GG","AA","TT","CC",NA,"TT" 647 | "646","FEMALE",120,"CT","AT","TC","TT","CC","AG","AT","CC","TT","CC","TT" 648 | "647","FEMALE",139,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 649 | "648","FEMALE",150,"CT","AT","TC","TT",NA,"GG","AT","CC","TT","CC","TT" 650 | "649","FEMALE",143,"CC","TT","TC","CT","CC","AG","TT","CC","TT","CT","CT" 651 | "650","MALE",145,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 652 | "651","MALE",119,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 653 | "652","MALE",118,"TT","TT",NA,"CC","CC","AA","TT","CC",NA,"CT","TT" 654 | "653","FEMALE",162,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 655 | "654","MALE",156,"TT","TT","CC",NA,"CC","AA","TT","CC","TT","TT","TT" 656 | "655","MALE",133,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CT","TT" 657 | "656","FEMALE",120,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 658 | "657","MALE",153,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 659 | "658","FEMALE",141,"TT","TT","CC","CC","CC","AG","AA","TT","CC","CC","TT" 660 | "659","FEMALE",146,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CC","CT" 661 | "660","MALE",158,"CT","TT","TC","CT","CC","AG","TT","CC","TT","TT","TT" 662 | "661","MALE",126,"CT","AT","TC","TT",NA,"AG","TT","CC","TT","CT","TT" 663 | "662","FEMALE",144,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 664 | "663","MALE",169,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 665 | "664","FEMALE",179,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 666 | "665","FEMALE",150,"CC","AT","TT","TT","CC","GG","AA","TT","TT","CC","TT" 667 | "666","MALE",160,"CC","TT","TC","CT","CC","AG","TT","CC","TT",NA,"CT" 668 | "667","FEMALE",167,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 669 | "668","MALE",132,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 670 | "669","MALE",138,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 671 | "670","FEMALE",130,"CT","AT","TC","TT","CT","AG","TT","CC","TT","CC","TT" 672 | "671","MALE",141,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 673 | "672","MALE",112,"TT","TT","CC","CT","CC","AA","TT","CC","TT","CC","TT" 674 | "673","MALE",122,"TT","AT","CC","CT",NA,NA,"AT","CT","CT","CC","TT" 675 | "674","MALE",141,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CC","TT" 676 | "675","FEMALE",136,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CT","TT" 677 | "676","MALE",173,"TT","TT","CC",NA,"CC","AA","AT","CC","TT","CT","TT" 678 | "677","FEMALE",151,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 679 | "678","MALE",132,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 680 | "679","FEMALE",116,"CT","AT","CC","CT","CT","AG","AA","CT","CT","CC","CT" 681 | "680","FEMALE",143,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 682 | "681","FEMALE",151,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 683 | "682","FEMALE",139,"TT","TT","CC","CC","CC","AA","AT","CC","TT","CT","TT" 684 | "683","MALE",141,"CT","AT","TC",NA,"CC","AA","TT","CC","TT","CT","TT" 685 | "684","MALE",128,"TT","AT","CC","CT","CC","AG","AT","CC","TT","CC","TT" 686 | "685","FEMALE",135,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 687 | "686","MALE",128,"CT","AT","TC","TT",NA,"GG","AA","CT","CT","CT","TT" 688 | "687","MALE",125,"TT","AA","CC","TT","CT","AG","AT","CT","CT","CC","TT" 689 | "688","MALE",128,"TT","AA","CC","TT","TT","GG","AA","TT","CC","TT","TT" 690 | "689","MALE",114,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 691 | "690","FEMALE",130,"CC","TT","TT","TT",NA,"GG","AA","TT","CC","CC","TT" 692 | "691","MALE",155,"CC","TT","TC","CT","CC","AG","AT","CC","TT","CC","CT" 693 | "692","FEMALE",137,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 694 | "693","MALE",134,"CT","TT","CC",NA,"CC","AG","AT","CC","CT","CT","CC" 695 | "694","MALE",149,"CT","TT","CC","CC","CC",NA,"AT","CC","TT","TT","CT" 696 | "695","MALE",124,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 697 | "696","FEMALE",160,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 698 | "697","MALE",116,"TT","TT","CC",NA,"CC",NA,"AT","CC","TT","CT","TT" 699 | "698","FEMALE",139,"TT","AT","CC","CT",NA,"GG","AA","TT","CC","CT","TT" 700 | "699","MALE",136,"CC","TT","TC","CT","CC","AG","AT","CC","TT","CC","CT" 701 | "700","FEMALE",157,"CC","TT",NA,"TT","CC","AG","AT","CC","TT","TT","TT" 702 | "701","FEMALE",165,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 703 | "702","FEMALE",130,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 704 | "703","MALE",119,"TT","AT","CC","CT","CT",NA,"AT","CT","CT","CC",NA 705 | "704","MALE",114,"CT","TT",NA,NA,"CT","AG","AT","CT","CT","CC","TT" 706 | "705","FEMALE",171,"TT","AA","CC","TT","TT","GG","AT","CT","CT","CC","TT" 707 | "706","FEMALE",159,"CT","TT","TC","CT","CC","AA","AT","CC","TT","TT","TT" 708 | "707","MALE",148,"CC","TT","TT","TT","CC","AG","AT","CC","TT","CC","TT" 709 | "708","FEMALE",152,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 710 | "709","MALE",128,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 711 | "710","MALE",146,"CC","TT","TC","CT","CC","AG","TT","CC","TT","CT","CT" 712 | "711","MALE",130,"CT","AT","CC","CT","CT","GG","AT","CC","TT","TT","CT" 713 | "712","FEMALE",166,"CT","TT","TC","TT","CC","AA","TT","CC","TT","CT","TT" 714 | "713","FEMALE",129,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 715 | "714","FEMALE",122,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 716 | "715","MALE",159,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 717 | "716","MALE",110,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 718 | "717","MALE",157,"TT","TT",NA,NA,"CC",NA,"AT","CC",NA,"CT","TT" 719 | "718","FEMALE",170,"CC","TT","TT","TT","CC","GG","AT","CC","TT","CT","TT" 720 | "719","MALE",148,"TT",NA,NA,"CT","CT","AA","AT","CT","CT","CC","TT" 721 | "720","MALE",137,"TT","AT","CC","CT",NA,NA,"AT","CC","TT","TT","TT" 722 | "721","MALE",164,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 723 | "722","FEMALE",132,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 724 | "723","MALE",121,"CT","TT","TC",NA,"CC","GG","AT","CC","TT","CT","TT" 725 | "724","FEMALE",131,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CC","TT" 726 | "725","FEMALE",128,"TT","TT","CC","CC","CC",NA,"AT","CT","TT","CT","TT" 727 | "726","MALE",155,"TT","AA","CC","TT","CT","AA","TT","CC","TT","CT","TT" 728 | "727","MALE",152,"CC","TT","TT","TT","CC","GG","TT","CC","TT","CC","TT" 729 | "728","MALE",132,"TT","AT","CC","CT","CT","AA","AT","CT","CT","CC","TT" 730 | "729","MALE",101,"CT","TT","TC","CT",NA,"AA","AT","CT","CT","CT","TT" 731 | "730","MALE",162,"CT","AT","TC","TT",NA,"GG","AA","CT","TT","CT","TT" 732 | "731","FEMALE",132,"CC","TT","TT","TT","CC","AG","AT","CT","TT","CC","TT" 733 | "732","MALE",159,"CC","TT","TC","CC","CC","AA","TT","CC","TT","CT","CT" 734 | "733","MALE",169,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 735 | "734","FEMALE",138,"CT","AT","CC","CT","CT","GG","AA","CT","CT","CC","CT" 736 | "735","FEMALE",143,"TT","AT","CC","CT","CT","AG","AT","CC","TT","CT","TT" 737 | "736","FEMALE",112,"CT","AT","CC","CT","CT","AA","AA","TT","CC","CC","CT" 738 | "737","MALE",131,"CT","AT","CC","CT","CT","AG","AA","TT","CC","CC","CT" 739 | "738","FEMALE",141,"CT","AT","TC","TT","CC","GG","AA","TT","TT","CC","TT" 740 | "739","FEMALE",170,"TT","TT","CC","CC","CT",NA,"AT","CT","CT","CC","TT" 741 | "740","FEMALE",121,"CC","TT","TT","TT","CC","AA","TT","CC","TT","CT","TT" 742 | "741","MALE",140,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 743 | "742","MALE",140,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 744 | "743","MALE",120,"CT","AT","CC",NA,"CT","AG","AA","CT","CT","CT","CT" 745 | "744","FEMALE",159,"CT",NA,"TC","CT","CC","AG","TT","CC",NA,"CC","TT" 746 | "745","MALE",97,"CT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","CT" 747 | "746","FEMALE",135,"TT","TT","CC","CC","CC","AA","AA","TT","CC","CT","TT" 748 | "747","FEMALE",146,"CT","AT","TC","TT","CC","GG","AT","CT","TT","CT","TT" 749 | "748","MALE",147,"CT","TT","CC","CC","CC","AG","AT","CT","CT","CT","CT" 750 | "749","MALE",127,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 751 | "750","MALE",125,"TT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","TT" 752 | "751","MALE",130,NA,"TT","CC","CC","CC",NA,"AT","CC","TT","TT","TT" 753 | "752","MALE",126,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 754 | "753","MALE",134,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 755 | "754","FEMALE",136,"CT","AT","TC","TT",NA,"GG","AT","CT","TT","CT","TT" 756 | "755","FEMALE",172,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 757 | "756","FEMALE",129,"TT","AT","CC",NA,"CT","AA","AT","CT","CT","CC","TT" 758 | "757","FEMALE",167,"CT","AT","CC","CT","CC","AA","TT","CC","TT","CC","CT" 759 | "758","MALE",110,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 760 | "759","FEMALE",151,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 761 | "760","FEMALE",184,"TT","AT","CC",NA,"CT","AG","AA","CT","TT","TT","TT" 762 | "761","MALE",131,"TT","TT","CC","CC",NA,"AA","AT","CC","TT","CT","TT" 763 | "762","MALE",143,"CT","AT","TC","TT",NA,"GG","AA","CT","CT","TT","TT" 764 | "763","MALE",132,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 765 | "764","MALE",147,"CC","TT",NA,"CT","CC","AG","TT","CC",NA,"TT","CT" 766 | "765","FEMALE",123,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 767 | "766","MALE",171,NA,NA,NA,NA,"CC","AA","TT","CC",NA,NA,NA 768 | "767","FEMALE",139,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 769 | "768","MALE",151,"CC","AT","TC","TT","CC","AA","AT","CT","CT","CC","TT" 770 | "769","MALE",142,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 771 | "770","FEMALE",143,"CT","TT","CC","CC","CC","AA","AT","CC","CT","CT",NA 772 | "771","MALE",112,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 773 | "772","FEMALE",130,"CC","AT","TT","TT","CC","GG","AA","TT","CT","CC","TT" 774 | "773","FEMALE",152,"CT","TT","CC","CC","CC","AA","AT","CC","CT","CC","CT" 775 | "774","MALE",114,"TT","TT","CC","CC",NA,"AA","TT","CC","TT","CC","TT" 776 | "775","FEMALE",131,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 777 | "776","FEMALE",147,"TT","TT","CC","CC","CC","AA","AT","CC","TT","TT","TT" 778 | "777","FEMALE",148,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 779 | "778","MALE",133,"CT","AT","CC","CT","CC","AA","TT","CC","TT","CT","CT" 780 | "779","MALE",131,"CT",NA,NA,"CC","CC","AA","TT","CC",NA,"CT","CT" 781 | "780","FEMALE",141,"CT","TT",NA,"CC","CC","AA","TT","CC","TT","CC","CT" 782 | "781","MALE",132,"CT","AT","TC","CT","CC","AA","TT",NA,"TT","CC","TT" 783 | "782","MALE",170,"TT","AA","CC","TT","TT","GG","AT","CT","TT","CT","TT" 784 | "783","FEMALE",187,"CC","TT","TT","TT","CC","AA","AT","CC","TT","CT","TT" 785 | "784","FEMALE",106,"CC","TT","CC","CT","CC","AG","AT","CT","CT","CC","CT" 786 | "785","MALE",98,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 787 | "786","FEMALE",112,"CT","AT","CC","CT","CT","AG","TT","CC","TT","TT","CT" 788 | "787","FEMALE",143,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 789 | "788","FEMALE",141,"CT",NA,"TC","TT",NA,"AG","AT","CT","CT","CC","TT" 790 | "789","MALE",148,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 791 | "790","MALE",126,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 792 | "791","MALE",136,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 793 | "792","FEMALE",158,"TT","AT","CC","CT",NA,"AG","TT","CC","TT","CT","TT" 794 | "793","FEMALE",152,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 795 | "794","MALE",146,"TT","TT","CC","CT","CT","AA","TT","CC","TT","CT","TT" 796 | "795","FEMALE",132,"TT","AA","CC","TT","TT","GG","AT","CT","TT","CT","TT" 797 | "796","MALE",132,"CT","TT","CC",NA,"CC","AA","TT","CC","TT","CT","CT" 798 | "797","MALE",176,"TT","TT","CC","CC","CC","AA","AT","CC","TT","CT","TT" 799 | "798","FEMALE",140,"TT","TT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 800 | "799","MALE",143,"TT","AT","CC","CT","CC","AA","TT","CC","TT","TT","TT" 801 | "800","MALE",141,"CT","TT","CC","CC","CC","AA","AT","CC","TT","CT","CT" 802 | "801","MALE",147,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 803 | "802","FEMALE",140,"CT","AT","CC","CT","CC","AG","AA","CT","CT","CC","CT" 804 | "803","FEMALE",117,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 805 | "804","MALE",130,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 806 | "805","MALE",120,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 807 | "806","MALE",146,"CT","TT","TC","TT","CC","AA","TT","CC","TT","TT","TT" 808 | "807","MALE",148,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 809 | "808","MALE",148,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 810 | "809","FEMALE",125,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 811 | "810","MALE",120,"TT","AA","CC","TT",NA,"AG","AT","CC","TT","CT","TT" 812 | "811","MALE",150,"CC","TT","TC","CT","CC","AG","AT","CC","CT","CC","CT" 813 | "812","FEMALE",140,"TT","TT","CC","CC","CC","AA","AT","CC","TT","TT","TT" 814 | "813","FEMALE",141,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 815 | "814","MALE",167,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CC","TT" 816 | "815","MALE",180,"TT","TT",NA,"CC","CC","AA","TT","CC","TT","CT","TT" 817 | "816","MALE",140,"TT","AT","CC","CT","CC","AG","AT","CT","CT","CC","TT" 818 | "817","MALE",121,"CT","AT","TC","CC",NA,"GG","AT","CT","TT","CT","TT" 819 | "818","MALE",92,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 820 | "819","FEMALE",169,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 821 | "820","MALE",140,"TT","AT","CC","CT","CT","AG","AT","CT","CT","TT","TT" 822 | "821","MALE",125,"CC","TT","TC","CT","CC","AA","TT","CC","TT","TT","CT" 823 | "822","FEMALE",155,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 824 | "823","MALE",136,"CT","TT","TC","CT","CC","AA","AT","CC","TT","TT","TT" 825 | "824","FEMALE",159,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 826 | "825","FEMALE",155,"CT","TT","CC","CC","CC",NA,"TT","CC","TT","TT","CT" 827 | "826","MALE",122,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 828 | "827","MALE",191,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 829 | "828","FEMALE",158,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 830 | "829","FEMALE",132,"TT","TT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 831 | "830","MALE",165,"CT","TT","CC","CC","CC",NA,"TT","CC",NA,"CT","CT" 832 | "831","FEMALE",162,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 833 | "832","MALE",129,"CT","TT","TC","TT","CC",NA,"AT","CC","TT","CT","TT" 834 | "833","MALE",132,"TT","AT","CC","CT","CC","AA","TT","CC","TT",NA,"TT" 835 | "834","FEMALE",141,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 836 | "835","MALE",131,"CC","TT","TT","TT","CC","AG","TT","CC","TT","TT","TT" 837 | "836","MALE",123,"TT","AT","CC","CT","CT","AG","AA","CT","TT","TT","TT" 838 | "837","FEMALE",164,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 839 | "838","MALE",153,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 840 | "839","FEMALE",145,"CC","TT","TC","CT","CC","AA","AT","CC","TT","CC","CT" 841 | "840","MALE",122,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 842 | "841","MALE",139,"TT",NA,"CC","CC",NA,"AA","TT","CC","TT","CT","TT" 843 | "842","FEMALE",126,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 844 | "843","MALE",147,"TT","TT","CC","CC","CC","AA","TT",NA,"TT","TT","TT" 845 | "844","FEMALE",113,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 846 | "845","MALE",125,"TT","TT","CC",NA,"CC","AA","TT","CC","TT","CT",NA 847 | "846","FEMALE",156,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 848 | "847","MALE",131,"CT","TT",NA,"CT","CC","AA","TT","CC","TT","CT","TT" 849 | "848","MALE",108,"TT","AT",NA,"CT",NA,NA,"TT","CC",NA,"CT",NA 850 | "849","FEMALE",188,"CT","AT","TC","TT",NA,"GG","AT","CT","CT","CC","TT" 851 | "850","MALE",120,"CT","AT","CC",NA,"CT","AG","AT","CT","TT","CT","CT" 852 | "851","MALE",146,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CC","CT" 853 | "852","FEMALE",159,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CC","TT" 854 | "853","MALE",159,"CC","TT","TT","TT","CC","AG","TT","CC","TT","CT","TT" 855 | "854","MALE",159,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 856 | "855","FEMALE",179,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 857 | "856","FEMALE",159,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CT","TT" 858 | "857","FEMALE",113,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 859 | "858","MALE",142,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CC","TT" 860 | "859","FEMALE",147,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 861 | "860","MALE",125,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 862 | "861","FEMALE",151,"CT","AT","CC","CT","CT","AG","AT","CT",NA,"CT","CT" 863 | "862","FEMALE",169,"TT","TT","CC","CT","CC","AA","TT","CC","TT","TT","TT" 864 | "863","MALE",108,"CT","AT","TC","TT","CC","AA","TT","CC",NA,"TT","TT" 865 | "864","FEMALE",129,NA,"TT","TC","CT","CC","AG","AT","CT","CT","CC","CT" 866 | "865","MALE",131,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 867 | "866","FEMALE",139,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 868 | "867","FEMALE",149,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 869 | "868","MALE",138,"CT","AT","TC","TT",NA,"AG","AT","CT","TT","CC","TT" 870 | "869","FEMALE",138,"CT","TT","CC","CC","CC","AA","AT","CC","CT","CT","CT" 871 | "870","FEMALE",140,"CC","TT","TC","CT","CC","AA","TT","CC","TT","TT","CT" 872 | "871","FEMALE",122,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 873 | "872","FEMALE",180,"CT","TT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 874 | "873","MALE",149,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 875 | "874","MALE",134,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 876 | "875","FEMALE",161,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 877 | "876","MALE",122,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CC","CT" 878 | "877","MALE",171,"TT","AT","CC","CT","CT","AG","AA","CT","CT","CT","TT" 879 | "878","FEMALE",130,"CT","AT","TC","TT",NA,"AG","AT","CT","TT","CT","TT" 880 | "879","FEMALE",160,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 881 | "880","MALE",140,"CT","AT","CC","CT","CT","AG","AT","CT","TT","TT","CT" 882 | "881","FEMALE",125,"CC","TT","TC","CT","CC","AG","AT","CT","TT","CT","CT" 883 | "882","FEMALE",162,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 884 | "883","FEMALE",103,"CC","TT","CC","CC","CC","AA","TT","CC","TT","TT","CC" 885 | "884","MALE",141,"CC","TT","TT","TT","CC","AG","AT","CC","TT","CT","TT" 886 | "885","FEMALE",125,"CC","TT","TC","CT","CC","AG","AT","CT","CT","CT","CT" 887 | "886","MALE",151,"TT","AT","CC","CT",NA,"GG","AT","CC","TT","TT","TT" 888 | "887","MALE",121,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 889 | "888","FEMALE",125,"TT","TT","CC","CT","CC","AA","TT","CC","TT","CC","TT" 890 | "889","MALE",132,"TT","AT","CC",NA,"CC","AG","AT","CT","CT","CC","TT" 891 | "890","MALE",136,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CC","TT" 892 | "891","FEMALE",173,"CC","TT","TC","CT","CC","AG","AT","CC","TT","CT","CT" 893 | "892","FEMALE",188,"TT","AT","CC","CT","CT","AG","TT","CC","TT","CT","TT" 894 | "893","FEMALE",140,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 895 | "894","FEMALE",134,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 896 | "895","FEMALE",177,"CT","TT","TC","CT","CC","AA","AT","CC","TT",NA,"TT" 897 | "896","FEMALE",198,"TT","TT","CC","CC","CC","AA","TT","CC","TT","TT","TT" 898 | "897","MALE",141,"CT","TT","CC","CC","CC","AG","AT","CT","CT","CT","CT" 899 | "898","FEMALE",144,"TT","TT",NA,"CC","CC","AA","TT","CC","TT","CC","TT" 900 | "899","FEMALE",196,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 901 | "900","FEMALE",146,"CT","TT","TC","CT","CC","AG","AT","CC","TT","TT","TT" 902 | "901","MALE",138,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 903 | "902","FEMALE",151,"TT","TT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 904 | "903","FEMALE",146,"TT","AT","CC","CT","CT","AG","AA","TT","CC","CT","TT" 905 | "904","MALE",147,"CC","TT","TC","CT","CC","AG","AT","CC","TT","TT","CT" 906 | "905","FEMALE",141,"TT","AT","CC","CT",NA,"AG","TT","CC","TT","CT","TT" 907 | "906","MALE",109,"TT","TT","CC","CC","CC","AA","AT","CC","TT","CT","TT" 908 | "907","MALE",141,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 909 | "908","MALE",113,"CT","TT","TC","CT","CC","AA","AT","CC","TT","CT","TT" 910 | "909","MALE",154,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 911 | "910","FEMALE",106,"CC","TT","CC","CC","CC","AA","TT","CC","TT",NA,"CC" 912 | "911","MALE",121,"CC","TT","TC",NA,"CC","AG","TT","CC","TT","TT","CT" 913 | "912","MALE",111,"TT","TT","CC","CC","CC",NA,"TT","CC","TT","CT","TT" 914 | "913","MALE",137,"CT","TT","TC","CT","CC","AA","TT","CC","TT","TT","TT" 915 | "914","FEMALE",148,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 916 | "915","FEMALE",129,"CT","TT",NA,"CT","CC","AG","AT","CT","CT","CC","TT" 917 | "916","MALE",130,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 918 | "917","FEMALE",151,"CT","TT","CC","CC","CC","AA","TT","CC","TT","TT","CT" 919 | "918","FEMALE",152,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 920 | "919","MALE",174,"TT","TT","CC","CC","CC","AA","TT","CC",NA,"TT","TT" 921 | "920","FEMALE",146,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 922 | "921","MALE",118,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 923 | "922","FEMALE",151,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 924 | "923","MALE",108,"CT","AT","CC","CT","CC","AA","TT","CC","TT","CC","CT" 925 | "924","MALE",137,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 926 | "925","MALE",138,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 927 | "926","FEMALE",172,"CT","AT","TC","TT","CC","AG","TT","CC","TT","CC","TT" 928 | "927","MALE",157,"TT",NA,"CC","CT","CT",NA,"AA","CT","CT","CT","TT" 929 | "928","MALE",133,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 930 | "929","MALE",138,"CT","TT","TC",NA,"CC","AA","TT","CC","TT","CT","TT" 931 | "930","MALE",159,"TT","TT","CC","CC","CC",NA,"AT","CC",NA,"CT","TT" 932 | "931","FEMALE",140,"CT","TT","TC","CT","CC","AG","AT","CT","CT","CC","TT" 933 | "932","MALE",141,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 934 | "933","MALE",139,"TT","TT","CC","CC","CC",NA,"TT","CC","TT","CC","TT" 935 | "934","FEMALE",163,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CT","CT" 936 | "935","FEMALE",159,"CT","AT","TC","TT",NA,"AG","TT","CC","TT","CT","TT" 937 | "936","MALE",147,"TT","AT","CC","CT","CC","AG","AT","CT","CT","CT","TT" 938 | "937","FEMALE",139,"CC","TT","TC","CT","CC","AA","AT","CC","CT","CC","CT" 939 | "938","MALE",131,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 940 | "939","FEMALE",146,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 941 | "940","FEMALE",148,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 942 | "941","FEMALE",145,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CT","CT" 943 | "942","MALE",145,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CC","TT" 944 | "943","MALE",120,"CT","TT",NA,"CC","CC","AA","TT","CC","TT","TT","CT" 945 | "944","MALE",127,"TT","TT","CC",NA,"CC",NA,NA,"CC","TT","CT","TT" 946 | "945","FEMALE",144,"TT","AT","CC","CT","CT","AG","AA","CT","TT","CT","TT" 947 | "946","MALE",135,"CC","TT","TT","TT",NA,"AA","TT","CC","TT","CC","TT" 948 | "947","FEMALE",144,NA,NA,NA,"CT",NA,NA,NA,NA,NA,"CC",NA 949 | "948","FEMALE",157,"TT","AT","CC","CT","CT","AG","AT","CT","CT","TT","TT" 950 | "949","MALE",111,"TT","TT","CC","CC",NA,"AA","TT","CC","TT","CT","TT" 951 | "950","MALE",129,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 952 | "951","MALE",138,"TT","AT","CC","CT","CT",NA,"TT","CC","TT","CT","TT" 953 | "952","MALE",158,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 954 | "953","MALE",134,NA,"TT","TC",NA,"CC",NA,"TT","CC","TT","CT",NA 955 | "954","FEMALE",170,"CT","AT","CC","CT","CT","AG","AT","CT","CT","CT","CT" 956 | "955","MALE",170,"TT","AT","CC","CT","CT","AG","AA","CT","CT","CT","TT" 957 | "956","MALE",150,"CT","AT","TC","TT","CC","AG","AT","CT","CT","CT","TT" 958 | "957","FEMALE",130,"CT","TT","CC","CC","CC","AG","TT","CC","TT","TT","CT" 959 | "958","MALE",144,"CT","TT",NA,"CC","CC",NA,"TT","CC",NA,"CT","CT" 960 | "959","FEMALE",141,"TT","AA","CC","TT","CT","AG","TT","CC","TT","CT","TT" 961 | "960","MALE",174,"CC","TT","TC",NA,"CC","AG","TT","CC","TT","CT","CT" 962 | "961","FEMALE",165,"CT","TT","TC","CT","CC","AG","AT","CC","TT","CT","TT" 963 | "962","FEMALE",173,"TT","TT","CC","CC","CC","AA","AT","CT","CT","CT","TT" 964 | "963","MALE",129,"CT","AT","CC","CT","CT","GG","AT","CC","TT","TT","CT" 965 | "964","MALE",161,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 966 | "965","FEMALE",158,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CT","TT" 967 | "966","FEMALE",143,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CC","CT" 968 | "967","MALE",125,"TT","TT","CC","CC","CC","AG","AT","CC","CT","CC","CT" 969 | "968","MALE",142,"CT","TT","CC",NA,"CC","AA","TT","CC","TT","TT","CT" 970 | "969","MALE",136,"CT","AT","CC","CT","CT","AG","AT","CT",NA,"CT","CT" 971 | "970","FEMALE",139,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 972 | "971","FEMALE",162,"CC","TT","TC","CT","CC","AG","TT","CC","TT",NA,"CT" 973 | "972","FEMALE",168,"TT","AT","CC","CT","CC","AA","TT","CC","TT","CT","TT" 974 | "973","MALE",151,"CC","TT","TC","CT","CC","AA","TT","CC","TT","CC","CT" 975 | "974","FEMALE",128,"CT","TT","CC","CC","CC","AA","AT","CT","CT","CC","CT" 976 | "975","MALE",118,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 977 | "976","FEMALE",168,"CT","AT","CC","CT","CT","AG","AA","CT","CT","CC","CT" 978 | "977","FEMALE",149,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 979 | "978","MALE",170,"CC","TT","TT","TT","CC","GG","AA","CT","TT","CC","TT" 980 | "979","MALE",135,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 981 | "980","MALE",126,"TT","AA","CC","TT","TT","GG","AA","TT","CC","CC","TT" 982 | "981","MALE",111,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CT","TT" 983 | "982","MALE",109,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 984 | "983","FEMALE",128,"CT","TT","TC","CT","CC","AA","TT","CC","TT","CT","TT" 985 | "984","FEMALE",147,"CT","TT","TC","CT","CC","AG","TT","CC","TT","CT","TT" 986 | "985","MALE",92,"CT","TT","CC","CC","CC","AA","TT","CC","TT","CT","CT" 987 | "986","MALE",128,"TT","AA","CC","TT","TT","AG","AA","TT","CC","CC","TT" 988 | "987","FEMALE",129,"CT","AT","CC","CT","CC","AA","TT","CC","TT","CT","CT" 989 | "988","FEMALE",201,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CT","TT" 990 | "989","FEMALE",118,"CT","TT","CC","CC","CC","AG","AT","CC","TT","TT","CT" 991 | "990","MALE",151,"TT","TT",NA,"CC","CC","AA","TT","CC","TT","CC","TT" 992 | "991","FEMALE",101,"TT","AT","CC","CT","CT","AG","TT","CC","TT","TT","TT" 993 | "992","FEMALE",149,"CT","AT","TC","TT","CT","AA","TT","CC","TT","CT","TT" 994 | "993","MALE",123,"CT","TT","TC","CT","CC",NA,"AT","CC","TT","TT","TT" 995 | "994","FEMALE",148,"CT","AT","TC","TT",NA,"AG","AT","CT","CT","CC","TT" 996 | "995","MALE",141,"CT","AT","TC","TT",NA,"AG","AT","CT","TT","CC","TT" 997 | "996","MALE",138,"TT","TT","CC","CC","CC","AG","AT","CT","CT","TT","TT" 998 | "997","FEMALE",160,"TT","AT","CC","CT","CT","AG","AT","CT","CT","CC","TT" 999 | "998","MALE",149,"CT","TT","CC","CC","CC","AA","AT","CC","TT","CT","CT" 1000 | "999","FEMALE",130,"CT","AT","CC","CT","CC","AG","AT","CT","CT","CT","CT" 1001 | "1000","FEMALE",139,"TT","TT","CC","CC","CC","AA","TT","CC","TT","CC","TT" 1002 | --------------------------------------------------------------------------------