5D Library › 依恋理论的计算模型与伴侣互动动力学 · English
第三章 戈特曼与默里的婚姻方程
逐个话轮的编码
心理学家约翰·戈特曼与同事从 1970 年代起在实验室里观察伴侣对话:一对夫妇坐下来,讨论一个他们之间反复出现的分歧,约十五分钟,全程录像,同时记录心率、皮肤电等生理信号。研究助理随后按照详细的编码手册,把每个人每个话轮中的情绪表达分类(例如兴趣、幽默、认可是正面的;批评、防御、轻蔑、冷战是负面的),再把一个话轮内的正面与负面加权相减,得到一个分数。这样,一段对话就变成了两串交替的数字。
方程
数学生物学家詹姆斯·默里与戈特曼合作,用这两串数字建立了一组差分方程 (Gottman et al. 2002):
与 分别是妻子和丈夫在第 个话轮的分数。每个人的下一个话轮由三部分组成:
- 不受影响的部分 :如果对方完全不影响自己,一个人会落在「不受影响的设定点」; 是情绪惯性,表示一个人在多大程度上延续自己上一个话轮的情绪。
- 影响函数 :对方上一个话轮的情绪对自己的影响。
书中讨论了几种影响函数的形式。双线性:对方为正时影响斜率较小,为负时斜率较大(负面互动更有影响力)。S 形(ogive):影响在对方情绪很强时趋于饱和。方程的稳态是两条「零斜线」的交点,即 与 同时成立的点。
推导
用示意参数比较四种情形。对每一种,从 169 个不同的初始状态出发迭代,看最后落在哪里。
# The marriage model of Gottman, Murray, Swanson, Tyson & Swanson (2002). Each speaking turn in a
# conflict discussion gets a score (coded positivity minus negativity). For wife W and husband H:
# W[t+1] = a + r1 W[t] + I_HW(H[t]) H[t+1] = b + r2 H[t] + I_WH(W[t+1])
# a/(1 - r1) is the wife's "uninfluenced set point" (where she would settle on her own), r1 her
# emotional inertia, I_HW the husband's influence on her. Steady states are where the two
# null-clines W = (a + I_HW(H))/(1 - r1) and H = (b + I_WH(W))/(1 - r2) cross. Two forms of influence
# function from the book: bilinear (a slope for positive and a steeper one for negative scores) and
# ogive (influence saturates). Parameters are illustrative, not estimates for any couple.
import math
def bilinear(pos, neg):
return lambda x: pos * x if x >= 0 else neg * x
def ogive(pos, neg, s=1.5):
return lambda x: pos * math.tanh(x / s) if x >= 0 else neg * math.tanh(x / s)
def run(a, r1, b, r2, IHW, IWH, W0, H0, n=400):
W, H = W0, H0
for _ in range(n):
W = a + r1 * W + IHW(H)
H = b + r2 * H + IWH(W)
return round(W, 2), round(H, 2)
def attractors(a, r1, b, r2, IHW, IWH):
found = {}
for W0 in range(-12, 13, 2):
for H0 in range(-12, 13, 2):
st = run(a, r1, b, r2, IHW, IWH, W0, H0)
if all(abs(v) < 1e6 for v in st):
found[st] = found.get(st, 0) + 1
return found
cases = [
("bilinear, negativity twice as influential", 1.0, 0.5, 0.8, 0.5, bilinear(0.2, 0.4), bilinear(0.2, 0.4)),
("ogive, mild negative influence", 1.0, 0.5, 0.8, 0.5, ogive(1.0, 1.5), ogive(1.0, 1.5)),
("ogive, strong negative influence", 1.0, 0.5, 0.8, 0.5, ogive(1.0, 4.0), ogive(1.0, 4.0)),
("same, but set points raised (a = b = 2)", 2.0, 0.5, 2.0, 0.5, ogive(1.0, 4.0), ogive(1.0, 4.0)),
]
for label, a, r1, b, r2, IHW, IWH in cases:
att = attractors(a, r1, b, r2, IHW, IWH)
total = sum(att.values())
desc = "; ".join(f"(W, H) = ({w:+.2f}, {h:+.2f}) from {k / total:.0%} of starts" for (w, h), k in sorted(att.items()))
print(f"{label}:\n uninfluenced set points {a / (1 - r1):+.1f}, {b / (1 - r2):+.1f} -> {desc}")
# bilinear, negativity twice as influential:
# uninfluenced set points +2.0, +1.6 -> (W, H) = (+3.14, +2.86) from 100% of starts
# ogive, mild negative influence:
# uninfluenced set points +2.0, +1.6 -> (W, H) = (+3.97, +3.58) from 100% of starts
# ogive, strong negative influence:
# uninfluenced set points +2.0, +1.6 -> (W, H) = (-6.00, -6.39) from 50% of starts; (W, H) = (+3.97, +3.58) from 50% of starts
# same, but set points raised (a = b = 2):
# uninfluenced set points +4.0, +4.0 -> (W, H) = (-3.91, -3.91) from 34% of starts; (W, H) = (+6.00, +6.00) from 66% of starts模型显示了几点。在双线性影响下,即使负面影响是正面影响的两倍,这对示意的伴侣仍然只有一个正面的稳态。在 S 形影响下,负面影响较弱时也只有一个正面稳态;但当负面影响足够强时,出现了两个稳定的稳态:一个正面、一个负面,对话落向哪一个,取决于它是怎样开始的。这与戈特曼观察到的「温和开场」(softened start-up)的重要性在形式上相符:对话的头几分钟往往与它的走向密切相关 (Carrère and Gottman 1999; Gottman 1999)。最后,即使把两人不受影响的设定点都提高到 +4.0,负面稳态仍然存在,只是它的「吸引域」从一半缩小到三分之一左右:只改善各自的情绪起点,不改变彼此影响的方式,回路仍然可能被拖入负面。
注
模型能说明什么,不能说明什么。 戈特曼与默里的模型是描述性的:参数是从每对伴侣自己的对话数据中估计出来的,用来刻画这对伴侣的互动结构。它可以帮助研究者问「这对伴侣的问题主要在设定点、惯性还是相互影响」,但它不是一个可以拿来「解方程、改参数」就修好婚姻的工具;上面的数字也是示意性的。
「5 比 1」与「洛萨达比例」
证据
戈特曼的描述性观察。 戈特曼在纵向研究中比较了多年后仍在一起、关系较满意的伴侣与后来关系恶化或分开的伴侣。在一项对 73 对夫妇的研究中,冲突对话里稳定伴侣的正面与负面行为之比约为 5 比 1,不稳定伴侣约为 0.8 比 1(按编码系统和丈夫、妻子不同,约为 0.5 到 1.1 比 1);值得注意的是,稳定的伴侣中也有冲突很激烈的「火爆型」,他们负面行为很多,但正面行为也很多 (Gottman 1993, 1994)。这是一个在特定任务(冲突讨论)、特定编码系统下的平均观察,戈特曼本人没有把它表述为一个必须达到的数学门槛。
证据
洛萨达比例的兴衰。 另一组完全不同的数字常与此混淆。洛萨达与希菲在一项商业团队会议的观察研究中报告,高绩效团队的正面与负面表达之比约为 5.6 比 1(5.614) (Losada and Heaphy 2004)。弗雷德里克森与洛萨达随后用洛伦茨方程推导出一个「临界正性比例」2.9013:高于它,人「蓬勃发展」,低于它则不然 (Fredrickson and Losada 2005)。2013 年,布朗、索卡尔与弗里德曼详细证明这一推导没有任何依据:方程的选取、参数的来源与从方程到比例的推论都站不住 (Brown et al. 2013)。《美国心理学家》随后发表更正,撤回了该文的数学建模部分及由此得出的 2.9 与 11.6 两个比例 (Fredrickson and Losada 2013)。所以,「5.6 比 1」来自商业团队,「2.9013」是已被撤回的推导,它们都不是戈特曼的婚姻研究结果。
把这几个数字分清楚,不只是为了学术上的准确。比例一旦被当成门槛,伴侣就可能开始「数分数」:今天说了几句好话、几句坏话,有没有达标。而戈特曼的观察本身说的是一种整体气氛:冲突时仍然有足够多的兴趣、幽默与认可在缓冲负面。
「预测离婚」与交叉验证
戈特曼的一些研究报告了很高的离婚预测准确率,在大众媒体中被广泛引用 (Gottman et al. 1998)。海曼与斯莱普指出,这类研究的准确率是在同一个样本上估计的:先在数据中挑选最能区分两组的指标,再用这些指标在同一批伴侣上计算准确率,而没有在新的伴侣上检验(交叉验证)。他们用一批已有的档案数据做了交叉验证的演示,显示这样估计的准确率在新样本上会明显下降,所以报告的准确率很可能被高估 (Heyman and Slep 2001)。
推导
合成数据:60 对伴侣,其中 15 对后来分开。30 个编码指标中只有 2 个与分开真正(微弱地)相关,其余 28 个是噪声。分析者挑出最能区分两组的 5 个指标,用它们给每对伴侣打分并分类。比较两种准确率:在挑选指标的同一批伴侣上计算,与「留一法」(每次把要预测的那对伴侣排除在挑选过程之外)。
# Why "predicts divorce with 90 % accuracy" needs cross-validation (the point made by Heyman & Slep
# 2001). Synthetic data: 60 couples, 15 of whom later separate. 30 coded interaction measures; only
# 2 are truly (weakly, d = 0.5) related to separating, the other 28 are noise. The analyst picks the
# 5 measures that best separate the groups and classifies each couple by a simple score built from
# them. Accuracy is computed (a) on the same couples used to pick the measures and (b) by
# leave-one-out, picking the measures again without the couple being predicted.
import math, random, statistics as st
def make(rng, n=60, n_sep=15, k=30, real=2, d=0.5):
y = [1] * n_sep + [0] * (n - n_sep)
X = [[rng.gauss(d if (j < real and yi) else 0.0, 1) for j in range(k)] for yi in y]
return X, y
def fit(X, y, top=5):
g1 = [x for x, yi in zip(X, y) if yi]; g0 = [x for x, yi in zip(X, y) if not yi]
k = len(X[0]); stats = []
for j in range(k):
a, b = [x[j] for x in g1], [x[j] for x in g0]
sp = math.sqrt((st.variance(a) + st.variance(b)) / 2)
stats.append(((st.mean(a) - st.mean(b)) / sp, j, st.mean(a), st.mean(b), sp))
best = sorted(stats, key=lambda s: -abs(s[0]))[:top]
def score(x): return sum(dz * (x[j] - (m1 + m0) / 2) / sp for dz, j, m1, m0, sp in best)
scores = sorted(score(x) for x in X)
cut = scores[len(scores) - sum(y)] # call the top-scoring couples "will separate"
return lambda x: 1 if score(x) >= cut else 0, [j for _, j, *_ in best]
rng = random.Random(7)
ins, loo, real_picked = [], [], []
for rep in range(60):
X, y = make(rng)
pred, picked = fit(X, y)
ins.append(sum(pred(x) == yi for x, yi in zip(X, y)) / len(y))
real_picked.append(sum(j < 2 for j in picked))
hits = 0
for i in range(len(y)):
p, _ = fit(X[:i] + X[i + 1:], y[:i] + y[i + 1:])
hits += p(X[i]) == y[i]
loo.append(hits / len(y))
print(f"guessing 'nobody separates' is right {45 / 60:.0%} of the time")
print(f"accuracy on the couples used to choose the measures: {st.mean(ins):.0%}")
print(f"leave-one-out accuracy (measures re-chosen without the predicted couple): {st.mean(loo):.0%}")
print(f"of the 5 measures chosen, on average {st.mean(real_picked):.1f} are among the 2 that are real")
# guessing 'nobody separates' is right 75% of the time
# accuracy on the couples used to choose the measures: 80%
# leave-one-out accuracy (measures re-chosen without the predicted couple): 66%
# of the 5 measures chosen, on average 1.2 are among the 2 that are real在挑选指标的同一批伴侣上,准确率约为 80%,看上去不错;但只要把被预测的伴侣排除在挑选过程之外,准确率就降到约 66%,比「猜谁都不分开」的 75% 还低。挑出来的 5 个指标中,平均只有 1 个左右是真正相关的。这并不是说戈特曼的观察都是错的(其中一些,如轻蔑与冷战的负面作用,在许多研究中反复出现),而是说任何「准确率」都必须在独立的样本上检验之后才能相信。
本章小结
戈特曼与默里把冲突对话的逐话轮编码写成差分方程,用不受影响的设定点、情绪惯性与影响函数刻画一对伴侣的互动结构。当负面影响足够强时,模型会出现正面与负面两个稳定状态,对话怎样开始决定它落向哪一个。「约 5 比 1」是戈特曼对稳定伴侣冲突对话的描述性观察;「5.6 比 1」来自商业团队研究,「2.9013」是已被撤回的推导,三者必须分开。预测准确率需要交叉验证。下一章讨论冲突中的身体:心率、皮肤电与伴侣之间的生理联动。
参考文献
Fan, Y. (2026). Computational Attachment Theory and Couple Interaction Dynamics: From Anxious-Avoidant Coupled Oscillators and Gottman's Nonlinear Difference Equations to Updating Early Relational Priors [依恋理论的计算模型与伴侣互动动力学] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23754715 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).