效应大小是衡量变量间关系强度的重要指标,尤其在机器学习领域中,它帮助了解模型特征的重要性。不同于p值仅告诉关系是否显著,效应大小还告诉这种关系有多强。例如,在评估新药物效果时,不仅需要知道新药是否比旧药更好(通过p值),还需要知道它好了多少(通过效应大小)。
在数据分析中,可以根据变量的类型(例如,分类变量或连续变量)来选择不同的效应大小指标。以下是一些常见的效应大小指标及其在Python中的计算方法。
当数据符合参数分布(即数据呈正态分布且相关性为线性)时,可以使用皮尔逊相关系数来衡量两个连续变量之间的相关性。皮尔逊相关系数的取值范围在-1到1之间,接近0表示相关性弱,接近-1或1表示相关性强。
import numpy as np
# 计算变量x和y之间的皮尔逊相关系数矩阵
np.corrcoef(x, y)
如果数据存储在Pandas的DataFrame中,可以使用以下函数来计算数值变量之间的相关系数矩阵。
import pandas as pd
# 计算DataFrame中数值变量的相关系数矩阵
df.corr()
当数据不符合参数分布时,可以使用斯皮尔曼等级相关系数。斯皮尔曼等级相关系数比较的是每个变量值的等级而非实际值。
from scipy import stats
# 计算斯皮尔曼等级相关系数
print(stats.spearmanr([1,2,3,4,5], [5,6,7,8,7]))
使用Pandas计算斯皮尔曼等级相关系数的方法如下:
df.corr(method='spearman')
当一个变量是分类的,另一个是连续的,可以使用相关比率(eta)来衡量分类变量对连续变量的影响。相关比率的计算涉及到每个类别的平均值和总体平均值。
import numpy as np
import pandas as pd
def correlation_ratio(categories, measurements):
# 计算相关比率的代码实现
pass
相关比率的取值范围在0到1之间,接近0表示所有类别的值相似,没有单一类别对变量y有较大影响;接近1表示一个或多个类别的值与其他类别不同,对变量y有较大影响。
Cohen's d用于计算两个类别之间的标准化差异。以下是计算Cohen's d值的Python函数。
import numpy as np
def cohend(d1, d2):
# 计算Cohen's d的代码实现
pass
克拉默V(Cramer's V)用于基于卡方检验统计量来衡量两个分类变量之间的相关性。以下是计算克拉默V的Python函数。
import scipy
from itertools import product
def cramers_v(x, y):
# 计算克拉默V的代码实现
pass
def cat_cat(df, cat_features):
# 在DataFrame中计算克拉默V的代码实现
pass