如何解决python中的Cramer V相关性而不是使用权重使用频率?
因此 Cramer V 相关性的数据集在列中有多个分类变量,但还有一列告诉我们这些值出现的频率。类似于下表:
Season Age Weather Sales
Spring New Cold 100
Fall Old Warm 50
Summer New Hot 200
我想弄清楚如何计算季节/年龄/天气之间的 Cramer V 相关性和权重是销售额?如果可行,如何写一些东西来计算它?或者有没有一种不同的方法可以用来找出相关性?谢谢!
解决方法
您可能知道,Cramer 的 V 测量两个名义变量之间的关联。因此,您可以将当前表转换为变量的每个成对组合的单独列联表,然后计算成对统计数据。
用于创建类似于您的表格的代码:
from itertools import product
import numpy as np
import pandas as pd
import scipy.stats as stats
np.random.seed(42)
all_combs = product(
['Spring','Summer','Fall','Winter'],['New','Old'],['Cold','Warm','Hot']
)
df = pd.DataFrame(all_combs,columns=['Season','Age','Weather'])
df['Sales'] = np.random.randint(25,200,len(df))
df.head()
# Season Age Weather Sales
# 0 Spring New Cold 127
# 1 Spring New Warm 117
# 2 Spring New Hot 39
# 3 Spring Old Cold 131
# 4 Spring Old Warm 96
将表转换为列联表,用于度量Season
和Age
之间的关联,并保存为二维数组:
cont = df.pivot_table('Sales','Season','sum')
cont
# Age New Old
# Season
# Fall 459 277
# Spring 283 272
# Summer 372 377
# Winter 356 384
cont_arr = cont.values
现在,您可以计算卡方统计量并从中计算 Cramer's V。可以找到 Cramer's V 的公式here。
chi2 = stats.chi2_contingency(cont_arr,correction=False)[0]
sample_size = np.sum(cont_arr)
min_dim = min(cont_arr.shape) - 1
cramer_v = np.sqrt((chi2 / sample_size) / min_dim)
cramer_v
# 0.1157257...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。