5D Library › 早期经验、表观遗传甲基化与跨代行为先验的传递边界 · English
第一章 「创伤写进 DNA」是真的吗:动物实验与人类证据
先分清几个词
表观遗传指不改变 DNA 序列、却能影响基因是否表达、并能在细胞分裂中保持下去的分子标记,最常被研究的是 DNA 甲基化:在 DNA 的某些胞嘧啶(通常位于 CpG 二核苷酸)上加一个甲基。启动子区域的甲基化增多,常常(并非总是)与该基因表达减少相关。
所以,「经验写进 DNA」这个说法从一开始就不准确:经验可能改变的是 DNA 上的化学标记,而不是 DNA 的「文字」本身。真正的问题是:这些标记能不能跨过生殖细胞,传给没有经历过那件事的后代?
推导
代际与跨代。 把受到暴露的个体记为 F0。与身体一起受到暴露的,还有身体里将来会形成后代的生殖细胞。只出现在直接受到暴露的世代中的效应称为代际(intergenerational)效应;出现在第一代未受直接暴露的后代或更晚世代中的效应,才可能是跨代(transgenerational)的表观遗传。程序的第二部分是一个参数纯属示意的玩具模型:生殖细胞中的标记每一代都要逃过两轮重编程,而行为信道(母亲的照料 → 幼崽 → 幼崽长大后的照料)每一代都被重新建立。
# Which generations are DIRECTLY exposed, and which is the first that is not?
# The exposed individual is F0; germ cells are exposed with the body carrying
# them. Part 2 is a toy model with ILLUSTRATIVE numbers: a germline mark must
# escape two waves of reprogramming per generation, whereas a behavioural
# channel (maternal care -> pup -> her own care) is rebuilt every generation.
EXPOSED = {"adult male": ["F0", "F1 (germ cells)"],
"non-pregnant female": ["F0", "F1 (germ cells)"],
"pregnant female": ["F0", "F1 (fetus)", "F2 (germ cells)"]}
for case, gens in EXPOSED.items():
print(f"{case:19s}: exposed {', '.join(gens)}; first unexposed F{len(gens)}")
esc = 0.10 * 0.50 # escape both waves (illustrative)
fidelity = 0.70 # behavioural channel: share kept per generation
print("share of an induced signal left (illustrative)")
print(" generation | germline mark, escape 0.10 x 0.50 | behavioural channel 0.70")
for g in range(1, 5):
print(f" F{g} | {esc ** g:33.6f} | {fidelity ** g:24.3f}")
# adult male : exposed F0, F1 (germ cells); first unexposed F2
# non-pregnant female: exposed F0, F1 (germ cells); first unexposed F2
# pregnant female : exposed F0, F1 (fetus), F2 (germ cells); first unexposed F3
# share of an induced signal left (illustrative)
# generation | germline mark, escape 0.10 x 0.50 | behavioural channel 0.70
# F1 | 0.050000 | 0.700
# F2 | 0.002500 | 0.490
# F3 | 0.000125 | 0.343
# F4 | 0.000006 | 0.240第一部分的结论是定义性的,与数据无关:怀孕的母亲受到暴露时,第一代未受直接暴露的是 F3;父亲或未怀孕的母亲受到暴露时,是 F2。所以「跨代=F3 及以后」只对孕期暴露成立。第二部分只是说明一个结构:如果一个生殖细胞中的标记每一代只有 5% 的机会逃过重编程,到 F3 只剩万分之一左右;而一个每代保留 70% 信号的行为信道,到 F3 仍保留约三分之一。这两个数字都是假设的,但结构是真实的:行为信道不需要逃过重编程,因为它每一代都被重新建立。
重编程:为什么标记很难传下去
证据
两轮重编程。 哺乳动物的发育中有两次大规模的表观遗传重编程:一次发生在原始生殖细胞中,大部分甲基化被擦除后重新建立;另一次发生在受精后的早期胚胎中,来自父母双方的基因组再次经历广泛的去甲基化与重新甲基化 (Reik et al. 2001)。少数区域(例如印记基因)会逃过其中的部分擦除,但这正是例外。综述认为,在哺乳动物中,真正经由生殖细胞的跨代表观遗传是罕见的,许多声称的例子可以用其他机制解释 (Heard and Martienssen 2014)。
母鼠的舔舐理毛
证据
照料与应激系统。 米尼的实验室观察到,大鼠母亲在哺乳期对幼崽舔舐理毛(licking and grooming,LG)与弓背哺乳的频率有稳定的个体差异。高 LG 母亲的后代成年后,海马中糖皮质激素受体的表达更高,糖皮质激素的负反馈更敏感,对急性应激的下丘脑—垂体—肾上腺轴反应更温和 (Liu et al. 1997)。
甲基化。 韦弗等人发现,这种差异与海马糖皮质激素受体基因(大鼠 Nr3c1)外显子 17 启动子的 DNA 甲基化有关:低 LG 母亲的后代在该启动子上甲基化更多,尤其是转录因子 NGFI-A 结合位点内的一个 CpG 位点;差异在出生后第一周内出现,持续到成年。交叉抚养(把低 LG 母亲的幼崽交给高 LG 母亲抚养,反之亦然)使甲基化模式跟随抚养者而不是生母;在成年动物脑内注入组蛋白去乙酰化酶抑制剂,可以逆转甲基化与应激反应的差异 (Weaver et al. 2004)。
这是表观遗传学中最有影响的研究之一,它显示早期照料可以与一个具体基因的具体调控区域上的化学标记联系起来。但它对「传给下一代」的意义,恰恰与流行的说法相反。
证据
非基因组的传递。 弗朗西斯等人用交叉抚养检验了照料风格本身的代际传递:低 LG 母亲所生、由高 LG 母亲抚养的雌性幼崽,成年后自己成为高 LG 母亲,反之亦然。作者把这称为「非基因组的」代际传递 (Francis et al. 1999)。
推导
一个模拟的交叉抚养实验:每只雌鼠的 LG 分数标准化;两种假说下,女儿成年后的 LG 分别由抚养母亲或生母决定(系数 0.6,示意)。一半幼崽由生母抚养,一半交给无亲缘关系的母亲抚养。只看被交换抚养的女儿:她像谁?
# A simulated cross-fostering experiment in the style of Francis et al. (1999).
# Daughter's adult licking-and-grooming score (LG, standardised) =
# 0.6 x LG of her REARING mother + noise (behavioural channel), or
# 0.6 x LG of her BIRTH mother + noise (germline channel).
# Half the pups are swapped to an unrelated mother. Numbers illustrative.
import random, statistics as st
random.seed(22)
def experiment(channel, n=400, k=0.6):
bio = [random.gauss(0, 1) for _ in range(n)]
rear = list(bio)
idx = list(range(n // 2, n)) # second half: swapped mothers
for i, j in zip(idx, idx[1:] + idx[:1]): rear[i] = bio[j]
src = rear if channel == "behavioural" else bio
dau = [k * s + random.gauss(0, (1 - k * k) ** 0.5) for s in src]
f = slice(n // 2, n)
return st.correlation(bio[f], dau[f]), st.correlation(rear[f], dau[f])
print("cross-fostered daughters only (200 per hypothesis)")
print(" hypothesis | r with biological mother | r with foster mother")
for ch in ("behavioural", "germline"):
rb, rr = experiment(ch)
print(f" {ch:11s} | {rb:24.2f} | {rr:20.2f}")
# cross-fostered daughters only (200 per hypothesis)
# hypothesis | r with biological mother | r with foster mother
# behavioural | 0.07 | 0.63
# germline | 0.65 | -0.07如果照料风格经由行为传递,被交换抚养的女儿与养母的相关约为 0.63,与生母几乎无关(0.07);如果经由生殖细胞传递,模式正好相反。弗朗西斯等人看到的是第一种。所以在这个最经典的模型中,「一代传一代」的是一种照料方式,它在每一代通过母亲对幼崽的实际行为重新写入。这对人类是一个重要的提示,但不是证明:大鼠的哺乳期照料与人类复杂的养育之间相差很远。
证据
人脑中的对应发现。 麦高恩等人比较了自杀身亡者的死后海马组织:有童年受虐史的自杀者(12 人)与没有受虐史的自杀者(12 人)及意外死亡的对照(12 人)相比,糖皮质激素受体基因 NR3C1 外显子 1F 启动子(与大鼠 17 对应)的甲基化更高、受体表达更低 (McGowan et al. 2009)。这是一项小样本、横断面的死后研究,说明的是受虐经历本人身上的关联,不涉及向后代的传递。
人类的观察性研究
证据
荷兰饥荒。 1944—1945 年冬,荷兰西部在纳粹封锁下发生饥荒。海曼斯等人比较了 60 名在受孕前后经历饥荒的人与他们没有经历饥荒的同性别兄弟姐妹:六十年后,前者胰岛素样生长因子 IGF2 差异甲基化区的甲基化平均低约 5.2%(0.488 对 0.515);在孕晚期才经历饥荒的 62 人中则没有显著差异 (Heijmans et al. 2008)。
这是关于早期营养环境与长期甲基化关联的重要证据,用兄弟姐妹做对照也部分控制了家庭与遗传背景。但它的对象是在母亲腹中直接经历饥荒的 F1,属于宫内暴露(常称「胎儿编程」),不是跨代遗传。
证据
大屠杀幸存者的后代。 耶胡达等人测量了 32 名大屠杀幸存者与 22 名成年后代,以及人数更少的犹太裔对照家庭中 FKBP5 基因内含子 7 一个区域的甲基化:幸存者的甲基化比对照父母高约 10%,而幸存者后代的甲基化比对照后代低约 7.7% (Yehuda et al. 2016)。
这项研究被广泛报道为「创伤遗传」的证据,但它有几个关键限制:样本很小,尤其是对照组;只检查了一个基因的一个区域;后代与父母的方向相反,这与「标记原样传下去」的想象不一致;最重要的是,后代在母亲腹中、在幸存者父母的养育中、在家庭的叙事与氛围中长大,研究设计无法区分宫内环境、出生后养育与生殖细胞三条途径。
证据
批评性综述。 霍斯特姆克指出:真正的跨代表观遗传是指表观遗传信息经由生殖细胞的传递;母亲孕期暴露时必须研究 F3 及以后,父亲暴露时必须研究 F2;生殖细胞分化与受精后的染色质重塑是传递的主要障碍;与实验动物不同,在人类中不可能排除生态与文化的传递,遗传差异则必须排除;附近的遗传变异还可能造成看似可遗传的「继发性表观突变」。他的结论是,人类跨代表观遗传的证据「尚无定论」(Horsthemke 2018)。
推导
为什么小样本的甲基化研究尤其需要重复?模拟 20 名「暴露后代」与 10 名对照,在 20 个 CpG 位点上做韦尔奇 t 检验。情况一:任何位点都没有真实差异。情况二:其中一个位点有 0.3 个标准差的真实差异。样本规模与效应量都是示意值。
# Why small human methylation studies need replication. Simulated studies
# compare "exposed offspring" (n = 20) with controls (n = 10) at 20 CpG sites,
# using Welch's t-test. Case 1: no true difference anywhere. Case 2: one site
# has a true difference of 0.3 SD. Sizes and effect are illustrative.
import math, random, statistics as st
random.seed(7)
def betacf(a, b, x): # continued fraction, incomplete beta function
qab, qap, qam, c, d = a + b, a + 1, a - 1, 1.0, 1 - (a + b) * x / (a + 1)
d = 1 / d; h = d
for m in range(1, 200):
m2 = 2 * m
for aa in (m * (b - m) * x / ((qam + m2) * (a + m2)),
-(a + m) * (qab + m) * x / ((a + m2) * (qap + m2))):
d = 1 / (1 + aa * d); c = 1 + aa / c; h *= d * c
return h
def p_two_sided(t, df): # P(|T| > |t|), Student's t with df d.o.f.
x = df / (df + t * t)
lb = math.lgamma(df / 2 + 0.5) - math.lgamma(df / 2) - math.lgamma(0.5)
bt = math.exp(lb + (df / 2) * math.log(x) + 0.5 * math.log(1 - x))
if x < (df / 2 + 1) / (df / 2 + 1.5):
return bt * betacf(df / 2, 0.5, x) / (df / 2)
return 1 - bt * betacf(0.5, df / 2, 1 - x) / 0.5
def welch(x, y):
vx, vy = st.variance(x) / len(x), st.variance(y) / len(y)
t = (st.fmean(x) - st.fmean(y)) / math.sqrt(vx + vy)
df = (vx + vy) ** 2 / (vx ** 2 / (len(x) - 1) + vy ** 2 / (len(y) - 1))
sp = math.sqrt((st.variance(x) + st.variance(y)) / 2)
return p_two_sided(t, df), (st.fmean(x) - st.fmean(y)) / sp
def study(true_d, n1=20, n0=10, sites=20):
res = []
for s in range(sites):
shift = true_d if s == 0 else 0.0
res.append(welch([random.gauss(shift, 1) for _ in range(n1)],
[random.gauss(0, 1) for _ in range(n0)]))
return res
R = 1000
null = [study(0.0) for _ in range(R)]
share = sum(any(p < .05 for p, _ in s) for s in null) / R
print(f"no true effect: studies with at least one site p < .05: {share:.0%}")
true = [study(0.3) for _ in range(R)]
hits = [d for s in true for (p, d) in s[:1] if p < .05]
print(f"true 0.3 SD at one site: power at that site {len(hits) / R:.0%};")
print(f" mean estimated effect when significant {st.fmean(hits):.2f} SD")
big = sum(study(0.3, 200, 100, 1)[0][0] < .05 for _ in range(500)) / 500
print(f"with n = 200 vs 100 the same site is detected in {big:.0%} of studies")
# no true effect: studies with at least one site p < .05: 65%
# true 0.3 SD at one site: power at that site 12%;
# mean estimated effect when significant 0.91 SD
# with n = 200 vs 100 the same site is detected in 66% of studies即使任何位点都没有真实差异,也有约 65% 的研究会至少在一个位点上得到 ;而真实存在的 0.3 个标准差的差异,只有约 12% 的机会被检出,被检出时估计值平均约为 0.91 个标准差,是真实值的三倍。样本扩大到 200 对 100 时,检出率升到约 66%。这不是说上述研究是假阳性,而是说:单个小样本研究的「显著」甲基化差异,在被独立的大样本重复之前,不能作为结论。
那么,代际相似从哪里来
把这一章的证据放在一起,可以给出一个比流行说法更准确的图景:
- 在哺乳动物中,经由生殖细胞的跨代表观遗传受到两轮重编程的强烈限制,在人类中证据很薄弱;
- 有较好证据的是宫内暴露:母亲孕期的营养与应激可以与后代的长期生物学差异相关,这属于代际效应;
- 家庭成员之间更大的相似来源,是基因的遗传(第二、三章)与出生后的社会学习环境(第四至六章)。后者恰恰是可以改变的。
注
不要把甲基化当成命运。 甲基化是动态的,随组织、年龄与环境变化;血液或唾液中测到的甲基化不一定反映大脑中的状态;商业化的「表观遗传年龄」或「创伤印记」检测不能用于判断任何个人或家庭。本章讨论的研究都是群体层面的关联,不能用来推断某个孩子「继承」了什么。
本章小结
甲基化改变的是 DNA 上的标记而不是序列。母鼠研究中,照料风格的代际相似跟随抚养者而不是生母,是通过行为每一代重建的;荷兰饥荒是宫内暴露的证据,大屠杀幸存者研究样本小、方向相反、无法区分途径;人类跨代表观遗传的证据尚无定论。孕期暴露要到 F3、父亲或未孕母亲暴露要到 F2,才是第一代未受直接暴露的后代。下一章讨论更大的相似来源:基因。
参考文献
Fan, Y. (2026). Early Experience, Epigenetic Methylation and the Limits of Intergenerational Transmission: From Glucocorticoid-Receptor Programming and Twin Variance Decomposition to Social-Learning Channels, Read Beside Classical Chinese Family Instruction [早期经验、表观遗传甲基化与跨代行为先验的传递边界] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23761337 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).