5D Library › Computational Attachment Theory and Couple Interaction Dynamics · 中文
Chapter 3 Gottman and Murray’s Marriage Equations
Coding turn by turn
From the 1970s the psychologist John Gottman and colleagues observed couples’ conversations in the laboratory: a couple sits down and discusses a recurring disagreement for about fifteen minutes, video-recorded throughout, while heart rate, skin conductance and other physiological signals are recorded. Research assistants then classify each partner’s emotional expression in each speaking turn using a detailed coding manual (interest, humour and validation are positive; criticism, defensiveness, contempt and stonewalling negative), and subtract weighted negatives from weighted positives within a turn to obtain a score. A conversation thus becomes two alternating strings of numbers.
The equations
The mathematical biologist James Murray worked with Gottman to build a set of difference equations from these strings (Gottman et al. 2002):
and are the wife’s and husband’s scores at turn . Each person’s next turn has three parts:
- The uninfluenced part : if the other had no influence at all, a person would settle at the “uninfluenced set point” ; is emotional inertia, how far a person carries over the emotion of their own last turn.
- The influence function : the effect of the other’s last turn on oneself.
The book discusses several forms of influence function. Bilinear: a smaller slope when the other is positive, a steeper one when negative (negative interactions carry more weight). Ogive (S-shaped): influence saturates when the other’s emotion is strong. The steady states of the equations are where the two “null-clines” cross, the points where and hold together.
Calculation
Four cases with illustrative parameters. For each, iterate from 169 different starting states and see where they end up.
# 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 startsThe model shows several things. With bilinear influence, even when negative influence is twice as strong as positive, this illustrative couple still has only one, positive, steady state. With ogive influence and weak negative influence there is also only one positive steady state; but when negative influence is strong enough, two stable steady states appear, one positive and one negative, and which one the conversation falls toward depends on how it starts. This fits, in form, the importance Gottman observed for a “softened start-up”: the first few minutes of a conversation are closely tied to where it goes (Carrère and Gottman 1999; Gottman 1999). Finally, even when both partners’ uninfluenced set points are raised to +4.0, the negative steady state remains; only its “basin of attraction” shrinks from half to about a third. Improving each person’s emotional starting point, without changing how they influence each other, still leaves the loop able to be dragged into the negative.
Note
What the model can and cannot show. Gottman and Murray’s model is descriptive: its parameters are estimated from each couple’s own conversation data to characterise that couple’s interaction structure. It can help researchers ask “is this couple’s difficulty mainly in set points, inertia or mutual influence?”, but it is not a tool for “solving the equation and changing the parameters” to fix a marriage; and the numbers above are illustrative.
“5 to 1” and the “Losada ratio”
Evidence
Gottman’s descriptive observation. In longitudinal studies Gottman compared couples who years later were still together and fairly satisfied with couples whose relationships deteriorated or ended. In a study of 73 couples, the ratio of positive to negative behaviours in conflict discussions was about 5 to 1 for stable couples and about 0.8 to 1 for unstable ones (roughly 0.5 to 1.1 depending on the coding system and the spouse); notably, the stable couples included “volatile” couples whose conflicts were intense and who showed a great deal of negativity, but also a great deal of positivity (Gottman 1993, 1994). This is an average observation for a specific task (a conflict discussion) under a specific coding system; Gottman himself did not present it as a mathematical threshold that must be reached.
Evidence
The rise and fall of the Losada ratio. A quite different set of numbers is often confused with this. In an observational study of business-team meetings, Losada and Heaphy reported a ratio of positive to negative expressions of about 5.6 to 1 (5.614) in high-performing teams (Losada and Heaphy 2004). Fredrickson and Losada then derived from the Lorenz equations a “critical positivity ratio” of 2.9013: above it people “flourish”, below it they do not (Fredrickson and Losada 2005). In 2013 Brown, Sokal and Friedman showed in detail that the derivation had no basis: the choice of equations, the source of the parameters and the inference from equations to ratio all failed (Brown et al. 2013). American Psychologist then published a correction withdrawing the paper’s mathematical modelling and the ratios of 2.9 and 11.6 derived from it (Fredrickson and Losada 2013). So “5.6 to 1” comes from business teams and “2.9013” from a withdrawn derivation; neither is a result of Gottman’s marriage research.
Keeping these numbers apart matters for more than academic accuracy. Once a ratio is treated as a threshold, couples may start “keeping score”: how many kind words today, how many harsh ones, did we pass? Gottman’s observation itself describes an overall climate: enough interest, humour and validation even during conflict to buffer the negatives.
“Predicting divorce” and cross-validation
Some of Gottman’s studies reported very high accuracy in predicting divorce and were widely quoted in the popular media (Gottman et al. 1998). Heyman and Slep pointed out that accuracies of this kind were estimated on the same sample: the measures that best separated the groups were picked from the data and then used to compute accuracy on the same couples, without testing on new couples (cross-validation). Using an existing archival data set, they demonstrated with cross-validation that accuracy estimated this way falls markedly in a new sample, so the reported accuracies were probably overstated (Heyman and Slep 2001).
Calculation
Synthetic data: 60 couples, 15 of whom later separate. Of 30 coded measures only 2 are truly (weakly) related to separating; the other 28 are noise. The analyst picks the 5 measures that best separate the groups, scores each couple on them and classifies. Two accuracies are compared: computed on the same couples used to pick the measures, and by “leave-one-out” (the couple being predicted is left out of the picking each time).
# 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 realOn the couples used to pick the measures, accuracy is about 80 %, which looks good; but as soon as the predicted couple is left out of the picking, accuracy falls to about 66 %, below the 75 % of “guess that nobody separates”. Of the 5 measures picked, on average only about one is truly related. This does not mean Gottman’s observations are all wrong (some, such as the harm of contempt and stonewalling, recur in many studies), but that any “accuracy” must be tested on an independent sample before it can be believed.
Chapter summary
Gottman and Murray wrote turn-by-turn coding of conflict conversations as difference equations, characterising a couple’s interaction structure by uninfluenced set points, emotional inertia and influence functions. When negative influence is strong enough, the model has two stable states, positive and negative, and how a conversation starts decides which it falls toward. “About 5 to 1” is Gottman’s descriptive observation of stable couples’ conflict discussions; “5.6 to 1” comes from research on business teams and “2.9013” from a withdrawn derivation, and the three must be kept apart. Prediction accuracies need cross-validation. The next chapter turns to the body in conflict: heart rate, skin conductance and physiological linkage between partners.
References
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).