首页 > 解决方案 > 循环产生不正确的统计数据和 P 值

问题描述

我正在尝试简化我进行 t 测试的流程,并找到了一种基于过滤标志循环遍历每一列的方法。但是,当我执行循环功能时,结果是

  1. 所有相同的统计数据和 P 值
  2. 如果我作为一个独立的人来做,那就不同了。

1:错误

对于 df1.filter(like='DELTA').columns 中的 col:
stats.mannwhitneyu(df1[df1['COHORT_FLAG']==1]['MH_IP_DELTA'] ,df1[df1['COHORT_FLAG']==0] ['MH_IP_DELTA'])
打印(col + ': ' + 'Stats=%.3f, p=%.3f' % (stat, p))

2:对:

stats.mannwhitneyu(df1[df1['COHORT_FLAG']==1]['MH_IP_DELTA'] ,df1[df1['COHORT_FLAG']==0]['MH_IP_DELTA'])

知道为什么循环不能正常工作,还有另一种方法可以遍历大型记录集吗?我不想每次都手动输入 [col]。

标签: pythonpandasscipystatistics

解决方案


您的问题中没有可使用的数据框,但我可以指出问题可能来自哪里。首先,我将格式化您的代码,以便我们与正在查看的内容在同一页面上:

1(“正确”):

for col in df1.filter(like='DELTA').columns:
    stats.mannwhitneyu(df1[df1['COHORT_FLAG']==1]['MH_IP_DELTA'] ,df1[df1['COHORT_FLAG']==0]['MH_IP_DELTA'])
    print(col + ': ' + 'Stats=%.3f, p=%.3f' % (stat, p))

2(“错误”):

stats.mannwhitneyu(df1[df1['COHORT_FLAG']==1]['MH_IP_DELTA'] ,df1[df1['COHORT_FLAG']==0]['MH_IP_DELTA'])

首先要注意的是,“正确”和“错误”代码片段中的关键行之间没有区别。这告诉我们问题在于循环的构造方式。查看循环,我们看到除了语句col之外永远不会出现。print()循环产生所有相同值的事实证实了循环没有在不同的列上循环。

如果没有数据框,我不知道您对哪些列感兴趣,而且我对您使用的统计功能也不太熟悉。但是您需要告诉您的程序感兴趣的列。'MH_IP_DELTA'如果这是要col更改的列,也许您会更改。不确定这是否是感兴趣的变量,因为我看不到您的数据框中发生了什么,但这是我的猜测。

它是哪一列,你需要在哪里改变它取决于你自己来决定,但问题是你的代码,正如你所写的,只是简单地运行同一段代码 X 次,其中 X 是列数。


推荐阅读