Multi-Generational Health Transfer and Family-Calibrated Risk
Joe Scanlin
November 2025
This section introduces one of Myome's most novel contributions: hereditary health artifacts—comprehensive, structured health records designed for multi-generational transfer. You'll learn about the five-layer artifact structure, Bayesian genetic risk propagation models that use family outcomes to refine risk predictions, and the open-source toolkit for creating and consuming these artifacts.
One of Myome's most profound and novel contributions is the creation of hereditary health artifacts—comprehensive, structured health records designed for multi-generational transfer. These artifacts transform vague family health histories ("Grandpa had heart problems") into precise, actionable health intelligence that descendants can leverage for decades.
Current approaches to family health history suffer from critical limitations:
Each generation loses ~70% of detailed health information through verbal transmission alone. Critical details like age of onset, biomarker trajectories, and treatment responses are forgotten.
Statements like "high cholesterol" lack context—what value? At what age? How did it trend? What interventions were attempted?
Traditional pedigrees capture diagnosis timing but miss the rich phenotypic data that explains how genetic risk manifested and what modified it.
Occupational exposures, pollution levels, lifestyle factors—all critical modifiers of genetic risk—are rarely documented.
Myome's hereditary health artifacts are structured as immutable, cryptographically-signed data packages that contain:
Hereditary artifacts are not simply data dumps—they are carefully curated, privacy-aware packages generated through a multi-stage process:
Input: Individual's complete health record \(\mathcal{H}\), privacy preferences \(\mathcal{P}\), intended recipients \(\mathcal{R}\)
Output: Hereditary artifact \(\mathcal{A}\) with cryptographic signature
1. Data Selection:
a. Extract core datasets: \(\mathcal{D}_{\text{genome}}, \mathcal{D}_{\text{biomarkers}}, \mathcal{D}_{\text{diseases}}, \mathcal{D}_{\text{environment}}\)
b. Apply privacy filters based on \(\mathcal{P}\) (e.g., exclude mental health if specified)
2. Statistical Summarization:
a. For each biomarker time series \(B(t)\), compute:
• Lifetime trajectory: \(\{\text{age}_i, \text{mean}(B), \text{std}(B), \text{percentile}(B)\}_i\)
• Change-points: \(\{t_j : |\Delta B(t_j)| > \theta\}\) (disease-related shifts)
• Age-matched z-scores: \(z(B, \text{age}) = \frac{B - \mu_{\text{pop}}(\text{age})}{\sigma_{\text{pop}}(\text{age})}\)
3. Pre-clinical Pattern Extraction:
For each diagnosed disease \(D\) at age \(a_D\):
• Extract biomarkers \([a_D - 24\text{mo}, a_D]\) (pre-clinical window)
• Compute deviation from baseline: \(\Delta B_{\text{pre}}(t) = B(t) - \text{baseline}(B)\)
4. Genetic Risk Integration:
a. Annotate pathogenic variants with penetrance data
b. Compute updated PRS based on observed outcomes (Bayesian updating)
c. Generate genotype-phenotype associations: \(\{(g_i, p_i, \text{effect size})\}\)
5. Encryption & Signing:
a. Serialize artifact to JSON schema
b. Encrypt with recipient public keys: \(\mathcal{A}_{\text{enc}} = \text{Encrypt}(\mathcal{A}, \{\text{pubkey}_r : r \in \mathcal{R}\})\)
c. Generate digital signature: \(\sigma = \text{Sign}(\text{hash}(\mathcal{A}), \text{privkey}_{\text{donor}})\)
6. Return \((\mathcal{A}_{\text{enc}}, \sigma, \text{metadata})\)
This algorithm ensures that artifacts are both comprehensive and privacy-preserving, containing only information the donor explicitly consents to share.
Hereditary artifacts use a standardized JSON schema for interoperability and long-term readability:
{
"artifact_version": "1.0.0",
"artifact_id": "ha_abc123...",
"created_at": "2025-01-15T00:00:00Z",
"signature": "0x...",
"donor": {
"id_hash": "sha256:...",
"birth_year": 1970,
"sex": "M",
"ethnicity": ["European", "East Asian"],
"data_collection_period": {
"start": "2020-01-01",
"end": "2045-12-31"
}
},
"genomic_data": {
"vcf_url": "ipfs://Qm...",
"vcf_hash": "sha256:...",
"pathogenic_variants": [
{
"gene": "APOE",
"variant": "rs429358",
"zygosity": "heterozygous",
"alleles": ["C", "T"],
"interpretation": "APOE-ε3/ε4",
"associated_conditions": ["Alzheimer's disease"],
"risk_increase": 3.0,
"observed_penetrance": null
},
{
"gene": "LDLR",
"variant": "rs688",
"zygosity": "heterozygous",
"interpretation": "Familial hypercholesterolemia carrier",
"associated_conditions": ["Hypercholesterolemia", "CAD"],
"risk_increase": 2.5,
"observed_penetrance": 1.0,
"notes": "LDL >190 mg/dL by age 35, statin therapy age 40"
}
],
"polygenic_risk_scores": {
"coronary_artery_disease": {
"score": 1.84,
"percentile": 92,
"interpretation": "High genetic risk",
"observed_outcome": "MI at age 58"
},
"type_2_diabetes": {
"score": 0.76,
"percentile": 38,
"interpretation": "Below average genetic risk",
"observed_outcome": "No diagnosis through age 75"
}
},
"pharmacogenomics": {
"CYP2C9": "*1/*3",
"VKORC1": "GG",
"warfarin_dosing": "Reduced dose required (3mg/day)",
"clopidogrel_response": "Normal metabolizer"
}
},
"biomarker_trajectories": {
"ldl_cholesterol": {
"unit": "mg/dL",
"measurement_frequency": "annual",
"data_points": 40,
"summary_statistics": {
"age_20_30": {"mean": 115, "std": 12, "percentile": 45},
"age_30_40": {"mean": 145, "std": 18, "percentile": 75},
"age_40_50": {"mean": 178, "std": 22, "percentile": 88},
"age_50_60": {"mean": 142, "std": 15, "percentile": 62},
"age_60_70": {"mean": 128, "std": 14, "percentile": 48}
},
"changepoints": [
{
"age": 35,
"before": 148,
"after": 180,
"event": "Untreated elevation",
"clinical_significance": "Exceeded treatment threshold"
},
{
"age": 40,
"before": 185,
"after": 142,
"event": "Statin initiation (atorvastatin 40mg)",
"clinical_significance": "23% reduction achieved"
}
],
"trajectory_url": "ipfs://Qm..."
},
"vo2_max": {
"unit": "mL/kg/min",
"measurement_frequency": "quarterly",
"data_points": 120,
"summary_statistics": {
"age_20_30": {"mean": 52, "std": 4, "percentile": 85},
"age_30_40": {"mean": 48, "std": 5, "percentile": 75},
"age_40_50": {"mean": 42, "std": 4, "percentile": 65},
"age_50_60": {"mean": 38, "std": 3, "percentile": 60},
"age_60_70": {"mean": 35, "std": 3, "percentile": 65}
},
"notes": "Consistent exercise maintained above-average fitness despite age-related decline"
}
},
"disease_events": [
{
"condition": "Myocardial Infarction",
"icd10": "I21.9",
"onset_age": 58,
"onset_date": "2028-03-15",
"severity": "moderate",
"pre_clinical_biomarkers": {
"timeline_months_before": [-24, -18, -12, -6, -3, -1],
"hscrp": [1.2, 1.8, 2.4, 3.1, 4.2, 6.8],
"ldl": [142, 148, 156, 162, 171, 178],
"hrv_sdnn": [58, 54, 51, 48, 42, 38],
"resting_hr": [62, 64, 66, 68, 72, 78]
},
"genetic_context": {
"prs_cad": 1.84,
"relevant_variants": ["LDLR rs688", "APOB rs1367117"]
},
"treatment": {
"acute": "PCI with stent placement",
"chronic": ["atorvastatin 80mg", "aspirin 81mg", "metoprolol 50mg"],
"outcome": "Full recovery, no subsequent events through age 75"
},
"lessons_for_descendants": [
"Early statin therapy (by age 30-35) may have prevented or delayed event",
"HRV decline preceded event by 18-24 months—useful early warning signal",
"Regular exercise and diet modification at age 45 improved outcomes"
]
}
],
"environmental_lifestyle": {
"smoking": {
"status": "former",
"pack_years": 5,
"quit_age": 32
},
"alcohol": {
"average_drinks_per_week": 4,
"pattern": "social, moderate"
},
"exercise": {
"pattern": "consistent",
"average_weekly_minutes": {
"age_20_40": 240,
"age_40_60": 180,
"age_60_plus": 150
},
"primary_activities": ["running", "cycling", "resistance training"]
},
"diet": {
"pattern": "Mediterranean-style",
"notes": "Adopted age 45 post-MI, maintained long-term"
},
"occupation": {
"primary": "Software engineer",
"exposures": ["sedentary", "low physical hazard"],
"years": 40
},
"geographic_history": [
{
"location": "San Francisco, CA",
"years": "1990-2010",
"avg_pm25": 12.4,
"avg_aqi": 45
},
{
"location": "Seattle, WA",
"years": "2010-2045",
"avg_pm25": 8.2,
"avg_aqi": 38
}
]
},
"interpretation_for_descendants": {
"key_findings": [
"High genetic risk for CAD (PRS 92nd percentile) materialized at age 58",
"LDL >140 by age 30 was early warning sign—descendants should monitor from age 25",
"Statin therapy effective—23% LDL reduction, no side effects",
"Exercise and diet modification at age 45 likely extended healthspan",
"HRV monitoring provided 18-month early warning before MI"
],
"recommendations_for_carriers": [
"Obtain lipid panel by age 25, repeat annually if LDL >130",
"Consider early statin therapy (age 30-35) if LDL >150 despite lifestyle",
"Prioritize cardiovascular exercise (target VO₂ max >40 throughout life)",
"Adopt Mediterranean diet by age 30",
"Monitor HRV—sustained decline warrants cardiac workup",
"Coronary calcium scan at age 45 to assess atherosclerosis burden"
]
},
"privacy_settings": {
"excluded_data": ["mental_health_diagnoses", "substance_use_details"],
"recipient_access": {
"descendants_direct": "full",
"descendants_indirect": "summary_only",
"researchers": "anonymized_aggregate"
}
}
}
A key innovation in hereditary artifacts is the Bayesian genetic risk propagation model—using observed health outcomes in ancestors to refine risk predictions for descendants.
Traditional polygenic risk scores (PRS) are computed from genome-wide association studies (GWAS) and provide population-level risk. However, they don't account for family-specific risk modifiers or penetrance variations. Myome updates these risks using family outcomes:
Where \(\mathcal{F}\) represents family health outcomes (e.g., "father and grandfather both had MI before age 60 despite moderate PRS").
The likelihood term \(P(\mathcal{F} \mid \text{disease}, \text{PRS})\) is estimated from the family artifact database:
This allows us to compute family-calibrated risk scores that are far more accurate than population PRS alone:
import numpy as np
from scipy import stats
class FamilyCalibratedRisk:
"""Compute family-calibrated disease risk using hereditary artifacts"""
def __init__(self, population_prs_model):
self.prs_model = population_prs_model
def compute_family_risk(self, child_genotype, family_artifacts):
"""
Compute Bayesian updated risk given family health outcomes
Args:
child_genotype: Child's genetic variants
family_artifacts: List of hereditary artifacts from parents/grandparents
Returns:
Updated risk probability and confidence interval
"""
# Base population risk from PRS
population_risk = self.prs_model.predict_risk(child_genotype)
# Extract family outcomes
family_outcomes = self.extract_family_outcomes(family_artifacts)
# Compute family likelihood
family_likelihood = self.compute_family_likelihood(
family_outcomes,
child_genotype
)
# Bayesian update
posterior_risk = self.bayesian_update(
prior=population_risk,
likelihood=family_likelihood
)
return posterior_risk
def extract_family_outcomes(self, artifacts):
"""Extract disease outcomes and ages from family artifacts"""
outcomes = []
for artifact in artifacts:
for disease_event in artifact['disease_events']:
outcomes.append({
'condition': disease_event['condition'],
'onset_age': disease_event['onset_age'],
'prs': artifact['genomic_data']['polygenic_risk_scores'].get(
self.condition_to_prs_key(disease_event['condition'])
),
'relatedness': artifact['relatedness'], # 0.5 for parent, 0.25 for grandparent
'genetic_variants': artifact['genomic_data']['pathogenic_variants']
})
return outcomes
def compute_family_likelihood(self, family_outcomes, child_genotype):
"""
Compute likelihood of family outcomes given child's genetics
Uses principle: if close relatives with similar genetics had early disease,
child's risk is higher than population PRS suggests
"""
# Count affected relatives weighted by relatedness
weighted_affected = 0
weighted_unaffected = 0
for outcome in family_outcomes:
weight = outcome['relatedness']
genetic_similarity = self.compute_genetic_similarity(
child_genotype,
outcome['genetic_variants']
)
if outcome['condition'] == self.target_disease:
# Early onset increases risk more
age_factor = self.age_adjustment(outcome['onset_age'])
weighted_affected += weight * genetic_similarity * age_factor
else:
# Relative avoided disease despite genetic risk
if outcome.get('prs', {}).get('score', 0) > 1.0: # High PRS but no disease
weighted_unaffected += weight * genetic_similarity
# Likelihood ratio
if weighted_unaffected > 0:
likelihood_ratio = (weighted_affected + 1) / (weighted_unaffected + 1)
else:
likelihood_ratio = weighted_affected + 1
return likelihood_ratio
def compute_genetic_similarity(self, child_genotype, ancestor_variants):
"""
Compute proportion of high-risk variants shared between child and ancestor
"""
shared_variants = 0
total_variants = len(ancestor_variants)
for variant in ancestor_variants:
if self.child_has_variant(child_genotype, variant):
shared_variants += 1
return shared_variants / total_variants if total_variants > 0 else 0.5
def age_adjustment(self, onset_age):
"""
Early onset increases risk signal more than late onset
Scale: age 40 → 2.0x, age 60 → 1.0x, age 80 → 0.5x
"""
return np.exp((60 - onset_age) / 20)
def bayesian_update(self, prior, likelihood):
"""
Update prior risk with family likelihood
Uses Beta distribution for conjugate updating
"""
# Model risk as Beta distribution
# Convert prior probability to Beta parameters
alpha_prior = prior * 100 # Scale for numerical stability
beta_prior = (1 - prior) * 100
# Update with family likelihood (treat as pseudo-observations)
alpha_posterior = alpha_prior + likelihood * 10
beta_posterior = beta_prior + (1 / likelihood) * 10
# Posterior mean
posterior_mean = alpha_posterior / (alpha_posterior + beta_posterior)
# 95% credible interval
credible_interval = (
stats.beta.ppf(0.025, alpha_posterior, beta_posterior),
stats.beta.ppf(0.975, alpha_posterior, beta_posterior)
)
return {
'risk': posterior_mean,
'ci_lower': credible_interval[0],
'ci_upper': credible_interval[1],
'risk_increase_factor': posterior_mean / prior
}
# Example usage
child_genotype = load_genotype("child_genome.vcf")
family_artifacts = [
load_artifact("grandfather.json"),
load_artifact("grandmother.json"),
load_artifact("father.json"),
load_artifact("mother.json")
]
risk_calculator = FamilyCalibratedRisk(population_prs_model)
cad_risk = risk_calculator.compute_family_risk(
child_genotype,
family_artifacts
)
print(f"Population PRS risk: 15%")
print(f"Family-calibrated risk: {cad_risk['risk']*100:.1f}%")
print(f"95% CI: [{cad_risk['ci_lower']*100:.1f}%, {cad_risk['ci_upper']*100:.1f}%]")
print(f"Risk increase factor: {cad_risk['risk_increase_factor']:.2f}x")
Myome provides interactive visualizations that allow descendants to explore family health patterns across generations:
The true power of hereditary artifacts emerges when genotype and phenotype are mapped across multiple generations. This creates a family-specific understanding of how genetic variants manifest under different environmental and lifestyle contexts.
Consider the APOE gene example—a major determinant of Alzheimer's disease risk. The ε4 allele increases risk 3-fold (heterozygous) or 12-fold (homozygous), but penetrance varies dramatically based on lifestyle factors:
| Factor | Effect on APOE-ε4 Risk | Hazard Ratio | Evidence Level |
|---|---|---|---|
| High education (>16 years) | Protective (cognitive reserve) | 0.67 | Meta-analysis, n=42,000 |
| Mediterranean diet | Protective | 0.71 | RCT, n=7,447 |
| Regular exercise (>150 min/wk) | Protective | 0.58 | Cohort, n=1,600 |
| Poor sleep (<6h nightly) | Risk-enhancing | 1.42 | Cohort, n=2,600 |
| Type 2 diabetes | Risk-enhancing | 1.86 | Meta-analysis, n=28,000 |
| Cardiovascular disease | Risk-enhancing | 2.1 | Cohort, n=15,000 |
If three generations of a family carry APOE-ε4 and track their health through Myome, descendants gain unprecedented insights:
Grandfather (b. 1940, ε3/ε4):
Father (b. 1965, ε3/ε4):
Son (b. 1995, ε3/ε4):
The hereditary artifact quantifies this risk reduction mathematically:
Meaning the son's cumulative risk (0.62x) is lower than baseline despite carrying APOE-ε4, due to comprehensive protective lifestyle factors documented and validated across family generations.
To make hereditary health artifacts practical and accessible, Myome provides a complete open-source toolkit:
# Install Myome hereditary artifact toolkit
pip install myome-hereditary
# Or build from source
git clone https://github.com/myome/myome-hereditary.git
cd myome-hereditary
pip install -e .
from myome_hereditary import ArtifactGenerator, PrivacySettings
# Initialize generator
generator = ArtifactGenerator(
donor_health_record="path/to/myome_database.db",
genome_file="path/to/genome.vcf"
)
# Configure privacy settings
privacy = PrivacySettings(
exclude_categories=['mental_health', 'reproductive_health'],
anonymize_location=True,
include_interpretations=True
)
# Specify recipients (public key encryption)
recipients = [
{'name': 'Son', 'pubkey': load_pubkey('son_pubkey.pem')},
{'name': 'Daughter', 'pubkey': load_pubkey('daughter_pubkey.pem')}
]
# Generate artifact
artifact = generator.create_artifact(
privacy_settings=privacy,
recipients=recipients,
include_longitudinal_data=True,
years_of_data=(2020, 2025)
)
# Save encrypted artifact
artifact.save('hereditary_artifact.json.enc')
# Generate human-readable summary
artifact.generate_summary_pdf('artifact_summary.pdf')
print(f"Artifact created: {artifact.artifact_id}")
print(f"Size: {artifact.size_mb:.2f} MB")
print(f"Data points: {artifact.total_measurements:,}")
print(f"Covered period: {artifact.years_covered} years")
from myome_hereditary import ArtifactReader, FamilyRiskAnalyzer
# Load family artifacts
grandfather_artifact = ArtifactReader.load(
'grandfather_artifact.json.enc',
private_key='my_private_key.pem'
)
father_artifact = ArtifactReader.load(
'father_artifact.json.enc',
private_key='my_private_key.pem'
)
# Analyze family patterns
analyzer = FamilyRiskAnalyzer(
my_genome='my_genome.vcf',
family_artifacts=[grandfather_artifact, father_artifact]
)
# Compute family-calibrated risks
cad_risk = analyzer.compute_risk('coronary_artery_disease')
print(f"Population PRS risk: {cad_risk.population_risk*100:.1f}%")
print(f"Family-calibrated risk: {cad_risk.family_calibrated_risk*100:.1f}%")
print(f"Risk increase factor: {cad_risk.risk_factor:.2f}x")
# Get actionable recommendations
recommendations = analyzer.get_recommendations('coronary_artery_disease')
for rec in recommendations:
print(f"\n{rec.category}:")
print(f" Action: {rec.action}")
print(f" Evidence: {rec.evidence_source}")
print(f" Expected benefit: {rec.risk_reduction*100:.0f}% risk reduction")
print(f" Start by age: {rec.recommended_age}")
# Visualize family trajectories
analyzer.plot_family_biomarker_trajectory(
biomarker='ldl_cholesterol',
save_path='family_ldl_trajectory.png'
)
Hereditary health artifacts raise important ethical questions that Myome addresses through technical and policy safeguards:
Artifact generation requires explicit consent. Donors specify exactly what data is included, who can access it, and under what conditions. Consent is cryptographically signed and irrevocable.
Descendants have the right NOT to know their genetic risk. Artifacts support tiered access: full genomic data, summary-level risk scores only, or no genetic information.
Artifacts include cryptographic timestamps proving they were created before insurance applications, employment decisions, etc., protecting against genetic discrimination.
Donors can revoke artifact access at any time. Recipients must periodically re-authenticate to maintain access, enabling post-mortem privacy control via trusted executors.
These safeguards ensure that hereditary artifacts serve their intended purpose—empowering descendants with health knowledge—without creating new vectors for discrimination or privacy violation.