Kristiina kirjoitti:Minulla on tiedossa 12 Sintashta outlieria, eikä yksikään niistä kanna N-haploa.
Olisi pakko löytää jostain kulttuuri/kulttuureja, jossa on N-L1026-linjoja aikavälllä 2500-1500 eaa. Tällä hetkellä vanhin L1026 on kai Bolshoy Kuolassa.
Minulla ei ole tällä hetkellä kovin paljon toiveita aron suhteen.
Johannes kirjoitti:Tuosta OLS10:stä ja siitä, ettei se klusteroidu minkään tunnetun muinais- tai nykyväestön kanssa. Tällaisen yksittäisen näytteen tapauksessa on aina myös se mahdollisuus, ettei se edustakaan selkeästi vain yhtä aikansa heimoa, väestöä tms., vaan vanhemmat ovat jostain syystä voineet tulla kahdesta eri ryhmästä.
OLS10:stä tiedetään isotooppianalyysin perusteella toistaiseksi, ettei hän ollut syntyisin mistään hautauspaikkansa Kundan lähettyviltä Länsi-Virumaalta eikä myöskään Ruotsista tai Lounais-Suomesta. Fenotyyppianalyysin mukaan hänellä todennäköisesti oli siniset silmät, tumman tai vaalean ruskeat hiukset ja keskimääräinen ihon sävy (eli ei tumma eikä kovin vaalea). Jos ja kun OLS10:n syntymä- ja varttumispaikka selviää, on toivottavasti mahdollisuus saada vertailuaineistoa sen selvittämiseksi, löytyykö sieltä mahdollisista muinaisnäytteistä selvästi OLS10:n kanssa geneettisesti samankaltaista väestöä vai ei.
Kristiina kirjoitti:Olisi pakko löytää jostain kulttuuri/kulttuureja, jossa on N-L1026-linjoja aikavälllä 2500-1500 eaa.
Kristiina kirjoitti:Eli jos Rostovkasta ja Turbinosta löytyy R1a1-z93-haploa, R1a1 on kantauralilainen haplotyyppi?
On kuitenkin totta että N (mm. vanha N1a) näyttää olevan Kiinassa metallurgihaplotyyppi, mutta nuo Kauko-Idän N-haplot eivät ole tietääkseni uralilaista tyyppiä.
Jaska kirjoitti:Tässä myös hahmottuu pohjoinen ja eteläinen kaista: saamelaisille lähimpiä "keskiuralilaisista" väestöistä ovat komit, suomalaisille mordvalaiset.
Jaska kirjoitti:Liitetaulukko S14 (Excel-tiedosto) on erittäin mielenkiintoinen, koska siihen on koottu monia erilaisia geneettisen etäisyyden mittareita.
1. FST
Vihdoinkin! Olen jo kymmenen vuotta odotellut saamelaisten ja itämerensuomalaisten välistä FST-vertailua. Tässä huomiota kiinnittää saamelaisten suuri FST-etäisyys kaikkiin muihin, alkaen jo ruotsin- ja kuolansaamelaisten keskinäisestä etäisyydestä 0,026 = 260. (Esim. suomalaisten ja unkarilaisten välilläkin FST on vain 50.)
Kuolansaamelaiset:
160 suomalaiset ja komit
170 karjalaiset
180 mordvalaiset
190 vepsäläiset ja virolaiset
220 unkarilaiset
240 marit
260 udmurtit ja ruotsinsaamelaiset
430 mansit
460 hantit
470 selkupit
550 nenetsit
830 nganasanit
Ruotsinsaamelaiset:
260 kuolansaamelaiset
290 komit
310 suomalaiset
320 karjalaiset
330 vepsäläiset
340 mordvalaiset ja marit
350 virolaiset
380 unkarilaiset
360 udmurtit
480 mansit
510 hantit ja selkupit
580 nenetsit
830 nganasanit
Ruotsinsaamelaiset ovat siis kauempana muista ja ajautuneempia kuin kuolansaamelaiset. Kuva on kuitenkin johdonmukainen siinä, että komit ovat kummallekin lähin ei-saamelainen väestö, sitten itämerensuomalaiset.
Myös Admixture osoittaa kuolansaamelaisissa selvästi erilaista perimäjakaumaa kuin skandinaviansaamelaisissa (Lamnidis et al. 2018). Näyttääkin siltä, että BOO-perimä ei ole levinnyt siinä määrin länteen, mutta vanhempi itäinen hantiperimä on. Toisin sanoen koko eroa saamelaisten välillä ei selitä ajautuminen.
Mansit
60 hantit
160 selkupit ja nenetsit
260 marit
280 udmurtit
290 komit
420 mordvalaiset
430 nganasanit, karjalaiset ja kuolansaamelaiset
440 vepsäläiset
450 suomalaiset
480 ruotsinsaamelaiset ja virolaiset
500 unkarilaiset
Keski-Volgan väestöt osuvat nätisti siperialaisten ja läntisten väestöjen väliin etäisyyksissä, kuten odottaisikin.
Virolaiset
20 suomalaiset
30 mordvalaiset ja unkarilaiset
40 karjalaiset
60 vepsäläiset
80 komit
190 kuolansaamelaiset
200 marit ja udmurtit
350 ruotsinsaamelaiset
480 mansit
520 hantit
550 selkupit
650 nenetsit
930 nganasanit
Virolaisethan ovat genominlaajuisesti lähellä venäläisiä, samoin kuin mordvalaiset. Silti suuri etäisyys vepsäläisiin on vähän yllättävä; lähes yhtä kaukana kuin komit.
2. FineStructure chunkcount matrix
Tulokset aivan samankaltaisia kuin FST:lläkin. Ei merkittäviä eroja.
Sitten on Y- ja mtDNA-FST:t sekä sanastollisia ja maantieteellisiä etäisyyksiä.
Jaska kirjoitti:2. FineStructure chunkcount matrix
Tulokset aivan samankaltaisia kuin FST:lläkin. Ei merkittäviä eroja.
library(pheatmap)
library(colorspace)
t=read.csv("https://pastebin.com/raw/PQGBv8MZ",row.names=1,header=T) # chunkcount
# t=read.csv("https://pastebin.com/raw/pSE2tKWt",row.names=1,header=T) # FST
t=100*t/max(t)
p=c("Hungarians","Estonians","Finns","Karelians","Vepsians","Mordovians","Saami_Kola",
"Saami_SWE","Komis","Udmurts","Maris","Mansis","Khanty","Selkups","Nenets","Nganasans")
t=t[p,p]
pheatmap(
t,
filename="a.png",
cluster_cols=F,
cluster_rows=F,
legend=F,
cellwidth=16,
cellheight=16,
fontsize=8,
border_color=NA,
display_numbers=T,
number_format="%.0f",
fontsize_number=7,
number_color="black",
colorRampPalette(hex(HSV(c(210,170,120,60,40,20,0),.5,1)))(256)
)
library(tidyverse)
t=read.table("plink.eigenvec.2")
eig=as.double(readLines("plink.eigenval"))
pct=paste0("PC",seq(length(eig))," (",sprintf("%.1f",100*eig/sum(eig)),"%)")
t=cbind(t[,c(1,2)],t(t(t[,-c(1,2)])*sqrt(eig)))
t$k=cutree(hclust(dist(t[,c(3:8)])),k=16)
t$lab=paste0(t[,1],":",t[,2])
ggplot(t,aes(x=V3,y=V4))+
geom_polygon(data=t%>%group_by(k)%>%slice(chull(V3,V4)),alpha=.2,aes(color=as.factor(k),fill=as.factor(k)),size=.3)+
geom_point(aes(color=as.factor(k)),size=.5)+
geom_text(aes(label=lab,color=as.factor(k)),size=2,vjust=-.7)+
ggtitle("plink --pca")+
labs(x=pct[1],y=pct[2])+
scale_x_continuous(breaks=seq(-10,10,.1),expand=expansion(mult=.12))+
scale_y_continuous(breaks=seq(-10,10,.1),expand=expansion(mult=.03))+
scale_color_manual(values=hcl(head(seq(15,375,length=length(unique(t$k))+1),-1),90,50))+
theme(
aspect.ratio=1/sqrt(2),
axis.text=element_text(color="black",size=6),
axis.ticks.length=unit(0,"pt"),
axis.ticks.x=element_blank(),
axis.ticks.y=element_blank(),
axis.title=element_text(color="black",size=8),
legend.position="none",
panel.background=element_rect(fill="white"),
panel.border=element_rect(color="gray75",fill=NA,size=.4),
panel.grid.major=element_line(color="gray70",size=.15),
plot.title=element_text(size=10)
)
ggsave("a.png")
system("mogrify -trim -bordercolor white -border 16x16 a.png")
library(tidyverse)
library(ggforce)
t=read.csv("https://pastebin.com/raw/aGPQSC24",row.names=1,header=T,check.names=F) # Y-DNA
# t=read.csv("https://pastebin.com/raw/MmttxJJM",row.names=1,header=T,check.names=F) # mtDNA
p=prcomp(t)
pct=paste0(colnames(p$x)," (",sprintf("%.1f",p$sdev/sum(p$sdev)*100),"%)")
p2=as.data.frame(p$x)
p2$k=as.factor(cutree(hclust(dist(t)),k=12))
load=p$rotation
for(i in seq(1,7,2)){
xpc=sym(paste0("PC",i))
ypc=sym(paste0("PC",i+1))
nneigh=3
dist=as.data.frame(as.matrix(dist(t)))
seg0=lapply(1:nneigh+1,function(j)apply(dist,1,function(x)unlist(p2[names(sort(x)[j]),c(i,i+1)],use.names=F))%>%t%>%cbind(p2[,c(i,i+1)]))
seg=do.call(rbind,seg0)%>%setNames(paste0("V",1:4))
mult=min(max(p2[,i])/max(load[,i]),max(p2[,i+1])/max(load[,i+1]))
ggplot(p2,aes(!!xpc,!!ypc))+
geom_segment(data=seg,aes(x=V1,y=V2,xend=V3,yend=V4),color="gray80",size=.3)+
ggforce::geom_mark_hull(aes(color=k,fill=k),concavity=100,radius=unit(.15,"cm"),expand=unit(.15,"cm"),alpha=.2,size=.1)+
# geom_polygon(data=p2%>%group_by(k)%>%slice(chull(!!xpc,!!ypc)),alpha=.2,aes(color=k,fill=k),size=.3)+
geom_segment(data=load,aes(x=0,y=0,xend=mult*!!xpc,yend=mult*!!ypc),arrow=arrow(length=unit(.3,"lines")),color="gray60",size=.4)+
annotate("text",x=(mult*load[,i]),y=(mult*load[,i+1]),label=rownames(load),size=2.5,vjust=ifelse(load[,i+1]>0,-.5,1.4))+
geom_point(aes(color=k),size=.6)+
geom_text(aes(label=rownames(t),color=k),size=2.5,vjust=-.6)+
# ggrepel::geom_text_repel(aes(label=rownames(t),color=k),max.overlaps=Inf,force=5,size=2.2,min.segment.length=.1,segment.size=.2)+
labs(x=pct[i],y=pct[i+1])+
coord_fixed()+
scale_x_continuous(breaks=seq(-200,200,10),expand=expansion(mult=.10))+
scale_y_continuous(breaks=seq(-200,200,10),expand=expansion(mult=.10))+
scale_color_manual(values=hcl(head(seq(15,375,length=length(unique(p2$k))+1),-1),120,50))+
theme(aspect.ratio=1,
axis.text=element_text(color="black",size=6),
axis.ticks=element_line(size=.3,color="gray60"),
axis.ticks.length=unit(-.1,"cm"),
axis.text.x=element_text(margin=margin(.2,0,0,0,"cm")),
axis.text.y=element_text(angle=90,vjust=1,hjust=.5,margin=margin(0,.2,0,0,"cm")),
axis.title=element_text(color="black",size=8),
legend.position="none",
panel.background=element_rect(fill="white"),
panel.border=element_rect(color="gray60",fill=NA,size=.4),
panel.grid=element_blank())
ggsave(paste0(i,".png"),width=6,height=6)
}
library(ComplexHeatmap)
library(circlize)
library(colorspace)
library(vegan)
t=read.table("https://pastebin.com/raw/9VcbF62f",sep="\t",check.names=F,header=T,comment.char="") # mtDNA
# t=read.table("https://pastebin.com/raw/N30HaLsz",sep="\t",check.names=F,header=T,comment.char="") # Y-DNA
t2=as.matrix(t[,-c(1:3)])
east=23:34
# east=c(1,2,4,10,11,12,13,14)
roweast=rowSums(t2[,east])
coleast=as.numeric(seq(ncol(t2))%in%east)
png("a.png",w=4000,h=4000,res=100)
ht_opt$COLUMN_ANNO_PADDING=unit(0,"mm")
ht_opt$ROW_ANNO_PADDING=unit(0,"mm")
Heatmap(
t2,
show_heatmap_legend=F,
show_column_names=F,
show_row_names=F,
width=ncol(t)*unit(30,"pt"),
height=nrow(t)*unit(30,"pt"),
column_dend_height=unit(200,"pt"),
row_dend_width=unit(200,"pt"),
clustering_distance_rows="euclidean",
clustering_distance_columns="euclidean",
cluster_rows=reorder(hclust(dist(t2)),-roweast),
cluster_columns=reorder(hclust(dist(t(t2))),-coleast),
column_title="Source: Tambets et al. 2018, table S5",column_title_gp=gpar(fontsize=24),
rect_gp=gpar(col="gray80",lwd=1.5),
col=colorRamp2(seq(0,100,length.out=7),hex(HSV(c(210,210,130,60,40,20,0),c(0,rep(.5,6)),1))),
cell_fun=function(j,i,x,y,w,h,fill)grid.text(sprintf("%.0f",t2[i,j]),x,y,gp=gpar(fontsize=17)),
top_annotation=columnAnnotation(text=anno_text(gt_render(colnames(t2),padding=unit(c(3,3,3,3),"mm")),just="left",rot=90,location=unit(0,"npc"),gp=gpar(fontsize=17,border="gray80",lwd=1.5))),
bottom_annotation=columnAnnotation(text=anno_text(gt_render(colnames(t2),padding=unit(c(3,3,3,3),"mm")),just="left",rot=270,gp=gpar(fontsize=17,border="gray80",lwd=1.5))),
left_annotation=rowAnnotation(text=anno_text(gt_render(t[,1],padding=unit(c(3,3,3,3),"mm")),just="right",location=unit(1,"npc"),gp=gpar(fontsize=17,border="gray80",lwd=1.5))),
right_annotation=rowAnnotation(
text1=anno_text(gt_render(t[,1],padding=unit(c(3,3,3,3),"mm")),just="left",location=unit(0,"npc"),gp=gpar(fontsize=17,border="gray80",lwd=1.5)),
text2=anno_text(gt_render(sprintf("%.0f",roweast),padding=unit(c(3,3,3,3),"mm")),just="center",location=unit(.5,"npc"),gp=gpar(fontsize=17,border="gray80",lwd=1.5)),
text3=anno_text(gt_render(t[,2],name="N",padding=unit(c(3,3,3,3),"mm")),just="center",location=unit(.5,"npc"),gp=gpar(fontsize=17,border="gray80",lwd=1.5)),
text4=anno_text(gt_render(t[,3],name="Sources",padding=unit(c(3,3,3,3),"mm")),just="left",location=unit(0,"npc"),gp=gpar(fontsize=17,border="gray80",lwd=1.5))
)
)
decorate_annotation("text2",grid.text("Total eastern (%)",y=unit(1,"npc")+unit(3,"mm"),rot=90,just="left",gp=gpar(fontsize=17)))
decorate_annotation("text3",grid.text("N",y=unit(1,"npc")+unit(3,"mm"),rot=90,just="left",gp=gpar(fontsize=17)))
dev.off()
system("mogrify -gravity center -trim -border 16 -bordercolor white a.png")
Lri kirjoitti:Anteeksi jussipussille, mutta en viitsi kirjoittaa näistä mitään analyysia.
jussipussi kirjoitti:Lri kirjoitti:Anteeksi jussipussille, mutta en viitsi kirjoittaa näistä mitään analyysia.
Lähes anteeksiantamatonta kyllä, mutta menköön. Jaska varmaan tekee sen.
Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 40 vierailijaa