 <?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=Inbreed</id>
	<title>Inbreed - 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=Inbreed"/>
	<link rel="alternate" type="text/html" href="https://www.popgen.dk/angsd/index.php?title=Inbreed&amp;action=history"/>
	<updated>2026-05-16T01:00:21Z</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=Inbreed&amp;diff=117&amp;oldid=prev</id>
		<title>Albrecht: Created page with &quot;Definition   &lt;math&gt; \begin{align} p(AA)&amp;=P_A^2+p_Ap_aF \\ p(Aa)&amp;=2P_Ap_a-2p_Ap_aF \end{align} &lt;/math&gt;  ;n: total number of individuals ;X: all sequencing data ;f: allele frequ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.popgen.dk/angsd/index.php?title=Inbreed&amp;diff=117&amp;oldid=prev"/>
		<updated>2012-06-18T14:27:18Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Definition   &amp;lt;math&amp;gt; \begin{align} p(AA)&amp;amp;=P_A^2+p_Ap_aF \\ p(Aa)&amp;amp;=2P_Ap_a-2p_Ap_aF \end{align} &amp;lt;/math&amp;gt;  ;n: total number of individuals ;X: all sequencing data ;f: allele frequ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Definition&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
p(AA)&amp;amp;=P_A^2+p_Ap_aF \\&lt;br /&gt;
p(Aa)&amp;amp;=2P_Ap_a-2p_Ap_aF&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;n: total number of individuals&lt;br /&gt;
;X: all sequencing data&lt;br /&gt;
;f: allele frequency&lt;br /&gt;
;F: inbreeding coefficient&lt;br /&gt;
;G: genotype &lt;br /&gt;
&lt;br /&gt;
total likelihood&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p(X|f,F)\sim\prod_i^np(X_i|f,F)=\prod_i^n\sum_{G\in \{0,1,2\}}p(X_i|G)p(G|f,F)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
suggestion for EM&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f_{j+1}&amp;amp;=\frac{\sum_i^n p(G=1|X_i,f_j,F_j)+2\sum_i^n p(G=2|X_i,f_j,F_j)}{2n}\\&lt;br /&gt;
F_{j+1}&amp;amp;=\frac{\sum_i^n p(G=0|X_i,f_j,F_j)+\sum_i^n p(G=2|X_i,f_j,F_j)}{n-n(f_j^2-(1-f_j)^2)}\\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
based on &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\hat{F}=\frac{O(HO)-E(HO)}{n-E(HO)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
O(HO)/n&amp;amp;=p(AA)+p(aa)\\&lt;br /&gt;
E(HO)/n&amp;amp;=p_a^2+p_A^2&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
getLikes&amp;lt;-function(x,d=5,e=0.01,norm=FALSE){&lt;br /&gt;
  n&amp;lt;-length(x)&lt;br /&gt;
  dep&amp;lt;-rpois(n,d)&lt;br /&gt;
  nA&amp;lt;-rbinom(n,dep,c(e,0.5,1-e)[x+1])&lt;br /&gt;
  res&amp;lt;-rbind(dbinom(nA,dep,e),dbinom(nA,dep,0.5),dbinom(nA,dep,1-e))&lt;br /&gt;
  if(norm)&lt;br /&gt;
    res&amp;lt;-t(t(res)/colSums(res))&lt;br /&gt;
  res&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MLoptim&amp;lt;-function(like){&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  getLike&amp;lt;-function(x,like){&lt;br /&gt;
    freq&amp;lt;-x[1]&lt;br /&gt;
    F&amp;lt;-x[2]&lt;br /&gt;
    -sum(log(&lt;br /&gt;
             like[1,]*((1-freq)^2+freq*(1-freq)*F)&lt;br /&gt;
             +like[2,]*(2*freq*(1-freq)-2*freq*(1-freq)*F)&lt;br /&gt;
             +like[3,]*(freq^2+freq*(1-freq)*F)             &lt;br /&gt;
            ))&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
optim(c(0.1,0.1),getLike,like=like)&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
squaremMy&amp;lt;-&lt;br /&gt;
function (par, emStep, likeFun, ...) &lt;br /&gt;
{&lt;br /&gt;
  maxiter &amp;lt;- 1500&lt;br /&gt;
  tol = 1e-07&lt;br /&gt;
  step.min &amp;lt;- 1&lt;br /&gt;
  step.max0 &amp;lt;- 1&lt;br /&gt;
  step.max &amp;lt;- 1&lt;br /&gt;
  mstep &amp;lt;- 4&lt;br /&gt;
  iter &amp;lt;- 1&lt;br /&gt;
  objval &amp;lt;- rep(NA, 1)&lt;br /&gt;
  p &amp;lt;- par&lt;br /&gt;
  lold &amp;lt;- likeFun(p, ...)&lt;br /&gt;
  leval &amp;lt;- 1&lt;br /&gt;
  feval &amp;lt;- 0&lt;br /&gt;
  conv &amp;lt;- TRUE&lt;br /&gt;
  while (feval &amp;lt; maxiter) {&lt;br /&gt;
    extrap &amp;lt;- TRUE&lt;br /&gt;
    p1 &amp;lt;- emStep(p, ...)&lt;br /&gt;
    feval &amp;lt;- feval + 1&lt;br /&gt;
    q1 &amp;lt;- p1 - p&lt;br /&gt;
    sr2 &amp;lt;- crossprod(q1)&lt;br /&gt;
    if (sqrt(sr2) &amp;lt; tol) &lt;br /&gt;
      break&lt;br /&gt;
    p2 &amp;lt;- emStep(p1, ...)&lt;br /&gt;
    feval &amp;lt;- feval + 1&lt;br /&gt;
    q2 &amp;lt;- p2 - p1&lt;br /&gt;
    sq2 &amp;lt;- sqrt(crossprod(q2))&lt;br /&gt;
    if (sq2 &amp;lt; tol) &lt;br /&gt;
      break&lt;br /&gt;
    sv2 &amp;lt;- crossprod(q2 - q1)&lt;br /&gt;
    srv &amp;lt;- crossprod(q1, q2 - q1)&lt;br /&gt;
    alpha &amp;lt;- sqrt(sr2/sv2)&lt;br /&gt;
    alpha &amp;lt;- max(step.min, min(step.max, alpha))&lt;br /&gt;
    p.new &amp;lt;- p + 2 * alpha * q1 + alpha^2 * (q2 - q1)&lt;br /&gt;
    if (abs(alpha - 1) &amp;gt; 0.01) {&lt;br /&gt;
      p.new &amp;lt;- try(emStep(p.new, ...), silent = TRUE)&lt;br /&gt;
      feval &amp;lt;- feval + 1&lt;br /&gt;
    }&lt;br /&gt;
    lnew &amp;lt;- lold&lt;br /&gt;
    if (alpha == step.max) &lt;br /&gt;
      step.max &amp;lt;- mstep * step.max&lt;br /&gt;
    if (step.min &amp;lt; 0 &amp;amp; alpha == step.min) &lt;br /&gt;
      step.min &amp;lt;- mstep * step.min&lt;br /&gt;
    p &amp;lt;- p.new&lt;br /&gt;
    iter &amp;lt;- iter + 1&lt;br /&gt;
  }&lt;br /&gt;
  return(list(par = p, value.likeFun = lold, iter = iter, fpevals = feval, &lt;br /&gt;
              objfevals = leval, convergence = conv))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
MLEM&amp;lt;-function(like,iter=100){&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  getLike&amp;lt;-function(x,like){&lt;br /&gt;
    freq&amp;lt;-x[1]&lt;br /&gt;
    F&amp;lt;-x[2]&lt;br /&gt;
    -sum(log(&lt;br /&gt;
             like[1,]*((1-freq)^2+freq*(1-freq)*F)&lt;br /&gt;
             +like[2,]*(2*freq*(1-freq)-2*freq*(1-freq)*F)&lt;br /&gt;
             +like[3,]*(freq^2+freq*(1-freq)*F)             &lt;br /&gt;
            ))&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  em&amp;lt;-function(x,like){&lt;br /&gt;
    freq&amp;lt;-x[1]&lt;br /&gt;
    F&amp;lt;-x[2]&lt;br /&gt;
    n&amp;lt;-ncol(like)&lt;br /&gt;
    pp&amp;lt;-cbind(&lt;br /&gt;
              like[1,]*((1-freq)^2+freq*(1-freq)*F),&lt;br /&gt;
              like[2,]*(2*freq*(1-freq)-2*freq*(1-freq)*F),&lt;br /&gt;
              like[3,]*(freq^2+freq*(1-freq)*F)             &lt;br /&gt;
              )&lt;br /&gt;
    pp&amp;lt;-pp/rowSums(pp)&lt;br /&gt;
    f2&amp;lt;-sum(pp[,2]+2*pp[,3])/(2*n)&lt;br /&gt;
    oHO&amp;lt;-sum(pp[,1]+pp[,3])&lt;br /&gt;
    eHO&amp;lt;-n*(freq^2+(1-freq)^2)&lt;br /&gt;
    F2&amp;lt;-(oHO-eHO)/(n-eHO)&lt;br /&gt;
    c(f2,max(0,F2))&lt;br /&gt;
  }&lt;br /&gt;
  squaremMy(c(0.01,0.01),emStep=em,like=like,likeFun=getLike)&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N&amp;lt;-5000&lt;br /&gt;
F&amp;lt;-0.1&lt;br /&gt;
freq&amp;lt;-0.2&lt;br /&gt;
geno&amp;lt;-sample(0:2,N,replace=T,prob=c((1-freq)^2+freq*(1-freq)*F,2*freq*(1-freq)-2*freq*(1-freq)*F,freq^2+freq*(1-freq)*F))&lt;br /&gt;
like&amp;lt;-getLikes(geno,d=4,e=0.01,norm=TRUE)&lt;br /&gt;
library(SQUAREM)&lt;br /&gt;
&lt;br /&gt;
system.time(mm&amp;lt;-MLoptim(like))&lt;br /&gt;
system.time(ss&amp;lt;-MLEM(like)) #the one of implement&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Albrecht</name></author>
	</entry>
</feed>