有放回重复抽样的相关系数存储问题求助
自助法相关系数数组存储问题修正
你的代码存在几处关键错误,导致无法累积存储所有相关系数,以下是问题说明和修正方案:
核心错误点
np.random.choice参数混乱:原代码参数写法错误,有放回抽样需明确指定抽样数量为原数据集行数,即size=dataset.shape[0]- 变量名拼写不一致:定义的
sample_datasets和后续使用的sample_dataset名称不匹配,会导致逻辑错误或报错 - 多余内层循环:无需遍历样本数据集的每个元素,每个自助样本集仅需计算一次相关系数
np.append用法错误:np.append需要传入原数组和待添加元素,直接写np.append(corr)会每次新建仅含当前值的数组,覆盖之前的结果
修正后的代码
import numpy as np # 假设num_datasets是你设定的自助抽样次数,dataset为原始数据集 correlation = np.array([]) num_datasets = 1000 # 示例值,替换为你的实际抽样次数 for _ in range(num_datasets): # 正确执行有放回抽样:从数据集行索引中随机选择,数量与原数据集行数一致 sample_dataset = dataset[np.random.choice(dataset.shape[0], size=dataset.shape[0], replace=True)] # 计算当前样本集的皮尔逊相关系数 corr = np.corrcoef(sample_dataset[:, 0], sample_dataset[:, 1])[0, 1] # 将新的相关系数追加到数组中 correlation = np.append(correlation, corr) print(correlation.shape) # 输出应为(num_datasets,),说明已存储所有相关系数
后续操作示例
绘制相关系数直方图
import matplotlib.pyplot as plt plt.hist(correlation, bins=30, edgecolor='black') plt.xlabel('相关系数') plt.ylabel('频数') plt.title('自助法相关系数分布直方图') plt.show()
计算95%置信区间
confidence_interval = np.percentile(correlation, [2.5, 97.5]) print(f"95%置信区间:{confidence_interval}")
内容的提问来源于stack exchange,提问作者riah w
相关产品推荐
相关产品推荐

