信息速览
HGDP 面板要解决的问题很具体:做人群遗传学、祖源推断或跨群体方法学评测时,你需要一批「彼此可比、覆盖足够分散、还能被反复重测」的人。生物银行通常只覆盖一个国家,商业芯片的样本高度偏向欧洲裔,临床队列则带着疾病选择偏倚。1990 年代启动的人类基因组多样性计划(HGDP)与巴黎的 CEPH 合作,从全球五十余个群体各取若干人,建成了一批可以无限扩增的淋巴细胞系。
这套资源的形状很特别:它同时是实物、是清单、也是数据。实物是 一千零六十三份细胞系与从中提取的 DNA;清单是一张按编号排列的表,每行只有性别、群体、地理来源三项;数据是二十多年里各家实验室回传的芯片、微卫星、拷贝数与测序结果。三者不在一个地方,也不共享一套格式。
理解它的关键,是把「取样设计」与「数据产品」分开看:前者三十年没变,后者一直在长。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全称 | Human Genome Diversity Project – CEPH Human Genome Diversity Cell Line Panel |
| 常用简称 | HGDP-CEPH panel;发放形态分 H1063 与 H952 两种 |
| 保管机构 | 法国巴黎 Fondation Jean Dausset – CEPH(让·多塞基金会与人类多态性研究中心) |
| 时间跨度 | 1991 年立项,2000 年代初面板成形,2020 年补齐高深度全基因组 |
| 细胞系 | 1,063 份 EB 病毒转化的淋巴细胞系,按 13 块 96 孔板编排 |
| 个体 | 1,050 人;含 13 对重复细胞系、2 份基因组异常样本、96 对一至二级近亲 |
| 群体 | 官方同页两个口径:介绍段 52 个,访问政策段 51 个;清单按 57 个标签记账 |
| 大洲覆盖 | 撒哈拉以南非洲、北非、中东、中南亚、东亚、大洋洲、欧洲、美洲 |
| 芯片层 | 约 65 万常染色体 SNP,938 名无亲缘个体,51 个群体 |
| 其他标记 | 843 个微卫星、51 个小 indel、约一万条 CNV(两个实验室各自产出) |
| 测序层 | 929 人高深度短读全基因组,54 个群体,26 人 linked-read 定相 |
| 结构变异层 | 911 个样本、126,018 个结构变异,其中 78% 为既往未报道 |
| 表型 | 无。仅性别、群体、地理来源三项,无年龄、无病史、无临床指标 |
| 实物形态 | DNA 溶液,TE 10:1,约 60 ng/µl,每孔约 5 µg;细胞系不外发 |
| 获取条件 | 学术非商业合作协议,成本价收费,须回传基因型结果,不得转交第三方 |
| 一句话定位 | 人群多样性的取样框架与公共参照面板,不是频率数据库,也不是临床对照 |
§1 它要解决的具体麻烦
1.1 你要的不是更多人,是更分散的人
任何跨群体分析,第一步都会撞上同一个问题:手上的人群不够分散。公共生物银行里九成以上是欧洲裔,全国性队列通常只有本国的主体民族,商业芯片的探针设计本身就围绕欧洲人群的连锁不平衡结构优化。用这样的样本去问「这个变异在非洲之角的频率是多少」,得到的不是估计,是外推,而外推的误差无法从数据内部估计出来。
够分散的样本还得满足第二个条件:可比。不同实验室、不同年代、不同平台产生的基因型,如果连位点集合都不一致,跨群体比较就退化成跨批次比较。HGDP 的做法是把「人」固定下来——同一批细胞系,谁都可以申请 DNA,谁都可以在自己平台上重测,测完把结果交回中央数据库。三十年来,这个池子被不同技术反复测量,因此后来的每一层数据都能落在同一套编号上。
第三个条件最容易被忽略:可再测。细胞系可以无限扩增,意味着今天的结论明天还能用新平台复核;血样不行,一次用完就没了。这是这套资源真正的结构性优势,也是它能在芯片时代、外显子时代、短读全基因组时代、长读组装时代各被重做一遍的原因。
1.2 三条常见的错误期待
第一条,把它当频率数据库。有人在 HGDP 里检索某个变异,发现南美群体频率为零,就写「该变异在美洲人群缺失」。实际上 Karitiana 只有二十几个人,零频率只说明这几个人的两条染色体上没有,不说明群体里没有。群体频率需要概率模型和足够样本量,而 HGDP 每个群体从个位数到五十人不等。
第二条,把它当临床对照。有人拿它当「健康人群背景」去过滤候选致病变异。这在方法上勉强成立,在解释上常常越界:面板没有任何表型记录,谁也不知道这些人有没有携带隐性致病位点,更不知道他们的临床状态。把它写成「健康对照」是把「未记录疾病」偷换成「没有疾病」。
第三条,把群体名当人种。清单里的群体字段是采集时的地理与社会身份——「Bedouin」「Druze」「Pathan」「Pima」——不是遗传学聚类结果。同一个标签内部可以有显著结构,不同标签之间可以几乎没有差异。用标签直接做分类变量,等于把行政地理当成了生物学。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 跨大洲的群体结构参照 | 五十余个群体、八个大区、两套分组口径 | 够,这是它的设计目的 |
| 祖源成分推断的参照面板 | 芯片层与测序层均可作为参照群体 | 够,但参照群体规模小,稀有成分易过拟合 |
| 训练或评测祖源分类模型 | 有标签的多样本、可复现的编号体系 | 基本够,需自行处理近亲与重复 |
| 变异频率估计 | 每群体样本量个位数到五十人 | 不够,应改用 gnomAD 一类聚合库 |
| 连锁不平衡与重组图谱 | 芯片层位点密度尚可,测序层覆盖全基因组 | 够用,注意群体内样本量限制分辨率 |
| 表型关联与临床解释 | 无表型、无病史、无临床注释 | 完全不够 |
| 需要原代组织或新鲜细胞 | 只有 EB 病毒转化的淋巴细胞系 | 不够,且转化本身带来获得性变异 |
| 需要细胞系做功能实验 | 官方明确细胞系不外发 | 不够,只能拿到 DNA |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 要论证一个变异在某个非欧洲群体的频率 | 提供该群体的可比样本与历史文献结果 | 先取 H952 子集算点估计,再声明样本量下限 |
| 自研祖源推断工具,缺公认参照 | 五十余个群体的标签体系是事实标准 | 固定参照集合与位点集,写进方法学 |
| 做跨平台方法学评测,需要同一批人的多平台数据 | 芯片、微卫星、CNV、短读测序四层可对齐 | 按编号连接各层,先做缺失模式盘点 |
| 需要一个「多样性够」的演示数据集 | 单群体切片体量小,易于跑通 | 从东亚或欧洲切片起步,不必取全量 |
| 研究结构变异的群体分布 | 911 个样本的结构变异集与 novo 组装结果 | 注意 SV 检出率随覆盖度变化 |
| 需要长期可复核的参照材料 | 细胞系可无限扩增,DNA 可按成本价补购 | 记录批次与板号,避免跨批次混用 |
| 教学演示人群遗传学基本概念 | 编号干净、群体清晰、文献充分 | 用微卫星层做小样本演示最直观 |
1.5 一句话判断
如果你的问题里含「不同人群之间如何比较」,HGDP 是三十年来最稳的那块底板;如果你的问题里含「这个变异在该人群有多常见」,它只能给你一个样本量很小的起点。
1.6 不适合谁:四条边界
第一条边界是频率查询。每群体个体数少,任何精细频率、罕见变异计数、区域分层频率都不该由它承担。它有频率信息,但不是频率资源。
第二条边界是临床与表型。没有表型字段,就没有病例对照设计,也就没有致病性、外显率、基因型-表型关联的任何讨论空间。
第三条边界是原代组织。淋巴细胞系是转化后的永生化细胞,转录组、甲基化、拷贝数都会带上培养与转化痕迹。用它研究组织特异性表达,结论不能外推到肝、脑、心肌。
第四条边界是法律与伦理的默认许可。它没有统一的开源许可,DNA 分发按合作协议走,且明确不得转交第三方。把它当 CC0 资源批量再分发,是这类资源最容易被踩的坑。
§2 数据构成与规格
2.1 一份数字在三处记账
同一个「一千」在这套资源里有三种算法,三种都出现在官方文件里,但含义不同。第一种是细胞系数:一千零六十三份,按 13 块 96 孔板编排,这是实物层面的计数。第二种是个体数:一千零五十人,因为其中 13 对细胞系来自同一个人。第三种是可用个体数:剔除近亲、重复与异常样本后剩下 952 人,官方把这个子集叫 H952。
三种算法的差额构成,官方在同一页写得很清楚:13 对重复细胞系、2 份基因组异常的样本、96 对一至二级近亲,另有 16 份细胞系的登记性别与分子检测性别不一致。这四个数字加在一起解释了从一千零六十三到九百五十二 的全部落差,但官方没有逐项说明每个差额落在哪个群体。
还有一处口径错位值得记下:访问政策段称面板覆盖 51 个世界群体,同一页的介绍段写 52 个;而随面板发布的编号对照表按 57 个群体标签记账,差异集中在南非班图人的四个细分标签(Pedi、Sotho、Tswana、Zulu)与西南班图的 Herero、Ovambo,以及意大利的 Bergamo 与 Tuscany 是否分列。差额构成官方未逐一说明,使用时以自己选定的分组口径为准,并在方法学里写明。
2.2 字段与记录的完整字典
清单文件是这套资源的主索引,一行一份细胞系。它的字段少得反常——正因为少,才需要把每一列的边界写清楚。
| 字段 | 类型 | 含义 | 使用时必须注意 |
|---|---|---|---|
| CEPH ID | 字符串 | 主键,形如 HGDP00001 | 五位数补零,号段按群体块状分配,段内有缺号 |
| population | 字符串 | 群体名,如 Brahui、Druze、Karitiana | 是采集时的地理与社会身份,不是遗传聚类 |
| Geographic origin | 字符串 | 国家或地区,如 Pakistan、Israel (Negev) | 与群体名不同级,一个国家可含多个群体 |
| Region | 字符串 | 大区,七类:非洲、北非、中东、亚洲、大洋洲、欧洲、美洲 | 与七分组不是同一套,亚洲在七分组里被拆成两块 |
| Pop7Groups | 字符串 | 七分组:非洲、中东、中南亚、东亚、欧洲、大洋洲、美洲 | 分析时常用这套,注意把北非并入中东 |
| Sex | 字符 | 登记性别,M 或 F | 有 16 份与分子检测不一致,做性染色体分析前须自行核对 |
| All LCLs (H1063) | 布尔 | 是否在全集内 | 全集含重复与近亲,不能直接当独立样本 |
| Unrelated (H951) | 布尔 | 是否在去近亲子集内 | 列名写 951,实际标记数为 952,以标记为准 |
| plate | 整数 | 所在 96 孔板编号,共 13 块 | 批次效应对芯片层影响明显,跨板混用须检查 |
| SNP 基因型行 | 数值 | 芯片层的每个位点每种等位基因 | 不同发表批次的位点集不完全一致 |
| 微卫星重复数 | 整数 | 843 个 STR 位点的重复次数 | 分型结果跨实验室可比性弱于 SNP |
| CNV 调用 | 区间 | 约一万条拷贝数区段,来自两个实验室 | 两套调用的边界不一致,取交集更稳 |
| WGS run | 字符串 | ENA 中的 run 编号 | 一个样本可对应多个 run,须先聚合 |
这张表里最容易被跳过的是两列:Region 与 Pop7Groups。它们的分组方式不同,把两者混用会让同一个样本同时落进两个大区。做跨大区统计前,先决定用哪一套,然后全文一致。
2.3 一条记录的完整解剖
把一份细胞系从清单追到测序读数,中间要跨三个系统。下面这段代码演示如何只用公开清单文件,把它拆成可分析的表。
#-- 读取 CEPH 官方清单,建立编号到群体与大区的映射
import pandas as pd
base = "https://cephb.fr/common/HGDPid_populations.xls"
df = pd.read_excel(base, header=0)
df.columns = ["ceph_id", "population", "origin", "region",
"group7", "sex", "in_h1063", "in_h952"]
#-- 去近亲:只保留 H952 子集,避免把亲属当成独立样本
clean = df[df["in_h952"].astype(str).str.lower() == "yes"].copy()
#-- 编号是五位数补零的字符串,转成整数会丢掉前导零,务必按字符串处理
clean["num"] = clean["ceph_id"].str.replace("HGDP", "").astype(int)
summary = (clean.groupby(["group7", "population"])
.agg(n=("ceph_id", "size"),
first_num=("num", "min"),
last_num=("num", "max"))
.reset_index()
.sort_values(["group7", "n"], ascending=[True, False]))
print(summary.head(12).to_string(index=False))
跑完会看到两件事。第一,号段确实是按群体块状分配的,但块内有缺号,因此「HGDP 编号连续的一段」不等于「一个完整群体」。第二,各群体的样本量差距很大,从个位数到五十人不等,这个差距直接决定了哪些群体能做频率估计、哪些只能做定性描述。
再看一条具体记录长什么样:
ceph_id : HGDP00001
population : Brahui
origin : Pakistan
region : Asia
group7 : Central_South_Asia
sex : M
in_h1063 : yes
in_h952 : yes
num : 1
八列,没有第九列。没有年龄、没有采样年份、没有表型、没有亲属关系字段——亲属关系要靠外部文件(官方另发的近亲清单)才能还原。这就是这套资源的元数据全貌,任何超出这八列的属性都得从别处连接进来。
2.4 区域与分组的两种切法
区域层看的是采样地理,七分组看的是分析惯例。两套数字放在一起,能看出这套设计在哪些地方加厚、哪些地方留白。
| 大区(Region 口径) | 细胞系数 | 覆盖的国家或地区 | 在设计里的角色 |
|---|---|---|---|
| 撒哈拉以南非洲 | 127 | 中非共和国、刚果(金)、塞内加尔、尼日利亚、纳米比亚、肯尼亚、南非 | 人类起源与最深分化层的代表 |
| 北非 | 30 | 阿尔及利亚(姆扎布) | 非洲与地中海之间的过渡带,单群体 |
| 中东 | 147 | 以色列(内盖夫、卡梅尔、中部) | 农牧交界与近东群体的代表 |
| 亚洲 | 451 | 巴基斯坦、中国、西伯利亚、日本、柬埔寨 | 面板最厚的一块,含中南亚与东亚 |
| 大洋洲 | 39 | 巴布亚新几内亚、布干维尔 | 美拉尼西亚多样性的唯一入口 |
| 欧洲 | 161 | 法国、意大利、奥克尼群岛、俄罗斯高加索 | 与商业芯片参照系对接的锚点 |
| 美洲 | 108 | 墨西哥、哥伦比亚、巴西 | 美洲原住民群体,样本量小但不可替代 |
七分组是把北非并入中东、把亚洲拆成中南亚与东亚之后的结果,同一批样本在两种切法下的计数如下。
| 七分组 | 样本数 | 对应 Region 口径 | 说明 |
|---|---|---|---|
| 非洲 | 127 | 撒哈拉以南非洲 | 含六个群体与南非班图的若干细分标签 |
| 中东 | 177 | 中东 147 + 北非 30 | 两套口径的差额全在这里 |
| 中南亚 | 210 | 亚洲的一部分 | 巴基斯坦八个群体为主 |
| 东亚 | 241 | 亚洲的一部分 | 含西伯利亚、日本、柬埔寨与中国十余个群体 |
| 欧洲 | 161 | 欧洲 | 撒丁、托斯卡纳、贝加莫、巴斯克、法国、奥克尼、阿迪格、俄罗斯 |
| 大洋洲 | 39 | 大洋洲 | 巴布亚与新几内亚北部 |
| 美洲 | 108 | 美洲 | 皮马、玛雅、皮亚波科与库里帕科、卡里蒂亚纳、苏鲁伊 |
亚洲在两套口径下的 451 与 210 加 241 完全对得上,中东与北非的 177 也对得上,说明两套表来自同一份底层清单,只是归并规则不同。这类核对值得在动手前做一遍,能省掉后面所有「为什么总数对不上」的困惑。
2.5 与同类资源的字段差异
| 资源 | 主键形态 | 元数据丰度 | 样本可再测性 | 与 HGDP 的关系 |
|---|---|---|---|---|
| HGDP-CEPH | 细胞系编号 | 三项:性别、群体、地理来源 | 高,细胞系可无限扩增 | 本体 |
| 千人基因组计划 | 样本编号 | 群体、家系、部分表型 | 中,DNA 可申请但流程复杂 | 群体选择上刻意与 HGDP 互补,重叠很少 |
| gnomAD | 无个体键,只发布位点频率 | 无个体层 | 不可再测 | 把 HGDP 与千人基因组一起纳入聚合 |
| GIAB | 样本编号 | 家系、祖源、参考物质 | 高,有标准物质 | 只取七个人,做测量真值,不做多样性 |
| 国家生物银行队列 | 参与者编号 | 表型、随访、影像 | 中 | 覆盖单一国家,深度换广度 |
这张表的读法是看「可再测性」那一列。HGDP 与 GIAB 都高,但原因不同:HGDP 靠细胞系数量多、覆盖广,GIAB 靠标准物质与真值文件。两者不在同一个评价维度上竞争。
§3 三层身份:细胞库、基因型、测序
3.1 物理层:从血样到 96 孔板
面板的物理形态是一批 EB 病毒转化的淋巴细胞系。血样在采集地处理后,用病毒转化使 B 细胞永生化,再冻存、扩增、提取 DNA,最后按 96 孔板分装。13 块板的规模意味着一次完整实验的物料准备并不复杂,但每块板背后是不同国家、不同年代、不同采集协议的一批人。
这一层有三个必须知道的性质。其一,细胞系是转化后的细胞,不是原代细胞,传代过程中会积累核型异常与拷贝数漂移,用拷贝数数据时要留意这一层噪声。其二,DNA 分发有明确规格:TE 10:1 溶解,浓度约 60 ng/µl,每孔约 5 µg,按成本价收费,加购以 5 µg 为倍数。其三,细胞系本身不外发,只有 DNA 和 RNA 可以申请。这三条决定了「能做什么实验」的天花板。
3.2 基因型层:二十年的回传累积
基因型层不是一个数据集,而是一批数据集的集合。官方页面的描述是:DNA 已分发给一百二十多个研究组做分型或重测序,结果回传中央数据库;迄今全基因组范围已分型近一百万个 SNP、843 个微卫星、51 个小 indel 位点,另有两个实验室贡献的约一万条 CNV 调用,核 DNA 与线粒体区域也做过重测序。
其中被引用最多的是 2008 年那一批:938 名无亲缘个体、51 个群体、约 65 万个常染色体 SNP。这套芯片数据成了此后十几年群体结构分析的默认起点,也是很多祖源工具的参照集合。它的局限同样明确:芯片位点是按共同变异挑选的,对罕见变异几乎无信息;不同批次的位点集不完全一致,合并前必须做交集。
| 数据层 | 规模 | 产生方式 | 主要用途 | 已知限制 |
|---|---|---|---|---|
| 微卫星 | 843 个位点 | 毛细管电泳分型 | 群体距离、个体聚类 | 位点数少,分辨率有限 |
| 小 indel | 51 个位点 | 多家实验室分型 | 补充插入缺失多态性 | 位点极少,仅作补充 |
| 芯片 SNP | 约 65 万个位点、938 人 | 全基因组 SNP 芯片 | 群体结构、祖源、LD | 仅共同变异,批次位点集不一致 |
| CNV | 约一万条调用 | 两个实验室的芯片与比较基因组杂交 | 拷贝数多态性 | 两套调用边界不一致 |
| 线粒体与核基因区段 | 若干区段 | 一代测序重测序 | 单倍群、系统发育 | 区段选择有历史偏好 |
3.3 测序层:929 人与 911 人的两套口径
2020 年 3 月,Sanger 研究所在 Science 发表了 929 人、54 个群体的高深度全基因组,其中 26 人用 linked-read 技术做了物理定相,因此可以区分父源与母源单倍型。同一时期,另一项工作用这批测序数据做结构变异,覆盖 911 个样本、54 个群体,共识别十二万六千余个结构变异,其中 78% 是既往全球测序项目未报道的;研究者还对 25 个基因组做了从头组装,得到 1,643 个断点可解析的插入,合计约 1.9 Mb 的序列在 GRCh38 参考中不存在。
三个数字的差异要记住:929、911、54。929 是测序个体数,911 是进入结构变异分析的样本数,54 是群体数——而后面的 54 与官方访问政策里写的 51 之间差三个,差额的逐项构成官方未说明。这是这套资源里最典型的口径叠加:每一层数据各按自己那一代的样本范围统计,顶层描述仍停在最初的数字上。
| 层级 | 个体数 | 群体数 | 关键产出 | 托管位置 |
|---|---|---|---|---|
| 芯片 | 938 | 51 | 约 65 万个 SNP 的基因型矩阵 | 中央数据库与各家发表附件 |
| 微卫星 | 一千余 | 五十余 | 843 个位点的重复数 | 中央数据库 |
| 全基因组测序 | 929 | 54 | 高深度短读读数、26 人定相 | ENA 项目 PRJEB6463 |
| 结构变异 | 911 | 54 | 十二万六千余个 SV、25 个从头组装 | 论文附件与公共归档 |
3.4 三层之间怎么对应
三层之间唯一的公共键是 CEPH 编号。芯片层的样本列、测序层的样本名、结构变异集的样本 ID,都要先映射到这个编号,才能合并。麻烦在于各层的编号写法不一致:有的带 HGDP 前缀,有的只留数字,有的在前面加了实验室代号。合并前必须做一次归一化,并核对映射是否一对一。
| 场景 | 会出现的问题 | 处理办法 |
|---|---|---|
| 芯片层与测序层合并 | 同一人两条记录,写法不同 | 统一去前缀、补零到五位、核对总数 |
| 结构变异集与清单合并 | 少数样本不在发放面板内 | 用内连接,接受样本量减少 |
| 跨批次芯片合并 | 位点集不同、链方向不同 | 取位点交集,统一到正链 |
| 与千人基因组合并 | 群体标签重叠但个体不同 | 按标签合并群体,不按个体合并 |
3.5 编号规则与常见误读
编号的形式是 HGDP 加五位数字,取值从 HGDP00001 一直到 HGDP01419,实际使用一千零六十三个号,中间有大量空号。号段按群体块状分配:一个群体占据一段连续区间,但段内不保证连续,也不保证按性别或板号排序。这带来两个实操后果。
第一,不能用「编号相邻」推断「同村」或「同家系」。相邻编号确实常属同一群体,但同一群体的编号也可能被后来的补采样打散到另一段。第二,不能用「编号大小」推断采集时间。面板是分批建立的,早期号段与晚期号段在年代上没有单调关系。
#-- 检查号段分布:每个群体的编号区间与用号密度
python3.11 - <<'PY'
import pandas as pd
df = pd.read_excel("https://cephb.fr/common/HGDPid_populations.xls", header=0)
df.columns = ["id", "pop", "origin", "region", "g7", "sex", "h1063", "h952"]
df["num"] = df["id"].str.replace("HGDP", "").astype(int)
for pop, sub in df.groupby("pop"):
span = sub["num"].max() - sub["num"].min() + 1
print(f"{pop:22s} n={len(sub):3d} span={span:4d} density={len(sub)/span:.2f}")
PY
密度一列是这条命令的价值所在。密度接近 1 说明号段紧凑,说明这批样本是一次性登记的;密度明显小于 1 说明中间夹着别的群体或历史空号。做数据合并时,密度异常低的群体要单独检查,往往那里就是编号映射出错的地方。
§4 质量与特色
4.1 H952 不是「清洗版」,是「另一种设计」
很多人把 H952 理解成 H1063 清洗后的结果,这个理解不准确。H952 是一次重新定义:剔除比表亲更近的亲属对、剔除重复细胞系、剔除基因组异常样本,使剩下的个体近似独立。它不是为了「更好」,而是为了让「个体」这个统计单位成立。
近似独立这个限定词很重要。官方用了「no pairs of relatives closer than first cousins with a few possible exceptions」这个说法,也就是仍可能有例外,只是没有被识别出来。做需要严格独立性的分析(比如估计有效群体大小、做连锁不平衡衰减),仍要自己再查一遍亲缘系数。
| 子集 | 细胞系数 | 近亲 | 重复 | 异常样本 | 适用场景 |
|---|---|---|---|---|---|
| H1063 | 一千零六十三 | 含 96 对一至二级近亲 | 含 13 对 | 含 2 份 | 需要最大样本量、且模型能处理亲缘 |
| H952 | 952 | 剔除到表亲以外 | 已剔除 | 已剔除 | 群体频率、结构分析、方法学评测 |
4.2 亲属、重复与性别错记:三类噪声的处理顺序
三类噪声的处理顺序会影响结果。正确顺序是先合并重复(同一人的多份细胞系只能算一次),再剔除近亲(亲属对里的取舍要看设计),最后核对性别(性别错记往往意味着样本混淆,需要单独判断是记录错误还是样本互换)。
顺序错了会出问题。先剔近亲再合并重复,可能把一对重复当成一对近亲各删一个,实际删掉了两个人;先核对性别再合并重复,会把同一人的两份细胞系因性别记录不同而判成两个人。这类细节没有官方脚本,只能自己按逻辑排。
4.3 案例:Karitiana 的 MGAM 缺失如何在三层里变形
2020 年的结构变异工作给出了一个具体例子:巴西亚马逊地区的 Karitiana 群体中,一个落在 MGAM 基因(麦芽糖酶-葡糖淀粉酶)上的缺失达到高频率,这个基因参与淀粉消化。同一批分析还在中非 Mbuti 群体的 SIGLEC5 上找到一个可能影响免疫应答的缺失,在东亚与中亚分别找到拷贝数扩增的极端例子。
这个例子值得细看,因为它在三层数据里的表现完全不同。在芯片层,它几乎不可见:芯片探针覆盖的是 SNP 位点,一段缺失只能通过探针强度或邻近位点的杂合性缺失间接推断,判读依赖算法假设。在 CNV 层,它可能出现,但两个实验室的调用边界未必一致,缺失的起止点会有出入。在测序与组装层,它才成为可断点解析的对象:读段深度下降、断点两侧序列可拼、插入缺失可被精确定位。
同一件事在三层里三种面貌,这就是为什么这套资源的价值不在某一层,而在层与层之间的对照。一个只在芯片层出现的信号,和一个在组装层被确认的结构变异,可信度完全不在一个量级。§4.3 的案例在后面的取数流程里还会再出现两次,因为它正好说明了「先看哪一层」这个决策。
4.4 与真值基准的分工
GIAB 与 HGDP 常被放在一起提,但两者回答的问题相反。GIAB 用七个人回答「我的流程测得对不对」,HGDP 用一千人回答「不同人群之间差在哪里」。前者追求单样本的逐位点确定性,后者追求多样本的结构代表性。用 GIAB 做群体分析会得到七个人的答案,用 HGDP 做流程验证会得到一千个没有真值的答案。
这个分工在方法学上是互补的:先用 GIAB 证明流程在已知答案上不失分,再用 HGDP 证明流程在多样人群上不失稳。两步都做,才谈得上流程可用。
4.5 平台与批次:为什么「同一批人」不等于「同一批数据」
面板的样本固定,但测量不固定。芯片层跨了多代芯片平台,测序层跨了多个仪器型号,微卫星层跨了多家分型实验室。批次效应的表现形式不同:芯片层表现为位点缺失率与信号强度的系统性差异,测序层表现为覆盖深度与读段长度的差异,微卫星层表现为片段长度判读的半碱基偏移。
处理办法不复杂但必须做:把板号、平台、批次作为协变量记录在元数据里,任何跨批次的合并都先做一次主成分检查,看前几个主成分是否与批次高度相关。如果第一主成分解释的是批次而不是地理,说明合并方式有问题。
§5 怎么拿到
5.1 三条互不替代的通道
拿这套资源有三条路,各自对应不同的东西。第一条是实物:向 CEPH 申请 DNA,走合作协议。第二条是中央数据库:查已回传的基因型与频率。第三条是公共核酸归档:下测序读数。三条路的许可、成本、时效完全不同,混着谈会出错。
| 通道 | 拿到什么 | 门槛 | 时效 | 许可约束 |
|---|---|---|---|---|
| CEPH 实物分发 | DNA 溶液、RNA | 学术机构、签署合作协议、成本价付费 | 需审批与采购流程 | 仅学术非商业,不得转交第三方 |
| CEPH 中央数据库 | 已回传的基因型、频率查询 | 提交基因型需向管理员申请口令 | 即时 | 公开可查,再分发须注明来源 |
| ENA 核酸归档 | 测序读数与比对文件 | 无 | 即时 | 随原始发表条款 |
5.2 实物申请的实际流程
官方流程写得比多数生物银行更细:先联系 HGDP 管理员说明研究计划,承诺用每个标记分型全部 H952 样本(至少 50 个常用标记),并在完成分型后六个月内或发表时把结果回传中央数据库;承诺仅用于学术研究、不向其他实验室转交 DNA;书面确认上述条款后,向生物样本库管理员发采购单,注明板号或具体 DNA 编号、所需微克数(5 µg 的整数倍)、账单地址与快递账号。
这套条款的本质是一个交换:你拿到 DNA,换来的是数据回传。它保证了中央数据库能持续增长,也解释了为什么这套 1990 年代建立的面板到今天还有新数据进来。对申请方来说,真正的成本不是 DNA 的价格,而是回传义务带来的工作量——按全部 H952 样本分型,意味着一开始就要按 952 人做实验设计。
5.3 从 ENA 拿测序元数据
测序读数是三条通道里最容易拿到的一条。项目在 ENA 下,可以用门户接口直接查 run 列表,先看清单再决定下不下。
#-- 查询该项目下的 run 清单与平台分布(只取元数据,不下读数)
curl -s "https://www.ebi.ac.uk/ena/portal/api/filereport?accession=PRJEB6463&result=read_run&fields=run_accession,sample_accession,library_strategy,instrument_model,read_count,base_count&format=tsv" \
> prjeb6463_runs.tsv
#-- 统计平台与策略分布
python3.11 - <<'PY'
import csv, collections
rows = list(csv.DictReader(open("prjeb6463_runs.tsv"), delimiter="\t"))
print("run 总数:", len(rows))
print(collections.Counter(r["instrument_model"] for r in rows).most_common(5))
print(collections.Counter(r["library_strategy"] for r in rows).most_common(5))
PY
本次查询得到的 run 数在七千九百条量级,平台以 HiSeq X Ten 为主,策略全部标注为全基因组测序。run 数明显多于个体数,因为一个样本常被拆成多个 lane 或多个文库,聚合前必须按样本号归并。
5.4 把多层数据拼成一张分析表
拿到清单、拿到 run 表、再拿到芯片矩阵,三者的连接键都是 CEPH 编号。下面这段代码演示合并时的三个必要动作:编号归一化、集合取交、缺失盘点。
#-- 三层合并:清单 + run 表 + 芯片样本列
import pandas as pd
meta = pd.read_excel("HGDPid_populations.xls", header=0)
meta.columns = ["id", "pop", "origin", "region", "g7", "sex", "h1063", "h952"]
meta["key"] = meta["id"].str.replace("HGDP", "").str.zfill(5)
runs = pd.read_csv("prjeb6463_runs.tsv", sep="\t")
runs["key"] = runs["sample_accession"].astype(str).str.extract(r"(\d{5})")[0]
#-- 集合取交:只有既在清单里、又有测序读数的样本才能进分析
both = set(meta["key"]) & set(runs["key"].dropna())
print("清单样本:", meta["key"].nunique(), "交叠:", len(both))
merged = meta[meta["key"].isin(both)].copy()
merged["n_runs"] = merged["key"].map(runs.groupby("key").size())
#-- 缺失盘点:按七分组看可用样本比例
merged["has_wgs"] = merged["n_runs"].notna()
print(merged.groupby("g7")["has_wgs"].mean().round(2).to_string())
最后一行输出的是各分组里有多少比例的样本有测序数据。这个比例不整齐是正常的:测序阶段并没有覆盖全部分发面板,部分群体只有芯片层数据。要复现 §4.3 的案例里的三层对照,正是靠这张表把同一个编号在清单、run 表与芯片矩阵之间串起来。
5.5 伦理与合规的检查清单
这套资源的伦理结构建立在三个事实上:血样采集年代的知情同意、细胞系的二次使用授权、DNA 不得转交。使用时至少要过四道检查。
| 检查项 | 要确认什么 | 常见问题 |
|---|---|---|
| 用途边界 | 是否属于学术非商业研究 | 企业性质机构直接申请会被拒 |
| 转交限制 | 是否会把 DNA 交给合作方 | 多中心研究需逐家申请 |
| 回传义务 | 是否能按 952 人全量分型并回传 | 只做少量样本的项目需事先说明并获豁免 |
| 群体标注 | 是否会把群体名当作种族分类发表 | 期刊与审稿人对此越来越敏感 |
| 再分发 | 是否会把基因型矩阵二次发布 | 中央数据库公开不等于可无条件再分发 |
5.6 一条最小可用路径
如果只想快速验证一个想法,不必走实物通道。用公开的芯片矩阵加清单,两小时内可以跑出第一张群体结构图。
#-- 最小路径:清单 + 公开芯片矩阵 + 主成分分析
python3.11 - <<'PY'
import pandas as pd, numpy as np
from sklearn.decomposition import PCA
meta = pd.read_excel("HGDPid_populations.xls", header=0)
meta.columns = ["id", "pop", "origin", "region", "g7", "sex", "h1063", "h952"]
#-- 假定已把芯片矩阵读成 samples x snps 的数值矩阵,行名与 id 对齐
geno = pd.read_csv("hgdp_chip_matrix.csv", index_col=0)
common = geno.index.intersection(meta["id"])
X = geno.loc[common].fillna(geno.loc[common].mean()).values
pcs = PCA(n_components=10, random_state=0).fit_transform(X - X.mean(0))
out = pd.DataFrame(pcs[:, :4], index=common, columns=["PC1", "PC2", "PC3", "PC4"])
out = out.join(meta.set_index("id")[["pop", "g7"]])
out.to_csv("hgdp_pca.tsv", sep="\t")
print(out.groupby("g7")[["PC1", "PC2"]].mean().round(3).to_string())
PY
这段代码里刻意保留了 fillna 与中心化两步:芯片矩阵的缺失率在不同批次间差异明显,直接投进 PCA 会让第一主成分变成缺失模式。中心化则是因为 PCA 对均值敏感,跨批次合并后均值漂移会主导前几个成分。
§6 与库内条目的关系
6.1 关系图谱
库内与人群、基因组相关的词条已经不少,位置各不相同。下面这张表把最容易被混淆的几条并排放,看的是「它回答什么问题」,而不是「它有多少数据」。
| 库内词条 | 它的核心问题 | 与 HGDP 的分工 | 什么时候该换用它 |
|---|---|---|---|
| GIAB 真值基准 | 我的流程测得对不对 | GIAB 用七个人给逐位点答案,HGDP 用一千人给群体结构 | 需要评测召回与精确率时 |
| gnomAD 基因组聚合库 | 这个变异在人群里多常见 | gnomAD 发布位点频率、不含个体,HGDP 有个体与细胞系 | 需要频率与约束指标时 |
| dbSNP | 这个位点有没有被登记过 | dbSNP 是位点登记簿,HGDP 是样本集合 | 需要 rs 号与位点元数据时 |
| EGA 受控访问档案 | 受控数据怎么合规取用 | EGA 管访问控制,HGDP 管实物分发 | 需要个体层受控数据时 |
| DGVa 结构变异归档 | 这个结构变异有没有被收录 | DGVa 收变异,HGDP 供样本与 SV 集 | 需要变异级检索时 |
| 千人基因组相关词条 | 常见变异的全球图谱 | 群体选择与 HGDP 互补,重叠极少 | 需要更大样本量的常见变异时 |
| ChinaMAP 等国家队列 | 单国深度表型与基因组 | 深度换广度,HGDP 广度换深度 | 需要表型与临床终点时 |
| 人类细胞图谱 | 细胞类型层面的表达参考 | 组织与细胞类型,HGDP 是人群层面 | 需要单细胞分辨率时 |
| 3D 基因组浏览器 | 染色质构象与调控区 | 同一批人可用于构象研究,但数据不在此 | 需要 Hi-C 类数据时 |
最关键的一条区隔是与 GIAB 的:GIAB 是少数样本的测量真值,HGDP 是众多群体的多样性代表。前者把「对错」定义清楚,后者把「差异」铺开。把两者混为一谈,会同时犯两个错——用七个人讨论人群差异,或用一千人讨论流程准确率。
6.2 检索路径
在库内找相关词条,有三条路径比较有效。按标签找:基因组学与多组学 下按 测序数据、变异与注释、GWAS 三个二级标签筛,能覆盖大部分同族资源。按问题找:要频率去 gnomAD,要真值去 GIAB,要受控个体数据去 EGA,要单国队列去找国家生物银行类词条。按数据层找:芯片层对应本文与千人基因组,结构变异层对应 DGVa,聚合层对应 gnomAD。
这套路径背后是一条判断:人群遗传学资源按「个体是否可见」分成两族。HGDP 属于个体可见的一族,每个样本都能追到编号、群体、板号;gnomAD 属于个体不可见的一族,只发布汇总频率。两族的用法完全不同,选错族会直接导致方法学错误。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
评估这套资源时最容易发生的误判,是拿「数据量」当质量指标。它的芯片层只有六十多万个位点,测序层只有九百多人,放在今天的尺度上都不算大。但它的设计目标从来不是数据量,而是取样覆盖与可再测性。用「样本量太小」来否定它,等于用放大镜评价望远镜。
第二个常见误判是把「官方数字不一致」当成缺陷。这套资源跨了三十年、十几个机构、上百个研究组,口径叠加是结构性结果,不是记录错误。正确的做法是选定一个口径、写清来源、全文一致,而不是去追一个「唯一正确」的数字。
7.1 五维评分
| 维度 | 评分 | 依据 | 主要扣分项 |
|---|---|---|---|
| 覆盖广度 | 优 | 八个大区、五十余个群体,含狩猎采集与岛屿群体 | 亚洲与欧洲偏厚;非洲之角无群体,西非仅约鲁巴一处 |
| 样本深度 | 差 | 每群体个位数到五十人 | 无法支撑群体内精细频率 |
| 元数据完整度 | 差 | 仅性别、群体、地理来源三项 | 无年龄、无表型、无采集年份 |
| 可复现性 | 优 | 细胞系可无限扩增,编号稳定三十年 | 实物申请有审批与成本门槛 |
| 许可清晰度 | 中 | 合作协议条款写明,但无标准开源许可 | 再分发边界需逐案确认 |
7.2 版本与参考基因组对齐
跨层分析的第一道坎是参考基因组。芯片层的坐标多基于较早的构建,测序层的比对结果基于 GRCh37 或 GRCh38,结构变异集的坐标又可能与两者都不同。合并前必须做坐标转换,并在方法学里写明用的是哪一版。
#-- 版本对齐检查:确认各层的染色体命名与坐标体系
layers = {
"chip_2008": {"build": "NCBI36/GRCh37", "chr_prefix": "none"},
"wgs_2020": {"build": "GRCh37", "chr_prefix": "none"},
"sv_2020": {"build": "GRCh37", "chr_prefix": "none"},
"public_browser": {"build": "GRCh38", "chr_prefix": "chr"},
}
for name, meta in layers.items():
flag = "需转换" if meta["build"] != "GRCh38" else "可直接用"
print(f"{name:16s} build={meta['build']:14s} prefix={meta['chr_prefix']:5s} {flag}")
这段检查的价值不在代码,而在提醒:三层数据可能在三个坐标体系上。直接把芯片坐标的位点与 GRCh38 的注释相交,会得到一批看似合理、实则错位的基因归属。
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 后果 | 缓解办法 |
|---|---|---|---|
| 抽样偏差 | 群体由研究者选定,非概率抽样 | 群体代表的是「可接触到的村落」,不是民族整体 | 表述时限定为「该样本组」而非「该民族」 |
| 样本量不均 | 从个位数到五十人 | 小群体的频率估计方差极大 | 报告置信区间,不做点估计排名 |
| 亲缘结构 | 96 对一至二级近亲 | 独立性假设被破坏 | 用 H952 子集 |
| 重复样本 | 13 对重复细胞系 | 样本量虚增 | 合并去重 |
| 性别错记 | 16 份记录与检测不一致 | 性染色体分析出错 | 用分子性别核验 |
| 转化效应 | 淋巴细胞系永生化 | 拷贝数与表达带培养痕迹 | 不用它做原代组织推断 |
| 平台批次 | 多代芯片与多型号测序仪 | 批次与地理混淆 | 把批次作为协变量 |
| 历史选择 | 早期研究偏好「孤立群体」 | 高分化群体被过度代表 | 读原文的抽样说明 |
第四条与第五条常被合起来忽略。性别记录与分子检测不一致,可能只是登记笔误,也可能是样本在某个环节被调换,两种情况的处理方式完全不同。做性染色体或线粒体分析前,先把这 16 份挑出来单独核对,确认是记录问题还是样本问题。
§4.3 的案例还带出一个连带问题:同一个结构变异在芯片层、CNV 层与组装层的判定边界并不一致,偏差表里「平台批次」那一行只是这种不一致的一种表现,真正的来源是三层对「什么算一个变异」的定义不同。
7.4 外部验证矩阵
| 验证角度 | 用什么核对 | 结论 |
|---|---|---|
| 群体数与个体数 | 官方说明页、清单文件、编号对照表三处 | 三处口径不同,差额已在 §2.1 说明 |
| 芯片层规模 | 2008 年论文摘要与官方页面 | 一致:938 人、51 群体、约 65 万位点 |
| 测序层规模 | 2020 年论文摘要与 ENA 项目 | 一致:929 人、54 群体;ENA 下七千九百余条 run |
| 结构变异层规模 | 2020 年结构变异论文摘要 | 一致:911 样本、十二万六千余个变异、78% 为新 |
| 分发条款 | 官方访问政策全文 | 条款完整,含回传义务与转交限制 |
| 与聚合库的一致性 | gnomAD 把本面板纳入聚合的说明 | 方向一致:个体层入聚合后不再可见 |
矩阵里唯一没有外部独立核对的是「2 份基因组异常样本」的具体性质。官方只写了「genomically atypical」,没有说明异常类型,也没有给出编号。这一项只能标为未核实。
按 DAIMS 一类数据资产登记口径逐项清点,这套资源呈现「实物强、描述弱」的分布:能唯一指认每一份细胞系,但说不出这些人的年龄与临床状态。
| DAIMS 登记维度 | 状态 | 依据 |
|---|---|---|
| 来源可溯 | 强 | 编号对应采集国或地区,清单逐行给出地理来源 |
| 标识唯一 | 强 | CEPH 编号三十年稳定,跨层可连接 |
| 版本可追 | 中 | 数据层按发表批次分代,官方无统一版本号 |
| 许可明确 | 中 | 合作协议条款写明用途与转交限制,但无标准化许可标识 |
| 元数据完备 | 弱 | 仅性别、群体、地理来源三项,无年龄与表型 |
| 质量可核 | 中 | 芯片与测序层有原始读数可复核,实物层须自行质检 |
7.5 它为何能持续:细胞系可以再测,回传条款让它一直在长
这套资源能活三十年,靠的不是数据量,而是两个机制。物理上,永生化细胞系可以无限扩增,同一批人今天还能再测一遍,这在整个生物样本领域都稀缺。制度上,DNA 分发附带回传义务——申请者必须把分型结果交回中央数据库。两个机制咬合,形成正循环:越多人用,数据库越厚;数据库越厚,越多人用。
§8 生态位与历史
8.1 从立项到面板:一条被争议包围的时间线
1991 年,人类基因组多样性计划提出,目标是在全球范围内系统采集人群样本,研究现代人的起源与迁徙。这个计划从一开始就伴随争议:采样涉及的群体同意程序、样本跨境、原住民群体的代表权,都在人类学与伦理学界引起长期讨论。面板最终以「细胞系 + 中央数据库 + 合作协议」的形态落地,本身也是对争议的一种制度回应。
| 阶段 | 时间 | 发生了什么 | 留下的东西 |
|---|---|---|---|
| 立项 | 1991 | 多样性计划提出,采样框架成形 | 群体清单与采样原则 |
| 面板建立 | 1990 年代末至 2000 年代初 | 细胞系汇集到巴黎 CEPH,编号体系形成 | HGDP 编号与 96 孔板分发形态 |
| 微卫星时代 | 2000 年代初 | 数百个 STR 位点分型,群体树与聚类图发表 | 群体距离与个体聚类的基础结果 |
| 芯片时代 | 2008 | 约 65 万 SNP、938 人分型发表 | 群体结构分析的默认参照 |
| 拷贝数时代 | 2010 前后 | 两个实验室贡献约一万条 CNV 调用 | 拷贝数多态性的第一批群体图景 |
| 测序时代 | 2020 | 929 人高深度全基因组发表 | 群体特异性变异与定相单倍型 |
| 结构变异时代 | 2020 | 911 样本结构变异集与 25 个从头组装 | 参考基因组缺失序列的实证 |
这条时间线上有一个规律:每一代技术都会把同一批人重测一遍,然后发现上一代看不见的东西。微卫星看见了群体距离,芯片看见了连锁不平衡,短读测序看见了群体特异性变异,组装看见了参考基因组里不存在的序列。
8.2 与千人基因组的互补设计
千人基因组计划起步时,刻意避开了 HGDP 已经覆盖的群体,改用「大群体、少群体、深家系」的策略:二十多个群体、每个群体几十到上百人、部分样本带亲子关系。HGDP 相反,五十余个群体、每个群体十几到几十人、几乎没有家系。这两个设计互补得很干净:一个换深度,一个换广度。
这个互补在方法学上带来一个直接好处:两套数据可以作为彼此的对照。如果一个群体结构结果只在其中一套里出现,通常说明样本量或群体定义在起作用,而不是生物学。
8.3 被聚合之后:个体消失,频率留下
近十年,这套面板的个体层数据大量进入聚合数据库。gnomAD 就把 HGDP 与千人基因组的样本合并做过联合调用,发布的是位点频率与约束指标,不再有个体基因型。这带来一个结构性变化:面板的「个体可见」优势,在聚合层被抹平了。
后果是双向的。好的一面是频率估计的样本量变大了,稀有变异的统计更有力。不好的一面是使用者容易忘记这些频率背后有一批真实的、有编号的人,也有细胞系留在巴黎的液氮罐里。做群体遗传分析时,记住这一点,能避免把聚合频率当成「无源之水」。
8.4 今天还在被谁用
四类用户今天仍在用它。做祖源推断的团队把它当参照集合,因为它的群体标签是事实标准。做方法学评测的团队把它当多样性测试集,因为它的样本跨越了遗传距离的较大范围。做群体历史推断的团队用它估计分化时间与基因流,因为它的群体覆盖了关键的地理节点。做教学的人用它做演示,因为编号干净、群体清晰、文献充分。
还有一类用户常被忽略:做参考基因组与变异表示研究的人。2020 年那批从头组装发现的 1.9 Mb 非参考序列,说明单一参考基因组在多样性群体面前的不足。这个结论直接推动了泛基因组方向的工作。
§9 使用指引
9.1 三种角色的路径
| 角色 | 起点 | 关键动作 | 常见错误 |
|---|---|---|---|
| 群体遗传研究者 | 清单 + 芯片矩阵 | 用 H952 子集,按七分组分层,控制批次 | 直接用 H1063 全集,把近亲当独立样本 |
| 方法学与基准开发者 | 测序层 + 芯片层 | 先做层间一致性检查,再定评测集 | 把芯片层当测序层的真值 |
| 机器学习建模者 | 芯片矩阵 + 群体标签 | 按群体分层切分训练与测试集 | 随机切分导致同一人跨集泄漏 |
第三条错误最常见。芯片矩阵里同一群体的样本遗传距离近,随机切分会让测试集里的样本在训练集里有近亲,指标虚高。正确做法是按群体或按地理大区做分组切分,牺牲一点样本量换可信的泛化估计。
9.2 一条最短的可用流程
#-- 从零到第一张群体结构图:四步
#-- 1 取清单
curl -sL "https://cephb.fr/common/HGDPid_populations.xls" -o hgdp_ids.xls
#-- 2 取测序 run 元数据
curl -s "https://www.ebi.ac.uk/ena/portal/api/filereport?accession=PRJEB6463&result=read_run&fields=run_accession,sample_accession,instrument_model&format=tsv" -o runs.tsv
#-- 3 合并并去近亲
python3.11 - <<'PY'
import pandas as pd
m = pd.read_excel("hgdp_ids.xls", header=0)
m.columns = ["id", "pop", "origin", "region", "g7", "sex", "h1063", "h952"]
keep = m[m["h952"].astype(str).str.lower() == "yes"]
keep.to_csv("hgdp_h952.csv", index=False)
print("H952 样本数:", len(keep), "群体数:", keep["pop"].nunique())
PY
#-- 4 用芯片矩阵做主成分,按七分组着色
python3.11 - <<'PY'
import pandas as pd
from sklearn.decomposition import PCA
meta = pd.read_csv("hgdp_h952.csv")
geno = pd.read_csv("hgdp_chip_matrix.csv", index_col=0)
ids = geno.index.intersection(meta["id"])
X = geno.loc[ids].fillna(0).values
pcs = PCA(n_components=5, random_state=0).fit_transform(X - X.mean(0))
res = pd.DataFrame(pcs[:, :2], index=ids, columns=["PC1", "PC2"]).join(meta.set_index("id")["g7"])
res.to_csv("hgdp_pca.tsv", sep="\t")
print(res.groupby("g7").size().to_string())
PY
四步跑完会得到一张按七分组着色的散点图。第一主成分通常对应撒哈拉以南非洲与其他大区的分离,第二主成分对应东亚与欧洲的分开。如果第二主成分对应的是批次而不是地理,回去查板号。
想验证这条流程是否跑对,可以拿 §4.3 的案例当对照:Karitiana 的样本应当落在美洲一支的末端,若落在欧洲与东亚之间,多半是编号归一化时把前缀处理错了。
9.3 引用方式
引用这套资源要分层写,不能只引一句「数据来自 HGDP」。芯片层引 2008 年的分型论文,测序层引 2020 年的全基因组论文,结构变异层引同年的结构变异论文,实物层则在致谢里注明 Fondation Jean Dausset - CEPH。官方访问政策明确要求在致谢中提及 CEPH,这一条常被漏掉。
| 用到什么 | 引什么 | 备注 |
|---|---|---|
| 面板本身与实物 | 面板建立的原始发表 + CEPH 致谢 | 官方要求致谢必写 |
| 芯片基因型 | 2008 年分型论文 | 注明位点数与样本子集 |
| 高深度测序 | 2020 年全基因组论文 | 注明 929 人与 54 群体 |
| 结构变异 | 2020 年结构变异论文 | 注明 911 样本与变异数 |
| 微卫星 | 早期 STR 分型论文 | 注明位点数与分型方法 |
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 数据性质 | 公开科研资源,非临床数据,不含诊疗记录 |
| 训练可用性 | 群体结构、祖源推断、变异表示等任务可作训练或评测数据 |
| 标签质量 | 群体标签为采集地与社会身份,不宜作为种族或族群真值 |
| 样本独立性 | 含重复与近亲,训练前须去重,否则指标虚高 |
| 切分要求 | 应按群体或大区分组切分,禁止随机切分 |
| 伦理约束 | 无表型,但涉及原住民群体,模型输出应避免族群本质化表述 |
| 许可约束 | 无统一开源许可,商用与再分发须逐案确认 |
| 引用要求 | 按层引用并致谢 CEPH,漏引视为使用不当 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| HGDP 有一千零五十个独立个体 | 一千零六十三份细胞系来自一千零五十人,去近亲后 952 | 官方访问政策与清单文件 |
| 官方说 51 个群体,所以就是 51 | 同一页介绍段写 52,清单按 57 个标签记账 | 官方说明页两处表述 |
| 每个群体都有几十人,可以做频率估计 | 从个位数到五十人不等,方差极大 | 清单文件按群体计数 |
| 这是健康人群对照 | 无表型、无病史,只有三项元数据 | 官方说明「信息仅限于性别、群体、地理来源」 |
| 细胞系可以申请 | 官方明确细胞系不外发,只发 DNA 与 RNA | 访问政策原文 |
| 数据是 CC0,可以随便再分发 | 无统一开源许可,DNA 分发限学术非商业 | 访问政策条款 |
| 群体标签就是遗传聚类 | 标签是采集地与社会身份,聚类需自行计算 | 清单字段定义与原文方法 |
| 芯片层等于测序层 | 两层的样本集、位点集、坐标体系都不同 | 2008 与 2020 两篇论文的样本描述 |
| 它和 GIAB 是一类资源 | GIAB 是七人测量真值,HGDP 是千人多样性代表 | 两者样本设计与发布物完全不同 |
| 929 人测序等于 929 个群体代表 | 54 个群体分 929 人,多数群体仅十余人 | 2020 年论文摘要 |
FAQ
Q1:HGDP 面板到底覆盖多少群体?
官方同一页出现两个数字:介绍段写 52 个,访问政策段写 51 个;随面板发布的清单按 57 个群体标签记账。差额集中在南非班图的细分标签与意大利两个群体的分列上,官方未逐一说明。
Q2:一千零六十三和一千零五十差在哪?
差在 13 对重复细胞系:同一个人被建了两份细胞系,实物计数多出 13 份。做统计时应按人去重,去重后再剔近亲得到 952。
Q3:H952 与 H1063 该用哪个?
需要独立个体假设的分析用 H952;需要最大样本量且模型能处理亲缘结构的分析可以用 H1063,但必须把亲缘关系作为协变量或随机效应纳入。
Q4:有全基因组测序吗?
有。2020 年发表 929 人、54 个群体的高深度全基因组,26 人做了物理定相。读数在 ENA 项目 PRJEB6463 下,run 数在七千九百条量级。
Q5:为什么 run 数远多于人数?
一个样本常被拆成多个 lane 或文库分别测序,每个 run 对应一段读数。分析前要按样本号聚合,否则会把同一个人的数据当成多个人。
Q6:能拿它估计变异频率吗?
可以做点估计,但必须报告样本量与置信区间。它的设计目标是覆盖广度,不是频率精度,精细频率应改用聚合数据库。
Q7:芯片层有多少位点?
约 65 万个常染色体 SNP,覆盖 938 名无亲缘个体、51 个群体。这批数据是 2008 年发表的,位点集与后续批次不完全一致。
Q8:为什么说它不能做临床对照?
因为没有任何表型与病史记录。「未记录疾病」不等于「没有疾病」,把它写成健康对照是把缺失信息当成阴性信息。
Q9:DNA 怎么申请,贵不贵?
向 CEPH 提交研究计划并签署合作协议,按成本价购买,规格是每孔约 5 µg、浓度约 60 ng/µl,加购以 5 µg 为倍数。真正的成本是按 H952 全量分型并回传结果的工作量。
Q10:可以商用吗?
DNA 实物限学术非商业用途且不得转交第三方;已公开的基因型与测序读数没有统一开源许可,商用前须逐项确认原始发表条款。
Q11:为什么说它适合做方法学评测?
因为样本跨越大范围遗传距离,且有芯片、微卫星、CNV、测序四层可对齐,同一批人可用不同技术反复测量,适合检验方法在不同人群上的稳定性。
Q12:这套资源今天还有新数据进来吗?
有。DNA 分发附带回传义务,申请者须把分型结果交回中央数据库,这个机制让数据库持续增长,也是它活了三十年的原因之一。
术语表
| 术语 | 含义 |
|---|---|
| HGDP | 人类基因组多样性计划,1991 年提出的人群遗传资源计划 |
| CEPH | 法国人类多态性研究中心,现为让·多塞基金会的一部分 |
| LCL | 淋巴细胞系,用 EB 病毒转化 B 细胞得到的永生化细胞 |
| H1063 | 全部细胞系集合的编号,共一千零六十三份 |
| H952 | 剔除近亲、重复与异常样本后的子集 |
| 面板 | panel,指按统一设计收集、可批量分型的一组样本 |
| 芯片 | SNP array,用固定探针批量测定已知位点基因型的技术 |
| 微卫星 | 短串联重复,重复次数在个体间高度多态 |
| CNV | 拷贝数变异,一段 DNA 的拷贝数在个体间不同 |
| 结构变异 | 一般指 50 bp 以上的缺失、插入、倒位、重复 |
| 定相 | phasing,把二倍体的杂合位点分到父源与母源两条单倍型上 |
| linked-read | 把长片段 DNA 打断后加分子标签再短读测序的技术 |
| 从头组装 | de novo assembly,不依赖参考基因组重建序列 |
| 群体结构 | 群体内部与群体之间的遗传差异格局 |
| 祖源成分 | 个体基因组中来自不同祖先群体的比例 |
| 连锁不平衡 | 邻近位点等位基因非随机共现的现象 |
| 有效群体大小 | 与理想群体等效的个体数,反映遗传漂变强度 |
| 分层 | stratification,样本分组与遗传背景相关造成的混杂 |
| 分组切分 | 按群体或大区划分训练与测试集,避免近亲泄漏 |
| 成本价分发 | 按制备与物流成本收费,不以营利为目的 |
| 回传义务 | 申请者须把分型结果交回中央数据库的条款 |
| 知情同意 | 采样时获得的、覆盖后续研究用途的同意 |
| 参考基因组 | 用于比对与坐标定位的标准序列,如 GRCh37、GRCh38 |
| 批次效应 | 因实验批次不同造成的系统性测量差异 |
| 号段 | 一组连续编号,本资源按群体块状分配 |
| 七分组 | 非洲、中东、中南亚、东亚、欧洲、大洋洲、美洲 |
| 群体标签 | 样本所属群体的名称,属采集地与社会身份 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 细胞系数 | 1,063 | CEPH 面板说明页 | 官方页面 |
| 个体数 | 1,050 | 同上 | 官方页面 |
| 重复细胞系 | 13 对 | 同上 | 官方页面 |
| 基因组异常样本 | 2 份 | 同上 | 官方页面 |
| 一至二级近亲 | 96 对 | 同上 | 官方页面 |
| 性别记录不符 | 16 份 | 同上 | 官方页面 |
| 去近亲子集 | 952 | 清单文件标记计数 | 官方文件 |
| 群体数 | 51(政策段)/ 52(介绍段)/ 57(清单标签) | 同一说明页与清单 | 官方页面 |
| 大区数 | 7 | 清单 Region 列 | 官方文件 |
| 七分组样本数 | 非洲 127、中东 177、中南亚 210、东亚 241、欧洲 161、大洋洲 39、美洲 108 | 清单 Pop7Groups 列 | 官方文件 |
| 芯片位点 | 约 65 万 | 2008 年论文摘要 | 论文摘要 |
| 芯片样本 | 938 人、51 群体 | 同上 | 论文摘要 |
| 微卫星位点 | 843 | 官方说明页 | 官方页面 |
| 小 indel 位点 | 51 | 同上 | 官方页面 |
| CNV 调用 | 约一万条,两个实验室 | 同上 | 官方页面 |
| 测序个体 | 929 人、54 群体 | 2020 年论文摘要 | 论文摘要 |
| 定相个体 | 26 人 | 同上 | 论文摘要 |
| 结构变异 | 126,018 个,911 样本 | 2020 年结构变异论文摘要 | 论文摘要 |
| 非参考序列 | 约 1.9 Mb | 同上 | 论文摘要 |
| ENA run 数 | 七千九百余条 | ENA 门户接口 | 官方接口 |
| DNA 规格 | 60 ng/µl,每孔约 5 µg | 访问政策 | 官方页面 |
| 板数 | 13 块 96 孔板 | 清单文件名与说明页 | 官方文件 |
附录 B:数字的来源分层
| 层级 | 含义 | 本页涉及的数字 |
|---|---|---|
| 官方页面 | 机构说明页、访问政策、随资源发布的清单文件 | 细胞系与个体数、近亲与重复计数、区域与分组计数、微卫星与 indel 位点数、DNA 规格、申请条款 |
| 官方接口 | 公共归档的查询接口返回的元数据 | ENA 项目下的 run 数与平台分布 |
| 论文摘要 | 原始发表摘要中明确写出的数字 | 芯片 938 人 / 51 群体 / 65 万位点;测序 929 人 / 54 群体 / 26 人定相;结构变异 911 样本 / 十二万六千余个 / 78% 为新 |
| 未核实 | 官方与摘要均未明确说明 | 2 份基因组异常样本的具体性质与编号;51 与 52 差额的逐项构成;57 个标签到 51 个群体的映射细则 |
附录 C:完整参考文献
- Cann HM 等。A human genome diversity cell line panel。Science,2002。DOI: 10.1126/science.296.5566.261b。(面板建立与样本说明)
- Li JZ 等。Worldwide human relationships inferred from genome-wide patterns of variation。Science,2008。DOI: 10.1126/science.1153717。(938 人、51 群体、约 65 万 SNP)
- Bergström A 等。Insights into human genetic variation and population history from 929 diverse genomes。Science,2020。DOI: 10.1126/science.aay5012。(929 人、54 群体、26 人定相)
- 结构变异分析:Population structure, stratification, and introgression of human structural variation。Cell,2020。DOI: 10.1016/j.cell.2020.05.024。(911 样本、十二万六千余个结构变异)
- Fondation Jean Dausset - CEPH。HGDP-CEPH Human Genome Diversity Cell Line Panel 说明页与访问政策。https://cephb.fr/en/hgdp_panel.php
- Fondation Jean Dausset - CEPH。细胞系与群体清单(13 块板)与样本编号对照表。https://cephb.fr/data/HGDP-summary-pops-H1063-13plates.xls ;https://cephb.fr/common/HGDPid_populations.xls
- European Nucleotide Archive。项目 PRJEB6463(Deep sequencing of HGDP)。https://www.ebi.ac.uk/ena/browser/view/PRJEB6463
- HGDP 官方门户。https://www.hgdp.org/(本次访问未能解析该域名,内容以 CEPH 页面为准)
附录 D:任务代码
#-- 任务:按七分组统计可用样本,并检查近亲剔除前后的差异
import pandas as pd
URL = "https://cephb.fr/common/HGDPid_populations.xls"
df = pd.read_excel(URL, header=0)
df.columns = ["id", "pop", "origin", "region", "g7", "sex", "h1063", "h952"]
def norm(s):
#-- 编号归一化:去前缀、补零到五位
return s.astype(str).str.replace("HGDP", "").str.zfill(5)
df["key"] = norm(df["id"])
flag = df["h952"].astype(str).str.lower().eq("yes")
before = df.groupby("g7").size().rename("h1063")
after = df[flag].groupby("g7").size().rename("h952")
tab = pd.concat([before, after], axis=1).fillna(0).astype(int)
tab["kept_ratio"] = (tab["h952"] / tab["h1063"]).round(3)
tab["n_pop"] = df[flag].groupby("g7")["pop"].nunique()
print(tab.sort_values("h952", ascending=False).to_string())
print("合计:", int(tab["h1063"].sum()), "->", int(tab["h952"].sum()))
这段代码的输出正是 §2.4 两张表的底层数据。kept_ratio 一列能看出哪个大区被剔除得多——比例异常低的分组,往往就是近亲对集中的地方。
附录 E:如果只记五件事
- 它是一千零六十三份细胞系、一千零五十个人、五十余个群体,去近亲后是 952。
- 官方同页有 51 与 52 两个群体口径,清单按 57 个标签记账,差额官方未逐项说明。
- 芯片层约 65 万 SNP(938 人),测序层 929 人、54 群体,结构变异层 911 样本。
- 只有性别、群体、地理来源三项元数据,没有表型,也没有临床注释。
- 细胞系不外发,DNA 按学术合作协议有偿分发,须回传结果、不得转交。
编辑说明
本页数字分三级来源:CEPH 说明页与随资源发布的清单文件为官方页面级;ENA 门户接口返回的 run 元数据为官方接口级;2008、2020 两批发表的摘要为论文摘要级。凡官方与摘要均未写明的项目,已在附录 B 标为未核实,未做推断填充。
核对时间:2026-10-29。核对方式:直接抓取 CEPH 说明页 HTML、下载两份清单文件并用脚本统计、调用 ENA 门户接口查询项目 run、检索论文摘要。官方门户 www.hgdp.org 在本次核对时域名解析失败,相关内容以 CEPH 页面为准,未据其补充任何数字。
分层计数(区域与七分组)由清单文件逐行统计得出,属结构信息,不是分布统计;本页不提供任何字段空值率、频次排序或百分位这类需要全量下载才能得到的数字。
如发现本页与官方最新页面不一致,以官方页面为准,并在修订时同步更新附录 A 的核对表与附录 B 的来源层级。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- sgdp — 共享标签:基因组学与多组学 / 测序数据 / 变异与注释 / GWAS
- 1000-genomes — 共享标签:基因组学与多组学 / 测序数据 / GWAS
- dbsnp — 共享标签:基因组学与多组学 / 测序数据 / 变异与注释
- gwas-catalog-legacy — 共享标签:基因组学与多组学 / 测序数据 / GWAS
- ensembl — 共享标签:基因组学与多组学 / 测序数据 / 变异与注释
- gwas-catalog — 共享标签:基因组学与多组学 / 测序数据 / GWAS
- hprc — 共享标签:基因组学与多组学 / 测序数据 / GWAS
- biosamples — 共享标签:基因组学与多组学 / 测序数据 / 变异与注释
- jogo — 共享标签:基因组学与多组学 / 变异与注释 / GWAS
- dgva — 共享标签:基因组学与多组学 / 测序数据 / 变异与注释
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

