Runs of Homozygosity (ROH)

///Runs of Homozygosity (ROH)

Ads and affiliate links like this help support the Q-M242 project's efforts to test indigenous peoples. Please read the affiliateship and business disclaimers for details. You may also donate directly here.

Runs of Homozygosity (ROH)

Runs of Homozygosity (ROH) are places in autosomal DNA where every position sampled in a length of DNA is homozygous.

3rd Party tools for Runs of Homozygosity (ROH)

There are two 3rd party tools available to check your results for ROH. They are Dr. David Pike’s tool and the ROH tool at GEDMatch.

Checking for Runs of Homozygosity (ROH) with R

I have written a script to check for ROH on your own computer with R.

start <- Sys.time()


file_name <- "genome_rebekah.txt"
snpThreshold <- 500
errorTolerance <- 1

activeChr <- 1
activeStart <- 0
activeStop <- 0
activeRun <- FALSE
snpCount <- 0
errorCount <- 0

genome1 <- fread(file_name,
                 colClasses = c("character","character","integer","character"))
[1] <- "rsid" genome1 <- na.omit(genome1[genotype == "--",genotype:= NA]) genome1$allele1 <- substr(genome1$genotype,1,1) genome1$allele2 <- substr(genome1$genotype,2,2) genome1$homozygote <- FALSE genome1[allele1 == allele2,homozygote:= TRUE] ROH <- na.omit(data.table(chromosome = NA, startP = NA, stopP = NA, snps = NA)) for (i in 1:22) { chrDT <- subset(genome1,genome1$chromosome == activeChr) size <-length(chrDT$chromosome) activeChr <- i for (j in 1:size) { if (errorCount < errorTolerance && chrDT$homozygote[j] == FALSE && activeRun == TRUE) { errorCount <- errorCount + 1 snpCount <- snpCount + 1 }else if (chrDT$homozygote[j] == FALSE && activeRun == TRUE) { #Save the run if it meets the threshold if (snpCount >= snpThreshold) { activeStop <- chrDT$position[j - 1] newROH <- data.table( chromosome = activeChr, startP = activeStart, stopP = activeStop, snps = snpCount ) ROH <- rbind(ROH,newROH) } activeRun <- FALSE #Stop the run snpCount <- 0 #Reset SNP count activeStart <- 0 #Reset start activeStop <- 0 #Reset stop errorCount <- 0 #Reset error count }else if (chrDT$homozygote[j] == TRUE && activeRun == FALSE) { #Start run actions activeRun <- TRUE #Start the run snpCount <- 1 #Set the SNP count for the run activeStart <- chrDT$position[j] #Set the start position of the run }else if (chrDT$homozygote[j] == TRUE && activeRun == TRUE) { #Continue run actions if (j == size && snpCount >= snpThreshold) { #Check to a run at the end of a chromosome activeStop <- chrDT$position[j] #Set the stop newROH <- data.table( chromosome = activeChr, startP = activeStart, stopP = activeStop, snps = snpCount ) #Record the run ROH <- rbind(ROH,newROH) #Add the run to the data table activeRun <- FALSE #Stop the run snpCount <- 0 #Reset SNP count errorCount <- 0 #Reset error count activeStart <- 0 #Reset start activeStop <- 0 #Reset stop } snpCount <- snpCount + 1 #Increase the SNP count by 1 } } } end <- Sys.time() end - start #Time result


An above average number of ROH may indicate that your parents are related. This is fairly common in places with small founding populations (Finland and Iceland), closed communities that practice endogamous marriage (Mennonites and Jewish groups), groups where consanguineous marriage is practiced (Arab World), and places where distant cousin marriage is common (Colonial American founders).

The marriage patterns in each group have different impacts and influences on the size and number of ROH in group members.

Interpreting Runs of Homozygosity (ROH)

Interpretation of high amounts of ROH is complex. If you find high amounts of ROH, I strongly recommend checking with experienced professionals like the DNA Detectives group.

Share this:

Like this:

Like Loading...
2017-09-18T08:17:36+00:00 March 2nd, 2016|Categories: Compendium|

Share This Story, Choose Your Platform!

Toggle Sliding Bar Area
%d bloggers like this: