5D Library › Computational Attachment Theory and Couple Interaction Dynamics · 中文
Chapter 8 Practice and a Pre-registered Trial
Note
The checklist and trial protocol in this chapter apply only to relationships without violence, threats or coercive control. If your relationship involves any of these, please do not use the exercises below; put safety first and contact your local emergency number, domestic-violence services or legal aid.
Part 1 A four-step interaction-loop checklist
This checklist is for partners who both agree to keep separate records for a week and then review them together. Its aim is not to judge who is right but to see the loop between them.
- Triggers and pursue–withdraw roles. Which topics or situations repeatedly set off conflict? Each time, who “pursued” (wanted to talk, pressed) and who “withdrew” (avoided, fell silent)? Are the roles fixed, or do they change with the topic? (Chapter 2)
- Everyday positives and negatives. Not just during conflict but across the whole day, roughly how many positive moments (thanks, jokes, care, physical closeness) and negative moments (criticism, coldness, sarcasm) did each feel? What matters is the trend, not a pass mark. (Chapter 3)
- Physiological arousal and the break agreement. Was anyone clearly “flooded” during conflict (heart racing, unable to speak, wanting to leave)? If so, did you take the agreed break, what did you do during it, and did you come back as agreed? (Chapters 4 and 6)
- Repair attempts and acceptance. How many repair attempts did each make? How many were accepted by the other? On which days were they more easily accepted? (Chapter 6)
Calculation
The checklist applied to a fictional couple, A and B, and their one-week conflict diary.
# The four-step interaction-loop checklist applied to a FICTIONAL one-week conflict diary kept by
# a couple, A and B. Each entry: day, trigger, who pushed for a talk, who pulled away, minutes from
# the first sharp remark until the conflict settled or stopped, positive and negative moments each
# partner tallied that day (everyday life, not only the conflict), each partner's peak heart rate
# from a watch (resting about 65 and 70), whether a break was taken, repairs offered / accepted.
DIARY = [
("Mon", "chores", "A", "B", 35, (9, 3), (8, 2), (104, 92), False, (2, 0)),
("Tue", "phone at dinner", "A", "B", 50, (6, 4), (5, 4), (112, 101), False, (1, 0)),
("Wed", None, None, None, 0, (11, 1), (10, 2), (78, 80), False, (0, 0)),
("Thu", "chores", "A", "B", 20, (8, 3), (9, 3), (98, 95), True, (3, 2)),
("Fri", "money", "B", "A", 45, (5, 5), (4, 5), (109, 107), False, (2, 1)),
("Sat", None, None, None, 0, (12, 2), (11, 1), (80, 79), False, (0, 0)),
("Sun", "chores", "A", "B", 15, (10, 2), (9, 2), (96, 90), True, (3, 3)),
]
REST = (65, 70); OVER = 30 # "over the limit" = more than 30 bpm above one's own resting rate
conf = [d for d in DIARY if d[1]]
print("Step 1 triggers and roles")
trig = {}
for d in conf: trig[d[1]] = trig.get(d[1], 0) + 1
print(" triggers:", ", ".join(f"{k} x{v}" for k, v in sorted(trig.items(), key=lambda kv: -kv[1])))
roles = [f"{d[2]} pushes / {d[3]} pulls" for d in conf]
print(" roles:", "; ".join(f"{d[0]} {r}" for d, r in zip(conf, roles)))
fixed = all(d[2] == "A" for d in conf)
print(" roles", "never switch" if fixed else "switch on the money topic: the loop is not a fixed trait of either partner")
print("Step 2 positive : negative moments in everyday life (self-tallied)")
for who, idx in (("A", 5), ("B", 6)):
pos = sum(d[idx][0] for d in DIARY); neg = sum(d[idx][1] for d in DIARY)
print(f" {who}: {pos} : {neg} = {pos / neg:.1f} : 1")
low = [d[0] for d in DIARY if (d[5][0] + d[6][0]) / (d[5][1] + d[6][1]) < 2]
print(" days below 2 : 1 for the pair:", ", ".join(low), "(read as a trend to talk about, not as a pass mark)")
print("Step 3 arousal over the limit, and whether a break was taken")
for d in conf:
over = [w for w, hrv, r in zip("AB", d[7], REST) if hrv - r > OVER]
if over:
print(f" {d[0]}: {' and '.join(over)} over the limit; break {'taken' if d[8] else 'NOT taken'}; lasted {d[4]} min")
with_b = [d[4] for d in conf if d[8]]; without = [d[4] for d in conf if not d[8]]
print(f" mean length with a break {sum(with_b) / len(with_b):.0f} min, without {sum(without) / len(without):.0f} min (one week; not evidence)")
print("Step 4 repairs")
made = sum(d[9][0] for d in conf); acc = sum(d[9][1] for d in conf)
print(f" offered {made}, accepted {acc} ({acc / made:.0%}); accepted mostly on days with a break:"
f" {sum(d[9][1] for d in conf if d[8])} of {acc}")
# Step 1 triggers and roles
# triggers: chores x3, phone at dinner x1, money x1
# roles: Mon A pushes / B pulls; Tue A pushes / B pulls; Thu A pushes / B pulls; Fri B pushes / A pulls; Sun A pushes / B pulls
# roles switch on the money topic: the loop is not a fixed trait of either partner
# Step 2 positive : negative moments in everyday life (self-tallied)
# A: 61 : 20 = 3.0 : 1
# B: 56 : 19 = 2.9 : 1
# days below 2 : 1 for the pair: Tue, Fri (read as a trend to talk about, not as a pass mark)
# Step 3 arousal over the limit, and whether a break was taken
# Mon: A over the limit; break NOT taken; lasted 35 min
# Tue: A and B over the limit; break NOT taken; lasted 50 min
# Thu: A over the limit; break taken; lasted 20 min
# Fri: A and B over the limit; break NOT taken; lasted 45 min
# Sun: A over the limit; break taken; lasted 15 min
# mean length with a break 18 min, without 43 min (one week; not evidence)
# Step 4 repairs
# offered 11, accepted 6 (55%); accepted mostly on days with a break: 5 of 6This fictional diary shows several things: the most common trigger is housework; the roles are mostly A pursuing and B withdrawing, but reversed on money, which shows the loop is not a fixed trait of either partner; both partners’ everyday ratios are about 3 to 1, with Tuesday and Friday below 2 to 1, which are exactly the days of the longest conflicts; conflicts with a break lasted about 18 minutes on average, those without about 43; about half of repairs were accepted, mostly on days with a break. A week of data gives only cues for a conversation, not evidence: breaks and shorter conflicts may go together simply because those conflicts were less intense to begin with.
Note
Heart rate is only a prompt. The heart rates in the checklist come from wearables and contain error. “More than 30 beats above one’s own resting rate” is an illustrative number to prompt both partners to consider a break, not a medical standard; anyone with a heart condition or on medication should follow medical advice.
Part 2 A pre-registered randomised controlled trial protocol
Question
Compared with spending the same time on a standard guide to good communication, does one structured couple session (drawing their own pursue–withdraw loop, learning a 20-minute physiological cool-down routine, practising repair phrases) shorten the conflict escalation couples report in a conflict diary over the following week? What is its effect on relationship satisfaction?
Design
| Element | Specification |
|---|---|
| Participants | Cohabiting or married adult couples (both partners 21 or over), both taking part voluntarily; recruited through community and online advertising, not from the author’s community, students, customers or card-deck users |
| Safety screening and exclusion | A safety procedure chosen by this protocol: each partner completes intimate-partner-violence and psychological-crisis screening separately and privately; couples are not enrolled if in the past 12 months there has been any physical or sexual violence, threats or coercive control (in any of its forms (Stark 2007)), if either partner is in serious psychological crisis or at risk of self-harm, or if they are in couple therapy. All couples not enrolled receive the same neutrally worded notice, which gives no reason; every participant, enrolled or not, privately receives local support information; anyone screening positive is offered first-line support and help drawing up a safety plan by trained staff, following the World Health Organization’s recommendations for responding to disclosure of violence (World Health Organization 2013); screening results are never disclosed to the other partner |
| Randomisation | By couple, 1:1, stratified by baseline conflict frequency |
| Arm A | A 90-minute structured session: the couple draw their own pursue–withdraw loop using the checklist; learn and practise a 20-minute cool-down routine (agreed break phrase, slow breathing or a walk, an agreed time to return); practise three kinds of repair phrase (pause, de-escalate, validate) |
| Arm B (active control) | The same 90 minutes, with the same facilitators, reading and discussing a standard guide to good communication (listening, “I” statements, not raking up the past) |
| Blinding | Participants cannot be blinded to arm; outcome assessors and data analysts are blind until unblinding; facilitators take no part in outcome collection |
| Primary outcome | Total minutes of escalated conflict reported in the 7-day conflict diary after the session: each partner keeps their own diary, scored as ; the couple’s score is the mean of the two |
| Secondary outcomes | Relationship satisfaction (the four-item Couples Satisfaction Index, CSI-4) (Funk and Rogge 2007) at 1 and 4 weeks; number of conflicts; share of repair attempts accepted; optional wearable heart-rate data |
| Analysis | Linear model with arm as the independent variable and baseline conflict duration and the stratification variable as covariates; secondary outcomes analysed as dyadic data with the actor–partner interdependence model (Kenny et al. 2006); two-sided |
Sample size
Calculation
# Sample size for the couple-randomised trial. Unit of randomisation and analysis: the couple.
# Arm A: a 90-minute structured session (drawing their own pursue-withdraw loop, a 20-minute
# physiological cool-down routine, practising repair phrases). Arm B: the same time spent on a
# standard written guide to good communication, read and discussed with the same facilitator.
# Primary outcome: total minutes of escalated conflict in the following 7-day diary, log(1 + min),
# each partner keeping their own diary; the couple's score is the mean of the two partners.
# Effect in SD units of an individual's score; normal approximation; two-sided alpha 0.05.
import math
from statistics import NormalDist
N = NormalDist()
def couples_per_arm(d_individual, rho, alpha=0.05, power=0.90):
# averaging two partners whose scores correlate rho shrinks the variance to (1 + rho)/2
d = d_individual / math.sqrt((1 + rho) / 2)
return math.ceil(2 * (N.inv_cdf(1 - alpha / 2) + N.inv_cdf(power)) ** 2 / d ** 2) + 1
print("couples per arm for 90 % power")
print(" effect (SD) | partners' diaries agree rho = 0.3 | 0.5 | 0.7")
for d in (0.25, 0.30, 0.35, 0.40):
print(f" {d:.2f} | {couples_per_arm(d, 0.3):33d} | {couples_per_arm(d, 0.5):3d} | {couples_per_arm(d, 0.7):3d}")
n = couples_per_arm(0.35, 0.5)
recruit = math.ceil(n / 0.80)
print(f"chosen: 0.35 SD, rho = 0.5 -> {n} couples per arm; allowing 20 % loss (drop-out, unusable diaries)"
f" recruit {recruit} per arm, {2 * recruit} couples ({4 * recruit} people) in all")
# couples per arm for 90 % power
# effect (SD) | partners' diaries agree rho = 0.3 | 0.5 | 0.7
# 0.25 | 220 | 254 | 287
# 0.30 | 153 | 177 | 200
# 0.35 | 113 | 130 | 147
# 0.40 | 87 | 100 | 113
# chosen: 0.35 SD, rho = 0.5 -> 130 couples per arm; allowing 20 % loss (drop-out, unusable diaries) recruit 163 per arm, 326 couples (652 people) in allWith a smallest effect of interest of 0.35 standard deviations (of an individual partner’s score), a correlation of 0.5 between partners’ diaries and 90 % power, each arm needs 130 analysable couples; allowing for about 20 % loss to drop-out and unusable diaries, each arm recruits 163 couples, 326 couples and 652 people in all. The more closely partners’ diaries agree, the less averaging helps and the larger the sample needed; the table gives the numbers for correlations of 0.3 and 0.7.
Decision rule
Calculation
# Decision rule, fixed before any data are collected. d = arm A minus arm B in the couple-level
# primary outcome (log escalation minutes), standardised by the SD of an individual partner's score
# as in the sample-size program; NEGATIVE d means less escalation in arm A.
# 95 % confidence interval from the pre-specified linear model (arm, baseline escalation minutes,
# baseline conflict-frequency stratum). Smallest effect of interest: 0.35 SD.
SESOI = 0.35
def verdict(d, lo, hi, fidelity_ok, harms):
if harms:
return f"d = {d:+.2f}: PAUSE for safety review and report - {harms} safety events judged related to the session"
if not fidelity_ok:
return f"d = {d:+.2f}: NOT INTERPRETABLE - fewer than 80 % of arm-A sessions delivered as specified"
if hi <= -SESOI: v = "arm A reduces escalation by at least the smallest effect of interest"
elif hi < 0: v = "arm A reduces escalation; size not shown to reach 0.35 SD"
elif lo > 0: v = "arm A INCREASES escalation"
elif lo >= -SESOI and hi <= SESOI: v = "no difference worth acting on"
else: v = "unclear: the interval is too wide to decide"
return f"d = {d:+.2f} ({lo:+.2f} to {hi:+.2f}): {v}"
for case in ((-0.52, -0.77, -0.37, True, 0), (-0.20, -0.45, 0.05, True, 0), (-0.25, -0.50, -0.01, True, 0),
(0.05, -0.20, 0.30, True, 0), (-0.60, -0.85, -0.35, False, 0), (-0.40, -0.65, -0.15, True, 2)):
print(verdict(*case))
print("relationship satisfaction (CSI-4) at 1 and 4 weeks is secondary: reported with intervals, never decisive")
# d = -0.52 (-0.77 to -0.37): arm A reduces escalation by at least the smallest effect of interest
# d = -0.20 (-0.45 to +0.05): unclear: the interval is too wide to decide
# d = -0.25 (-0.50 to -0.01): arm A reduces escalation; size not shown to reach 0.35 SD
# d = +0.05 (-0.20 to +0.30): no difference worth acting on
# d = -0.60: NOT INTERPRETABLE - fewer than 80 % of arm-A sessions delivered as specified
# d = -0.40: PAUSE for safety review and report - 2 safety events judged related to the session
# relationship satisfaction (CSI-4) at 1 and 4 weeks is secondary: reported with intervals, never decisiveThe example results are made up. If fewer than 80 % of arm-A sessions are delivered as specified, the report says “not interpretable” whatever the result; if a safety event related to the session occurs, the trial pauses for a safety review and the event is reported. Only if the upper limit of the effect’s confidence interval is at or below −0.35 standard deviations does the report say “arm A reduced conflict escalation by at least the smallest effect of interest”.
What this trial cannot show
First, participants know which arm they are in and the primary outcome is a self-reported diary, so expectation effects may lead arm A to report shorter conflicts; the active control only partly mitigates this. The optional wearable heart-rate data can provide supporting evidence not wholly dependent on self-report. Second, arm A contains three components at once (loop visualisation, cool-down routine, repair phrases); even a positive result cannot show which one worked. Third, the outcomes are followed for only one to four weeks and cannot show long-term effects, still less any effect on separation or divorce. Fourth, couples who volunteer and pass safety screening may be very different from the couples in the most severe conflict who most need help. Fifth, this is no substitute for couple therapy; a positive result would show only the short-term effect of one brief session.
Ethics and conflicts of interest
The trial must be approved by an independent ethics committee, both partners must give informed consent separately, and the protocol and analysis plan must be registered before the first couple is enrolled (Nosek et al. 2018). Each partner submits their diary separately and in private, and the other cannot see it; either partner may withdraw at any time without giving a reason, and withdrawal does not affect the other. The research team must prepare local domestic-violence and crisis resources in advance; if signs of violence or risk to safety appear during the study, safety comes before research and the pre-specified referral procedure is followed.
Disclosure
The author uses the works of 5D Library, including this book, as the methodological basis of his community courses, the 5D Ascension Cards (Dimensional Shift Card Decks) and the Yafu AI knowledge base, and therefore has a commercial interest in the subject of this book. The book promotes no course, card deck or service; the Chapter 8 trial is designed to be run and analysed by researchers independent of the author’s business and does not recruit from the author’s community, students or customers; all the code and the study protocol are published openly for anyone to check. To limit the influence of this interest: the session materials and analysis code are published before enrolment; whatever the result, the results, data and code will be published.
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).