与分类因变量的相关性
Correlation with categorical dependent variables
我的数据大概是这个方案:
Category
Value1
Value2
Value3
A
5.8
7.2
8.8
A
5.7
6.7
4.5
B
8.5
7.3
2.2
C
5.3
0.4
4.1
C
4.2
9.5
9.3
C
5.9
7.6
5.3
D
7.6
3.5
2.3
D
6.8
8.8
6.4
所以我的目标是计算相关性。值 1-3 是否受到不同类别的影响。例如。如果我们可以说类别 A 导致比其他类别更高的值 1。在 Python 中实现此目标的最佳和最短方法是什么?
我对你想如何处理这个问题并不完全有信心。但是鉴于您的问题,您可以使用分组平均值以 'short' 方式检查每个类别的值列的差异:
df.groupby('Category').mean()
Value1 Value2 Value3
Category
A 5.750000 6.950000 6.650000
B 8.500000 7.300000 2.200000
C 5.133333 5.833333 6.233333
D 7.200000 6.150000 4.350000
这表明与您的预期相反,类别 A 导致值 1 的值低于其余值。
您还可以计算每个类别的百分比变化,从每个值移动到下一个值:
df.groupby('Category').mean().pct_change(axis=1).fillna(0)
Value1 Value2 Value3
Category
A 0.0 0.208696 -0.043165
B 0.0 -0.141176 -0.698630
C 0.0 0.136364 0.068571
D 0.0 -0.145833 -0.292683
要获得 p 值,您可以使用非常简单的线性回归。网上有许多资源可以为您提供帮助。然而,简单来说:
from statsmodels.formula.api import ols
fit = ols('Value1 ~ C(Category)', data=df).fit()
#fit.summary()
>>> fit.pvalues.reset_index().rename({0:'p_values'},axis=1)
index p_values
0 Intercept 0.000269
1 C(Category)[T.B] 0.028933
2 C(Category)[T.C] 0.372288
3 C(Category)[T.D] 0.097482
我的数据大概是这个方案:
Category | Value1 | Value2 | Value3 |
---|---|---|---|
A | 5.8 | 7.2 | 8.8 |
A | 5.7 | 6.7 | 4.5 |
B | 8.5 | 7.3 | 2.2 |
C | 5.3 | 0.4 | 4.1 |
C | 4.2 | 9.5 | 9.3 |
C | 5.9 | 7.6 | 5.3 |
D | 7.6 | 3.5 | 2.3 |
D | 6.8 | 8.8 | 6.4 |
所以我的目标是计算相关性。值 1-3 是否受到不同类别的影响。例如。如果我们可以说类别 A 导致比其他类别更高的值 1。在 Python 中实现此目标的最佳和最短方法是什么?
我对你想如何处理这个问题并不完全有信心。但是鉴于您的问题,您可以使用分组平均值以 'short' 方式检查每个类别的值列的差异:
df.groupby('Category').mean()
Value1 Value2 Value3
Category
A 5.750000 6.950000 6.650000
B 8.500000 7.300000 2.200000
C 5.133333 5.833333 6.233333
D 7.200000 6.150000 4.350000
这表明与您的预期相反,类别 A 导致值 1 的值低于其余值。
您还可以计算每个类别的百分比变化,从每个值移动到下一个值:
df.groupby('Category').mean().pct_change(axis=1).fillna(0)
Value1 Value2 Value3
Category
A 0.0 0.208696 -0.043165
B 0.0 -0.141176 -0.698630
C 0.0 0.136364 0.068571
D 0.0 -0.145833 -0.292683
要获得 p 值,您可以使用非常简单的线性回归。网上有许多资源可以为您提供帮助。然而,简单来说:
from statsmodels.formula.api import ols
fit = ols('Value1 ~ C(Category)', data=df).fit()
#fit.summary()
>>> fit.pvalues.reset_index().rename({0:'p_values'},axis=1)
index p_values
0 Intercept 0.000269
1 C(Category)[T.B] 0.028933
2 C(Category)[T.C] 0.372288
3 C(Category)[T.D] 0.097482