从十八岁开始的血管账本 — CARDIA 青年队列

基线 5,115 人 / 入组 18–30 岁 / 十轮检查跨三十五年

来源 https://sites.uab.edu/cardia/发布时间: 2026-10-29最后更新: 2026-10-29 阅读 13
从十八岁开始的血管账本 — CARDIA 青年队列

信息速览

数据集名称从十八岁开始的血管账本 — CARDIA 青年队列
数据类型元数据,多组学,文献引用,原始数据链接
规模5,115(1985–1986 基线入组)
接入方式https://sites.uab.edu/cardia/
AI 就绪度

CARDIA 是美国国家心肺血液研究所(NHLBI)在 1985 年启动的一项前瞻性社区队列,全称 Coronary Artery Risk Development in Young Adults,中文常译作「青年成人冠状动脉风险发展研究」。它在伯明翰、芝加哥、明尼阿波利斯、奥克兰四个现场入组了五千一百余名 18–30 岁的黑人与白人男女,此后每隔数年回访一次,至今已完成十轮检查,最新一轮的检查数据覆盖到 2020–2022 年。它的设计初衷很朴素:冠心病的病理过程在临床症状出现前几十年就已开始,如果只在四十岁以后才开始观测,看到的永远是半场之后的事。

它的核心资产是「同一批人的前半生」。基线时受试者平均二十出头,到第十轮检查时已是五十三至六十五岁,中间横跨了求学、就业、生育、迁居、吸烟与戒烟、体重上升与代谢紊乱这一整段人生。检查内容包括标准化体检、问卷、生化、口服葡萄糖耐量试验、肺功能,以及在特定轮次加做的 CT 钙化评分、超声心动图、颈动脉超声、骨密度与脑 MRI;另有全基因组基因型、DNA 甲基化、代谢组与蛋白组的子样本。

获取路径有两条且互不替代:表型数据走 BioLINCC(编号 HLB00030026a),遗传数据走 dbGaP,两者都要提交申请、签署协议,商业用途受分级限制。本篇写的是「青年入组」这一侧的队列,与库内已发布的中年入组队列形成前后接续关系,两者的分工在 §6.2 逐项说明。一屏速览见下表。

维度 内容
全名 Coronary Artery Risk Development in Young Adults
资助与管理 NHLBI 资助,协调中心设于阿拉巴马大学伯明翰分校
基线年份 1985–1986
入组人数 5,115 人
入组年龄 18–30 岁
抽样设计 种族 × 性别 × 教育 × 年龄四格配额平衡
现场 伯明翰、芝加哥、明尼阿波利斯、奥克兰
检查轮次 十轮,Year 0 至 Year 35
随访跨度 三十五年(1985–2022),Year 40 在推进
主要影像 CT 钙化评分三轮、超声心动图三轮、脑 MRI 两轮
组学 全基因组基因型、甲基化、代谢组、蛋白组子样本
生物样本 血清、血浆、DNA,随表型数据一并申请
获取途径 BioLINCC(表型)/ dbGaP(遗传)
许可 数据使用协议,商业使用分级限制

§1 它要解决的具体麻烦

1.1 你要的是「危险因素从哪一年开始偏离」,不是「今年谁有病」

大多数心血管数据集回答的是横截面问题:这一万人里,血压高的人冠脉钙化是不是更重。这个问题用一次调查就能答,样本越大越好,CARDIA 在这条赛道上并不占优——它只有五千人。它占优的是另一类问题:一个人二十三岁时低密度脂蛋白一百一十,三十三岁一百四十,四十三岁一百六十五,这条曲线在哪个节点开始脱离同伴,脱离之后二十年又对应什么样的钙化轨迹。

这类问题的分母不是「人数」,而是「人 × 次数」。五千人做十轮,理论上有五万个观测点,而真正稀缺的是「同一个人在四个不同年龄上被同一套方案量过」这件事。任何横截面调查,无论样本多大,都无法重建这条曲线;任何电子病历数据库,无论覆盖多广,都无法保证四十年前的测量方法今天还一致。

所以它的定位可以一句话概括:它不是用来估计患病率的,是用来估计轨迹的。把这两件事混起来,是误用的第一来源。

1.2 三条常见的错误期待

第一条期待是「五千人的样本应该能代表美国青年」。不能。四个现场是刻意选的,不是随机抽的,伯明翰与芝加哥的黑人社区、明尼阿波利斯的白人社区、奥克兰的健保会员群体,各自带着强烈的地方色彩。官方从未声称全国代表性,任何把 CARDIA 的患病率直接当作全国估计的做法都站不住。

第二条期待是「既然做了三十五年,每个人应该被量了十次」。也不是。十轮是项目层面的轮次,个体层面的到场次数取决于参与意愿、迁居、健康状况。后期轮次的到场人数明显少于基线,剩下的人是「愿意继续来且还活着」的那部分。这让后期数据在健康维度上偏优,而不是偏劣。

第三条期待是「有基因组就能做孟德尔随机化」。可以,但要看工具变量的来源。CARDIA 的基因型样本是子样本,暴露变量的测量轮次与基因型批次要能对上,且 dbGaP 的受控访问不含表型主表,需要另行申请链接。把「有基因数据」等同于「可以随手做 MR」,会在数据到手的第一周就卡住。

常见期待 实际情况 后果
代表全美青年 四现场便利样本,仅黑白两种族 患病率外推失效
人人十次随访 个体到场次数差异很大 面板数据不平衡,需用混合模型
有基因即可做 MR 基因与表型分属两套审批 链接申请额外耗时
影像人人都有 CT 与超声只在子样本 影像分析样本量骤降
变量名一致即可合并 跨轮次方法与单位有变更 纵向比较出现系统偏差
事件即为诊断编码 事件由委员会判定并附日期 需按判定规则而非 ICD 取数

1.3 它能给到的与给不到的

下表按「你带着什么需求来」组织,左列是需求,中列是它能提供的形态,右列是够不够用。

你的需求 它给的 够不够
青年期危险因素的多次测量 十轮,间隔 2–5 年不等 够,且是全球少有的密度
亚临床动脉粥样硬化的客观指标 三轮 CT 钙化评分,Agatston 单位 够,但只有三个时点
心脏结构与功能的纵向变化 三轮超声心动图,含左室质量与应变 基本够,轮次不连续
心血管事件终点 委员会判定的事件与日期 够,但中年段事件数有限
基因—环境交互 全基因组基因型 + 三十五年暴露轨迹 够,样本量是瓶颈
多组学整合 甲基化、代谢组、蛋白组子样本 部分够,各层样本不完全重叠
全国或特定族群的代表性估计 无 不够,需换用 NHANES 类数据
儿童期暴露 无,入组时已成年 不够,最早只能回溯到自报的童年情况
亚裔、拉丁裔结论 无 不够,队列不含这两个群体
影像原始像素 不提供 DICOM,仅提供读片结果 不够,做影像组学要另找数据

最后一行值得单独说。CARDIA 提供的是钙化评分、左室质量、射血分数这类读片后的数值,不是可供深度学习直接消费的影像文件。这与影像类数据集是两种物种:前者适合做流行病学与风险建模,后者适合做分割与检测。把它们混为一谈,会在下载后发现「没有一张图」。

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
想证明某危险因素在青年期就已埋下后果 提供从十八岁起的暴露轨迹与中年结局 先定结局,再回推需要的轮次
手上有一个中年队列,缺前半段 可作为前置段拼接,但需对齐测量口径 逐条核对血压、血脂、吸烟定义
做心血管风险预测模型,缺长期随访 提供三十五年的事件时间与协变量 注意事件数,避免过拟合
研究健康差异,需要同方案双种族对照 四个现场内黑白同招、同方案 把现场作为随机效应
做钙化进展的影像遗传学 三轮钙化 + 基因型 + 多年暴露 确认三轮都到场者才是分析集
想快速做一次探索性分析 申请周期以月计,不适合临时起意 先用公开摘要与文献摸清结构
企业要做产品验证 商业使用受分级限制 提前走协商,不要假设可用

表中第二行是这类队列最常见的用法,也是最容易出问题的地方。拼接不是把两张表按年龄对齐就完事:CARDIA 的血压是三次读数的均值,ARIC 是两次;CARDIA 的血脂在早期用酶法、后期换过平台;吸烟问题在不同轮次的选项数不同。口径不一致时,宁可在拼接处留一个「队列」虚拟变量,也不要用一套换算公式硬对齐。

1.5 一句话判断

如果你要回答的是「危险因素怎样在人生前半程积累」,它是目前最好的公开队列之一;如果你要回答的是「这个人群现在病了多少」,它几乎帮不上忙。

1.6 不适合谁:四条边界

边界 具体表现 替代方案
要全国代表性 四现场、双种族、非概率抽样 NHANES、NHIS 一类全国调查
要老年结局 队列到 2022 年才六十岁上下 ARIC、Framingham、CHARLS
要影像原始文件 只给读片数值 影像类公开数据集
要即时可用 申请加审批以月计 已开放下载的整理版数据集

第一条边界最容易被忽视。研究者看到「美国」「社区」「四个现场」这些词,容易默认它具有全国代表性,但 CARDIA 的抽样从一开始就是为了组间对比而不是总体推断:每个现场按种族、性别、教育、年龄四格配额招人,保证每一格里都有足够的人,代价是整体比例被人为设定。

第二条边界与 §6 的分工直接相关:CARDIA 的受试者在 2022 年刚进入六十岁,正是 ARIC 基线时的年纪。要研究七十岁以后的事,得换队列。

第三条边界对做深度学习的人尤其重要:这里没有 DICOM,只有数值。

§2 数据构成与规格

2.1 一次检查不是一张表,而是十几个模块

CARDIA 的数据组织方式是「按轮次分目录、按模块分文件」。每一轮检查会产生几十个数据文件:体检模块(血压、身高体重、腰围)、生化模块(血脂、血糖、胰岛素)、问卷模块(吸烟、饮酒、膳食、体力活动、心理量表)、影像模块(钙化、超声、颈动脉)、以及各类衍生变量文件。同一个概念在不同模块里可能以不同变量名出现,官方为此维护了跨轮次的变量对照表。

这意味着「下载数据」在实操中等于「下载一个几百个文件的压缩包,再花两周读字典」。这不是缺陷,是纵向队列的常态:三十五年里测量工具换过、问卷改过、实验室平台换过,强行做成一张宽表反而会掩盖这些变化。

规模上,基线是 5,115 人;到第十轮,累计观测记录数远大于人数。文件体积官方未在公开页面给出统一数字,实际取决于申请的数据子集——只要表型主表与只看几个模块,体积差一个数量级。

2.2 字段与模块的完整字典

下表按模块列出主要内容与采集轮次。轮次用 Y 加年份编号,Y0 为基线。

模块 主要内容 采集轮次 备注
人口学 出生日期、性别、种族、教育、婚姻、收入 全部轮次 教育与收入逐轮更新
人体测量 身高、体重、腰围、臀围、皮褶 全部轮次 方案统一,设备逐轮校准
血压 三次读数、体位、袖带规格、用药 全部轮次 取均值,附用药清单
血脂 总胆固醇、LDL、HDL、甘油三酯 全部轮次 早期酶法,后期平台更换
血糖 空腹血糖、胰岛素、OGTT 两小时血糖 Y0 起多数轮次 糖耐量试验非每轮
炎症与凝血 纤维蛋白原、CRP、白细胞 部分轮次 批次差异需注意
吸烟 现状、起始年龄、包年、戒烟 全部轮次 选项数逐轮扩充
饮酒 频次、种类、量 全部轮次 自报,存在低估
膳食 CARDIA 膳食史访谈 Y0、Y7、Y20 等 访谈式,非简表
体力活动 自报问卷 + 加速度计子样本 问卷全轮,设备 Y20/Y30 两种口径不可混用
肺功能 FEV1、FVC 多数轮次 需按种族身高校正
体成分 DXA 全身扫描 数个轮次 子样本
冠脉钙化 Agatston 评分、体积、密度 Y15、Y20、Y25 中心读片
超声心动图 左室质量、射血分数、舒张功能、应变 Y5、Y25、Y30 设备与读片标准有变更
颈动脉超声 内中膜厚度、斑块 数个轮次 子样本
脑 MRI 白质高信号、灰质体积、弥散指标 Y25、Y30 样本较小
认知 DSST、Stroop、RAVLT 等 Y5 起多轮 测验组合逐轮调整
基因型 全基因组芯片、外显子芯片 单次采集 经 dbGaP 申请
表观遗传 DNA 甲基化芯片 两个轮次 子样本
代谢组 靶向与非靶向 子样本 平台分批
蛋白组 适配体法面板 子样本 约三千人量级
事件 心血管事件、死亡、住院 持续判定 附日期与判定依据

这张表最该被记住的是最后两列的落差:加粗的模块人人都有,斜体的模块只有子样本。实际做分析时,样本量往往由最稀缺的那个模块决定,而不是由基线人数决定。

2.3 一条记录的完整解剖

把一位受试者在某一轮的全部变量摊开,形态大致如下。为便于阅读,这里用扁平的键值形式表示,真实文件是宽表 CSV,一行一位受试者。

{
  "PID": "0000-0000",
  "EXAM": 25,
  "EXAM_DATE": "2010-06-14",
  "AGE_AT_EXAM": 49,
  "SEX": "F",
  "RACE": "B",
  "CENTER": "BIRMINGHAM",
  "EDU_LEVEL": "some_college",
  "WEIGHT_KG": 78.4,
  "HEIGHT_CM": 165.2,
  "BMI": 28.7,
  "WAIST_CM": 92.1,
  "SBP_MEAN": 124,
  "DBP_MEAN": 78,
  "BP_MEDS": "yes",
  "TOTAL_CHOL": 196,
  "LDL": 118,
  "HDL": 52,
  "TRIG": 128,
  "GLUCOSE_FAST": 102,
  "HBA1C": 5.7,
  "SMOKE_STATUS": "former",
  "PACK_YEARS": 8.5,
  "CAC_AGATSTON": 68,
  "CAC_VOLUME": 61,
  "LV_MASS_G": 142,
  "LVEF": 62,
  "EVENT_CHD": 0,
  "EVENT_DATE": null,
  "DAYS_FROM_BASELINE": 9125
}

几个细节值得说明。第一,AGE_AT_EXAM 是衍生变量,官方文件里通常同时给出生日期与检查日期,用两者相减更稳,因为跨轮次的年龄字段偶尔会按整年取整。第二,BP_MEDS 不是一个可有可无的标记,血压分析必须决定是否对服药者做校正,否则治疗会系统性地压低暴露值。第三,CAC_AGATSTON 的零值与缺失值必须分开编码:零是「扫了,没钙化」,缺失是「没扫或不可判读」,把两者混在一起会把阴性结果变成缺失。

§4.3 的案例会把这条记录放回时间轴上看,届时可以看出单个时点的数字几乎没有意义,意义全在相邻两次之间的差。

2.4 十轮检查的时间账

轮次 日历年 受试者大致年龄 该轮的重点新增
Y0 1985–1986 18–30 基线全套,四格配额入组
Y2 1987–1988 20–32 短期重复测量,评估可靠性
Y5 1990–1991 23–35 超声心动图首次加入
Y7 1992–1993 25–37 膳食史访谈扩展
Y10 1995–1996 28–40 体成分与胰岛素相关测量
Y15 2000–2001 33–45 CT 钙化评分首次加入
Y20 2005–2006 38–50 钙化复查、加速度计子研究
Y25 2010–2011 43–55 钙化第三次、脑 MRI 首次
Y30 2015–2016 48–60 超声复查、认知组合扩展
Y35 2020–2022 53–65 听力、体能、脑 MRI 复查

这张表里最容易读错的是「Y15 是 2000 年」。轮次编号是「距基线的年数」,不是「第几次检查」,所以 Y15 是 2000–2001 年,而不是 2000 年减十五。把它当成「第十五次检查」更是错得离谱——一共只有十轮。

第二个容易读错的地方是间隔不均。Y0 到 Y2 隔两年,Y2 到 Y5 隔三年,Y10 到 Y15 隔五年,Y30 到 Y35 隔五到七年(疫情影响了 Y35 的窗口)。做纵向模型时,时间变量必须用实际检查日期,不能用轮次编号当等距时间。

第三个细节是年龄跨度。每一轮的年龄区间是「基线年龄 + 轮次年数」,所以同轮之内年龄差仍有十二岁。这意味着「同轮同期」的两个人可能相差十二岁,任何以轮次为单位的分析都在混合不同年龄的人。

2.5 与同类资源的字段差异

字段大类 CARDIA ARIC Framingham UK Biobank
入组年龄 18–30 45–64 成年起多代 40–69
检查轮次 10 9 30 余 多次但间隔长
CT 钙化 3 次 有限 有子研究 有
超声心动图 3 次 有 有 有子集
脑 MRI 2 次(小样本) 有 有 有(大样本)
全基因组 有(子样本) 有 有 有(全员)
生物样本库 有 有 有 有
事件判定 委员会 委员会 委员会 登记链接为主
原始影像 不提供 不提供 不提供 部分提供

差异的实质是「密度换广度」:CARDIA 用五千人换了十轮,UK Biobank 用五十万人换了一次详细基线。前者适合问「变化」,后者适合问「关联」。两者不是替代关系,是分工关系。

§3 核心层 A:它到底是一个什么样的队列

3.1 青年入组这一个决定,解释了其余一切

1983 年立项时,CARDIA 的发起者面对的是一个具体的空白:framingham 那一代研究已经把中年以后的危险因素与冠心病的关联摸得很清楚,但没人知道这些危险因素是什么时候开始变坏的。二十岁时的胆固醇能不能预测四十岁时的钙化?三十岁时的吸烟史在戒烟十五年后还留下多少痕迹?这些问题的共同前提是「从年轻时就开始量」。

于是整个设计被一个决定锁死:入组年龄定在 18–30 岁。这个决定带来了三个连锁后果。

第一,基线时几乎没有临床事件。这批人太年轻,冠心病、心衰、卒中的发病率接近于零,所以早期的研究产出只能靠危险因素本身和亚临床指标,不能靠硬终点。这也是为什么钙化评分在 Y15 才加入——等到 2000 年,最年长的受试者已经四十五岁,钙化才开始有足够的变异。

第二,随访必须足够长才有事件。三十五年之后,这批人五十三到六十五岁,事件才逐渐累积到可以做生存分析的量级。这意味着 CARDIA 的「收获期」是最近十年才到来的,前二十年它主要在做测量而不是做结局。

第三,退出与失访的形态不同于老年队列。年轻人迁居频繁、生活变动大,早期失访率高;但一旦进入中年,稳定性上升,长期参与者的黏性反而变强。这造成一个反直觉的现象:Y2 到 Y10 的到场率下降明显,Y15 之后反而相对平稳。

3.2 四格平衡:配额抽样留下的痕迹

官方对设计的表述是:样本按种族、性别、教育(高中及以下 / 高中以上)、年龄(18–24 / 25–30)四个维度做到大致平衡,且四成受试者的教育程度不超过高中。这句话看起来是描述,实际是约束——它规定了每一格必须招够人,而不是按自然比例随机抽。

设计维度 分层 目的
种族 黑人 / 白人 保证组间可比,不是按人口比例
性别 男 / 女 每格内性别平衡
教育 高中及以下 / 高中以上 保留社会经济梯度
年龄 18–24 / 25–30 覆盖青年期两端
现场 四个 地理与医疗体系差异

这个设计的直接后果是:CARDIA 里高中及以下教育者的比例远高于同代美国青年的自然比例。这不是抽样失误,是刻意为之——如果按自然比例抽,低教育组的人数会少到无法做分层分析。代价是任何「按教育加权的总体估计」都会失真。

第二个后果是种族与现场的交叉不均衡。四个现场里,伯明翰与芝加哥承担了较多的黑人受试者,明尼阿波利斯与奥克兰以白人为主。这导致「种族效应」与「现场效应」在统计上部分共线,做分层分析时若不控制现场,很容易把地方差异读成种族差异。

3.3 时间轴上的两次扩张:从血脂到生命历程

把三十五年拉成一条线,可以看到研究重心变过两次。

第一次是 1985 到 1995 年,主题是危险因素的自然史。这一阶段的产出集中在血压、血脂、体重、吸烟的分布与变化,方法是重复测量加描述。这段时期的数据干净、问题明确,也是很多教科书图表的来源。

第二次是 1995 到 2010 年,主题转向亚临床疾病。钙化评分、超声心动图、颈动脉超声、CT 体成分陆续加入,研究问题从「危险因素是多少」变成「危险因素造成了多少器质性改变」。这一阶段的关键词是「亚临床」,即在症状出现前识别损害。

第三次是 2010 年之后,主题转向生命历程与健康差异。脑 MRI、认知、听力、体能、社会经济轨迹进入视野,研究问题变成「前半生的处境如何塑造后半生的功能」。这一阶段的 CARDIA 不再只是心血管队列,而是一个老龄化与健康不平等的观测平台。

阶段 年份 主题 代表测量
第一期 1985–1995 危险因素自然史 血压、血脂、吸烟、体重
第二期 1995–2010 亚临床疾病 钙化、超声、颈动脉、体成分
第三期 2010–至今 生命历程与差异 脑 MRI、认知、听力、体能

这三次转向对使用者的意义是:同一个数据集在不同年份的「主变量」不同。如果你要的是 1990 年代的膳食数据,它有,但配套的结局很少;如果你要的是 2020 年的认知数据,它有,但配套的影像样本很小。选轮次等于选问题。

3.4 它与「全国代表性调查」的差别

NHANES 一类的调查每两年一轮,每轮换一批人,靠加权估计全国分布。CARDIA 相反:同一批人反复来,不做加权,不追求分布无偏。

维度 CARDIA NHANES 类调查
抽样 四现场配额 全国多阶段概率
个体随访 三十五年 无(横截面)
加权 不适用 必需
优势问题 变化、轨迹、因果时序 患病率、分布、趋势
主要偏倚 志愿者与幸存者 无应答与测量误差

理解了这一层,就不会拿 CARDIA 去做「美国青年高血压患病率」这类题目,也不会拿 NHANES 去做「二十年间同一个人的血压变化」。

§4 核心层 B:质量从哪里来

4.1 中心实验室与中心读片

CARDIA 的质量控制不是靠某一个环节,而是靠「测量与判读分离」这条流水线。血液样本在四个现场采集后冷链送到中心实验室,用同一套方法测;影像在四个现场采集后送到中心读片室,由不知道受试者临床信息的读片人判读。现场只负责「采得对」,不负责「测得准」。

这条流水线解决的是多中心研究最古老的问题:不同地方的人用不同的手法量同一个东西。血压袖带规格、身高计校准、超声探头角度、CT 扫描参数,任何一处不统一,都会在数据里留下一个「现场效应」,而这个效应在分析时往往被误读成「地区差异」。

环节 现场负责 中心负责 留下的风险
采血 采集、离心、冻存、冷链 统一检测、批次质控 冻存时长差异
血压 三次读数、袖带选择 方案制定、培训 操作者手法
CT 扫描参数执行 钙化评分判读 设备代际差异
超声 图像采集 左室质量与功能测量 探头与软件版本
问卷 访谈执行 量表设计与编码 访谈者效应

表格最后一列是诚实的部分:中心化能消掉测量端的差异,消不掉采集端的差异。同一个钙化评分方案,2000 年的扫描仪和 2010 年的扫描仪在噪声特性上不同,这在做钙化进展分析时是一个真实的混杂来源,官方在不同轮次的读片说明里有相应提示。

4.2 影像与组学是分层放的

CARDIA 的测量不是「人人都做全套」,而是按成本与侵入性分层。问卷与体检全员做,血液生化全员做,CT、超声、MRI、DXA 只在子样本做,基因型与多组学只在有样本且同意的人里做。

层级 覆盖范围 代表测量 分析影响
全员 全部到场者 问卷、体检、常规生化 样本量最大
子样本(大) 数千人 CT 钙化、超声心动图 需考虑选择偏倚
子样本(小) 数百至数千 脑 MRI、多组学 统计效力受限
单次采集 部分受试者 基因型、甲基化 与表型的重叠需核对

分层带来的第一个实际问题是分析集的定义。做钙化进展,分析集不是「基线五千人」,而是「三轮 CT 都到场且可判读的人」。这个数字官方没有在概览页给出,需要从各轮的技术报告里拼,通常在两三千人量级。做影像遗传学,分析集是这三个集合的交集,往往只剩一千多人。

第二个问题是选择偏倚的方向。愿意做 CT、愿意做 MRI、愿意提供血样做组学的人,系统性地更健康、教育程度更高、更可能是白人。这让子样本的关联估计通常比全样本「更干净」但也「更不代表性」。写论文时如果把子样本结果当作全队列结论,审稿人第一个问题就会是「你的分析集是怎么选的」。

4.3 案例:一位 1986 年 24 岁的伯明翰受试者

下面这条轨迹是按官方数据结构拼出的合成示例,不对应任何真实受试者,但每一个变量的形态都来自真实数据的组织方式。它用来说明一件事:CARDIA 的价值不在任何一个时点,而在时点之间的斜率。

1985 年冬,这位女性在伯明翰现场完成基线检查,24 岁,黑人,社区大学在读,体重 62 公斤,身高 165 厘米,血压 112/70,总胆固醇 172,低密度脂蛋白 104,不吸烟,每周运动两次。这一年的数据放进任何横截面里都平平无奇。

1992 年(Y7),她 31 岁,体重 71 公斤,低密度脂蛋白 128,开始吸烟,每天半包。1995 年(Y10),体重 76 公斤,血压 124/78,糖耐量试验两小时血糖 138。2000 年(Y15),38 岁,戒烟三年,CT 钙化评分为 0,超声左室质量指数正常。

2005 年(Y20),43 岁,钙化评分 12。2010 年(Y25),48 岁,钙化评分 68,血压 132/84,开始服用降压药,脑 MRI 显示少量白质高信号。2015 年(Y30),53 岁,钙化评分未再做,超声显示左室质量指数上升,舒张功能轻度减退。2020 年(Y35),58 岁,认知测验的 DSST 分数比同龄常模低半个标准差,听力在高频段下降。

时点 年龄 体重 LDL 收缩压 钙化 关键事件
Y0 24 62 104 112 未测 基线
Y7 31 71 128 118 未测 开始吸烟
Y10 34 76 136 124 未测 糖耐量受损
Y15 38 79 130 128 0 戒烟
Y20 43 82 124 130 12 钙化出现
Y25 48 84 118 132 68 开始降压
Y30 53 85 112 128 未测 舒张功能减退
Y35 58 84 110 126 未测 认知与听力下降

这张表里有三处是单点数据永远看不出来的。第一,低密度脂蛋白在 Y7 到 Y10 之间冲高,之后因为她戒烟与改变饮食而回落——如果只看 Y25 的 118,会误以为她一直血脂正常。第二,钙化从 0 到 12 用了五年,从 12 到 68 又用了五年,进展速度在加快,这正是「进展」这个词的实质。第三,降压药开始的时间点恰好落在钙化加速之后,如果分析时不区分「用药前血压」与「用药后血压」,会把治疗效应读成自然史。

§5.5 会说明怎么把这条轨迹变成一个可分析的变量;§7.3 会说明这类轨迹在统计上最容易踩的坑。

4.4 质量控制的五个抓手

抓手 做法 作用
统一方案 现场操作手册逐条规定 减少执行差异
集中培训 各轮开始前集中认证 减少操作者漂移
中心读片 影像集中判读,读片人盲法 消除判读偏倚
批次质控 实验室每批 insert 质控样本 监测检测漂移
数据核查 逻辑校验与异常值回查 拦截录入错误

五个抓手之外还有一条隐性的:轮次之间的可比性维护。当测量方法必须改变时(设备停产、试剂换代),CARDIA 的做法通常是在过渡轮次做桥接(bridging)——同一批人用新旧两种方法各测一次,用差值校正。这套做法在数据文档里有记录,但记录分散在各轮的技术报告里,不集中。

4.5 它的特色:把「年龄」当成自变量

大多数队列把年龄当协变量,CARDIA 把年龄当自变量。因为入组时年龄跨度是 18–30 岁,同一轮检查里既有二十二岁的人也有三十四岁的人,这就给了横截面上「年龄效应」的识别空间;而纵向上的重复测量又给了「队列效应」与「时期效应」的识别空间。三者合起来,是经典的年龄—时期—队列分解所需要的结构。

效应 识别来源 在 CARDIA 中的可行性
年龄效应 同一轮内不同年龄的横截面 可行,跨度十二岁
队列效应 不同出生年的受试者 有限,出生年跨度仅十二年
时期效应 同一轮次对所有人的共同冲击 可行,轮次即时期

需要提醒的是,出生年跨度只有十二年,队列效应的识别力很弱。想做强队列对比,得把 CARDIA 和出生代差二十年的 ARIC 放在一起——这正是 §6.2 要说的事。

§5 核心层 C:怎么把数据拿到手

5.1 三条路径,先分清哪条通向什么

路径 通向什么 门槛 周期
BioLINCC 表型数据、部分生物样本 提交申请、签数据使用协议 数周至数月
dbGaP 基因型、测序数据 eRA 账号、机构签署、受控访问 数月至更久
协调中心 衍生变量说明、 ancillary 研究 提交分析提案或 ancillary 申请 视提案而定

第一条路径是主路径。BioLINCC 上 CARDIA 的编号是 HLB00030026a,标注为开放研究(Open BioLINCC Study),意思是任何符合条件的研究者都可以申请,不需要是 CARDIA 合作者。但「开放」不等于「无条件」:要签数据使用协议,要说明研究用途,商业使用受分级同意限制。

第二条路径是遗传数据。CARDIA 的基因型数据放在 dbGaP,走受控访问流程,需要机构层面签署数据使用认证,且不能与表型主表直接合并——链接需要额外审批。这一点在实操中经常被低估。

第三条路径适合已经有明确分析计划、需要衍生变量或想参与 ancillary 研究的人。协调中心维护了一份衍生变量清单,很多常用变量(如心血管健康评分、代谢综合征判定)已经有官方版本,直接用手册里的定义比自己做更省事,也更容易通过审稿。

5.2 BioLINCC 申请的实际步骤

流程本身不复杂,复杂的是准备材料。下面这段代码做的是「申请前自检」:把你要的分析变量列出来,逐条标注来自哪一轮、哪个模块,提前发现缺项。

#-- 申请前把变量需求整理成清单,避免批下来才发现缺变量
import csv
from pathlib import Path

need = [
    ("SBP_MEAN", "Y0,Y5,Y10,Y15,Y20,Y25,Y30,Y35", "体检"),
    ("LDL", "Y0,Y5,Y7,Y10,Y15,Y20,Y25,Y30", "生化"),
    ("CAC_AGATSTON", "Y15,Y20,Y25", "影像"),
    ("LV_MASS_G", "Y5,Y25,Y30", "影像"),
    ("SMOKE_STATUS", "全部", "问卷"),
    ("EDU_LEVEL", "Y0,Y5,Y10,Y20,Y30", "问卷"),
]

out = Path("cardia_var_request.csv")
with out.open("w", newline="", encoding="utf-8") as f:
    w = csv.writer(f)
    w.writerow(["variable", "exam_years", "module", "priority"])
    for i, (v, yrs, mod) in enumerate(need, 1):
        w.writerow([v, yrs, mod, "high" if i <= 3 else "medium"])

#-- 打印一份人读版,附在申请说明里
for v, yrs, mod in need:
    print(f"{v:16s} {mod:4s} {yrs}")
print("total variables:", len(need))

这段代码的价值不在技术含量,而在它强迫你把「我要什么」写成一张表。BioLINCC 的申请表单会问研究问题、分析计划、变量清单,提前整理好能省掉一轮来回。

提交之后通常会有一次澄清(数据管理员会问某些变量是否真的需要),然后签署协议、拿到下载链接。下载的是压缩包,内含各轮数据文件与文档,文件命名规则在不同年份略有差异,读之前先看目录里的 readme。

5.3 dbGaP 这一侧要注意什么

遗传数据的申请与表型数据是两套体系。dbGaP 的受控访问要求机构签署数据使用认证,PI 需要有 eRA Commons 账号,审批通过后通过 SRA Toolkit 或云平台取数。取到的是基因型文件与样本层面的协变量,不含你从 BioLINCC 拿到的表型主表。

#-- 检查基因型文件与表型文件的样本编号能否对上
import pandas as pd

geno = pd.read_csv("cardia_geno_samples.txt", sep="\t", dtype=str)
pheno = pd.read_csv("cardia_pheno_y25.csv", dtype=str)

#-- dbGaP 的样本编号与 CARDIA 内部编号通常需要一张对照表
xwalk = pd.read_csv("sample_subject_xwalk.csv", dtype=str)

merged = geno.merge(xwalk, on="SAMPLE_ID", how="left")
merged = merged.merge(pheno, on="SUBJECT_ID", how="left")

print("genotyped samples:", len(geno))
print("mapped to subject:", merged["SUBJECT_ID"].notna().sum())
print("with y25 phenotype:", merged["CAC_AGATSTON"].notna().sum())

第三个数字通常远小于第一个,这就是现实:基因型样本、表型样本、影像子样本三者的交集,往往只有一千多人。做影像遗传学之前先算这个交集,比做完分析才发现样本不够要好。

5.4 变量字典与轮次对齐

跨轮次分析的第一件事不是建模,是造一张「变量 × 轮次」的可用性矩阵。官方文档里有这张表,但它分散在各轮的代码本里,需要自己拼。

#-- 把各轮数据读成长表,保留轮次标记,再拼成面板
import pandas as pd
from pathlib import Path

frames = []
for exam, fname in [(0, "y0.csv"), (5, "y5.csv"), (10, "y10.csv"),
                    (15, "y15.csv"), (20, "y20.csv"), (25, "y25.csv"),
                    (30, "y30.csv"), (35, "y35.csv")]:
    p = Path("cardia") / fname
    if not p.exists():
        continue
    df = pd.read_csv(p, low_memory=False)
    df["EXAM"] = exam
    frames.append(df)

panel = pd.concat(frames, ignore_index=True, sort=False)
panel["EXAM_DATE"] = pd.to_datetime(panel["EXAM_DATE"], errors="coerce")
panel["DOB"] = pd.to_datetime(panel["DOB"], errors="coerce")
panel["AGE_AT_EXAM"] = (panel["EXAM_DATE"] - panel["DOB"]).dt.days / 365.25

print(panel.groupby("EXAM")["PID"].nunique())
print(panel["AGE_AT_EXAM"].describe())

这段代码里有两个容易忽略的细节。第一,concat 会按列名对齐,不同轮次同名但含义不同的变量会被强行拼在一起——所以拼之前要先改掉那些「名字一样、口径不同」的列名。第二,AGE_AT_EXAM 用日期相减而不是用现成字段,是因为现成字段的取整方式在不同轮次不一致。

5.5 钙化进展与事件时间

钙化评分的分析有一套约定俗成的定义,最常用的是「进展」的复合定义:基线为零的人随访出现任何钙化,或基线在 1–100 之间的人年化增长超过十个单位,或基线超过一百的人年化增长率超过百分之十。这套定义来自 CARDIA 自己的方法学论文,被后续很多研究沿用。

#-- 按常用定义计算两年之间的钙化进展
import numpy as np
import pandas as pd

df = pd.read_csv("cac_three_exams.csv")
wide = df.pivot_table(index="PID", columns="EXAM",
                      values=["CAC_AGATSTON", "AGE_AT_EXAM"])

base = wide[("CAC_AGATSTON", 15)]
y20 = wide[("CAC_AGATSTON", 20)]
y25 = wide[("CAC_AGATSTON", 25)]
age15 = wide[("AGE_AT_EXAM", 15)]
age25 = wide[("AGE_AT_EXAM", 25)]

follow = y25.fillna(y20)
years = (age25 - age15).where(y25.notna(), np.nan)
years = years.fillna(5.0)

incident = (base == 0) & (follow > 0)
fast_mid = (base > 0) & (base < 100) & ((follow - base) / years >= 10)
fast_high = (base >= 100) & ((follow - base) / base / years >= 0.10)

df_prog = pd.DataFrame({
    "PID": wide.index,
    "baseline_cac": base.values,
    "followup_cac": follow.values,
    "progressed": (incident | fast_mid | fast_high).values,
})

print(df_prog["progressed"].mean())
print(df_prog["baseline_cac"].isna().sum())

第三个 print 是在查基线缺失——很多人会忘了「没做 Y15 的 CT」本身就是一个选择事件,直接删掉会让分析集偏向那些一直来的人。§4.3 的案例里那位受试者三轮都做了,属于相对配合的那一类。

5.6 六种常见取数错误

错误 表现 正确做法
把轮次当等距时间 直接以 EXAM 编号做时间轴 用实际检查日期算间隔
零值与缺失混同 钙化为 0 被当成没做 用单独的缺失标记
忽略用药校正 服药者血压被当作自然值 加用药虚拟变量或做校正
用宽表直接回归 同一人多次观测被当独立 混合模型或广义估计方程
跨轮次变量同名直拼 单位与方法不同被掩盖 先建变量对照表
子样本当全队列 影像结论外推到全部人 明确分析集并讨论选择偏倚

第三种错误在心血管研究里格外常见。降压药会把收缩压压低十到二十毫米汞柱,如果不区分「未治疗的高血压」与「治疗后的正常血压」,暴露与结局的关联会被系统性稀释。标准做法是加一个用药虚拟变量,或者对服药者加一个固定校正值——两种做法各有争议,但都比忽略要好。

§6 与库内词条的关系

6.1 关系图谱

库内的队列类词条已经形成一个谱系,按「入组年龄」排一遍,位置就清楚了。

词条 入组年龄 与 CARDIA 的关系
Framingham Heart Study 成年起,多代 心血管队列的源头,方法学祖先
CARDIA 18–30 本篇,青年段
ARIC 45–64 直接接续的中年段,最容易混淆
MESA Sleep 45–84 影像与睡眠分支,多民族
CHARLS 45 岁以上 中国样本,老龄化主题
UK Biobank 40–69 广度换密度,志愿者样本
All of Us 全年龄 EHR 为主,随访刚起步
SHHS 中老年 睡眠专项,单域深挖
NHANES 系列 全年龄 横截面,全国代表性

CARDIA 在这张谱系里的独特性是「唯一一个从十八岁开始、且随访超过三十年的公开队列」。Framingham 有更长的随访,但从成年起招募,没有青年段的密集测量;UK Biobank 有更大的样本,但入组时已四十岁;ARIC 的中年段更厚,但看不到三十岁以前。

6.2 与 ARIC 的分工:一段前传与一段正片

这是本篇最需要说清的一节。库内已有 aric 词条,两者都是 NHLBI 资助、都设四个现场、都刻意做成黑人与白人对照,连现场都有一处重叠(明尼阿波利斯),所以最容易被写成同一件事的两种说法。它们不是。

维度 CARDIA ARIC
基线年份 1985–1986 1987–1989
入组年龄 18–30 45–64
基线人数 五千一百余 一万五千余
现场 伯明翰、芝加哥、明尼阿波利斯、奥克兰 杰克逊、福赛斯县、明尼阿波利斯、华盛顿县
现场重叠 明尼阿波利斯 明尼阿波利斯
种族设计 黑白各约一半 黑人约占四分之一,含全黑人现场
检查轮次 10 9
随访跨度 三十五年 三十五年以上
影像重点 钙化、超声、脑 MRI 颈动脉、心脏、脑
事件密度 中年段偏低 中年段高
监测臂 无 有社区医院监测

第一层区别是人群。CARDIA 的四个现场是伯明翰、芝加哥、明尼阿波利斯、奥克兰;ARIC 的四个现场是杰克逊(密西西比)、福赛斯县(北卡)、明尼阿波利斯(明尼苏达)、华盛顿县(马里兰)。名字重叠的只有明尼阿波利斯一个,且两者在同一个城市招的是不同出生代的人——CARDIA 招的是 1955 到 1967 年出生的人,ARIC 招的是 1923 到 1944 年出生的人。所以「现场重叠」不等于「人群重叠」,这一点必须说清,否则会有人误以为可以按城市把两个队列的人合并。

第二层区别是设计意图。CARDIA 想知道「危险因素在十八到三十岁时怎样起步」,ARIC 想知道「危险因素在四十五岁以后怎样兑现」。一个看前半程的累积,一个看后半程的后果。反映到数据上:CARDIA 的早期轮次危险因素变异大、事件几乎为零;ARIC 的基线就有大量事件,且有一个覆盖四十万人的社区监测臂,用来给事件率提供分母。

第三层区别是随访区间的前后错位。CARDIA 的 Year 0 是 1985 年,ARIC 的基线是 1987 年,但两者的「研究时钟」起点不同:CARDIA 的受试者从二十岁开始被追,ARIC 的从五十岁开始被追。到 2020 年,CARDIA 的受试者五十五岁上下,正好进入 ARIC 基线时的年龄段。这创造了一个有价值的对照结构:同一年龄、不同出生代、不同时期。用 CARDIA 的 2020 年数据与 ARIC 的 1987 年数据比较五十五岁人群的危险因素水平,可以把「时期变化」从「年龄变化」里剥出来——这是单一队列做不到的。

第四层区别是变量深度分布不同。ARIC 的中年影像更全(颈动脉内中膜厚度、心脏、脑),CARDIA 的青年段测量更密(十轮,含三次钙化)。做钙化进展,CARDIA 更合适,因为它有三个时点;做卒中与认知的晚年关联,ARIC 更合适,因为它的老年段更长、事件更多。

第五层区别是不该合并的地方。两个队列的血压测量方案(读数次数、袖带)、血脂检测平台(早期方法不同)、吸烟问卷选项(分类粒度不同)都不完全一致。把两者拼成一个「超级队列」做暴露分析,必须先做测量等值化,并在模型里保留队列虚拟变量。直接按变量名合并,是把两个不同的尺子当成一把。

一句话概括分工:CARDIA 是前半生的观测记录,ARIC 是后半生的兑现记录。要研究「从青年到老年的完整生命历程」,正确做法不是二选一,而是把两者当作两段可拼接的序列,在拼接处显式建模口径差异;要研究单一段内的问题,就选对应的那一个,不要为了「样本更大」而混用。

6.3 检索路径

在库内找与 CARDIA 相邻的词条,可以按标签与关键词两条路走。

#-- 按标签找同类:所有带「队列研究」标签的记录
grep -rl "队列研究" /workspace/qianfanghub-study/writing/*/*_Wikipedia.md | head -20

#-- 找同时涉及钙化与随访的记录
grep -rl "钙化" /workspace/qianfanghub-study/writing/*/*_Wikipedia.md \
  | xargs grep -l "随访" | head -20

#-- 找走 BioLINCC 或 dbGaP 的记录,这类通常可以直接对比申请路径
grep -rl "BioLINCC" /workspace/qianfanghub-study/writing/*/*_Wikipedia.md | head -20

检索时注意一个陷阱:标题里带「队列」的词条,未必真的满足队列的三要素(同一批人、至少两次测量、事件日期)。判断标准看正文有没有交代检查轮次与到场人数,而不是看标题。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

看到「三十五年随访」这四个字,最常见的误判是把它读成「数据很完整」。这是一个错位:随访时长描述的是项目存续了多久,不是每个人被观测了多久,更不是每个变量每轮都有。

真实形态是三条收缩同时发生。第一条是人数收缩:每一轮都会有人不再到场,后期轮次的到场人数明显少于基线,剩下的人在健康与教育上系统性偏优。第二条是变量收缩:某些测量只在特定轮次做,比如 CT 只在三个轮次,脑 MRI 只在两个轮次,跨轮次分析时可用的人由最稀缺的那次测量决定。第三条是精度收缩:早期的方法在后来的平台上看是粗糙的,跨轮次比较时旧数据的测量误差会放大。

所以正确的读法是:时间维度很富,横截面维度很薄,变量维度很不均匀。把这三件事分开看,才不会在建模时把「幸存者」当成「代表性」,把「轮次」当成「等距时间」。

7.1 五维评分

维度 分数 依据
规模 3/5 基线五千余人,在公开队列里属中等;子样本更小
时间深度 5/5 三十五年、十轮,青年段密度全球少见
结局确定性 4/5 事件由委员会判定并附日期,但中年段事件数有限
可接入性 2/5 双轨申请、禁商用、周期以月计
文档完整度 4/5 变量字典与检查组件齐全,跨轮次说明分散

评分不是排名。规模给三分是因为它的设计目标本来就不是规模,用规模去衡量它是错位的;可接入性给两分是实情,任何需要签协议、等审批的数据源都该拿这个分数。

7.2 DAIMS 维度逐项看

DAIMS 在这里按五件事评估:文档、可及性、完整性、元数据、可持续性。

DAIMS 维度 评级 说明
Documentation 良 检查组件表、方案手册、数据收集表齐备;跨轮次变更需自行拼合
Accessibility 中下 表型走 BioLINCC,遗传走 dbGaP,商业用途受限
Integrity 优 中心实验室、中心读片、委员会判定三层质控
Metadata 良 变量字典完整,衍生变量有官方版本;部分口径需读技术报告
Sustainability 优 资助延续至 Year 40,协调中心稳定,数据持续更新

7.3 已知的、可枚举的偏差

偏差 表现 对分析的影响
幸存者偏倚 后期轮次只剩较健康者 老年段关联被低估
志愿者偏倚 入组者比同社区非入组者更健康 发病率略低于真实社区
地理偏倚 四现场非随机 不能外推全国
种族限定 仅黑人与白人 亚裔、拉丁裔结论缺位
子样本选择 影像与组学非随机 影像结论适用人群受限
测量方法变更 设备与平台逐轮更换 纵向比较出现系统偏差
检查间隔不均 2 到 7 年不等 时间轴需用真实日期
商业限制 协议分级限制 产业转化研究无法直接使用

§4.3 的案例提示了另一类不容易被写进表格的偏差:用药起始时间与测量时点的错位。那位受试者在 Y25 开始服降压药,如果分析时把 Y25 的血压当作「未治疗血压」,就会低估她真实的暴露水平;如果把 Y30 的血压当作「自然下降」,就会把治疗效应读成疾病缓解。这类错位在电子病历数据里更严重,在 CARDIA 里至少还有用药清单可以核对。

7.4 外部验证矩阵

结论类型 在 CARDIA 内的证据 外部验证情况
青年期 LDL 预测中年钙化 强 在多个队列中重复
青年期 BMI 轨迹预测心衰 中强 在 ARIC、Framingham 中方向一致
青年期血压与中年认知 中 在脑影像子研究中部分重复
钙化进展的预测因子 中强 在 MESA 等队列中重复
社会经济地位与心血管风险 中 在多个国家队列中重复
听力损失与认知下降 中 与 ARIC 的发现一致

外部验证矩阵的意义不是盖章,而是提示哪些结论已经跨队列稳住、哪些还是单队列发现。用 CARDIA 做训练集时,前两行对应的结局迁移风险最低。

7.5 它为何能持续:一批人愿意被量三十五年

大型队列的常见死法是「人跑光了」。CARDIA 没有,原因不神秘:每轮检查之间保持联系、现场工作人员与受试者长期熟悉、检查内容随年龄调整(年轻时问吸烟饮酒,中年时加问认知与体能),以及一套把「参与」变成习惯的运营。四十年里,最初那批二十多岁的人已经成了六十岁的人,他们回来的理由早已不是「帮一项研究」,而是「这是我自己的记录」。

这套机制也解释了它的数据特征:留下的样本偏向配合度高、健康素养好的人,这既是它能持续的原因,也是它最大的偏倚来源。

§8 生态位与历史

8.1 历史沿革

CARDIA 在 1983 年获得首轮资助,最初的合同期是五年,包含两轮检查。此后靠合同续签一轮一轮延长,每一轮续签都要重新论证科学价值。这个「分段续命」的模式决定了它的形态:不是一次性设计好的四十年计划,而是每五年根据当时的科学热点加入新测量。

阶段 年份 关键决定
立项 1983 首轮资助,五年两轮检查
基线 1985–1986 四现场入组,四格配额
扩张 1990 年代 加入超声、体成分、糖耐量
转型 2000 年代 加入 CT 钙化,转向亚临床
扩展 2010 年代 加入脑 MRI、认知、听力
延续 2020 年代 Year 35 完成,Year 40 推进

8.2 它产出了什么

官方页面称,自 1985 年以来基于 CARDIA 数据的论文超过一千一百篇。这个数字的意义不在多,而在方向:早期论文集中在危险因素的分布与变化,中期转向亚临床疾病与风险预测,近期转向健康差异、认知老化与生命历程。

时期 主要产出类型 代表主题
1985–1995 描述性 血脂、血压、吸烟的年龄曲线
1995–2005 关联性 肥胖、胰岛素抵抗、亚临床改变
2005–2015 预测性 钙化、风险评分、心衰
2015–至今 机制与差异 认知、脑老化、社会决定因素

它也产出了一批方法学遗产:钙化进展的复合定义、青年期危险因素轨迹的建模方法、多队列合并时的口径对齐流程,这些都被后来的研究反复引用。

8.3 生态位:介于「单个小镇」与「全国调查」之间

Framingham 是一个小镇的三代人,深但窄;NHANES 是全国的概率样本,广但浅。CARDIA 在两者之间:四个城市、两个种族、五千人、三十五年。这个位置让它能做前两者都做不了的事——在同一批人身上同时观察种族差异与年龄变化。

类型 代表 深度 广度 适用问题
单镇家系 Framingham 极深 窄 家族聚集、长期自然史
多中心双种族 CARDIA、ARIC 深 中 种族差异、生命历程
全国概率样本 NHANES 浅 广 患病率、分布
超大型志愿者 UK Biobank 中 极广 遗传关联、风险预测

8.4 治理与资金

CARDIA 由 NHLBI 以合同方式资助,协调中心设在阿拉巴马大学伯明翰分校,四个现场各有自己的研究团队。数据与样本的对外分发由 NHLBI 的数据仓库体系承担,遗传数据由 dbGaP 承担。治理上有一套委员会结构:指导委员会、各分委员会、出版物委员会,任何使用数据的研究在投稿前要经过出版物的合规审查。

这套治理对使用者的实际影响是:申请时要写清研究问题,论文投稿前可能要提交审查,涉及 CARDIA 合作者的署名有约定。这些规则写在官方页面与出版物政策里,读一遍能省掉很多往返。

§9 使用指引

9.1 三种角色的路径

角色 最短路径 主要风险
流行病学研究者 BioLINCC 申请表型 → 按轮次建面板 → 混合模型 到场人数下降导致的选择偏倚
临床心血管研究者 聚焦钙化与超声子样本 → 结合事件 子样本量小,事件数不足
数据科学 / 建模者 先用文献与衍生变量清单摸结构 → 再申请 误以为有原始影像

第一类人最容易犯的错是把 CARDIA 当成普通的面板数据,用固定效应模型直接跑,忽略检查间隔不均。第二类人最容易犯的错是低估事件数:中年段的事件密度不高,做预测模型时正例可能只有几百个。第三类人最容易犯的错是期待 DICOM——§2.5 已经说明,这里只给读片数值。

§4.3 的案例可以当作一个检验:把你打算建的模型套在那条轨迹上,看看它在 Y15 时能不能只用前四轮的数据预测出 Y20 的钙化。如果做不到,说明你选的变量不够或者时间窗不对。

9.2 一条最短的可用流程

从零到能跑第一个模型,最短的路径大致是这样。

#-- 第一步:确认研究问题与所需轮次,写成变量清单
python3 build_var_request.py

#-- 第二步:向 BioLINCC 提交申请,等审批与下载链接
#-- 第三步:解压后先读 readme 与代码本,不要急着 read_csv
ls cardia_download/
head -50 cardia_download/README.txt
#-- 第四步:读入、对齐、生成分析集
import pandas as pd

files = {
    0: "y0.csv", 5: "y5.csv", 10: "y10.csv", 15: "y15.csv",
    20: "y20.csv", 25: "y25.csv", 30: "y30.csv", 35: "y35.csv",
}
frames = []
for exam, name in files.items():
    df = pd.read_csv(f"cardia_download/{name}", low_memory=False)
    df["EXAM"] = exam
    frames.append(df)
panel = pd.concat(frames, ignore_index=True, sort=False)

#-- 第五步:定义分析集(三轮 CT 都到场者)
cac = panel[panel["EXAM"].isin([15, 20, 25])]
keep = cac.groupby("PID")["CAC_AGATSTON"].apply(lambda s: s.notna().all())
analysis_ids = keep[keep].index
print("analysis set:", len(analysis_ids))

第五步的这个交集,通常只有两三千人。接受这个数字,是使用 CARDIA 的第一课:它的样本量从来不体现在基线的五千人上,而体现在「经过三轮筛选后还剩多少人」上。

9.3 引用方式

学术引用以官方指定的格式为准,通常引用基线设计论文与所用的具体数据版本。数据本身应注明来源为 NHLBI BioLINCC 与 CARDIA 协调中心,并注明数据获取编号与获取日期;使用遗传数据时另需注明 dbGaP 研究编号与审批号。方法部分建议写明所用的检查轮次与年份,而不是只写「CARDIA 数据」——因为不同轮次的样本与变量差别很大,不写清楚无法复现。

§10 AI 使用声明

项目 内容
文本生成 由大语言模型依据官方页面与论文摘要起草,经人工核对数字
数字来源 CARDIA 官方站、BioLINCC 研究页、UAB 协调中心文档页、Europe PMC 论文摘要
未核实项 dbGaP 研究编号、逐轮到场的精确人数,见附录 B
代码 示例为通用写法,变量名按官方命名习惯推测,运行前须对照下载的代码本
图像 无真实图像,封面为生成式插画提示词
判断性内容 评分与区隔判断为编辑意见,非官方结论
更新机制 官方发布 Year 40 数据或修订文档时重核数字
责任边界 使用前以官方页面与数据使用协议为准

常见误读

常见说法 实际 证据
CARDIA 和 ARIC 是同一个研究的两批数据 人群、年龄、现场、随访区间均不同 两者基线年份与入组年龄不同,仅明尼阿波利斯重叠
随访三十五年等于每人被量十次 个体到场次数差异很大 后期轮次到场人数明显少于基线
五千人可代表美国青年 四现场配额抽样,仅黑白两种族 官方设计说明为平衡分组而非概率抽样
CT 钙化每轮都做 只有 Y15、Y20、Y25 三轮 后续轮次无 CT 记录
有基因组就能直接做 MR 基因与表型分属两套审批 dbGaP 受控访问不含表型主表
可以下载原始 CT 影像 只提供读片后的评分与测量值 数据文档中无 DICOM
轮次编号就是检查次数 编号是距基线的年数 Y15 对应 2000–2001 年
检查间隔是等距的 2 到 7 年不等 各轮日历年可查
商业机构可以申请使用 商业使用受分级同意限制 BioLINCC 页面明确标注
加入新测量说明老数据被替换 新旧测量并存,需桥接校正 各轮技术报告有桥接说明

FAQ

Q1:CARDIA 与 ARIC 最本质的区别是什么?
入组年龄。CARDIA 在 1985–1986 年招 18–30 岁的人,ARIC 在 1987–1989 年招 45–64 岁的人。前者记录危险因素如何起步,后者记录它如何兑现。现场名字只重叠明尼阿波利斯一个,且招的是不同出生代。

Q2:基线到底多少人?
官方口径为五千一百一十五人,BioLINCC 与协调中心页面一致。后续轮次的到场人数逐轮下降,官方未在概览页给出逐轮数字。

Q3:CT 钙化有几次,分别在哪一年?
三次,分别在 Year 15(2000–2001)、Year 20(2005–2006)、Year 25(2010–2011)。此后轮次没有再安排 CT,所以钙化进展分析最多只有三个时点。

Q4:为什么入组要按四格配额,而不是随机抽?
为了让每个比较组都有足够的人。随机抽的话,低教育组、黑人组的人数会少到无法做分层分析。代价是整体比例被人为设定,不能用来估计总体分布。

Q5:数据申请要多久?
表型数据通过 BioLINCC 申请,通常在数周到数月;遗传数据通过 dbGaP 受控访问,周期更长,且需要机构签署数据使用认证。两者分别审批,不能相互替代。

Q6:可以只用 Year 25 的横截面数据吗?
可以,但那样就浪费了这个队列的核心价值。单轮数据在横截面上并不比全国调查更强,样本还更小。用它就该用它的纵向结构。

Q7:子样本有多少人?
没有统一的数字。钙化三轮都到场且可判读的人通常在两三千人量级,脑 MRI 与多组学更小。做任何子样本分析前,先用主键算一次交集。

Q8:变量名跨轮次一样,可以直接合并吗?
不可以直接合并。同名变量的测量方法、单位、编码可能变过,合并前要读代码本并做单位换算。官方的跨轮次变量对照表是必读材料。

Q9:能不能用来做深度学习的影像模型?
不能直接做。数据里没有 DICOM,只有读片后的数值(钙化评分、左室质量等)。要训练影像模型得另找有原始影像的数据集。

Q10:论文里该怎么写数据来源?
写清 BioLINCC 编号、CARDIA 协调中心、使用的检查轮次与年份、数据获取日期。只写「CARDIA 数据」不够,因为不同轮次的样本与变量差别很大。

Q11:如果我想同时用 CARDIA 和 ARIC,要注意什么?
先做测量等值化:血压读数方案、血脂检测平台、吸烟问卷选项三项必须逐条核对;在模型里保留队列虚拟变量;不要假设两个队列的人在同一个城市就同质。

术语表

术语 含义
CARDIA 青年成人冠状动脉风险发展研究
检查轮次(Exam) 一次全队列回访,编号为距基线的年数
Y0 基线检查,1985–1986
Y35 第十轮检查,2020–2022
Agatston 评分 CT 钙化的标准量化指标,单位为任意单位
钙化进展 钙化评分随时间上升,按复合定义判定
亚临床 尚无临床症状但已有器质性改变的阶段
左室质量指数 左室质量除以体表面积,反映心脏重构
中心读片 影像集中到读片中心统一判读
桥接校正 测量方法更换时用同批样本建立换算关系
四格配额 按种族、性别、教育、年龄分层招满的设计
子样本 只在部分受试者中采集的测量
面板数据 同一批人在多个时点的重复观测
混合效应模型 同时估计固定效应与个体随机效应的模型
幸存者偏倚 后期只剩健康者导致的系统性偏差
志愿者偏倚 愿意参加者比非参加者更健康
选择偏倚 进入分析集的样本不代表目标人群
事件时间 从基线到结局发生的时间,用于生存分析
人年 随访人数乘以随访年数,事件率的分母
时期效应 同一时期对所有出生代的共同影响
队列效应 不同出生代之间的系统性差异
测量等值化 让不同来源的测量可以比较的处理
DAIMS 文档、可及、完整、元数据、可持续五维评估框架
dbGaP 美国基因型与表型数据库,受控访问
BioLINCC NHLBI 生物样本与数据仓库

附录 A:核心数字核对表

项 值 来源 来源层级
基线年份 1985–1986 官方站、BioLINCC 官方
基线人数 5,115 官方站、BioLINCC 官方
入组年龄 18–30 岁 官方站、BioLINCC 官方
现场数 4 官方站 官方
现场名单 伯明翰、芝加哥、明尼阿波利斯、奥克兰 官方站 官方
教育构成 四成不超过高中 BioLINCC 官方
检查轮次 10(Y0–Y35) 官方站与论文摘要 官方 + 论文
随访跨度 三十五年(至 2022) BioLINCC 官方
CT 钙化轮次 Y15、Y20、Y25 论文摘要 论文
超声轮次 Y5、Y25、Y30 论文摘要 论文
脑 MRI 轮次 Y25、Y30 论文摘要 论文
可申请数据 检查数据至 Y35,结局至 2022 BioLINCC 官方
附属研究 28 项可申请 BioLINCC 官方
论文数 一千一百余篇 官方站 官方
商业使用 分级限制 BioLINCC 官方
dbGaP 编号 phs000285 官方遗传数据页链接 未逐字复核

附录 B:数字的来源分层

第一层:官方页面。 基线人数、年龄、现场、检查轮次、随访跨度、可申请数据范围、附属研究数量、商业使用限制,均来自协调中心官方站与 BioLINCC 研究页。这些数字在两处一致,可以放心引用。

第二层:论文摘要。 CT 钙化的三个轮次与对应年份、超声与脑 MRI 的轮次、Y35 到场者的年龄区间、Y25 胸部 CT 的样本规模,来自公开论文摘要。这些数字与官方检查组件表的方向一致,但具体年份边界以官方文档为准。

第三层:未核实。 dbGaP 的确切研究编号与版本号、逐轮到场的精确人数、基因型样本的准确数量、各子样本的交集规模。这些数字要么需要登录才能看到,要么分散在技术报告里,本篇没有逐一核对,正文中相应位置已标注「官方未在同一页面给出」或类似措辞。

分层的意义不是免责,而是让使用者知道哪些数字可以直接写进论文的方法部分,哪些需要自己再核一次。

附录 C:完整参考文献

  1. CARDIA 官方站,研究概览与研究者入口,https://sites.uab.edu/cardia/
  2. CARDIA 官方站,研究信息与检查组件文档,https://sites.uab.edu/cardia/for-researchers/study-information/
  3. NHLBI BioLINCC,CARDIA 研究页(编号 HLB00030026a),https://biolincc.nhlbi.nih.gov/studies/cardia/
  4. CARDIA 基线专著(Baseline Monograph),协调中心发布
  5. 冠脉钙化进展与中年认知功能的 CARDIA 研究论文摘要(Europe PMC)
  6. 生命早期心血管风险轨迹与中年钙化进展的 CARDIA 研究论文摘要(Europe PMC)
  7. CARDIA 睡眠附属研究设计与方法论文摘要(Europe PMC)
  8. CARDIA Year 35 听力与血糖关联研究论文摘要(Europe PMC)
  9. 美国国家心肺血液研究所 CARDIA 项目说明页
  10. dbGaP 中 CARDIA 遗传数据入口(经官方站链接跳转)

引用时以官方页面为最终依据,论文摘要用于补充官方概览页未列出的轮次细节。

附录 D:任务代码

下面这段代码把「变量清单 → 分析集 → 描述统计」串成一条可运行的最小流水线,适合在拿到数据的第一天跑一遍,确认结构符合预期。

#-- 最小流水线:清单、读入、分析集、描述统计
from pathlib import Path
import pandas as pd

BASE = Path("cardia_download")
FILES = {0: "y0.csv", 5: "y5.csv", 10: "y10.csv", 15: "y15.csv",
         20: "y20.csv", 25: "y25.csv", 30: "y30.csv", 35: "y35.csv"}

def load_panel(base: Path, files: dict) -> pd.DataFrame:
    frames = []
    for exam, name in files.items():
        p = base / name
        if not p.exists():
            continue
        df = pd.read_csv(p, low_memory=False)
        df["EXAM"] = exam
        frames.append(df)
    panel = pd.concat(frames, ignore_index=True, sort=False)
    panel["EXAM_DATE"] = pd.to_datetime(panel["EXAM_DATE"], errors="coerce")
    panel["DOB"] = pd.to_datetime(panel["DOB"], errors="coerce")
    panel["AGE"] = (panel["EXAM_DATE"] - panel["DOB"]).dt.days / 365.25
    return panel

panel = load_panel(BASE, FILES)
print("rows:", len(panel), "subjects:", panel["PID"].nunique())

#-- 每轮人数与年龄中位数,用来确认轮次对齐正确
summary = (panel.groupby("EXAM")
                .agg(n_subject=("PID", "nunique"),
                     age_median=("AGE", "median")))
print(summary)

#-- 三轮 CT 都到场的人,才是钙化进展的分析集
cac_exams = [15, 20, 25]
has_all = (panel[panel["EXAM"].isin(cac_exams)]
           .groupby("PID")["CAC_AGATSTON"]
           .apply(lambda s: s.notna().sum() == len(cac_exams)))
ids = has_all[has_all].index
print("cac analysis set:", len(ids))

#-- 导出分析集的主键,供后续与基因型、影像子样本求交
pd.Series(ids, name="PID").to_csv("cac_analysis_ids.csv", index=False)

跑通之后,第一个要看的是每轮人数曲线:它应该单调下降但不应断崖,如果某一轮骤降,多半是文件缺失或者合并键写错了。

附录 E:如果只记五件事

  1. 基线是 1985–1986 年的五千一百余名 18–30 岁黑人与白人,四个现场,四格配额。
  2. 十轮检查跨三十五年,CT 钙化只有三次(Y15、Y20、Y25),超声三次,脑 MRI 两次。
  3. 表型走 BioLINCC,遗传走 dbGaP,商业使用受分级限制,周期以月计。
  4. 它与 ARIC 的分工是青年段与中年段:一个记录危险因素如何起步,一个记录它如何兑现;现场只重叠明尼阿波利斯,人群不同。
  5. 它的强项是轨迹不是分布,用它估计患病率是错位使用。

编辑说明

本篇的事实核对完成于 2026 年 10 月,核对方式为直接访问 CARDIA 协调中心官方站与 NHLBI BioLINCC 研究页,辅以 Europe PMC 的论文摘要。凡官方两处一致的数字,按官方口径记录;凡只有论文摘要支持的轮次细节,在附录 A 标注来源层级。未核实项已在附录 B 单列,不作推断。

篇幅上刻意压缩了分布类统计:本页不提供各变量的百分位、缺失率、标签频次。这类数字随数据版本变化,且需要下载全量数据才能得到,写进来只会过期。需要这类信息的分析者应在拿到数据后自行统计,并以官方代码本为准。

关于与 ARIC 的区隔:两者同属 NHLBI 四中心设计,现场有一处重叠,极易被合并叙述。本篇在 §6.2 用五个维度逐项拆开,并在多处强调「现场重叠不等于人群重叠」。若后续库内新增同源队列词条,应以同样的方式在各自 §6 中声明分工,避免重复介绍同一套设计原理。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • aric — 共享标签:队列研究 / 心血管疾病 / 公共卫生与流行病学 / GWAS
  • dep-eas-gwas — 共享标签:队列研究 / 公共卫生与流行病学 / GWAS
  • mesa — 共享标签:队列研究 / 心血管疾病 / 公共卫生与流行病学
  • framingham — 共享标签:队列研究 / 心血管疾病 / 公共卫生与流行病学
  • china-map — 共享标签:队列研究 / 公共卫生与流行病学 / GWAS
  • superagers-family-study — 共享标签:队列研究 / 公共卫生与流行病学 / GWAS
  • ckb — 共享标签:队列研究 / 公共卫生与流行病学
  • nki-rockland — 共享标签:队列研究 / 公共卫生与流行病学
  • all-of-us — 共享标签:队列研究 / 公共卫生与流行病学
  • chns — 共享标签:队列研究 / 公共卫生与流行病学

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集