Python 一种计算大熊猫奇数比的较好方法

Python 一种计算大熊猫奇数比的较好方法,python,pandas,Python,Pandas,我有一个数据帧计数1,它看起来像: Factor w-statin wo-statin AgeGroups Cancer 0-5 No 108 6575 Yes 0 223 11-15 No 5 3669 Yes 1 143 16-2

我有一个数据帧计数1,它看起来像:

Factor            w-statin  wo-statin
AgeGroups Cancer                     
0-5       No           108       6575
          Yes            0        223
11-15     No             5       3669
          Yes            1        143
16-20     No            28       6174
          Yes            1        395
21-25     No            80       8173
          Yes            2        624
26-30     No           110       9143
          Yes            2        968
30-35     No           171       9046
          Yes            5       1225
35-40     No           338       8883
          Yes           21       1475
    Frequency Cancer     Factor AgeGroups
0         223    Yes  wo-statin       0-5
1         112    Yes  wo-statin      6-10
2         143    Yes  wo-statin     11-15
3         395    Yes  wo-statin     16-20
4         624    Yes  wo-statin     21-25
5         968    Yes  wo-statin     26-30
6        1225    Yes  wo-statin     30-35
7        1475    Yes  wo-statin     35-40
8        2533    Yes  wo-statin     41-45
9        4268    Yes  wo-statin     46-50
10       5631    Yes  wo-statin     52-55
11       6656    Yes  wo-statin     56-60
12       7166    Yes  wo-statin     61-65
13       8573    Yes  wo-statin     66-70
14       8218    Yes  wo-statin     71-75
15       4614    Yes  wo-statin     76-80
16       1869    Yes  wo-statin     81-85
17        699    Yes  wo-statin     86-90
18        157    Yes  wo-statin     91-95
19         31    Yes  wo-statin    96-100
20          5    Yes  wo-statin      >100
21        108     No   w-statin       0-5
22          6     No   w-statin      6-10
23          5     No   w-statin     11-15
24         28     No   w-statin     16-20
25         80     No   w-statin     21-25
26        110     No   w-statin     26-30
27        171     No   w-statin     30-35
28        338     No   w-statin     35-40
29        782     No   w-statin     41-45
..
我想计算oddsratio(w-statin/wo-statin)。我像在纸上一样用老式的方式做:

counts1['sumwwoStatin']= counts1['w-statin']+counts1['wo-statin']

counts1['oddRatio']=((counts1['w-statin']/counts1['sumwwoStatin'])/(counts1['wo-statin']/counts1['sumwwoStatin']))
有没有更好的方法来计算大熊猫的优势比、相对风险、接触表和卡方检验,就像R?如有任何建议,我们将不胜感激。哦,顺便说一下,我忘了提到我的csv是什么样子的:

Factor            w-statin  wo-statin
AgeGroups Cancer                     
0-5       No           108       6575
          Yes            0        223
11-15     No             5       3669
          Yes            1        143
16-20     No            28       6174
          Yes            1        395
21-25     No            80       8173
          Yes            2        624
26-30     No           110       9143
          Yes            2        968
30-35     No           171       9046
          Yes            5       1225
35-40     No           338       8883
          Yes           21       1475
    Frequency Cancer     Factor AgeGroups
0         223    Yes  wo-statin       0-5
1         112    Yes  wo-statin      6-10
2         143    Yes  wo-statin     11-15
3         395    Yes  wo-statin     16-20
4         624    Yes  wo-statin     21-25
5         968    Yes  wo-statin     26-30
6        1225    Yes  wo-statin     30-35
7        1475    Yes  wo-statin     35-40
8        2533    Yes  wo-statin     41-45
9        4268    Yes  wo-statin     46-50
10       5631    Yes  wo-statin     52-55
11       6656    Yes  wo-statin     56-60
12       7166    Yes  wo-statin     61-65
13       8573    Yes  wo-statin     66-70
14       8218    Yes  wo-statin     71-75
15       4614    Yes  wo-statin     76-80
16       1869    Yes  wo-statin     81-85
17        699    Yes  wo-statin     86-90
18        157    Yes  wo-statin     91-95
19         31    Yes  wo-statin    96-100
20          5    Yes  wo-statin      >100
21        108     No   w-statin       0-5
22          6     No   w-statin      6-10
23          5     No   w-statin     11-15
24         28     No   w-statin     16-20
25         80     No   w-statin     21-25
26        110     No   w-statin     26-30
27        171     No   w-statin     30-35
28        338     No   w-statin     35-40
29        782     No   w-statin     41-45
..

AFAIK pandas不提供统计计算和测试,但提供基本矩,如均值、方差、相关性等

但是,您可以依赖于。你会在那里找到大部分你需要的东西。例如,要计算优势比:

import scipy.stats as stats

table = df.groupby(level="Cancer").sum().values
print(table)

>>> array([[  840, 51663],
           [   32,  5053]])

oddsratio, pvalue = stats.fisher_exact(table)
print("OddsR: ", oddsratio, "p-Value:", pvalue)

>>> OddsR:  2.56743220487 p-Value: 2.72418938361e-09

更多信息,请参见和。

我不知道如何在熊猫身上做到这一点。。。但是,您可以通过首先使用scikit学习库查找相应的beta值来计算Python中逻辑回归模型的优势比,如下所述:


此线程描述如何从逻辑回归模型生成和提取β系数。然后,您可以使用Python的NumPy包中的exp()函数对Beta值求幂,从而计算优势比。以这种方式计算的优势比将等同于R通过glm()函数提供的优势比,指定二项分布。

statsmodels
可用于估计优势比,如果两个变量已经是同一数据帧的一部分:

将statsmodels.api导入为sm
table=sm.stats.table.来自_数据(df[['w-statin','wo-statin']]
rslt=表.测试\u标称\u关联()
打印(本地表格)
打印(rslt.pvalue)

太棒了!谢谢你:)。。我只是想知道这是否可能。这是一篇很长的文章,但是如果你得到的P值是0.0,会发生什么呢?如果我在一个计算器里做这件事,我会得到@ScoutEU,如果我在功能选择的上下文中说话……如果pA边上的问题:“像在R中”——这意味着确切的程度如何?(那里容易吗?)