什么是FDR校正,核磁共振成像中FDR校正方法有哪些?如何进行FDR校正?

FDR(False Discovery Rate)校正是一种用于控制多重比较错误的方法,相较于FWER,FDR允许一定的错误发现。本文介绍了FDR的基本思想、计算过程和在脑科学中的应用,并提供了在R和Matlab中进行FDR校正的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

直到 1990 年代中期,通常使用全族错误率 (FWER) 来控制多次测试下的错误率。这种校正的一个例子是Bonferroni 校正。在一篇有影响力的论文中,Benjamini 和 Hochberg (1995)引入了错误发现率(FDR) 的概念,作为在进行许多测试时进行推理的一种方式。与 FWER 不同,FWER 控制对任何一系列测试犯 I 类错误的概率,FDR 允许研究人员容忍一定数量的测试被错误地发现。FDR 中的单词rate实际上是用词不当,因为 FDR 是比例在所有发现中错误的发现的比例,即在所有拒绝原假设中不正确拒绝的比例。

多重比较校正

那什么是多重比较,什么是FDR校正呢?多重比较是统计学中的术语。当我们进行多次统计检验后,假阳性的次数就会增多,所以要对假阳性进行校正。

先解释一些概念:以任务态数据为例,先看一个体素。

原假设(H0):该体素没

<think>嗯,用户之前问过如何在SAS中做变量a和另外10个变量的Spearman相关分析,现在他们又想知道如何加上FDR校正。我需要先确认他们的问题具体是什么。FDR校正通常用于多重比较校正,比如在多个假设检验中控制错误发现率。用户可能在做了10个Spearman相关分析后,希望对这些p值进行FDR校正,以避免假阳性结果。 首先,我需要回忆一下SAS中是否有内置的FDR校正功能。记得在PROC MULTEST中可以执行多种多重检验校正,包括FDR。不过用户当前使用的是PROC CORR,它本身可能不直接提供FDR校正选项,所以可能需要分两步:先得到Spearman的结果,特别是p值,然后将这些p值提取出来,用PROC MULTEST进行校正。 接下来,我需要考虑如何将PROC CORR输出的p值导入到数据集中,这样才能在后续步骤中使用。可能需要使用ODS OUTPUT语句来捕获输出结果。例如,用ODS OUTPUT SpearmanCorr=work.spearman_results; 将结果保存到一个临时数据集中。 然后,处理这个数据集,可能需要进行数据清洗,比如保留变量名和对应的p值,去除不必要的行(比如变量与自身的相关,其p值为缺失或1)。之后,使用PROC SORT按p值排序,为FDR校正做准备。 接下来,使用PROC MULTEST进行FDR校正。记得PROC MULTEST的pvalues输入需要是原始p值,并且可能需要指定FDR方法,如Benjamini-Hochberg。不过需要注意PROC MULTEST的语法,可能需要将数据转换为合适的格式,比如每个p值作为一行,并指定相应的变量。 另外,用户可能需要将校正后的p值与原始结果合并,以便于比较。这可能涉及到数据集的合并操作,比如使用DATA STEP或PROC SQL根据变量名进行合并。 需要检查用户提到的变量是否是连续的var1-var10,如果是的话,代码中的变量列表可能需要调整。此外,要确保在ODS OUTPUT中正确捕获了变量对的信息,可能需要查看PROC CORR输出的对象名称是否正确,比如SpearmanCorr是否是正确的结果表名。 可能还需要提醒用户注意数据中的缺失值处理,因为在PROC CORR中默认是成对删除,如果数据有缺失,可能会影响p值的计算,进而影响FDR校正的结果。 最后,应该给出一个完整的代码示例,从PROC CORR提取结果,处理数据,到运行PROC MULTEST进行FDR校正,并将结果合并展示。同时,解释每一步的作用,确保用户能够理解并调整代码以适应他们的实际变量名和数据结构。 可能还需要验证代码的正确性,比如测试是否有语法错误,或者步骤是否合理。比如,确保在PROC MULTEST中使用in=pvals选项正确引用了p值的数据集,并且方法选择正确。 总结来说,用户的真实需求是在进行多个Spearman相关分析后,对得到的多个p值进行FDR校正,以控制错误发现率。因此,回答需要分步骤说明如何获取这些p值,如何进行校正,并将结果整合,同时提示注意事项和可能的调整点。</think>在 SAS 中为 **Spearman 相关系数** 的 p 值添加 **FDR校正**(False Discovery Rate,错误发现率校正),可以通过 `PROC MULTEST` 过程实现。以下是完整代码示例: --- ### **完整代码(含注释)** ```sas /* Step 1: 计算 Spearman 相关系数并提取 p 值 */ proc corr data=your_dataset spearman noprint outp=work.spearman_corr /* 输出相关系数矩阵 */ outs=work.spearman_pvals; /* 输出 p 值矩阵 */ var a; /* 主变量 a */ with var1-var10; /* 与 a 相关的变量 */ run; /* Step 2: 提取 a 与其他变量的 p 值 */ data work.pvals_only; set work.spearman_pvals; where _name_ = 'a' & _type_ = 'P'; /* 筛选变量 a 的 p 值行 */ keep var1-var10; /* 保留需要的变量 */ run; /* Step 3: 转换数据为长格式(每行一个 p 值) */ proc transpose data=work.pvals_only out=work.long_pvals name=variable; /* 变量名作为新列 */ var var1-var10; /* 需要校正的变量 */ run; /* Step 4: 进行 FDR 校正(Benjamini-Hochberg 方法) */ proc multest data=work.long_pvals pdata=work.long_pvals fdr /* 指定 FDR 校正 */ out=work.fdr_results; pvalue col1; /* 指定包含原始 p 值的列 */ run; /* Step 5: 合并原始结果与 FDR 校正后的结果 */ proc sql; create table final_results as select a.variable, a.col1 as raw_p_value, b.fdr_p as fdr_adjusted_p from work.long_pvals a left join work.fdr_results b on a.variable = b.variable; quit; /* 打印最终结果 */ proc print data=final_results; title "Spearman相关性分析结果(含FDR校正)"; run; ``` -- ### **关键步骤说明** 1. **Step 1**: - 使用 `PROC CORR` 计算 Spearman 相关系数,并通过 `outs=` 选项输出 p 值到数据集 `work.spearman_pvals`。 - `noprint` 选项隐藏冗余输出。 2. **Step 2**: - 从 `work.spearman_pvals` 中筛选变量 `a` 的 p 值行(`_type_ = 'P'`)。 3. **Step 3**: - 将宽格式数据(变量名作为列)转换为长格式(每行一个变量名 + p 值),便于后续处理。 4. **Step 4**: - `PROC MULTEST` 进行 FDR 校正,默认使用 **Benjamini-Hochberg 方法**,输出校正后的 p 值。 5. **Step 5**: - 合并原始 p 值和校正后的 p 值,生成最终结果表。 -- ### **输出示例** | Variable | Raw_p_value | FDR_Adjusted_p | |----------|-------------|----------------| | var1 | 0.003 | 0.015 | | var2 | 0.025 | 0.050 | | ... | ... | ... | --- ### **注意事项** 1. **变量名调整**: - 如果变量名不是连续的 `var1-var10`,需在代码中手动列出所有变量名(如 `with x y z;`)。 2. **缺失值处理**: - `PROC CORR` 默认按 `pairwise` 删除缺失值,若需严格使用完整数据,可添加 `nomiss` 选项。 3. **FDR方法选择**: - `PROC MULTEST` 默认使用 Benjamini-Hochberg 方法,也可通过 `method=adaptive` 等选项调整。 希望这个方案能满足你的需求!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sta@ma@brain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值