ebr*_*imi 1 statistics correlation python-3.x pandas categorical-data
根据这篇文章的回答,
名义变量和区间(“数字”)变量之间最经典的“相关”度量是 Eta,也称为相关比,等于单向方差分析的 R 方根(p 值 =方差分析)。Eta 可以被视为一种对称关联测度,就像相关性一样,因为方差分析的 Eta(名义为独立,数值为因变量)等于多元回归的 Pillai 迹(数值为独立,一组虚拟变量对应于名义上为受抚养人)。
如果您能让我知道如何用 python 计算 Eta,我将不胜感激。
事实上,我有一个包含一些数字和一些名义变量的数据框。
此外,如何为其绘制类似热图的图?
上面的答案缺少根提取,因此,您将收到一个 eta 平方。不过,在主文章(User777 使用的)中,该问题已得到解决。
因此,维基百科上有一篇关于相关比以及如何计算它的文章。我创建了一个更简单的计算版本,并将使用wiki 中的示例:
import pandas as pd
import numpy as np
data = {'subjects': ['algebra'] * 5 + ['geometry'] * 4 + ['statistics'] * 6,
'scores': [45, 70, 29, 15, 21, 40, 20, 30, 42, 65, 95, 80, 70, 85, 73]}
df = pd.DataFrame(data=data)
print(df.head(10))
>>> subjects scores
0 algebra 45
1 algebra 70
2 algebra 29
3 algebra 15
4 algebra 21
5 geometry 40
6 geometry 20
7 geometry 30
8 geometry 42
9 statistics 65
def correlation_ratio(categories, values):
categories = np.array(categories)
values = np.array(values)
ssw = 0
ssb = 0
for category in set(categories):
subgroup = values[np.where(categories == category)[0]]
ssw += sum((subgroup-np.mean(subgroup))**2)
ssb += len(subgroup)*(np.mean(subgroup)-np.mean(values))**2
return (ssb / (ssb + ssw))**.5
coef = correlation_ratio(df['subjects'], df['scores'])
print('Eta_squared: {:.4f}\nEta: {:.4f}'.format(coef**2, coef))
>>> Eta_squared: 0.7033
Eta: 0.8386
Run Code Online (Sandbox Code Playgroud)