Loading icon

Genetic Relatedness Estimation through Maximum Likelihood (GREML) Heritability Analysis

Post banner image
Share:

GREML (Genetic Relatedness Estimation through Maximum Likelihood) is a method used in genetic epidemiology for estimating heritability. It is particularly relevant in the context of understanding the hereditary components of complex human traits.

Functional Annotation of SNPs: GREML has been used to partition heritability by the functional annotation of single nucleotide polymorphisms (SNPs) in a linear mixed model (LMM) with multiple random effects. This application of GREML has provided essential insights into latent genetic factors​​.

SNP-Based Heritability: The revised LDAK model, which is more similar to GREML-LDMS (a variant of GREML), has been used for estimating higher SNP-based heritability from empirical analyses on a range of traits​​.

Whole-Genome Sequencing Data: GREML-LDMS, a specific method within the GREML framework, has been developed to estimate heritability for complex human traits using whole-genome sequencing data or imputation with reference panels like the 1000 Genomes Project​​.

Partitioned Heritability Methods: GREML, also known as genomic relationship matrix-REML, estimates the genetic variance attributable to SNPs that are partitioned into various bins or categories. This approach is significant in exploring the genetic architecture of traits​​.

Narrow-Sense Heritability Estimates: The GREML approach yields estimates of narrow-sense (additive) heritability, which are generally lower than but approaching those obtained from other methods such as traditional twin studies​​.

Understanding GREML:

Genomic Relationship Matrix (GRM): In GREML, a GRM is created, which essentially quantifies the genetic similarity between individuals based on their SNP (Single Nucleotide Polymorphism) data. SNPs are variations at a single position in DNA among individuals.

Restricted Maximum Likelihood (REML): This statistical method is used to estimate the variance components in the data. In the context of GREML, it helps in estimating the proportion of phenotype variance that can be attributed to genetic variance observed in the SNPs.

Partitioning Heritability:

SNP Categorization: SNPs are categorized into different bins or groups. These groups can be based on various criteria, such as functional annotations, frequency in the population, or location on the genome. For example, SNPs might be grouped based on whether they are in coding regions of the genome or regulatory regions.

Estimating Variance by Category: GREML then estimates the genetic variance for each category of SNPs. This process involves assessing how much of the total genetic variance observed in a trait can be attributed to the SNPs within each specific category.
Significance in Genetic Research:
Complex Trait Analysis: This method is particularly useful in analyzing complex traits — those influenced by many genetic factors as well as environmental factors. By partitioning the genetic variance, researchers can determine which types of genetic variations contribute most to the trait.
Insights into Genetic Architecture: The approach provides insights into the genetic architecture of traits. For example, it might reveal that certain categories of SNPs, such as those in regulatory regions, contribute more to the genetic variance of a particular trait than SNPs in other regions.
Understanding Polygenic Effects: GREML helps in understanding the polygenic nature of complex traits — where many genes, each with a small effect, collectively influence a trait. Applications and Implications:
Personalized Medicine: Understanding how different genetic components contribute to traits can aid in personalized medicine. It helps in identifying genetic risk factors for diseases.
Genetic Research and Breeding Programs: In agriculture and animal breeding, this method can inform selective breeding programs by identifying key genetic contributors to desirable traits.

Simplified Python Example for GREML Analysis
1. Generating Synthetic SNP Data
We'll start by creating synthetic SNP data for a small number of individuals. In real applications, this data would come from genetic sequencing.

2. Creating a Genomic Relationship Matrix (GRM)
We'll calculate the GRM based on the SNP data. This matrix represents the genetic relationship between individuals.
3. Applying a Simplified REML Algorithm
We'll use a linear regression model as a placeholder for the REML algorithm. The actual REML algorithm is much more complex and usually requires specialized software. 4. Estimating Heritability
We'll estimate heritability based on the variance components obtained from the linear regression model.
Let's proceed with the Python code:

  
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

# Step 1: Generate Synthetic SNP Data
np.random.seed(0)
num_individuals = 100
num_snps = 500
genetic_data = np.random.randint(0, 3, size=(num_individuals, num_snps))

# Step 2: Create a Genomic Relationship Matrix (GRM)
def create_grm(genetic_data):
    # Standardize the genetic data
    standardized_data = (genetic_data - np.mean(genetic_data, axis=0)) / np.std(genetic_data, axis=0)
    # Calculate the GRM
    grm = np.dot(standardized_data, standardized_data.T) / num_snps
    return grm

grm = create_grm(genetic_data)

# Step 3: Apply a Simplified REML Algorithm (using linear regression)
def reml_algorithm(grm, phenotype_data):
    model = LinearRegression().fit(grm, phenotype_data)
    return model.coef_

# Generate synthetic phenotype data
phenotype_data = np.random.rand(num_individuals)

# Estimate variance components
variance_estimates = reml_algorithm(grm, phenotype_data)

# Step 4: Estimate Heritability
heritability_estimate = np.var(variance_estimates) / (np.var(variance_estimates) + np.var(phenotype_data))

print("Estimated Heritability:", heritability_estimate)

    

In the example:

- A random genotype matrix (`X`) and phenotype vector (`y`) are simulated.
- The `gblup` function is then applied with a regularization parameter (`lambda_value` set to 1.0).
- The function returns the estimated SNP effects and their corresponding p-values.
The output consists of two arrays. The first array contains the estimated SNP effects, and the second array contains the p-values for these estimates, which are used to assess the statistical significance of the SNP effects.