Simple test code from Steve Schaffner to compute R^2 and D'. This is just for educational purposes. Don't use this code for anything, ever!
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4080 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
8252494fa9
commit
dec713a184
|
|
@ -0,0 +1,88 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.haplotype;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.commandline.Argument;
|
||||||
|
import org.broadinstitute.sting.commandline.Output;
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
|
import org.broadinstitute.sting.gatk.walkers.RodWalker;
|
||||||
|
|
||||||
|
import java.io.PrintStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A very simple code snippet from Steve Schaffner that computs R^2 and D' given observed counts for
|
||||||
|
* AA, Aa, aA, and aa genotypes. This code is meant only to be instructive. Do not use this for
|
||||||
|
* anything, ever!
|
||||||
|
*/
|
||||||
|
public class ComputeRSquaredAndDPrime extends RodWalker<Integer, Integer> {
|
||||||
|
@Argument(fullName="AA", shortName="AA", doc="Number of counts for AA genotype") public Integer AA;
|
||||||
|
@Argument(fullName="Aa", shortName="Aa", doc="Number of counts for Aa genotype") public Integer Aa;
|
||||||
|
@Argument(fullName="aA", shortName="aA", doc="Number of counts for aA genotype") public Integer aA;
|
||||||
|
@Argument(fullName="aa", shortName="aa", doc="Number of counts for aa genotype") public Integer aa;
|
||||||
|
|
||||||
|
@Output
|
||||||
|
private PrintStream out;
|
||||||
|
|
||||||
|
public void initialize() {
|
||||||
|
int i, j;
|
||||||
|
Integer[][] hap = new Integer[2][2];
|
||||||
|
for (int k = 0; k < 2; k++) {
|
||||||
|
hap[k] = new Integer[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
hap[0][0] = AA;
|
||||||
|
hap[0][1] = Aa;
|
||||||
|
hap[1][0] = aA;
|
||||||
|
hap[1][1] = aa;
|
||||||
|
|
||||||
|
Integer[] colTot = new Integer[2];
|
||||||
|
Integer[] rowTot = new Integer[2];
|
||||||
|
double prod, dprime, f1, f2, ddenom, r2;
|
||||||
|
|
||||||
|
for (i = 0; i < 2; i++) { rowTot[i] = colTot[i] = 0; }
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
for (j = 0; j < 2; j++) {
|
||||||
|
rowTot[j] += hap[i][j];
|
||||||
|
colTot[i] += hap[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prod = rowTot[0] * rowTot[1] * colTot[0] * colTot[1];
|
||||||
|
|
||||||
|
if (prod == 0) {
|
||||||
|
out.println("Missing data");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
dprime = hap[0][0] * hap[1][1] - hap[0][1] * hap[1][0];
|
||||||
|
if (dprime > 0) {
|
||||||
|
f1 = rowTot[0] * colTot[1];
|
||||||
|
f2 = rowTot[1] * colTot[0];
|
||||||
|
ddenom = (f1 > f2) ? f2 : f1;
|
||||||
|
} else {
|
||||||
|
f1 = rowTot[0] * colTot[0];
|
||||||
|
f2 = rowTot[1] * colTot[1];
|
||||||
|
ddenom = (f1 > f2) ? f2 : f1;
|
||||||
|
}
|
||||||
|
r2 = dprime * dprime / prod;
|
||||||
|
dprime /= ddenom;
|
||||||
|
|
||||||
|
out.printf("r2: %.5f%n", r2);
|
||||||
|
out.printf("D': %.5f%n", dprime);
|
||||||
|
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer reduceInit() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer reduce(Integer value, Integer sum) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue