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()

require(pryr)
require(data.table)

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"))
names(genome1)[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][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

Significance

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.[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

you're currently offline