 <?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.popgen.dk/angsd/index.php?action=history&amp;feed=atom&amp;title=Fst_correctness</id>
	<title>Fst correctness - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.popgen.dk/angsd/index.php?action=history&amp;feed=atom&amp;title=Fst_correctness"/>
	<link rel="alternate" type="text/html" href="https://www.popgen.dk/angsd/index.php?title=Fst_correctness&amp;action=history"/>
	<updated>2026-05-12T05:41:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://www.popgen.dk/angsd/index.php?title=Fst_correctness&amp;diff=2563&amp;oldid=prev</id>
		<title>Thorfinn: Created page with &quot;= 3 Populations simulated data= &lt;pre&gt; msms -ms 44 10 -t 930 -r 400 -I 3 12 14 18 -n 1 1.682020 -n 2 3.736830 -n 3 7.292050 -eg 0 2 116.010723 -eg 0 3 160.246047 -ma x 0.881098...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.popgen.dk/angsd/index.php?title=Fst_correctness&amp;diff=2563&amp;oldid=prev"/>
		<updated>2015-07-30T14:27:02Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= 3 Populations simulated data= &amp;lt;pre&amp;gt; msms -ms 44 10 -t 930 -r 400 -I 3 12 14 18 -n 1 1.682020 -n 2 3.736830 -n 3 7.292050 -eg 0 2 116.010723 -eg 0 3 160.246047 -ma x 0.881098...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= 3 Populations simulated data=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
msms -ms 44 10 -t 930 -r 400 -I 3 12 14 18 -n 1 1.682020 -n 2 3.736830 -n 3 7.292050 -eg 0 2 116.010723 -eg 0 3 160.246047 -ma x 0.881098 0.561966 0.881098 x 2.797460 0.561966 2.797460 x -ej 0.028985 3 2 -en 0.028985 2 0.287184 -ema 0.028985 3 x 7.293140 x 7.293140 x x x x x -ej 0.197963 2 1 -en 0.303501 1 1 &amp;gt;msoutput.txt&lt;br /&gt;
../misc/msToGlf -in msoutput.txt -out raw -singleOut 1 -regLen 0 -depth 8 -err 0.005 &lt;br /&gt;
../misc/splitgl raw.glf.gz 22 1 6 &amp;gt;pop1.glf.gz&lt;br /&gt;
../misc/splitgl raw.glf.gz 22 7 13 &amp;gt;pop2.glf.gz&lt;br /&gt;
../misc/splitgl raw.glf.gz 22 14 22 &amp;gt;pop3.glf.gz&lt;br /&gt;
echo \&amp;quot;1 250000000\&amp;quot; &amp;gt;fai.fai&lt;br /&gt;
../angsd -glf pop1.glf.gz -nind 6 -doSaf 1 -out pop1 -fai fai.fai -issim 1&lt;br /&gt;
../angsd -glf pop2.glf.gz -nind 7 -doSaf 1 -out pop2 -fai fai.fai -issim 1&lt;br /&gt;
../angsd -glf pop3.glf.gz -nind 9 -doSaf 1 -out pop3 -fai fai.fai -issim 1&lt;br /&gt;
../misc/realSFS pop1.saf.idx &amp;gt;pop1.saf.idx.ml&lt;br /&gt;
../misc/realSFS pop2.saf.idx &amp;gt;pop2.saf.idx.ml&lt;br /&gt;
../misc/realSFS pop3.saf.idx &amp;gt;pop3.saf.idx.ml&lt;br /&gt;
../misc/realSFS pop1.saf.idx pop2.saf.idx -p 20  &amp;gt;pop1.pop2.saf.idx.ml&lt;br /&gt;
../misc/realSFS pop1.saf.idx pop3.saf.idx -p 20  &amp;gt;pop1.pop3.saf.idx.ml&lt;br /&gt;
../misc/realSFS pop2.saf.idx pop3.saf.idx -p 20  &amp;gt;pop2.pop3.saf.idx.ml&lt;br /&gt;
../misc/realSFS fst index pop1.saf.idx pop2.saf.idx -fstout pop1.pop2 -sfs pop1.pop2.saf.idx.ml&lt;br /&gt;
../misc/realSFS fst index pop1.saf.idx pop3.saf.idx -fstout pop1.pop3 -sfs pop1.pop3.saf.idx.ml&lt;br /&gt;
../misc/realSFS fst index pop2.saf.idx pop3.saf.idx -fstout pop2.pop3 -sfs pop2.pop3.saf.idx.ml&lt;br /&gt;
../misc/realSFS fst index pop1.saf.idx pop2.saf.idx pop3.saf.idx -fstout pop1.pop2.pop3 -sfs pop1.pop2.saf.idx.ml -sfs pop1.pop3.saf.idx.ml -sfs pop2.pop3.saf.idx.ml&lt;br /&gt;
../misc/realSFS fst stats pop1.pop2.fst.idx&lt;br /&gt;
../misc/realSFS fst stats pop1.pop3.fst.idx&lt;br /&gt;
../misc/realSFS fst stats pop2.pop3.fst.idx&lt;br /&gt;
../misc/realSFS fst stats pop1.pop2.pop3.fst.idx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Which gives the following output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ../misc/realSFS fst stats pop1.pop2.fst.idx&lt;br /&gt;
	-&amp;gt; You are printing the optimized SFS to the terminal consider dumping into a file&lt;br /&gt;
	-&amp;gt; E.g.: './realSFS fst stats pop1.pop2.fst.idx &amp;gt;sfs.ml.txt'&lt;br /&gt;
	-&amp;gt; Assuming idxname:pop1.pop2.fst.idx&lt;br /&gt;
	-&amp;gt; Assuming .fst.gz file: pop1.pop2.fst.gz&lt;br /&gt;
	-&amp;gt; FST.Unweight[nObs:51085]:0.114638 Fst.Weight:0.186980&lt;br /&gt;
$ ../misc/realSFS fst stats pop1.pop3.fst.idx&lt;br /&gt;
	-&amp;gt; You are printing the optimized SFS to the terminal consider dumping into a file&lt;br /&gt;
	-&amp;gt; E.g.: './realSFS fst stats pop1.pop3.fst.idx &amp;gt;sfs.ml.txt'&lt;br /&gt;
	-&amp;gt; Assuming idxname:pop1.pop3.fst.idx&lt;br /&gt;
	-&amp;gt; Assuming .fst.gz file: pop1.pop3.fst.gz&lt;br /&gt;
	-&amp;gt; FST.Unweight[nObs:51085]:0.121007 Fst.Weight:0.192111&lt;br /&gt;
$ ../misc/realSFS fst stats pop2.pop3.fst.idx&lt;br /&gt;
	-&amp;gt; You are printing the optimized SFS to the terminal consider dumping into a file&lt;br /&gt;
	-&amp;gt; E.g.: './realSFS fst stats pop2.pop3.fst.idx &amp;gt;sfs.ml.txt'&lt;br /&gt;
	-&amp;gt; Assuming idxname:pop2.pop3.fst.idx&lt;br /&gt;
	-&amp;gt; Assuming .fst.gz file: pop2.pop3.fst.gz&lt;br /&gt;
	-&amp;gt; FST.Unweight[nObs:51085]:0.069462 Fst.Weight:0.125002&lt;br /&gt;
$ ../misc/realSFS fst stats pop1.pop2.pop3.fst.idx&lt;br /&gt;
	-&amp;gt; You are printing the optimized SFS to the terminal consider dumping into a file&lt;br /&gt;
	-&amp;gt; E.g.: './realSFS fst stats pop1.pop2.pop3.fst.idx &amp;gt;sfs.ml.txt'&lt;br /&gt;
	-&amp;gt; Assuming idxname:pop1.pop2.pop3.fst.idx&lt;br /&gt;
	-&amp;gt; Assuming .fst.gz file: pop1.pop2.pop3.fst.gz&lt;br /&gt;
	-&amp;gt; FST.Unweight[nObs:51085]:0.114638 Fst.Weight:0.186980&lt;br /&gt;
	-&amp;gt; FST.Unweight[nObs:51085]:0.121007 Fst.Weight:0.192111&lt;br /&gt;
	-&amp;gt; FST.Unweight[nObs:51085]:0.069462 Fst.Weight:0.125002&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Two populations (sim data with R implementation of functionality)==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  nRep &amp;lt;- 100&lt;br /&gt;
       nPop1 &amp;lt;- 24&lt;br /&gt;
       nPop2 &amp;lt;- 16&lt;br /&gt;
       cmd &amp;lt;- paste(&amp;quot;msms -ms&amp;quot;,nPop1+nPop2,nRep,&amp;quot;-t 930 -r 400 -I 2&amp;quot;,nPop1,nPop2,&amp;quot;0 -g 1 9.70406 -n 1 2 -n 2 1 -ma x 0.0 0.0 x -ej 0.07142857 2 1  &amp;gt;msoutput.txt &amp;quot;,sep=&amp;quot; &amp;quot;)&lt;br /&gt;
       system(cmd)&lt;br /&gt;
       ##system(&amp;quot;msms -ms 40 1 -t 930 -r 400 -I 2 20 20 0 -g 1 9.70406 -n 1 2 -n 2 1 -ma x 0.0 0.0 x -ej 0.07142857 2 1  &amp;gt;msoutput.txt  &amp;quot;)&lt;br /&gt;
 source(&amp;quot;../R/readms.output.R&amp;quot;)&lt;br /&gt;
  to2dSFS &amp;lt;- function(p1.d,p2.d,nPop1,nPop2)&lt;br /&gt;
        sapply(0:nPop1,function(x) table(factor(p2.d[p1.d==x],levels=0:nPop2)))&lt;br /&gt;
&lt;br /&gt;
  source(&amp;quot;../R/readms.output.R&amp;quot;)&lt;br /&gt;
        a&amp;lt;- read.ms.output(file=&amp;quot;msoutput.txt&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        p1.d &amp;lt;- unlist((sapply(a$gam,function(x) colSums(x[1:nPop1,]))))&lt;br /&gt;
        p2.d &amp;lt;- unlist((sapply(a$gam,function(x) colSums(x[-c(1:nPop1),]))))&lt;br /&gt;
        par(mfrow=c(1,2))&lt;br /&gt;
        barplot(table(p1.d))&lt;br /&gt;
        barplot(table(p2.d))&lt;br /&gt;
        sfs.2d &amp;lt;- t(sapply(0:nPop1,function(x) table(factor(p2.d[p1.d==x],levels=0:nPop2))))&lt;br /&gt;
   system(&amp;quot;../misc/msToGlf -in msoutput.txt -out raw -singleOut 1 -regLen 0 -depth 8 -err 0.005&amp;quot;)&lt;br /&gt;
       system(&amp;quot;../misc/splitgl raw.glf.gz 20 1 12 &amp;gt;pop1.glf.gz&amp;quot;)&lt;br /&gt;
       system(&amp;quot;../misc/splitgl raw.glf.gz 20 13 20 &amp;gt;pop2.glf.gz&amp;quot;)&lt;br /&gt;
       system(&amp;quot;echo \&amp;quot;1 250000000\&amp;quot; &amp;gt;fai.fai&amp;quot;)&lt;br /&gt;
       system(&amp;quot;../angsd -glf pop1.glf.gz -nind 12 -doSaf 1 -out pop1 -fai fai.fai -issim 1&amp;quot;)&lt;br /&gt;
       system(&amp;quot;../angsd -glf pop2.glf.gz -nind 8 -doSaf 1 -out pop2 -fai fai.fai -issim 1&amp;quot;)&lt;br /&gt;
       system(&amp;quot;../misc/realSFS pop1.saf.idx &amp;gt;pop1.saf.idx.ml&amp;quot;)&lt;br /&gt;
       system(&amp;quot;../misc/realSFS pop2.saf.idx &amp;gt;pop2.saf.idx.ml&amp;quot;)&lt;br /&gt;
       system(&amp;quot;../misc/realSFS pop1.saf.idx pop2.saf.idx -maxIter 500 -p 20  &amp;gt;pop1.pop2.saf.idx.ml&amp;quot;)&lt;br /&gt;
getFst&amp;lt;-function(est){&lt;br /&gt;
    N1&amp;lt;-nrow(est)-1&lt;br /&gt;
    N2&amp;lt;-ncol(est)-1&lt;br /&gt;
    cat(&amp;quot;N1: &amp;quot;,N1 ,&amp;quot; N2: &amp;quot;,N2,&amp;quot;\n&amp;quot;)&lt;br /&gt;
    est0&amp;lt;-est&lt;br /&gt;
    est0[1,1]&amp;lt;-0&lt;br /&gt;
    est0[N1+1,N2+1]&amp;lt;-0&lt;br /&gt;
    est0&amp;lt;-est0/sum(est0)&lt;br /&gt;
    &lt;br /&gt;
    aMat&amp;lt;&amp;lt;-matrix(NA,nrow=N1+1,ncol=N2+1)&lt;br /&gt;
    baMat&amp;lt;&amp;lt;-matrix(NA,nrow=N1+1,ncol=N2+1)&lt;br /&gt;
    for(a1 in 0:(N1))&lt;br /&gt;
        for(a2 in 0:(N2)){&lt;br /&gt;
            p1 &amp;lt;- a1/N1&lt;br /&gt;
            p2 &amp;lt;- a2/N2&lt;br /&gt;
            q1 &amp;lt;- 1 - p1&lt;br /&gt;
            q2 &amp;lt;- 1 - p2&lt;br /&gt;
            alpha1 &amp;lt;- 1 - (p1^2 + q1^2)&lt;br /&gt;
            alpha2 &amp;lt;- 1 - (p2^2 + q2^2)&lt;br /&gt;
            &lt;br /&gt;
            al &amp;lt;-  1/2 * ( (p1-p2)^2 + (q1-q2)^2) - (N1+N2) *  (N1*alpha1 + N2*alpha2) / (4*N1*N2*(N1+N2-1))&lt;br /&gt;
            bal &amp;lt;- 1/2 * ( (p1-p2)^2 + (q1-q2)^2) + (4*N1*N2-N1-N2)*(N1*alpha1 + N2*alpha2) / (4*N1*N2*(N1+N2-1))&lt;br /&gt;
            aMat[a1+1,a2+1]&amp;lt;&amp;lt;-al&lt;br /&gt;
            baMat[a1+1,a2+1]&amp;lt;&amp;lt;-bal&lt;br /&gt;
            ##  print(signif(c(a1=a1,a2=a2,p1=p1,p2=p2,al1=alpha1,al2=alpha2,al),2))&lt;br /&gt;
        }&lt;br /&gt;
    ## unweighted average of single-locus ratio estimators&lt;br /&gt;
    fstU &amp;lt;-   sum(est0*(aMat/baMat),na.rm=T)&lt;br /&gt;
    ## weighted average of single-locus ratio estimators&lt;br /&gt;
    fstW &amp;lt;-   sum(est0*aMat,na.rm=T)/sum(est0*baMat,na.rm=T)&lt;br /&gt;
    c(fstW=fstW,fstU=fstU)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;gt; getFst(sfs.2d)&lt;br /&gt;
N1:  24  N2:  16 &lt;br /&gt;
      fstW       fstU &lt;br /&gt;
0.11945801 0.08249571 &lt;br /&gt;
&lt;br /&gt;
est &amp;lt;- matrix(as.integer(scan(&amp;quot;pop1.pop2.saf.idx.ml&amp;quot;)),byrow=T,ncol=nPop2+1)&lt;br /&gt;
&amp;gt; getFst(est)&lt;br /&gt;
N1:  24  N2:  16 &lt;br /&gt;
      fstW       fstU &lt;br /&gt;
0.11925903 0.08241461 &lt;br /&gt;
&lt;br /&gt;
cmd&amp;lt;&amp;quot;fst index pop1.saf.idx pop2.saf.idx -sfs pop1.pop2.saf.idx.ml  -fstout testing&amp;quot;&lt;br /&gt;
system(cmd)&lt;br /&gt;
&lt;br /&gt;
##view the per site 'alpha' 'beta' if you want&lt;br /&gt;
cmd&amp;lt;-&amp;quot;../misc/realSFS fst print testing.fst.idx |head&amp;quot;&lt;br /&gt;
&lt;br /&gt;
##use fancy new emperical bayes&lt;br /&gt;
cmd&amp;lt;- &amp;quot;../misc/realSFS fst stats testing.fst.idx &amp;quot;&lt;br /&gt;
system(cmd)&lt;br /&gt;
-&amp;gt; FST.Unweight:0.083316 Fst.Weight:0.119372&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thorfinn</name></author>
	</entry>
</feed>