【问题标题】:How to find value that corresponds to FDR=0.05 given distribution A and a null distribution?给定分布 A 和空分布,如何找到对应于 FDR=0.05 的值?
【发布时间】:2020-12-22 19:04:54
【问题描述】:

我有两个相关向量:一个表示真实相关,另一个表示置换相关(零分布)。我想找到对应于 0.05 的 FDR 的相关值。

更新方法

cor_real=rnorm(1000,0,sd=0.2)
cor_null=rnorm(1000,0,sd=0.15)

d_real=density(cor_real,from=max(min(cor_real),min(cor_null)),to=min(max(cor_real),max(cor_null)))
d_null=density(cor_null,from=max(min(cor_real),min(cor_null)),to=min(max(cor_real),max(cor_null)))
# here we ensure that the x values are comparable between the two densities

plot(d_real)
lines(d_null)

那么,要找到对应于 FDR = 0.05 的相关值,我的猜测是:

ratios=d_null$y/d_real$y
d_real$x[which(round(ratios,2)==.05)]
[1] 0.5694628 0.5716372 0.5868581 0.5890325 0.5912069
# this the the correlation value(s) that corresponds to a 5% chance of a false positive

这是正确的方法吗?


例如:

cor_real=rnorm(100,0.25,sd=0.1)
cor_null=rnorm(100,0.2,sd=0.1)

h_real=hist(cor_real,plot=F)
h_null=hist(cor_null,plot=F)

plot(h_null,col=rgb(1,0,0,.5),xlim=c(0,1),ylim=c(0,max(h_real$counts))) # in red
plot(h_real,col=rgb(0,.5,.5,0.25),add=T) # in blue

我认为这是两个直方图的频率之比 = 0.05 (null:real),但我对此不是 100% 确定。

我如何找到对应于 FDR = 0.05 的相关值,同时“访问”空分布和真实分布?

【问题讨论】:

  • 请阅读r 标签页顶部关于如何提问的信息。特别是请提供一个可重现的例子。
  • 很公平,但我没有提供可重现的示例,因为我不确定如何开始操作。
  • 好吧,您至少可以提供两个相关向量,以明确您的输入数据是什么样的。我不确定你说的是什么比例。这里的分子和分母是什么。如果您没有数据或代码,最好在 Cross Validated 上询问有关主题的纯统计问题。
  • 了解,已更新。
  • 您使用的是绝对频率直方图,当您要查找的值是相对的,因为它是 FDR= 0.05;您可以将h_realh_null 从绝对频率直方图更改为相对频率直方图,然后就可以得到 h_real 和 h_null 相同的 cor_null 值...

标签: r distribution fdr


【解决方案1】:

密度不太正确,因为 1. 您没有将 nfrom, to 设置为相同,2. 它仅计算 1 个 bin 的误报数/误报数。

错误发现率定义为 FP / (FP + TP)。也看到这个post。一旦我们将两个相关性放在同一个向量中,我们就可以计算这个,标记并排序它们:

set.seed(321)
cor_real=rnorm(1000,0,sd=0.2)
cor_null=rnorm(1000,0,sd=0.15)

df = data.frame(rho = c(cor_real,cor_null),
                type = rep(c(TRUE,FALSE),each=1000))
df$rho = abs(df$rho)
df = df[order(df$rho,decreasing=TRUE),]

df$FP = cumsum(df$type == FALSE)
df$TP = cumsum(df$type == TRUE)

df$FDR = df$FP / (df$FP + df$TP)

如果你看看结果,

head(df,25)
           rho  type FP TP        FDR
366  0.5822139  TRUE  0  1 0.00000000
247  0.5632078  TRUE  0  2 0.00000000
298  0.5594879  TRUE  0  3 0.00000000
147  0.5460875  TRUE  0  4 0.00000000
781  0.5373146  TRUE  0  5 0.00000000
760  0.5367116  TRUE  0  6 0.00000000
797  0.5216281  TRUE  0  7 0.00000000
569  0.5204598  TRUE  0  8 0.00000000
374  0.5200687  TRUE  0  9 0.00000000
744  0.5101275  TRUE  0 10 0.00000000
864  0.5058457  TRUE  0 11 0.00000000
227  0.4997959  TRUE  0 12 0.00000000
66   0.4993164  TRUE  0 13 0.00000000
14   0.4886520  TRUE  0 14 0.00000000
830  0.4840573  TRUE  0 15 0.00000000
261  0.4765394  TRUE  0 16 0.00000000
1163 0.4703764 FALSE  1 16 0.05882353
27   0.4661862  TRUE  1 17 0.05555556
965  0.4633883  TRUE  1 18 0.05263158
530  0.4608271  TRUE  1 19 0.05000000
96   0.4575683  TRUE  1 20 0.04761905
851  0.4563224  TRUE  1 21 0.04545455
922  0.4516161  TRUE  1 22 0.04347826
343  0.4511517  TRUE  1 23 0.04166667

在 abs(rho) >= 0.4511517 时,您有 1 个 FP 和 23 个 TP,给您的 FDR 为 0.0416.. 低于 0.05 的 FDR。所以你可以在这里设置你的绝对截止值。

您的示例很难测试,因为两者几乎都是相同的零假设,只有不同的 sd。在现实生活中,我们很可能需要模拟数据来找到我们在零假设下获得的相关性。你会看到上面的计算应该很好。

【讨论】:

  • 这非常有帮助,谢谢!我要补充的是,真正的相关性基于基因表达矩阵,而空值来自于每个样本中的置换值并重新计算相关性 x 100。
  • 我再次查看您提供的这个示例——我是否不会在 abs(rho)=0.4765394 处设置 FDR 0.05?
  • 您希望包含尽可能多的内容。这就是虚假发现的目的。通常它会随着您增加阈值而看到 fdr 减少.. 但是考虑到这些数据的性质等.. 我们看到类似这样的东西
  • 明白。还有一些(更多)后续问题:1)如您所描述的那样,计算 FDR 的零分布样本大小和实际分布样本大小是否需要相同? 2)一般来说,我很难从概念上掌握当密度比(空/实数)= 0.05 时的相关值与我使用您在此处显示的内容获得的相关值有何不同。你能详细说明一下吗?非常感谢您的帮助!
  • @RebeccaEliscu 我认为您提出的那些问题更适合交叉验证。 stats.stackexchange.com 这是堆栈溢出。我已经解决了您最初的问题,即计算 R 中的 fdr
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2020-01-10
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多