python中的Cramer V相关性,但不是使用频率和权重?
所以Cramer V correlation的数据集在列中有多个分类变量,但也有一列告诉我们这些值出现的频率。与下表类似:python中的Cramer V相关性,但不是使用频率和权重?,python,statistics,Python,Statistics,所以Cramer V correlation的数据集在列中有多个分类变量,但也有一列告诉我们这些值出现的频率。与下表类似: Season Age Weather Sales Spring New Cold 100 Fall Old Warm 50 Summer New Hot 200 我想弄清楚如何计算季节/年龄/天气和重量销售之间的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
将该表转换为列联表,用于测量季节
和年龄
之间的关联,并将其保存为二维数组:
cont = df.pivot_table('Sales', 'Season', 'Age', 'sum')
cont
# Age New Old
# Season
# Fall 459 277
# Spring 283 272
# Summer 372 377
# Winter 356 384
cont_arr = cont.values
现在,你可以计算卡方统计量,然后根据卡方统计量计算克莱默的V,可以找到克莱默的V的公式
谢谢,我会玩这个,看看我是否可以做这项工作,但似乎它应该工作的基础上,我所看到的!谢谢亚历克斯!
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...