5D Library › 早期经验、表观遗传甲基化与跨代行为先验的传递边界 · English

第二章 双生子研究与行为遗传学的「三大定律」

为什么要用双生子

同卵双生子(MZ)几乎共享全部 DNA 序列,异卵双生子(DZ)平均共享一半的分离遗传变异,就像普通兄弟姐妹;两者通常都在同一个家庭中、同一年龄长大。如果某个特征在同卵双生子之间比在异卵双生子之间更相似,这种额外的相似就提示了基因的作用。

经典双生子设计把个体差异(方差)分成三部分:A,加性遗传;C,共享环境,即让同一家庭中长大的孩子彼此更相似的一切环境因素(家庭收入、社区、父母共同的养育方式等);E,非共享环境,即让同一家庭中长大的孩子彼此不同的一切因素(不同的朋友、老师、疾病、偶然事件,以及父母对每个孩子的不同对待),测量误差也被归入 E。

注

C 和 E 的名字容易误导。 「共享环境」不等于「家庭环境」:父母对两个孩子不同的对待属于 E;而家庭之外、双生子共同经历的因素(同一所学校、同一个社区)属于 C。「非共享环境」也不只是「运气」,它包括同伴、导师与每个人独特的经历,第四至六章讨论的社会学习信道有很大一部分落在这里。

法尔科纳公式

推导

设 rMZr_{MZ}、rDZr_{DZ} 为同卵与异卵双生子的组内相关。在只有加性遗传、共享环境与非共享环境的简单模型下:

h2=2(rMZ−rDZ),c2=2rDZ−rMZ,e2=1−rMZh^2 = 2(r_{MZ} – r_{DZ}), \qquad c^2 = 2 r_{DZ} – r_{MZ}, \qquad e^2 = 1 – r_{MZ}

这就是法尔科纳公式 (Falconer and Mackay 1996)。表中前两行用的是科尼格等人报告的宗教性相关(169 对同卵、104 对异卵成年男性双生子,分别回忆青少年时期与报告目前的宗教性)(Koenig et al. 2005),后两行是示意的模式。

# Falconer's formulas: from twin correlations to a rough ACE split.
#   h2 = 2 (rMZ - rDZ)   additive genetic share (A)
#   c2 = 2 rDZ - rMZ     shared-environment share (C)
#   e2 = 1 - rMZ         non-shared environment plus measurement error (E)
# Religiousness rows: correlations reported by Koenig et al. (2005) for 169 MZ
# and 104 DZ adult male twin pairs. Other rows are ILLUSTRATIVE patterns.

def falconer(rmz, rdz):
    return 2 * (rmz - rdz), 2 * rdz - rmz, 1 - rmz

rows = [("religiousness, recalled adolescence", 0.69, 0.59),
        ("religiousness, current (age ~33)", 0.62, 0.42),
        ("illustrative: purely additive", 0.50, 0.25),
        ("illustrative: rDZ < half of rMZ", 0.50, 0.15)]
print(" trait                               | rMZ  | rDZ  |  h2   |  c2   |  e2")
for name, rmz, rdz in rows:
    h2, c2, e2 = falconer(rmz, rdz)
    print(f" {name:35s} | {rmz:.2f} | {rdz:.2f} | {h2:5.2f} | {c2:5.2f} |"
          f" {e2:5.2f}")
print("a negative c2 is impossible as a variance: it signals dominance,")
print("epistasis, contrast effects or sampling error - hence model fitting")
#  trait                               | rMZ  | rDZ  |  h2   |  c2   |  e2
#  religiousness, recalled adolescence | 0.69 | 0.59 |  0.20 |  0.49 |  0.31
#  religiousness, current (age ~33)    | 0.62 | 0.42 |  0.40 |  0.22 |  0.38
#  illustrative: purely additive       | 0.50 | 0.25 |  0.50 |  0.00 |  0.50
#  illustrative: rDZ < half of rMZ     | 0.50 | 0.15 |  0.70 | -0.20 |  0.50
# a negative c2 is impossible as a variance: it signals dominance,
# epistasis, contrast effects or sampling error - hence model fitting

宗教性是一个好例子。对青少年时期的回忆,同卵与异卵的相关很接近(0.69 与 0.59),按法尔科纳公式共享环境约占 0.49;对目前的宗教性,同卵相关明显高于异卵(0.62 与 0.42),遗传约占 0.40,共享环境降到约 0.22。科尼格等人用正式模型得到的估计是遗传从 12% 升到 44%,共享环境从 56% 降到 18%,方向相同。也就是说,同一个特征,在家里生活的那些年与离开家之后,方差的构成可以很不一样。

第四行显示了法尔科纳公式的一个毛病:当异卵相关不到同卵相关的一半时,它会给出负的 c2c^2。方差不能是负的;这种模式提示存在显性或上位遗传效应、双生子之间的对比效应,或者只是抽样误差。这正是研究者改用模型拟合的原因。

最大似然拟合 ACE 模型

推导

用标准库实现 ACE 模型的最大似然拟合 (Neale and Cardon 1992)。模拟 600 对同卵与 600 对异卵双生子,已知真实值 A = 0.45、C = 0.10、E = 0.45(示意)。模型规定每个双生子的方差为 a+c+ea + c + e,同卵对内协方差为 a+ca + c,异卵为 a/2+ca/2 + c;用两组的 2×2 样本协方差矩阵 SS 写出高斯对数似然

log⁡L=−n2[lndetΣ+tr(Σ−1S)]\log L = -\frac{n}{2}\left[\ln \det \Sigma + \operatorname{tr}\left(\Sigma^{-1} S\right)\right]

并用简单的模式搜索求最大值。再比较去掉 C 的 AE 模型与去掉 A 的 CE 模型,最后重复模拟 200 次,看 C 的估计有多稳定。

# Maximum-likelihood fit of the ACE twin model, standard library only.
# Pairs simulated with KNOWN shares A = .45, C = .10, E = .45 (illustrative).
# Twin variance a + c + e; pair covariance a + c (MZ) or a/2 + c (DZ). With a
# group's 2x2 sample covariance S: logL = -n/2 [ln det(Sigma) + tr(Sigma^-1 S)].
import math, random
random.seed(2015)
SA, SC, SE = math.sqrt(.45), math.sqrt(.10), math.sqrt(.45)

def group(n, r_gen):                 # returns (n, variance, covariance), k
    d = []
    for _ in range(n):
        g1 = random.gauss(0, 1)
        g2 = r_gen * g1 + math.sqrt(1 - r_gen ** 2) * random.gauss(0, 1)
        sh = random.gauss(0, 1)
        d.append((SA * g1 + SC * sh + SE * random.gauss(0, 1),
                  SA * g2 + SC * sh + SE * random.gauss(0, 1)))
    m = sum(x + y for x, y in d) / (2 * n)
    v = sum((x - m) ** 2 + (y - m) ** 2 for x, y in d) / (2 * n)
    return (n, v, sum((x - m) * (y - m) for x, y in d) / n), r_gen

def loglik(par, groups):
    a, c, e = (p * p for p in par); ll = 0.0
    for (n, v, cv), k in groups:
        s11, s12 = a + c + e, k * a + c; det = s11 * s11 - s12 * s12
        if det <= 1e-12: return -1e18
        ll -= n / 2 * (math.log(det) + (2 * s11 * v - 2 * s12 * cv) / det)
    return ll

def fit(groups, free=(1, 1, 1)):     # pattern search on sqrt(a), sqrt(c), sqrt(e)
    par = [0.6 * f for f in free]; best = loglik(par, groups); step = 0.25
    while step > 1e-5:
        moved = False
        for i in (i for i in range(3) if free[i]):
            for s in (step, -step):
                t = list(par); t[i] += s; ll = loglik(t, groups)
                if ll > best: par, best, moved = t, ll, True
        if not moved: step /= 2
    a, c, e = (p * p for p in par)
    return (a / (a + c + e), c / (a + c + e), e / (a + c + e)), best

g = [group(600, 1.0), group(600, 0.5)]
rmz, rdz = (cv / v for (_, v, cv), _ in g)
print("one study: 600 MZ + 600 DZ pairs; truth A = .45, C = .10, E = .45")
print(f"  Falconer: h2 = {2 * (rmz - rdz):.2f}, c2 = {2 * rdz - rmz:.2f},"
      f" e2 = {1 - rmz:.2f}")
(ace, l1), (_, l_ae), (_, l_ce) = fit(g), fit(g, (1, 0, 1)), fit(g, (0, 1, 1))
print("  ML ACE:   a2 = {:.2f}, c2 = {:.2f}, e2 = {:.2f}".format(*ace))
print(f"  drop C: chi2 = {2 * (l1 - l_ae):.2f}; drop A: chi2 ="
      f" {2 * (l1 - l_ce):.2f}  (1 df; 5 % cut-off 3.84)")
c_est, keep = [], 0
for _ in range(200):
    g = [group(600, 1.0), group(600, 0.5)]
    (est, l1), (_, l0) = fit(g), fit(g, (1, 0, 1))
    c_est.append(est[1]); keep += 2 * (l1 - l0) > 3.84
m = sum(c_est) / 200; sd = math.sqrt(sum((x - m) ** 2 for x in c_est) / 199)
print(f"200 replications: ML c2 mean {m:.2f}, SD {sd:.2f};"
      f" C judged significant in {keep / 2:.0f} %")
# one study: 600 MZ + 600 DZ pairs; truth A = .45, C = .10, E = .45
#   Falconer: h2 = 0.48, c2 = 0.10, e2 = 0.42
#   ML ACE:   a2 = 0.49, c2 = 0.09, e2 = 0.42
#   drop C: chi2 = 1.49; drop A: chi2 = 35.29  (1 df; 5 % cut-off 3.84)
# 200 replications: ML c2 mean 0.11, SD 0.07; C judged significant in 30 %

在这次模拟中,法尔科纳公式与最大似然给出几乎相同的答案(遗传约 0.48–0.49,共享环境约 0.09–0.10)。去掉 A 会使拟合显著变差(卡方 35.29),去掉 C 则不会(卡方 1.49,低于 3.84 的常用界限)。重复 200 次,C 的估计平均为 0.11、标准差 0.07,但只有约 30% 的研究会判定 C「显著」。

这说明一件常被忽略的事:在中等规模的双生子研究中,「C 不显著」常常只是检验力不足,而不是 C 等于零。 真实的 C 是 0.10,大多数研究却会把它从模型中删掉。

三大定律与五十年的汇总

证据

三大定律。 特克海默把行为遗传学的结果概括为三条「定律」:第一,人类的所有行为特征都有遗传性;第二,在同一家庭中长大的作用小于基因的作用;第三,复杂人类行为特征的变异中,有相当大的部分既不能由基因、也不能由家庭解释 (Turkheimer 2000)。

证据

五十年的双生子研究。 波尔德曼等人汇总了 1958—2012 年发表的 2,748 篇双生子研究,涉及 17,804 个特征、约 1,456 万对(部分重叠的)双生子:所有特征的平均遗传力为 49%,报告的共享环境平均为 0.174;69% 的特征的双生子相关符合只有加性遗传的简单模型;但在品行障碍、身高、高级认知功能、多动障碍等 8 个特征上,共享环境的加权估计显著不为零 (Polderman et al. 2015)。

证据

随年龄上升的遗传力。 哈沃思等人在四个国家约 11,000 对双生子中发现,一般认知能力的遗传力从儿童期(9 岁)的 41% 升到青少年期(12 岁)的 55%,再到成年早期(17 岁)的 66%;共享环境则从 33% 降到 18%,成年早期约为 16% (Haworth et al. 2010)。布里利与塔克-德罗布对纵向研究的元分析显示,这种上升在儿童早期主要来自新的遗传影响出现,之后主要来自已有遗传影响的放大,作者认为这与人们越来越多地选择和塑造与自己倾向相符的环境一致 (Briley and Tucker-Drob 2013)。普洛明等人把「智力的遗传力在发展中上升」列为行为遗传学十大重复发现之一 (Plomin et al. 2016)。

证据

儿童期的共享环境。 伯特对儿童与青少年心理病理的元分析发现,在品行问题、对立违抗、焦虑与抑郁等方面,共享环境的影响通常不为零、而且相当一致;在注意缺陷多动障碍上则基本为零 (Burt 2009)。

所以,「家庭环境不重要」是对这些结果的误读。更准确的说法是:在成年期测量的许多人格与认知特征中,让同一家庭的孩子彼此更相似的那部分环境作用较小;而在儿童期、在某些行为问题与态度上,它并不小。 此外,C 小并不等于父母不重要:父母对每个孩子的不同对待落在 E 里;父母的选择(搬到哪个社区、送孩子去哪所学校)可能通过同伴环境起作用;而且研究样本中极端的忽视与虐待往往很少,所以「正常范围内」的家庭差异作用较小,并不说明极端情况无关紧要。

遗传力会随环境改变

推导

遗传力不是特征本身的固定属性。下面按家庭社会经济地位(SES,0 为最贫困、1 为最富裕)设定方差成分:「调节」情境中 A 随 SES 增大、C 随 SES 减小,形状模仿特克海默等人报告的模式(参数为示意);「恒定」情境中各成分不随 SES 变化。在每个 SES 五分位中用法尔科纳公式估计。

# Heritability is not fixed: a gene x SES interaction. Variance components
# depend on family SES s (0 = poorest, 1 = richest); ILLUSTRATIVE values
# shaped like the US pattern of Turkheimer et al. (2003):
#   "moderated": A = 0.05 + 0.75 s, C = 0.60 - 0.50 s, E = 0.30
#   "constant":  A = 0.45, C = 0.20, E = 0.30 (no interaction)
# Falconer's formulas are applied within each fifth of SES.
import math, random
random.seed(2003)

def comps(s, kind):
    if kind == "moderated": return 0.05 + 0.75 * s, 0.60 - 0.50 * s, 0.30
    return 0.45, 0.20, 0.30

def twin(r_gen, s, kind):
    a, c, e = comps(s, kind)
    g1 = random.gauss(0, 1)
    g2 = r_gen * g1 + math.sqrt(1 - r_gen ** 2) * random.gauss(0, 1)
    sh = random.gauss(0, 1)
    return (math.sqrt(a) * g1 + math.sqrt(c) * sh
            + math.sqrt(e) * random.gauss(0, 1),
            math.sqrt(a) * g2 + math.sqrt(c) * sh
            + math.sqrt(e) * random.gauss(0, 1))

def r(d):
    n = len(d); m = sum(x + y for x, y in d) / (2 * n)
    v = sum((x - m) ** 2 + (y - m) ** 2 for x, y in d) / (2 * n)
    return sum((x - m) * (y - m) for x, y in d) / n / v

def by_fifth(kind, n_per_zyg):
    out = []
    for q in range(5):
        lo = q / 5
        mz = [twin(1.0, lo + random.random() / 5, kind) for _ in range(n_per_zyg)]
        dz = [twin(0.5, lo + random.random() / 5, kind) for _ in range(n_per_zyg)]
        rm, rd = r(mz), r(dz)
        out.append((q + 1, 2 * (rm - rd), 2 * rd - rm))
    return out

if __name__ == "__main__":
    print("10,000 MZ + 10,000 DZ pairs per SES fifth (to show the pattern)")
    print(" SES fifth | moderated: h2   c2 | constant: h2   c2")
    rows = zip(by_fifth("moderated", 10000), by_fifth("constant", 10000))
    for (q, h1, c1), (_, h2, c2) in rows:
        print(f"     {q}     |        {h1:5.2f} {c1:5.2f} |"
              f"       {h2:5.2f} {c2:5.2f}")
    est = [by_fifth("moderated", 32)[0][1] for _ in range(300)]
    m = sum(est) / 300; sd = math.sqrt(sum((x - m) ** 2 for x in est) / 299)
    print("with only 32 MZ + 32 DZ pairs in the poorest fifth,")
    print(f"  h2 estimates have SD {sd:.2f}")
# 10,000 MZ + 10,000 DZ pairs per SES fifth (to show the pattern)
#  SES fifth | moderated: h2   c2 | constant: h2   c2
#      1     |         0.15  0.55 |        0.47  0.21
#      2     |         0.26  0.44 |        0.46  0.23
#      3     |         0.40  0.33 |        0.45  0.23
#      4     |         0.51  0.23 |        0.47  0.21
#      5     |         0.64  0.10 |        0.47  0.21
# with only 32 MZ + 32 DZ pairs in the poorest fifth,
#   h2 estimates have SD 0.28
家庭社会经济地位调节遗传力的示意模型(参数为示意)。实线:遗传与共享环境的比例随 SES 变化,最贫困的五分之一中共享环境占主导,最富裕的五分之一中遗传占主导;虚线:不存在交互作用时,两者在各 SES 水平上基本不变。

在调节情境中,同一个特征在最贫困家庭中的遗传力只有约 0.15,共享环境约 0.55;在最富裕家庭中遗传力约 0.64,共享环境约 0.10。一个直观的解释是:当环境严重受限时,环境差异主导了个体差异;当环境足够好时,剩下的差异更多反映基因的差异。程序最后一行提醒,每个五分位如果只有 32 对同卵与 32 对异卵双生子,遗传力估计的标准差约为 0.28,几乎无法分辨任何模式,这类研究需要很大的样本或连续的调节模型。

证据

SES 与遗传力:美国与美国以外。 特克海默等人在美国全国协作围产期项目的 7 岁双生子中发现,智商的遗传与环境比例随 SES 非线性变化:在贫困家庭中,共享环境约解释 60% 的变异,基因的贡献接近于零;在富裕家庭中几乎正好相反 (Turkheimer et al. 2003)。塔克-德罗布与贝茨汇总了 14 项研究、24,926 对双生子与兄弟姐妹:这一交互作用在美国样本中存在,在西欧与澳大利亚样本中没有得到支持,荷兰甚至有相反方向的证据 (Tucker-Drob and Bates 2016)。一种解释是,这些国家更完善的社会福利与教育体系缩小了贫困对发展的限制。

这个结果本身就是反对基因决定论最有力的证据之一:遗传力的大小取决于人群与社会制度,改变环境可以改变遗传力。

双生子设计的局限

注

几个必须写明的限制。 第一,平等环境假设:模型假定同卵与异卵双生子所经历的环境相似程度相同;同卵双生子确实常被更相似地对待,但检验表明,在若干精神疾病上,这种相似对待并不能解释同卵的更高一致性 (Kendler et al. 1993);这一假设在不同特征上是否成立仍有争论。第二,E 包含测量误差:量表信度为 0.8 时,总变异的 20% 是测量误差,而这部分全部被计入 E,所以 E 中至少有五分之一(通常更多)其实是误差。第三,样本代表性:研究对象多来自高收入国家与特定年代,环境范围有限,结论不能直接外推。第四,经典模型假定没有基因—环境相关与交互作用,而下一章将说明,这两者都普遍存在。

注

遗传力不是个人的比例。 遗传力 0.5 不表示某个人的某种特征「一半来自基因、一半来自环境」。它是一个人群中个体差异的统计分解,对单个人没有意义;它也不说明特征能否改变:近视的遗传力很高,眼镜照样有效。

本章小结

法尔科纳公式简单但会给出负值,最大似然拟合更合适;中等样本中「C 不显著」常常只是检验力不足。五十年的汇总显示平均遗传力约 49%、共享环境约 0.17;智力的遗传力随年龄上升,而在儿童期的部分行为问题与青少年的宗教性上共享环境并不小。遗传力随环境变化,SES 交互作用在美国样本中存在、在西欧与澳大利亚不存在。遗传力是群体统计量,不是个人的比例,也不意味着不可改变。

参考文献

Briley, Daniel A., and Elliot M. Tucker-Drob. 2013. “Explaining the Increasing Heritability of Cognitive Ability Across Development: A Meta-Analysis of Longitudinal Twin and Adoption Studies.” Psychological Science 24 (9): 1704–13. https://doi.org/10.1177/0956797613478618.
Burt, S. Alexandra. 2009. “Rethinking Environmental Contributions to Child and Adolescent Psychopathology: A Meta-Analysis of Shared Environmental Influences.” Psychological Bulletin 135 (4): 608–37. https://doi.org/10.1037/a0015702.
Falconer, Douglas S., and Trudy F. C. Mackay. 1996. Introduction to Quantitative Genetics. 4th ed. Longman.
Haworth, Claire M. A., Margaret J. Wright, Michelle Luciano, Nicholas G. Martin, et al. 2010. “The Heritability of General Cognitive Ability Increases Linearly from Childhood to Young Adulthood.” Molecular Psychiatry 15 (11): 1112–20. https://doi.org/10.1038/mp.2009.55.
Kendler, Kenneth S., Michael C. Neale, Ronald C. Kessler, Andrew C. Heath, and Lindon J. Eaves. 1993. “A Test of the Equal-Environment Assumption in Twin Studies of Psychiatric Illness.” Behavior Genetics 23 (1): 21–27. https://doi.org/10.1007/BF01067551.
Koenig, Laura B., Matt McGue, Robert F. Krueger, and Jr. Bouchard Thomas J. 2005. “Genetic and Environmental Influences on Religiousness: Findings for Retrospective and Current Religiousness Ratings.” Journal of Personality 73 (2): 471–88. https://doi.org/10.1111/j.1467-6494.2005.00316.x.
Neale, Michael C., and Lon R. Cardon. 1992. Methodology for Genetic Studies of Twins and Families. Kluwer Academic.
Plomin, Robert, John C. DeFries, Valerie S. Knopik, and Jenae M. Neiderhiser. 2016. “Top 10 Replicated Findings from Behavioral Genetics.” Perspectives on Psychological Science 11 (1): 3–23. https://doi.org/10.1177/1745691615617439.
Polderman, Tinca J. C., Beben Benyamin, Christiaan A. de Leeuw, et al. 2015. “Meta-Analysis of the Heritability of Human Traits Based on Fifty Years of Twin Studies.” Nature Genetics 47 (7): 702–9. https://doi.org/10.1038/ng.3285.
Tucker-Drob, Elliot M., and Timothy C. Bates. 2016. “Large Cross-National Differences in Gene Socioeconomic Status Interaction on Intelligence.” Psychological Science 27 (2): 138–49. https://doi.org/10.1177/0956797615612727.
Turkheimer, Eric. 2000. “Three Laws of Behavior Genetics and What They Mean.” Current Directions in Psychological Science 9 (5): 160–64. https://doi.org/10.1111/1467-8721.00084.
Turkheimer, Eric, Andreana Haley, Mary Waldron, Brian D’Onofrio, and Irving I. Gottesman. 2003. “Socioeconomic Status Modifies Heritability of IQ in Young Children.” Psychological Science 14 (6): 623–28. https://doi.org/10.1046/j.0956-7976.2003.psci_1475.x.

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