👇 连享会 · 推文导航 | www.lianxh.cn
🍓 课程推荐:连享会:2025暑期班·网络直播 嘉宾:连玉君 (初级+高级) || 张宏亮 (论文班) 时间:2025 年 8 月 4-14 日 咨询:王老师 18903405450(微信)
温馨提示: 文中链接在微信中无法生效。请点击底部 「阅读原文」 。或直接长按/扫描如下二维码,直达原文:
作者 :孙碧洋 (香港中文大学) 邮箱 :bsun@fandm.edu
本文介绍一种在公共卫生和社会科学研究中常见的非概率抽样方法——受访者驱动抽样(Respondent Driven Sampling, 简称 RDS)。这种方法尤其适用于研究“隐藏群体”,例如吸毒者、性工作者、跨性别者等。文章将依次讲解 RDS 的基本原理、实施流程及数据分析方法,并通过 Stata 实例展示具体操作过程。
1. 方法背景与发展脉络 1.1 RDS 的提出与应用发展 受访者驱动抽样(RDS)是一种基于社会网络的链式抽样方法,由康奈尔大学社会学家 Douglas Heckathorn 于 1997 年首次提出。最初,RDS 被设计用于研究“隐藏人群”(hidden populations)—— 那些难以通过传统随机抽样方式接触到的群体。
近年来,RDS 被广泛用于调查以下类型的对象:
弱势青少年(Decker et al., 2014) 性工作者(Cowan et al., 2013; Matos et al., 2017) 男同性恋者(Kuhns et al., 2015) 跨性别者(Martins et al., 2013) 爵士乐手(Heckathorn & Jeffri, 2001) 在中国,RDS 也逐渐获得关注。例如,南京大学刘林平教授团队曾基于 RDS 技术研究农民工流动情况(刘林平等,2015);中山大学梁玉成教授亦运用该方法研究在广东的非洲裔移民(梁玉成,2013)。由此可见,RDS 不再局限于“隐藏人群”,而是在越来越多的社会调查中展现出实用价值。
1.2 RDS 适用人群的典型特征 RDS 之所以成为研究“难以接触人群”(hard-to-reach populations)的利器,主要是因为这类人群具备以下共性:
体量较小、隐蔽性强 :相较于整个社会人口基数,目标人群数量有限,常处于社会边缘,流动性高(Hipp, Kohler, & Leumann, 2019),有时甚至涉及非法行为,导致其在官方登记系统中“不可见”。
社会网络紧密 :这类人群内部联系较为密切(tight-knit),成员之间熟识程度高,有利于通过“推荐制”扩展样本(Kniejska, 2016)。
以流动人口为例,政府往往缺乏完整的联系资料,且这些人的住址和联系方式频繁变动,难以构建稳定的抽样框。此外,由于总量本身较小,通过随机抽样筛选到合格对象的效率极低,成本高昂;而涉及违法行为时,个体对隐私保护的顾虑也进一步降低了传统抽样的可行性。
综上所述,受访者驱动抽样提供了一种兼顾成本、效率与隐私保护的替代路径,成为社会科学与公共卫生研究中获取“稀缺样本”的重要工具。
1.3 RDS 抽样步骤 RDS 的典型实施步骤可归纳为以下三步:
选取种子参与者(seed respondents) 研究者通过社交网络、实地访问或社区组织等渠道,找到符合目标群体特征的“种子个体”。种子的数量不宜过多,一般控制在 2 至 32 之间为宜(Hipp, Kohler, & Leumann, 2019),以避免样本结构过于分散或局部集中。
发放引导券并设置双重激励机制 每位种子在完成问卷后,将获得若干张引导券(coupon),用于邀请其社交圈中其他符合条件的个体参与研究。新参与者完成问卷后也会获得等量的引导券,以持续推动样本扩展。 RDS 引入了 双重激励机制 :一方面,完成调查可获得固定报酬;另一方面,每成功推荐一位新样本还可获得额外奖励。这种设计既激励了参与,又控制了过度活跃个体对样本结构的干扰(over-volunteerism)。 限制每人引导券数量的目的,在于 防止某些群体增长过快 ,保持不同群体间的“招募节奏”大致一致(growth speed),从而提高样本的代表性。
监测样本结构,适时终止抽样 抽样将持续进行,直到达到预期样本容量,或主要变量(如年龄、性别、患病状态等)的分布不再随波次变化,即达到所谓的“收敛状态(equilibrium)”,即可终止招募。
RDS 的链式招募结构可视为一个向外辐射的社交网络,下图展示了一个典型的招募过程,起始于少量种子,逐步扩展出多层样本:
Source: Johnston LG, Sabin K. Sampling hard-to-reach populations with respondent driven sampling . Methodological Innovations Online, 2010, 5(2): 38–48.
此外,许多 RDS 实证研究表明,当样本量达到 300–500 之间时,关键变量往往已趋于稳定。下图展示了若干研究中 RDS 样本量的分布情况:
Source: Johnston LG, Sabin K. Sampling hard-to-reach populations with respondent driven sampling . Methodological Innovations Online, 2010, 5(2): 38–48.
1.4 RDS 抽样优势 相较于传统的随机抽样方法,RDS 在实际调查中展现出显著优势:
招募效率高、操作灵活,整体上更加 节省成本(cost-effective) 由于是“熟人推荐”,样本多能精准对接目标人群,提高 覆盖率与匹配度 正因如此,RDS 日益成为流行病学、社会学、公共政策等领域研究“难以接触人群”的主流方法。
1.5 RDS 相关词汇 RDS 文献中常出现的词汇总结如下:
seed 上文所述的种子选手,第一波被研究者接触的人。种子选手本身的调查信息并不重要。毕竟很多研究者最后都选择删除种子选手的问卷内容,因为种子选手本身并不是随机选择的 degree 个人汇报的社交网络大小,即 network size 。问卷中,最重要的一个变量( 一定要收集! )就是参与者认识的符合条件的参与者一共有几个人。举个例子,如果研究群体是北京市男同性恋,那么这个问题就会是“你还认识多少个北京市的男同性恋?” coupon 发出去的券,用于来招募更多的参与者。Hipp, L., Kohler, U., & Leumann, S. (2019) 的文章介绍了一些设计这类 coupon 的要点。
homophily 同质性,用于测量倾向于组内招募 (ingroup recruitment) 的程度
1.6 RDS 与传统滚雪球抽样的不同 以下内容总结自 Heckathorn & Cameron (2017):
2. RDS 数据 2.1 RDS 数据结构 下表呈现了典型的 RDS 数据结构。它一般包括如下几个部分:
自己收到的 coupon 编号 (own coupon number) 自己成功发出去的 coupon 编号 (Coupon 1, Coupon 2, Coupon 3) 其他变量 (variables of interest)。
从上表可以看出,研究者为每位参与者分配了三张 coupon。大多数参与者未能全部发出这些 coupon,因此“自己成功发出去的 coupon 编号”一栏常见缺失值。而“own coupon”项若为缺失,说明该参与者为最初的种子选手,即未通过他人招募获得 coupon。部分学者在分析时会剔除种子选手的数据,以减少因非随机选取带来的样本偏差。
例如,1 号种子选手成功发出了所有 coupon(编号为 1001、1002、1003),据此可知 3 号、4 号和 5 号参与者均由 1 号种子招募。通过“own coupon”与“coupon”编号的对应关系,可以追溯每位参与者的招募路径及其最初的种子来源,从而还原整个样本的网络结构。
换句话说,若某位参与者的 owncoupon=1001,则说明其是由发出 coupon=1001 的参与者招募而来。利用这些编号的映射关系,可以系统地还原每位受访者的招募链路和网络结构。
2.2 RDS 数据处理相关软件 常用的 RDS 处理软件有 Stata, R, RDS Analyst, 和 RDSAT。其中 RDS Analyst 和 RDSAT 是两个单独运行的软件,专门为了处理 RDS 数据而设计。 RDS Analyst 依托于 R 的运行环境,而 RDSAT 则构建于 Java 的运行环境上。两个软件都是免费的。下方为下载地址:
RDSAT 软件及说明书下载网址: http://www.respondentdrivensampling.org/ RDS Analyst 软件下载网址: http://www.stat.ucla.edu/~handcock/hpmrg/software/RDSAnalystSetup.0.71.exe 软件说明书: https://sites.google.com/site/lsjohnstonglobal/respondent-driven-sampling/respondent-driven-sampling
目前来讲,大部分学者都选择使用 RDS Analyst。RDS Analyst 不仅研究 RDS 数据最先进的软件,而且上手非常容易,只需要点几个键就可以在软件内部跑模型。Stata 本身也有 RDS 相关的命令,分别为 rds_network
和 rds
(Schonlau & Liebau, 2012)。这两个命令由 Matthias Schonlau 和 Elisabeth Liebau 两位学者于 2012 年开发成功。可惜的是,没过多久,Heckathorn 开发的软件 RDSAT 已经更新了里面 estimator 的计算方法,而 rds_network
和 rds
中自带的 estimator 还是最原始的算法。因此,大部分学者还是依赖 RDSAT 或者 RDS Analyst 连个软件来生成参与者的个人权重。而这两个 Stata 命令的使用就没有那么广泛了。不过我还是把两个 Stata 命令的语法复制如下给大家参考。文中最后也会有一个 Stata 实操展示。
/*rds_network 可以用于对 rds 网络进行初步的分析,包括生成 seed 编号、招募者编号等等,使得数据可以进一步用于 rds 分析*/ rds_network varname, id(varname) coupon(str) ncoupon(#) degree(varname) [rds_network_options] /*rds 有两个功能,一是看样本有没有达到 population equilibrium,二是生成参与者的个人权重*/ rds varname [if] [in], id(varname) degree(varname) recruiter_id(varname) recruiter_var(varname) [rds_options]
2.3 RDS 数据问题 RDS 数据不能直接用简单回归分析,原因在于其抽样方式并非随机,容易引发两个主要问题:
数据可能存在聚类(data clustering)导致的标准误问题。 首先,由于每个人的社交网络规模不同,网络较大者被招募的概率更高,样本中这类人可能被过度代表。因此,需根据参与者自报的社交网络大小调整其在模型中的权重——网络越大,权重越低,网络越小,权重越高,以使样本结构更贴近总体。
其次,受访者往往倾向于招募与自己相似的人(如女性更倾向于招募女性),这会导致数据中存在较强的相关性(高关联性)。如何处理这种聚类带来的估计偏差,也是分析 RDS 数据时必须关注的问题。
3. RDS 适用模型 3.1 RDS 数据处理方法 目前,针对 RDS 数据的处理方法尚未完全成熟。针对前述的两个主要问题,学者们主要采取了两种应对策略:一是针对不同的入样概率,建议根据每位参与者自报的社交网络规模,计算并赋予个体化权重;二是针对聚类导致的标准误问题,建议构建数据的相关矩阵(correlation structure),并利用该矩阵对参数估计进行调整。
3.1.1 生成参与者个人权重 参与者的个人权重(individualized weight)由研究者根据所选的估计方法(estimator)计算得出。目前常用的 estimator 包括 RDSI、RDSII、RDS_SS、RDS_MOD 等。其中,RDSII 应用最为广泛。与 RDSI 相比,RDSII 能为每位参与者生成唯一的权重,而 RDSI 的权重会因分析变量不同而变化,导致同一参与者可能有多个权重。RDS_SS 则要求输入群体总规模(population size),但在实际研究中,这一数字往往难以准确获得,因为 RDS 方法本身就是为应对对总体信息有限的情形而设计的(Heckathorn & Cameron, 2017)。下表总结了不同软件对各类 RDS estimator 的支持情况。关于 estimator 的详细区别,可参考 World Health Organization (2013). _Introduction to HIV/AIDS and sexually transmitted infection surveillance: Module 4: Introduction to respondent-driven sampling_。
RDSAT RDS - A RDS I RDS I (Salganik & Heckathorn, 2004) RDS I (Heckathorn, 2007) (dual-component) RDS II (Volz & Heckathorn, 2008) RDS-SS RDS-MA
RDS estimator 主要依据马尔可夫链 (Markov chain) 假设,及每个参与者都是随机的从自己认识的人里面招募参与者,因此每个参与者仅仅与招募自己的人有联系,和数据中其他任何人都没有联系。
比如说,上图中 1 号种子招募了 2 号、3 号、及 4 号参与者。2 号参与者又继续招募了 5 号参与者。根据马尔可夫链假设,5 号参与者的特点(例如性别),只和 2 号参与者有关,和 1 号种子无关。
3.1.2 定义数据关联矩阵 RDS 参与者之间具体是以怎样一个结构关联的目前并没有定论。如果根据马尔可夫链假设的话,其实数据本来根本就不应该是那么关联的。但实际情况是,通过社交网络收集到的信息确实可能存在聚类的情况。下面是一个学者常用的关联结构模拟图。
把上图的关联结构放入图表中便得到如下结果:
A B C D E F G H I A
B
C
D
E
F
G
H
I
目前,大多数统计软件并未内置如上图所示的复杂关联结构。为简化分析流程并提升模型收敛性,不少研究者会将关联结构设定为 AR[1]。还有学者采用 svy
功能处理数据聚类问题,例如将 seed 作为 strata
,将招募者编号(recruiter ID)作为主抽样单元(PSU)。 RDS Analyst 也集成了 svy
功能,便于快速建模和结果计算。当然,若能手动编写自定义的关联矩阵,将更贴合实际网络结构。目前支持用户自定义关联矩阵的统计软件主要有 R 、 SAS 和 S-plus ,而 Stata 目前尚不支持此功能。关于如何在 R 中编辑关联结构,可参考此链接:[http://www-1.ms.ut.ee/tartu07/presentations/mols.ppt]。
为提高分析的稳健性,许多研究者会同时采用两种方法:既为参与者生成个体权重,又对模型的关联结构进行调整。
4. Stata 实操 我在这里用一套和艾滋病有关的模拟数据,来展示一下如何用 Stata 的 rds
和
rds_network
命令。我会先展示如何用 rds_network
生成必要的 network
变量,然后再用 rds
来看数据是否达到 population equilibrium 及怎样生成个人权重。
*-数据加载 use "https://github.com/lianxhcn/data/raw/refs/heads/main/RDS_sample_data_SunBY.dta", clear sum _all Variable | Obs Mean Std. Dev. Min Max --------+-------------------------------------------- id | 204 1112.461 66.84246 1002 1239 network | 204 4.779412 3.653107 1 30 owncoupon | 204 1112.461 66.84246 1002 1239 ref1 | 71 1116.69 70.18946 1002 1235 ref2 | 50 1129.92 68.63237 1004 1239 --------+-------------------------------------------- ref3 | 53 1112.792 60.08435 1005 1219 gender | 204 1.578431 .495025 1 2 age | 204 29.28431 8.944688 18 54 ethnicity | 204 1.911765 .4349948 1 3 hiv | 204 1.063725 .2448642 1 2 --------+-------------------------------------------- (e) | 204 1 0 1 1 /*id 就是 respondent 自己的 id,network 是每个respondent 自己汇报的社交网络大小,owncoupon 就是每个respondent 自己受到的coupon code,ref1 - ref3是每个 respondent 发出的 coupon code*/ list id network owncoupon ref* in f/10 /*可以看出 id 和 owncoupon的值是一样的。也可以看出 id = 1003 招募了 id = 1002*/ +------------------------------------------------+ | id network owncou~n ref1 ref2 ref3 | |------------------------------------------------| 1. | 1002 15 1002 1014 . . | 2. | 1003 20 1003 1002 1004 1005 | 3. | 1004 4 1004 . . . | 4. | 1005 4 1005 . . . | 5. | 1006 10 1006 1008 1070 1069 | |------------------------------------------------| 6. | 1007 10 1007 1006 1009 . | 7. | 1008 15 1008 1207 . . | 8. | 1009 6 1009 1010 1011 1029 | 9. | 1010 3 1010 . . . | 1. | 1011 3 1011 . . . | +------------------------------------------------+ *rds_network* /*用 rds_network 生成必要的社交网络变量*/ rds_network gender, /// id(id) coupon(ref) ncoupon(3) /// degree(network) ancestor(seed) /// depth(wave) /// recruiter_id(recruiter_id) /// recruiter_var(recruiter_var) Number of categories of (gender): 2 /*这次选择的分析变量是 gender */ Number of seeds= 30 /*数据中一共由 30 个 seed 发展而来*/ Greatest chain length= 8 /*最长的招募链达到了8个wave*/ Seed MaxDepth +---------------------+ 9. | 1003 8 | /*1003 seed 发展的招募链成功达到了 8 层*/ 47. | 1007 3 | 52. | 1013 0 | 53. | 1015 0 | 56. | 1018 2 | |---------------------| 61. | 1019 5 | 72. | 1020 2 | 80. | 1023 5 | 95. | 1024 4 | 99. | 1025 1 | |---------------------| 100. | 1040 0 | 101. | 1055 1 | 103. | 1057 0 | 109. | 1066 3 | 115. | 1072 1 | |---------------------| 117. | 1075 3 | 124. | 1077 0 | 125. | 1079 2 | 129. | 1080 2 | 135. | 1082 0 | |---------------------| 137. | 1083 2 | 139. | 1093 0 | 140. | 1107 0 | 156. | 1117 5 | 172. | 1137 0 | |---------------------| 177. | 1140 3 | 183. | 1154 1 | 185. | 1158 4 | 199. | 1163 4 |
203. | 1181 1 | +---------------------+ list id network owncoupon ref* seed wave recruiter_id recruiter_var in f/10 /*看一看新生成的变量*/ +------------------------------------------------------------------------------------+ | id network owncou~n ref1 ref2 ref3 seed wave recrui~d recrui~r | |------------------------------------------------------------------------------------| 1. | 1002 15 1002 1014 . . 1003 1 1003 1 | 2. | 1003 20 1003 1002 1004 1005 1003 0 . . | 3. | 1004 4 1004 . . . 1003 1 1003 1 | 4. | 1005 4 1005 . . . 1003 1 1003 1 | 5. | 1006 10 1006 1008 1070 1069 1007 1 1007 2 | |------------------------------------------------------------------------------------| 6. | 1007 10 1007 1006 1009 . 1007 0 . . | 7. | 1008 15 1008 1207 . . 1007 2 1006 2 | 8. | 1009 6 1009 1010 1011 1029 1007 1 1007 2 | 9. | 1010 3 1010 . . . 1007 2 1009 2 | 10. | 1011 3 1011 . . . 1007 2 1009 2 | +------------------------------------------------------------------------------------+ 我们之前选择的分析变量为 gender,生成的 recruiter_var (最右列) 就是对应的 recruiter 的性别。我们可以看到变量多了 seed, wave, recruiter_id, recruiter_var, 这些可以帮助我们之后的分析。 rds gender, id(id) degree(network) recruiter_id(recruiter_id) recruiter_var(recruiter_var) detail /*detail 这个选项可以看出,当以 gender 作为判定标准时候,数据是否达到矩阵收敛所需的最浅 depth*/ Number of categories of (gender): 2 Computing how fast transition matrix converges. Convergence Tolerance= .02 Iteration 0 [symmetric] 1 2 +---------+ 1 | 1 | 2 | 0 1 | +---------+ Iteration 1 1 2 +-----------------------------+ 1 | .5465116279 .2840909091 | 2 | .4534883721 .7159090909 | +-----------------------------+ Iteration 2 1 2 +-----------------------------+ 1 | .4275068833 .3586422497 | 2 | .5724931167 .6413577503 | +-----------------------------+ Iteration 3 1 2 +-----------------------------+ 1 | .3962775727 .378206066 | 2 | .6037224273 .621793934 | +-----------------------------+ Iteration 4 1 2 +-----------------------------+ 1 | .3880823546 .3833400168 | 2 | .6119176454 .6166599832 | +-----------------------------+ Required referral length until convergence: 4 /*至少要有4个wave招募链,gender才可以收敛。我们已经达到了*/ Method to compute Av. Network Size Method = multiplicity /*用multiplicity这个办法去计划每个gender中的不同的average network size*/ Observation matrix Group1 Group2 Group1 47 39 Group2 25 63 /*Gender Group1是男,Group2是女。数据里面,男招男有47,男招女有39,女招男有25,女招女有63*/ /*下面的transition matrix 是根据上面的 observation matrix 计算出来的。比如说 47/(47+39) = 0.5465。*/ Transition Matrix (Before Smoothing) Group1 Group2 Group1 .54651163 .45348837 Group2 .28409091 .71590909 Demographically adjusted matrix Group1 Group2 Group1 36.626657 30.392332 Group2 30.392332 76.588678 Data-Smoothed Recruitments Group1 Group2 Group1 36.626657 30.392332 Group2 30.392332 76.588678 /*Demographically adjusted matrix 及 data-smoothed recruitment 解决了男女招募速度不同,以及不同人的 network 大小不同而导致的入样概率偏差问题*/ Transition Matrix Group1 Group2 Group1 .54651163 .45348837 Group2 .28409091 .71590909 Group1 Group2 Categories 1 2 SampleSize 86 118 Recruits 72 102 Seeds 14 16 SampleProportion .42156863 .57843137 /*样本中的男女比*/ Equilibrium .38516661 .61483339 AverageDegree 4.1666667 4.5588235 MultiplicityDegree 3.1964484 3.4338846 Homophily .24131809 .29377721 /*男性的homophily比女性低,说明女性更容易产生ingroup recruitment*/ Weight .95421738 1.033367 /*population weight*/ RecruitmentComponent .91365102 1.0629323 DegreeComponent 1.0444003 .97218514 PopulationProportion .40226811 .59773189 /*推算出来的 population 中的男女比*/ VolzHeckathornProp .43127408 .56872592 rds hiv, id(id) degree(network) recruiter_id(recruiter_id) recruiter_var(recruiter_var) wgt(hiv_w) /*当我们用是否有艾滋病作为因变量的时候,我们生成个人权重的方法 wgt(hiv_w) */ Number of categories of (hiv): 2 Required referral length until convergence: 3 /*已达到最低招募链要求标准*/ Method to compute Av. Network Size Method = multiplicity list network hiv_w hiv in f/10 /*看一眼新生成的个人权重*/
/*这个权重由两部分决定,一个是个人的network大小,一个是所代表的group的average network大小。这里的group就是HIV阳性 vs HIV阴性。 +---------------------------+ | network hiv_w hiv | |---------------------------| 1. | 15 .23155096 1 | 2. | 20 .09551894 2 | 3. | 4 .86831608 1 | /*果然,network比较小的人赋予的权重会相对高一些*/ 4. | 4 .86831608 1 | 5. | 10 .34732643 1 | |---------------------------| 6. | 10 .34732643 1 | 7. | 15 .23155096 1 | 8. | 6 .57887739 1 | 9. | 3 1.1577548 1 | 10. | 3 1.1577548 1 | +---------------------------+
5. R 和 Python 实现 5.1 R 实现 RDS 在 R 中的实现主要依赖于 RSiena
包和 rds
包。以下是一个简单的 R 实现示例:
library (RSiena) library (rds) # 假设数据已加载到 data_frame 中 data_frame "rds_data.csv" ) # 生成 RDS 网络 rds_network "id" , degree = "network" , recruiter_id = "recruiter_id" , recruiter_var = "recruiter_var" , coupon = c( "ref1" , "ref2" , "ref3" )) # 计算参与者权重 rds_weights "hiv" ) # 查看权重 print(rds_weights)
5.2 Python 实现 在 Python 中,RDS 的实现可以使用 networkx
和 pandas
库。以下是一个简单的 Python 实现示例:
import pandas as pd import networkx as
nx # 假设数据已加载到 data_frame 中 data_frame = pd.read_csv( "rds_data.csv" ) # 创建 RDS 网络 G = nx.DiGraph() for index, row in data_frame.iterrows(): G.add_node(row[ 'id' ], network=row[ 'network' ], hiv=row[ 'hiv' ]) if pd.notna(row[ 'ref1' ]): G.add_edge(row[ 'id' ], row[ 'ref1' ]) if pd.notna(row[ 'ref2' ]): G.add_edge(row[ 'id' ], row[ 'ref2' ]) if pd.notna(row[ 'ref3' ]): G.add_edge(row[ 'id' ], row[ 'ref3' ]) # 计算参与者权重 weights = {} for node in G.nodes(data= True ): weights[node[ 0 ]] = 1 / G.in_degree(node[ 0 ]) # 查看权重 print(weights)
好的,以下是 Section 4 小结 与 Section 5 参考文献 ,作为本讲义的最后部分。整体风格与前文保持一致,学术而清晰,适合直接发布或导出。
6. 小结 受访者驱动抽样(Respondent Driven Sampling, RDS)是一种设计巧妙、执行灵活的非概率抽样方法,特别适用于研究“隐藏群体”或“难以接触人群”。与传统的滚雪球抽样相比,RDS 通过引入:
在方法论上实现了从“便利样本”到“近似概率样本”的跃迁。
在数据分析方面,RDS 数据必须处理两个核心挑战:
入样概率不同 :通过个体网络度数进行加权估计,常用方法为 Volz-Heckathorn 加权(RDS-II);
样本间依赖性强 :需构造合理的相关结构或使用自助法(bootstrap)进行置信区间构建。 目前主流分析工具包括:
Stata :适合教学演示,提供 rds
与 rdsnetwork
命令; R + RDS Analyst :功能强大,支持多种估计器,适合实务应用; Python :适合自定义建模与流程自动化,当前尚无标准包。 在实际应用中,研究者应特别注意:
RDS 是一种“结构性强但极具弹性”的调查工具,只要理解其方法论核心,完全可以在 Stata、R 或 Python 中实现高质量的实证分析。
7. 参考文献 Beckett, M., Firestone, M. A., McKnight, C. D., Smylie, J., & Rotondi, M. A. (2018). A cross-sectional analysis of the relationship between diabetes and health access barriers in an urban First Nations population in Canada. BMJ open , 8(1), e018272. Cowan, F. M., Mtetwa, S., Davey, C., Fearon, E., Dirawo, J., Wong-Gruenwald, R., . . . Busza, J. (2013). Engagement with HIV prevention treatment and care among female sex workers in Zimbabwe: a respondent driven sampling survey. PLoS ONE , 8(10), e77080. Decker, M. R., Marshall, B. D., Emerson, M., Kalamar, A., Covarrubias, L., Astone, N., . . . Delany-Moretlwe, S. (2014). Respondent-driven sampling for an adolescent health study in vulnerable urban settings: a multi-country study. Journal of Adolescent Health , 55(6), S6-S12. Gile, K. J. (2011). Improved inference for respondent-driven sampling data with application to HIV prevalence estimation. Journal of the American Statistical Association , 106(493), 135–146. Gile, K. J., & Handcock, M. S. (2015). Network model-assisted inference from respondent-driven sampling data. Journal of the Royal Statistical Society: Series A , 178(3), 619–639. Heckathorn, D. D. (1997). Respondent-driven sampling: a new approach to the study of hidden populations.
Social Problems , 44(2), 174–199. Heckathorn, D. D. (2002). Respondent-driven sampling II: deriving valid population estimates from chain-referral samples of hidden populations. Social Problems , 49(1), 11–34. Heckathorn, D. D. (2007). Extensions of respondent-driven sampling: analyzing continuous variables and controlling for differential recruitment. Sociological Methodology , 37(1), 151–208. Heckathorn, D. D., & Cameron, C. J. (2017). Network sampling: From snowball and multiplicity to respondent-driven sampling. Annual Review of Sociology , 43, 101–119. Heckathorn, D. D., & Jeffri, J. (2001). Finding the beat: Using respondent-driven sampling to study jazz musicians. Poetics , 28(4), 307–329. Hipp, L., Kohler, U., & Leumann, S. (2019). How to Implement Respondent-Driven Sampling in Practice: Insights from Surveying 24-Hour Migrant Home Care Workers. Survey Methods: Insights from the Field , 1–13. Kniejska, P. (2016). Migrant Care Workers aus Polen in der häuslichen Pflege . Springer. Kuhns, L. M., Kwon, S., Ryan, D. T., Garofalo, R., Phillips, G., & Mustanski, B. S. (2015). Evaluation of respondent-driven sampling in a study of urban young men who have sex with men. Journal of Urban Health , 92(1), 151–167. Martins, T. A., Kerr, L. R. F., Macena, R. H., Mota, R. S., Carneiro, K. L., Gondim, R. C., & Kendall, C. (2013). Travestis, an unexplored population at risk of HIV in a large metropolis of northeast Brazil: a respondent-driven sampling survey. AIDS Care , 25(5), 606–612. Matos, M. A. D., França, D. D. D. S., Carneiro, M. A. D. S., Martins, R. M. B., Kerr, L. R. F. S., Caetano, K. A. A., . . . Matos, M. A. D. D. (2017). Viral hepatitis in female sex workers using the Respondent-Driven Sampling. Revista de Saúde Pública , 51, 65. Organization, W. H. (2013). Introduction to HIV/AIDS and sexually transmitted infection surveillance: Module 4: Introduction to respondent-driven sampling . WHO. Salganik, M. J., & Heckathorn, D. D. (2004). Sampling and estimation in hidden populations using respondent‐driven sampling. Sociological Methodology , 34(1), 193–240. Schonlau, M., & Liebau, E. (2012). Respondent-driven sampling. The Stata Journal , 12(1), 72–93. Volz, E., & Heckathorn, D. D. (2008). Probability based estimation theory for respondent driven sampling. Journal of Official Statistics , 24(1), 79. 刘林平, 范长煜, & 王娅. (2015). 被访者驱动抽样在农民工调查中的应用: 实践与评估. 社会学研究 (2), 149–173. 梁玉成. (2013). 在广州的非洲裔移民行为的因果机制. 社会学研究 (1).
8. 相关推文 Note:产生如下推文列表的 Stata 命令为: lianxh 抽样 社会网络, nocat md
安装最新版 lianxh
命令: ssc install lianxh, replace
刘潍嘉, 2023, 论文推介:中国经济学家合作模式的社会网络分析, 连享会 No.1312. 吴雄, 童天天, 2020, Stata:Bootstrap-自抽样-自举法, 连享会 No.43. 周瑾, 2024, 论文推介:包含343位作者的JF论文:NSE-非标准误差, 连享会 No.1510. 李烨阳, 2023, Stata:自己动手做组间系数差异检验-bootstrap-bdiff, 连享会 No.1286. 杨凡佳, 2024, Stata+R:你了解什么是抽样吗?Sampling, 连享会 No.1359. 杨继超, 2021, Stata:社会网络分析, 连享会 No.523. 滕泽鹏, 2023, Stata:随机抽样命令介绍-gsample, 连享会 No.1140. 连享会, 2025, 社会网络分析:从入门到精通, 连享会 No.1601. 邓铨雄, 2025, UCINET:社会网络分析利器介绍, 连享会 No.1599. 郑晓雪, 2022, R语言绘制社会网络图, 连享会 No.953. 郑裕璇, 2022, Stata:手动实现置换检验(permutation)和自抽样(bootstrap), 连享会 No.1091. 雷诺, 2024, 控制函数法:Bootstrap标准误的获取, 连享会 No.1328. 霍崇德, 2022, Stata:社会网络分析命令-nwcommands, 连享会 No.847. 🍓 课程推荐:连享会:2025社会网络分析·线上 嘉宾:杨张博,西安交通大学 时间:2025 年 7 月 30-31 日 咨询:王老师 18903405450(微信)
连享会微信小店上线啦! Note:扫一扫进入“连享会微信小店”,你想学的课程在这里······
New! Stata 搜索神器: lianxh
和 songbl
GIF 动图介绍 搜: 推文、数据分享、期刊论文、重现代码 …… 👉 安装: . ssc install lianxh
. ssc install songbl
👉 使用: . lianxh DID 倍分法
. songbl all
🍏 关于我们 直通车: 👉【 百度一下: 连享会 】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。