Python中使用scipy.bootstrap计算Pearson相关系数置信区间遇尺寸错误
问题与解决方案
问题背景
需要基于sample_2数据集,使用scipy.stats.bootstrap()在98%置信水平下对Pearson相关系数做区间估计,要求设置随机种子为25,结果存入r_ci(包含置信区间上下界的列表)。直接调用sp.stats.pearsonr时出现x和y尺寸不匹配报错,但实际两个变量都是25行无缺失值。
错误原因
scipy.stats.pearsonr返回的是元组(相关系数,p值),而bootstrap()默认期望统计函数返回单个标量值。当bootstrap处理多返回值时,会引发维度匹配错误。
修正代码
import scipy.stats as sp import pandas as pd import numpy as np # 原数据集生成代码(不可修改sample_2) x = sp.stats.uniform.rvs(loc=-2, scale=10, size=25, random_state=34) y = 2*x - 5 + sp.stats.norm.rvs(loc=0, scale=2, size=25, random_state=13) sample_2 = pd.DataFrame(data=np.array([x, y]).T, columns=["X", "Y"]) # 自定义统计函数:仅返回Pearson相关系数 def pearson_r(x, y): return sp.stats.pearsonr(x, y)[0] # 执行bootstrap估计 boot_strap = sp.stats.bootstrap( (sample_2['X'], sample_2['Y']), pearson_r, confidence_level=0.98, random_state=25 ) # 提取置信区间上下界存入r_ci r_ci = [boot_strap.confidence_interval.low, boot_strap.confidence_interval.high] print(r_ci)
关键说明
- 自定义
pearson_r函数,只返回pearsonr的第一个结果(相关系数),确保bootstrap处理的是标量统计量 - 保持
sample_2完全不变,符合任务要求 - 按要求设置
confidence_level=0.98和random_state=25 - 通过
confidence_interval.low和high更清晰地提取区间边界(也可以用索引[0]和[1],结果一致)
内容的提问来源于stack exchange,提问作者mymoonluna
相关产品推荐
相关产品推荐

