python 堆栈内存_python - 在python中手动计算FDR - 堆栈内存溢出

我正在尝试手动计算随机样本的错误发现率 (FDR)。

import scipy.stats as sc_stats

import numpy as np

np.random.seed(471)

a = np.random.normal(0, 1, 900)

b = np.random.normal(3, 1, 100)

x = np.concatenate([a, b])

p = sc_stats.norm.pdf(x)

根据样本,计算FDR的方法如下:

对于FDR,我们要考虑有序的p值。 我们将看到第k个有序p值是否大于k * 0.05 / 1000

psort

fdrtest

for (i in 1:1000)

fdrtest match(p[i],psort) * .05/1000)

我已经使用详细功能实现了,如下所示:

def get_index(s, item):

for i, si in enumerate(s): if si >= item: return i

return i

psort = np.sort(p)

fdrtest = np.zeros(len(p))

wheres = np.zeros(len(p))

for i, pi in enumerate(p):

#print(i, np.where(psort==pi)[0][0], pi, psort[np.where(psort==pi)[0]])

wheres[i] = get_index(psort, pi)

fdrtest[i] = True if pi > (wheres[i] * 0.05/1000) else False

与接近40%的示例相比,我的II型错误率要高得多(接近60%)。 以下是我如何计算I型和II型错误。

tmp = fdrtest

a_test = pd.DataFrame({'vals':

fdrtest[:900]}).groupby('vals').size().reset_index()

display(a_test)

b_test = pd.DataFrame({'vals':

fdrtest[900:]}).groupby('vals').size().reset_index()

display(b_test)

a_reject_ct = a_test[a_test['vals']==False].values[0][1]

a_samples = a.shape[0]

b_samples = b.shape[0]

b_fail_rej_ct = b_test[b_test['vals']==True].values[0][1]

type_1_err = np.round(a_reject_ct / a_samples,4)

type_2_err = np.round( b_fail_rej_ct/ b_samples,4)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FDR (False Discovery Rate) 是一种控制多重检验的错误发现率的方法。它是由Benjamini和Hochberg在1995年提出的。他们的方法的目标是控制在一个预设的水平以下的FDR,并在此基础上,后续的研究提出了更加精确估计FDR的方法,例如Storey的、Broberg的、Dalmasso的、Guan的和Strimmer的方法等。Benjamini的方法将FDR控制在一个水平以下,而后续的方法与此方法相比更具有强大的统计力度,但也牺牲了鲁棒性。 在数据分析,常常会遇到多重检验问题,即对于多个假设进行统计检验。Benjamini在1995年提出了一种方法,通过控制FDR (False Discovery Rate) 来确定P值的阈值。假设选出了R个差异表达的基因,其有S个是真正有差异表达的,而另外有V个实际上却没有差异表达,是假阳性。在实践,希望错误比例Q=V/R的平均值不能超过预先设定的值(例如0.05),在统计学上,这等价于控制FDR不超过5%。 至于Python如何计算FDR,我找到了一个使用SHD函数的代码示例:`cdt.metrics.SHD(target, pred, double_for_anticausal=True)`,其`target`是目标变量的真实值,`pred`则是预测值,`double_for_anticausal`则是一个参数,用于指定是否将反因果结构计算两次。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [FDR多重检验校正原理及Python实现方法](https://blog.csdn.net/weixin_39818264/article/details/113981441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [对于因果模型的常见评估函数:SHD 和 FDR](https://blog.csdn.net/weixin_55703970/article/details/124239263)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值