1

fdrtool()可以直接在包的功能fdrtool(1.2.12 版)中使用来自学生 t 检验的 t 统计数据吗?论文(Strimmer-K BMC Bioinfo. 2008, 9:303) 提到了这一点,但据我所知,参数只识别“正常”、“相关”和“pvalue”。非统计学家有解决方法吗?

4

2 回答 2

3

我认为这是一个错字。

我查看了fdrtool函数的源代码,发现statistic参数首先通过传递match.arg,然后传递给fdrtool:::get.nullmodel.

然后,你瞧:

args(fdrtool:::get.nullmodel)
# function (statistic = c("normal", "correlation", "pvalue", "studentt")) 
# NULL

实际上,对于学生 t,该函数中有一个完全实现的案例:

if (statistic == "studentt") {
    f0 = function(x, param, log = FALSE) {
        return(dt(x, df = param, log = log))
    }
    F0 = function(x, param) {
        return(pt(x, df = param))
    }
    iqr = function(param) {
        return(qt(0.75, df = param) - qt(0.25, df = param))
    }
    get.support = function() return(c(1, 1000))
}

现在,在我告诉您如何访问此选项之前,我想警告您,它很可能是故意禁用的。我无法想象为什么,因为乍一看它似乎应该可以正常工作。但是,如果您打算在研究结果中使用它,您应该记录这样一个事实,即这本质上是一个“隐藏”选项,并且您必须进行一些黑客攻击才能访问它。此外,我还没有在我的电脑上实际测试过这个,所以要小心拼写错误。

现在,至于黑客攻击,最简单的方法是首先简单地输入fdrtoolR 控制台。然后,将输出复制并粘贴到一个新的 R 脚本中(或者sink如果你喜欢这样的话,也可以使用)。前几行应如下所示:

function (x, statistic = c("normal", "correlation", "pvalue"), 
    plot = TRUE, color.figure = TRUE, verbose = TRUE, cutoff.method = c("fndr", 
        "pct0", "locfdr"), pct0 = 0.75) 
{
    statistic = match.arg(statistic)
...

然后,您所要做的就是更改c("normal", "correlation", "pvalue")c("normal", "correlation", "pvalue", "studentt"). 也就是说,前几行现在应该看起来像

function (x, statistic = c("normal", "correlation", "pvalue", "studentt"), 
    plot = TRUE, color.figure = TRUE, verbose = TRUE, cutoff.method = c("fndr", 
        "pct0", "locfdr"), pct0 = 0.75) 
{
    statistic = match.arg(statistic)
...

最后,将此函数重新分配给fdrtool(别担心,这不会破坏底层包,它就像一个“掩码”,直到你用 删除它rm):

fdrtool <- function (x, statistic = c("normal", "correlation", "pvalue", "studentt"), 
    plot = TRUE, color.figure = TRUE, verbose = TRUE, cutoff.method = c("fndr", 
        "pct0", "locfdr"), pct0 = 0.75) 
{
    statistic = match.arg(statistic)
...

并运行整个事情或获取脚本。那么你应该很高兴。

于 2014-09-12T15:18:15.990 回答
2

原来,包的维护者 Korbinian Strimmer 故意禁用了基于 t-score 的功能。原因是它经常被错误地使用。

Strimmer 教授是一个好人,对我的帮助请求做出了快速而全面的回应。这就是他的建议:实践中的 T 分数通常不遵循 t 分布,而是显示过度或过度离散,这就是为什么您应该更好地使用正常选项的原因。

但是,在此之前,您必须将数据居中

z.centered = z-median(z)
fdrtool(z.centered, statistic="normal") 
于 2015-06-01T14:40:04.120 回答