在Matlab中对多重比较进行p值调整

8
我是一名有用的助手,可以为您翻译文本。
我有一个需要进行多重比较调整的p值单元数组。在Matlab中该如何操作呢?我找不到内置函数。
在R中,我会这样做:
data.pValue_adjusted = p.adjust(data.pValue, method='bonferroni')

Matlab是否有类似的功能?最好能够执行不同的调整方法(Bonferroni,Benjamini-Hochberg,FDR ...)?

6个回答

5
如果您拥有生物信息学工具箱,您可以使用MAFDR函数来计算经过假发现率调整的p值。

1
对于那些没有访问生物信息学工具箱的人,可以在Matlab中心找到Benjamini和Hochberg以及Benjamini和Yekutieli的实现。虽然它不是一个直接替代MAFDR的解决方案,但可以用来代替它。 - Eponymous
1
值得注意的是,官方的 mafdr 实现默认使用 Storey (2002) 的方法,这通常比原始的 Benjamini-Hochberg 版本更强大。文档在此处:http://www.mathworks.com/help/bioinfo/ref/mafdr.html。 - Matt

1

这里提供了一个MATLAB/Octave实现R的p.adjust函数的链接。它可以使用以下方法执行多重比较的p值调整,与其R对应项相等:

  • Holm
  • Hochberg
  • Hommel
  • Bonferroni
  • BH
  • BY
  • fdr
  • Sidak(该方法在R函数中不可用)

免责声明:我是这个软件包的作者。


1

对于没有生物信息学工具箱的人,FDR(假发现率)方法在这里也有非常好的描述,并提供了一个带有fdr脚本的链接。


那个链接里有很有用的解释。 - Leo

0

这个提交可能是你要找的,但它只实现了Bonferroni-Holm方法。你需要在FEX上搜索其他校正方法的类似解决方案。

话虽如此,统计工具箱有MULTCOMPARE方法,专门用于多重比较测试,尽管它不返回校正后的p值。以下是一个示例:

load fisheriris
[pVal tbl stats] = kruskalwallis(meas(:,1), species)   %# Kruskal-Wallis or ANOVA
title('Sepal Length'), xlabel('Groups'), ylabel('Value')

[c,m] = multcompare(stats, 'ctype','bonferroni', 'display','on');

Bonferroni-Holm足够好了,我觉得。反正我也不懂细节 ;) - Martin Preusse
快速阅读文档表明multompare仅适用于类似方差分析的测量(它似乎使用t检验临界值 - 请参见bonferroni的描述 - 而不是调整p值) - Eponymous
2
Bonferroni(FWER / Family-wise-error rate)和Benjamini(FDR / False discovery rate)之间有一个重要的区别。非常粗略地说,在FWER中,显著性(也称为alpha)是测试错误拒绝零假设的概率,即使只有一次。在FDR中,显著性是被拒绝(发现)的比例中不正确的部分。因此,如果在95%的水平下有40个显着结果,在FWER下,这意味着有1/20的机会匹配错误。而对于FDR来说,这意味着1/20是错误的-因此平均有2个错误。 - Eponymous
1
@Eponymous:感谢您的解释。我认为您关于multcompare的看法是正确的,因为它的输入是仅包含t值而不是p值的stats结构...正如其他人在下面展示的那样,解决方案是使用ttest2计算多个测试的原始p值,然后从生物信息学工具箱中调用mafdr来根据Benjamini&Hochberg(FDR)方法获取调整后的p值。我可能应该提到我不是统计学家,这不是我的专业领域 :) - Amro

0

虽然链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。仅有链接的答案如果链接页面更改可能会变得无效。 - ZygD

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接