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