R'fdrtool'包:如何使用t统计

时间:2014-09-12 14:18:59

标签: r fdr

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

2 个答案:

答案 0 :(得分:3)

我认为这是一个错字。

我查看了fdrtool函数的来源,发现statistic参数首先通过match.arg传递到fdrtool:::get.nullmodel

然后,瞧瞧:

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

确实在该函数中为学生提供了一个完全实现的案例:

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))
}

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

现在,至于黑客攻击,最简单的方法就是先将fdrtool输入R控制台。然后,将输出复制并粘贴到新的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)
...

运行整个事情或者源代码。然后你应该好好去。

答案 1 :(得分:2)

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

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

然而,在此之前,您必须以数据为中心

z.centered = z-median(z)
fdrtool(z.centered, statistic="normal")