基于围巾数据集的多重相关性分析及相关技术疑问
关于围巾数据集相关性分析的两个问题解答
背景概述
你正在处理围巾生产数据集,核心字段包括:
Drawing Code:款式识别码Q.ty:生产数量Price:单价(预测目标)Final Price:总价(数量×单价)Drawing Class:是否含数码印花(1=有,0=无)Area (cm^2):围巾面积(由长×宽计算)Material:围巾材质
为预测单价,你选取变量构建了新数据集:
df1 = df[['Q.ty','Price', 'Area (cm^2)', 'Drawing Class', 'Material Class']]
对Drawing Class和Material Class做独热编码后,通过热力图计算皮尔逊相关系数,但未发现变量间存在强线性相关,进而提出两个问题。
问题1:Python中能否计算三个以上变量的多重相关系数?
可以。多重相关系数(复相关系数) 用于衡量单个变量与一组其他变量之间的整体线性关联程度,Python中可以通过statsmodels库实现,也可手动计算。
实现示例(以Price为因变量,其余变量为自变量)
import statsmodels.api as sm # 准备数据:提取自变量和因变量 X = df1.drop('Price', axis=1) y = df1['Price'] # 添加常数项(线性回归要求) X = sm.add_constant(X) # 拟合多元线性回归模型 model = sm.OLS(y, X).fit() # 计算复相关系数R(R²的平方根,取值0~1,越接近1关联越强) multiple_r = model.rsquared ** 0.5 print(f"多重相关系数R: {multiple_r:.4f}")
复相关系数的平方(model.rsquared)就是回归模型的决定系数,代表自变量组能解释因变量变异的比例。
问题2:分析不同类型变量间的相关性是否合理?
是否合理取决于变量类型和选用的相关性计算方法,不能一概而论:
- 数值变量vs数值变量:用皮尔逊相关系数完全合理,这是热力图默认的计算方式,适合衡量线性关联。
- 数值变量vs二分类变量(如
Drawing Class):可以用点二列相关系数,或对二分类变量独热编码后用皮尔逊相关(二者结果等价),这种分析是合理的,能反映类别差异对数值变量的线性影响。 - 数值变量vs多分类变量(如
Material Class):- 若用独热编码后计算单个哑变量与数值变量的皮尔逊相关,仅能反映该类别与基准类别对数值变量的差异,解释性有限,但并非不合理;
- 更合适的方法是用方差分析(ANOVA) 检验不同类别下数值变量的均值是否存在显著差异,或用互信息衡量变量间的非线性关联。
- 分类变量vs分类变量:用皮尔逊相关系数完全不合理,此时应选用卡方检验(衡量独立性)、互信息或克莱姆V系数来分析关联程度。
你之前用热力图计算独热编码后所有变量的皮尔逊相关,仅能覆盖部分变量组合的合理分析,对于多分类变量和分类变量间的关联,需要更换方法才能得到合理结论。
内容的提问来源于stack exchange,提问作者Federico Mondaini
相关产品推荐
相关产品推荐

