├── 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 | 
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 | 
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 |
--------------------------------------------------------------------------------