质性研究中的编码者间信度
每种质性编码设计适合哪种系数,alpha 的 0.800 和 0.667 两条阈值出自何处,以及应当双重编码多大比例的数据。
编码者间信度(intercoder reliability,ICR)是经机遇校正的指标,衡量两名或更多编码者把同一份码本应用到相同摘录上时的一致程度。采用内容分析或固定码本的质性研究,通常在占数据 10% 到 25% 的双重编码样本上报告 Krippendorff's alpha 或 Cohen's kappa,以 α ≥ 0.800 为惯常标准,以 0.667 作为得出初步结论的下限。反身性主题分析不报告这一系数,因为这种方法认为编码是一种诠释行为,不存在可供第二名编码者去对照的准确答案。
编码者间信度是各自独立编码同一材料的编码者之间的一致性,用一个扣除了机遇一致的系数来测量。码本(codebook)也称编码框架(coding frame),列出全部代码,并为每个代码给出定义、纳入与排除规则以及示例。百分比一致率是编码者给出相同代码的摘录所占的比例,不做机遇校正。Cohen's kappa 比较两名编码者,Fleiss' kappa 比较人数固定、且每人都编码了全部摘录的一组编码者。Krippendorff's alpha 适用于任意数量的编码者和存在缺失编码的情况,也适用于名义、有序或定距代码。主题分析是在整个数据集中提炼主题的一族方法,这一族方法内部对 ICR 看法不一。
标注者间一致性详解讲解各个系数的计算。码本编制指南讲解如何撰写代码。教程 Code Interview Transcripts With Two Coders and Report Alpha 在 Potato 中从摘录到 alpha 完整走完一个项目,Potato 中的质性研究则把 Potato 的质性研究功能集中列在一处。
质性研究何时报告编码者间信度
内容分析者把 ICR 视为这种方法的必要条件,O'Connor 和 Joffe(2020)也把 ICR 用于主题分析。只要由几名编码者分担材料,系数就有用武之地,因为系数能表明每名编码者在独自编码之前以相同的方式应用码本。统计每个代码出现在多少份访谈中的研究,出于同样的理由也需要 ICR。在团队内部,为每个代码计算系数的编码者可以看出哪些代码被各人理解得不一样,O'Connor 和 Joffe 认为围绕这些代码的讨论往往比最终分数更有价值。某些领域的审稿人会要求报告 ICR,COREQ 报告清单也要求写明编码者人数。
方法本身何时反对使用系数
反身性主题分析(TA)把研究者的主观性视为一种资源,把编码视为一种诠释行为。Braun 和 Clarke(2023)否认编码可以是准确的,并称共识编码和测量编码者间一致性是加在反身性研究上的"概念上不融贯"(conceptually incoherent)的做法。Braun 和 Clarke 把反身性 TA 与另外两类主题分析区分开来。编码信度 TA 使用彼此独立的编码者和一致性系数,框架分析等码本取向的方法则借用了编码信度 TA 的部分结构化程序。一些扎根理论研究者同样拒绝 ICR,因为扎根理论在分析推进过程中递归地构建代码。反身性 TA 的研究报告用对研究者反身性和理论假设的描述来代替系数。
O'Connor 和 Joffe 回应这种认识论上的反对意见时,把高系数理解为共享同一概念框架的研究者对数据达成共识性诠释的证据。两位作者认为更大的风险在于虚假的精确,因为一个高数字可能让一项薄弱的分析看起来很严谨。每项研究选定一种立场,并在方法部分写明这一立场。
哪种系数适合哪种编码设计
系数取决于编码开始前做出的两项决定。第一项决定是分析单元,要么是每名编码者都看到的固定摘录,要么是由每名编码者自行划定的片段。第二项决定是一段摘录只取一个代码还是可以取多个代码。
| 编码设计 | 系数 |
|---|---|
| 两名编码者,每段摘录一个代码 | Cohen's kappa 或名义 alpha |
| 三名或更多编码者,每人编码全部摘录 | Fleiss' kappa 或名义 alpha |
| 编码者编码的摘录部分重叠但不相同,或存在缺失编码 | Krippendorff's alpha |
| 每段摘录多个代码 | 逐个代码计算 alpha 或 kappa,在每段摘录上按出现或不出现计分 |
| 代码位于有序量表上,例如强度 | 有序 alpha 或加权 kappa |
| 每名编码者自行划定片段边界 | 针对单元化数据的 alpha,或先固定片段 |
在访谈编码中,一段摘录取多个代码很常见。O'Connor 和 Joffe 为每名编码者在每段摘录上把每个代码记为 1 或 0,再逐个代码计算系数。逐个代码的数值能显示哪些定义需要修改,而单一的汇总数字会让可靠的代码掩盖不可靠的代码。Krippendorff(2004)针对内容分析提出了同样的论点,并把各变量中最小的值作为整体的信度。
片段边界是访谈编码中更难处理的问题。各自挑选引文来编码的编码者在拆分与合并上做法不同,自动比较还可能把只差一个标点符号的两段引文当作不同的单元。Krippendorff 2004 年的另一篇论文把 alpha 扩展到编码者在连续文本中自行识别的单元。更简单的做法是先固定片段。第一名编码者切分并编码转录稿,第二名编码者拿到相同的片段,但其中的代码已被移除。这样 ICR 测量的是固定摘录上的代码应用情况,边界上的一致性则不在测量之内。
惯用阈值及其出处
Krippendorff(2004)建议要求 α ≥ 0.800,在仍可接受初步结论的场合则要求 α ≥ 0.667。同一篇论文指出,除了完全一致之外"there are no magical numbers"(不存在神奇的数字),把可接受的水平与得出无效结论的代价联系起来,并要求研究者参考置信区间。对于 kappa,O'Connor 和 Joffe 把 Landis 和 Koch(1977)的分级概括为 0.41 到 0.60 为中等,0.61 到 0.80 为高度,0.81 到 1 为近乎完全。McHugh(2012)认为 Cohen 最初的解释对健康研究而言过于宽松,把 0.60 到 0.79 的 kappa 称为中等,把 0.80 到 0.90 称为强。O'Connor 和 Joffe 还引用了 Miles 和 Huberman 对百分比一致率的标准:95% 的代码上达到 80% 的一致。O'Connor 和 Joffe 建议在编码开始前确定阈值,对于为医疗、政策或财务决策提供依据的发现,阈值要定得更高。
双重编码样本的规模
O'Connor 和 Joffe 认为占数据单元 10% 到 25% 的样本是常见做法,样本可以随机抽取,也可以按事先说明的规则抽取,例如从每个层中各取一个案例。在正式抽样之前,两名编码者先非正式地编码一份访谈并比较编码结果,以发现被误读的定义。修订之后,下一轮使用另一个子集,信度轮次中编码过的摘录则用最终码本重新编码。后来加入的编码者需要单独做一次信度检验。在每个系数旁边报告摘录数和编码者人数,因为来自小样本的系数区间很宽。
从分歧到码本修订
编码者各自独立编码信度样本,然后碰面逐一讨论每处分歧。团队改写不清楚的定义,补充排除规则和示例,并合并编码者无法区分的代码。编码者随后在新摘录上进行第二轮独立编码,以检验修订后的码本。O'Connor 和 Joffe 提醒,由同一批编码者反复进行多轮编码,可能在这些编码者之间产生"interpretive convergence"(诠释趋同),却并没有让码本对新读者变得更清楚。报告独立编码得出的系数,即编码者讨论任何分歧之前的系数。最终的编码数据随后来自共识、第三名编码者的投票或资深研究者的决定,方法部分要写明所用的规则。
在 Potato 中进行一轮信度检验
下面的配置针对一组关于就诊可及性的访谈摘录设置一轮信度检验。样本之外的每段摘录交给一名编码者,两名编码者共同编码在每名参与者内部抽取的 20% 样本。码本在这一轮中保持固定,任何编码者都不能在轮次中途添加代码。每个代码的定义显示为该代码的提示框:
annotation_task_name: Clinic access interviews, reliability round 1
task_dir: .
output_annotation_dir: annotation_output/
data_files:
- data/excerpts.jsonl
item_properties:
id_key: id
text_key: text
user_config:
allow_all_users: true
users: []
# Two coders on a 20% sample drawn within each participant, one coder elsewhere
num_annotators_per_item:
default: 1
overlap_sample:
fraction: 0.2
count: 2
stratify_by: participant_id
seed: 7
assignment_strategy: random
# Coders apply the agreed codes and cannot add new ones during the round
codebook_mode: fixed
annotation_schemes:
- annotation_type: multiselect
name: codes
description: Which codes apply to this excerpt? Hover over a code for its definition.
humanize_labels: false
labels:
- {name: Access barriers, tooltip: "Distance, transport, opening hours, or waiting time keep the participant from care"}
- {name: Cost concerns, tooltip: "Fees, insurance, or lost wages shape whether the participant seeks care"}
- {name: Provider trust, tooltip: "Confidence or distrust in clinic staff, their competence, or their motives"}
- {name: Administrative burden, tooltip: "Forms, referrals, phone queues, or eligibility rules the participant has to work through"}
- {name: No code applies, tooltip: "The excerpt touches none of the codes above"}
adjudication:
enabled: true
adjudicator_users: [lead]
min_annotations: 2data/excerpts.jsonl 的每一行包含 id、text 和 participant_id。"No code applies" 这个代码保证每段摘录都有答案。Potato 的信度导出会丢弃编码者没有选择任何代码的摘录,如果没有这个代码,"某个主题"与"没有主题"之间的分歧就永远不会计入 alpha。双编码者教程解释了随机分配。在 QDA 模式中建立码本的团队,也可以在这一轮中保持 qda_mode 开启,同时设置 codebook_mode: fixed。在 QDA 模式下,Potato 会跳过那项在启用重叠时拒绝 search.annotator_claim 的检查。在样本编码期间,请保持 annotator_claim 关闭。
两名编码者都完成后,导出信度表并冻结这一轮:
python -m potato.export --config config.yaml --format reliability --output export/
potato snapshot create config.yaml --tag icr-round-1 --note "Reliability round 1"导出会写出 reliability.csv 和 reliability.md,每道题一行。对于 codes 这道题,该行给出基于每段摘录代码集合、使用 MASI 距离的 Krippendorff's alpha,在摘录上做的 95% 百分位 bootstrap 区间,以代码集合完全相同计的百分比一致率,以及摘录数和编码者人数。快照在标签下保存这一轮的配置、数据、编码结果和每道题的 alpha,详见项目快照。随后,负责人打开 /adjudicate,裁定每处分歧,并在分歧由定义引起的地方勾选 "Flag for guideline update"。adjudication 导出把这些标记写入 adjudication_log.jsonl。被标记的摘录决定了下一轮之前码本修订的议程。
Potato 的两种一致性报告对质性编码者所用的方案类型覆盖如下:
| 方案 | reliability 导出 | /admin/iaa 仪表板 |
|---|---|---|
radio、select(每段摘录一个代码) | 名义 alpha,百分比一致率 | 百分比一致率,在编码者两两配对上取平均的 Cohen's kappa,Fleiss' kappa,名义 alpha |
multiselect、hierarchical_multiselect(多个代码) | 使用 MASI 距离的 alpha,百分比一致率 | 平均 Jaccard,使用 MASI 距离的 alpha |
likert | 有序 alpha | 线性和二次加权 kappa,Spearman's rho,有序 alpha |
span(高亮的段落) | 在各摘录上汇总的字符级 alpha | 词元级 kappa,精确与部分跨度 F1,字符级 alpha,Mathet's gamma |
textbox 和备忘录 | 无 | 无 |
当分配到某段摘录的每名编码者都完成后,仪表板才为这段摘录计分,一致性漂移则在主体编码阶段逐个窗口显示同样的系数。Potato 2.13.1 中还有四处不足:
- 没有逐个代码的 alpha。 两种报告都是每道题给出一个值,双编码者教程中有一个脚本,可以根据 CSV 导出为每个代码计算 alpha。
- 没有单元化 alpha。
span题的字符级 alpha 把每个字符当作固定单元,跨度与结构化输出的一致性解释了两者的区别。 - 没有其他指数。 Potato 不计算 Scott's pi、Holsti 指数、Gwet's AC1 或 Brennan 和 Prediger 的 kappa。
- 不做阈值判断。 导出只报告数值,不附标签,仪表板则把 0.6 到 0.8 之间的任何值标为 "substantial"。这一区间的起点低于 Krippendorff 的 0.667。请把每个值与研究事先确定的阈值相比较。
常见问题
编码者间信度应该用 Krippendorff's alpha 还是 Cohen's kappa?
当编码者超过两名、编码者编码的摘录部分重叠但不相同,或者代码是有序的,用 Krippendorff's alpha;当两名编码者把无序代码应用到相同的摘录上时,两种系数都可以。在两名编码者的完整名义数据上,两个值通常很接近。当编码者使用某个代码的频率不同时,两个值会拉开差距,因为 kappa 根据每名编码者各自的代码频率计算机遇一致,而 alpha 根据合并后的频率计算。
编码者间信度的 Krippendorff's alpha 达到多少才可以接受?
alpha 达到 0.800 或更高是惯常标准,0.667 是 Krippendorff(2004)接受初步结论的最低值。Krippendorff 把临界值与错误结论的代价联系起来,在结果关乎人命时设定的标准要高得多。把阈值应用到每个代码上,而不是应用到各代码的平均值上,并在点估计旁边报告 bootstrap 区间。
编码者间一致性的 Cohen's kappa 多高才算足够?
按照 Landis 和 Koch(1977)的分级,0.81 到 0.90 的 kappa 算作近乎完全,按照 McHugh(2012)更严格的量表则算作强。McHugh 只把高于 0.90 的 kappa 称为近乎完全。Landis 和 Koch 把 0.61 到 0.80 称为高度,而 McHugh 在健康研究中只把 0.60 到 0.79 称为中等。在编码开始前确定标准,并为每个代码报告 kappa。
报告 Krippendorff's alpha 时应该同时报告百分比一致率吗?
应该,把百分比一致率作为 alpha 旁边的描述性数字,信度结论则以 alpha 为准。百分比一致率不考虑机遇。两名很少使用某个代码的编码者,即使在该代码适用于哪里这一点上从未一致,在大多数摘录上仍然是一致的。Krippendorff(2004)不接受把百分比一致率作为信度指标,McHugh(2012)则建议同时计算百分比一致率和 kappa。Potato 的 reliability 导出为每道题同时写出这两列。
延伸阅读
- Potato 中的质性研究:是否要报告 ICR,以及 Potato 的质性研究功能
- 质性数据分析软件对比:各个 QDA 程序报告哪些系数
- Code Interview Transcripts With Two Coders and Report Alpha:一个带逐个代码 alpha 的完整编码项目
- 访谈转录稿编码:从录音到已编码摘录的各个步骤
- LLM 辅助的质性编码:把模型用作第二名编码者
- 质性编码的共享码本:码本模式和修订历史
- 裁定与分歧处理:解决分歧
- 一致性计算器:根据任何工具导出的代码 CSV 计算 alpha 和 kappa
参考文献
- Braun, V., & Clarke, V. (2023). Toward good practice in thematic analysis: Avoiding common problems and be(com)ing a knowing researcher. International Journal of Transgender Health, 24(1), 1-6. https://doi.org/10.1080/26895269.2022.2129597
- Krippendorff, K. (2004). Reliability in content analysis: Some common misconceptions and recommendations. Human Communication Research, 30(3), 411-433. https://doi.org/10.1111/j.1468-2958.2004.tb00738.x
- Krippendorff, K. (2004). Measuring the reliability of qualitative text analysis data. Quality & Quantity, 38(6), 787-800. https://doi.org/10.1007/s11135-004-8107-7
- Landis, J. R., & Koch, G. G. (1977). The measurement of observer agreement for categorical data. Biometrics, 33(1). https://doi.org/10.2307/2529310
- McHugh, M. L. (2012). Interrater reliability: The kappa statistic. Biochemia Medica, 22(3), 276-282. https://doi.org/10.11613/BM.2012.031
- O'Connor, C., & Joffe, H. (2020). Intercoder reliability in qualitative research: Debates and practical guidelines. International Journal of Qualitative Methods, 19, 1-13. https://doi.org/10.1177/1609406919899220