Python 一种计算大熊猫奇数比的较好方法
我有一个数据帧计数1,它看起来像: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
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中”——这意味着确切的程度如何?(那里容易吗?)