Pearson相关系数
用于度量两个连续型变量之间的线性关系。取值范围在-1到1之间,0表示无线性关系,1表示完全正相关,-1表示完全负相关
import pandas as pd
# 创建一个包含两个连续型变量的DataFrame
data = {'Variable1': [1, 2, 3, 4, 5],
'Variable2': [2, 3, 4, 5, 6]}
df = pd.DataFrame(data)
# 计算Pearson相关系数
pearson_corr = df['Variable1'].corr(df['Variable2'])
print(f"Pearson Correlation Coefficient: {pearson_corr}")
Spearman秩相关系数
Spearman秩相关系数是用于度量两个变量之间的单调关系的非参数统计量。与Pearson相关系数不同,Spearman秩相关系数不要求变量之间的关系是线性的,它测量的是变量的等级之间的关系。这使得Spearman相关系数对于非线性关系的探测更为敏感。
from scipy.stats import spearmanr
# 创建一个包含两个连续型变量的DataFrame
data = {'Variable1': [1, 2, 3, 4, 5],
'Variable2': [2, 3, 4, 5, 6]}
df = pd.DataFrame(data)
# 计算Spearman秩相关系数
spearman_corr, p_value = spearmanr(df['Variable1'], df['Variable2'])
print(f"Spearman Rank Correlation Coefficient: {spearman_corr}")
Kendall秩相关系数
Kendall秩相关系数(Kendall’s Tau)是一种用于度量两个变量之间等级关系的非参数统计量。它对于数据中存在的并非线性关系的情况特别有用。Kendall秩相关系数考虑的是两个变量之间的“协同变动”的数量,即它测量两个变量的秩次之间的一致性
from scipy.stats import kendalltau
# 创建一个包含两个连续型变量的DataFrame
data = {'Variable1': [1, 2, 3, 4, 5],
'Variable2': [2, 3, 4, 5, 6]}
df = pd.DataFrame(data)
# 计算Kendall秩相关系数
kendall_corr, p_value = kendalltau(df['Variable1'], df['Variable2'])
print(f"Kendall's Tau Correlation Coefficient: {kendall_corr}")
Cramér’s V
Cramér’s V 是一种用于度量两个分类变量之间关联程度的统计量。它是基于卡方检验的结果计算而得,可以用于判断两个分类变量是否存在关联,以及关联的强度
from scipy.stats import chi2_contingency
# 创建一个包含两个分类变量的DataFrame
data = {'Variable1': ['A', 'B', 'A', 'B', 'A'],
'Variable2': ['X', 'Y', 'X', 'Y', 'X']}
df = pd.DataFrame(data)
# 构建列联表
contingency_table = pd.crosstab(df['Variable1'], df['Variable2'])
# 进行卡方检验并计算 Cramér's V
chi2, _, _, _ = chi2_contingency(contingency_table)
n = df.shape[0]
k = contingency_table.shape[0]
r = contingency_table.shape[1]
cramers_v = np.sqrt(chi2 / (n * min(k-1, r-1)))
print(f"Cramér's V: {cramers_v}")
Pointwise Mutual Information(点互信息
Pointwise Mutual Information (PMI) 是一种用于衡量两个事件之间关联性的统计度量。它经常在自然语言处理(NLP)领域中用于词语之间的关联性分析,但也可以应用于其他领域
import numpy as np
def calculate_pmi(p_ab, p_a, p_b):
return np.log2(p_ab / (p_a * p_b))
# 示例:假设单词 "cat" 和 "dog" 同时出现的概率为 0.01,单独出现的概率分别为 0.05 和 0.1
p_ab = 0.01
p_a = 0.05
p_b = 0.1
pmi_value = calculate_pmi(p_ab, p_a, p_b)
print(f"PMI('cat', 'dog'): {pmi_value}")
熵相关度
在信息论中,“熵”(Entropy)通常用于衡量一个系统的混乱程度或不确定性。而 “熵相关度” 这一术语并没有明确的定义,可能指的是一种使用熵来衡量两个变量之间关系的概念。
互信息
互信息(Mutual Information)用于衡量两个随机变量之间的相关性。
from scipy.stats import entropy
# 示例数据
# 假设X和Y是两个离散随机变量
# 这里只是为了演示,实际使用时需要根据具体情况提供相应的概率分布
p_xy = np.array([[0.1, 0.2], [0.3, 0.4]]) # 联合概率分布
p_y = np.sum(p_xy, axis=0) # Y的边缘概率分布
# 计算条件熵 H(X|Y)
h_x_given_y = entropy(p_xy, base=2, axis=0, keepdims=True) - np.log2(p_y)
# 计算互信息 I(X;Y)
h_x_y = entropy(p_xy, base=2, axis=None) # 联合熵
i_x_y = h_x_y - np.sum(h_x_given_y * p_y)
print(f"条件熵 H(X|Y): {h_x_given_y}")
print(f"互信息 I(X;Y): {i_x_y}")