You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bootstrap方法计算随机数据集斜率及优化自定义Bootstrap函数

自定义Bootstrap函数的修改方案

修改后的Bootstrap斜率估计函数

针对你的需求,直接修改原函数,新增重采样方式选择、窗口长度自定义功能,同时内置斜率计算与置信区间输出逻辑:

import numpy as np

def bootstrap_slope(data, n_boot, window_size=None, replace=True):
    """
    带斜率计算的Bootstrap重采样函数
    参数:
        data: 输入数据集(一维数组)
        n_boot: 重采样次数
        window_size: 重采样窗口长度,默认等于原数据长度
        replace: 是否有放回重采样,默认True(有放回)
    返回:
        slopes: 所有重采样的斜率数组
        ci: 斜率的95%置信区间(下限, 上限)
    """
    data = np.array(data)
    original_len = len(data)
    # 设置默认窗口长度为原数据长度
    if window_size is None:
        window_size = original_len
    # 无放回重采样时,窗口长度不能超过原数据长度
    if not replace and window_size > original_len:
        raise ValueError("无放回重采样时,窗口长度不能超过原数据长度")
    
    slopes = []
    for _ in range(n_boot):
        # 执行重采样
        if replace:
            resampled = np.random.choice(data, size=window_size, replace=True)
        else:
            resampled = np.random.choice(data, size=window_size, replace=False)
        # 构造x轴数组(1到窗口长度)
        x_vals = np.arange(1, window_size + 1)
        # 计算一阶拟合斜率
        slope = np.polyfit(x_vals, resampled, deg=1)[0]
        slopes.append(slope)
    
    slopes = np.array(slopes)
    # 计算95%置信区间(分位数法)
    ci = np.percentile(slopes, [2.5, 97.5])
    return slopes, ci

需求实现说明

  1. 有放回/无放回重采样
    通过replace布尔参数控制,借助np.random.choice的对应参数实现;无放回时自动校验窗口长度,避免超出原数据范围导致报错。

  2. 自定义重采样窗口长度
    新增window_size参数,默认值为原数据长度,可手动指定每次重采样抽取的样本数量。

  3. 斜率计算与置信区间
    每次重采样后,构造x轴为1~window_size的连续数组,用一阶多项式拟合得到斜率;最后通过分位数法计算95%置信区间,若需调整置信水平,修改np.percentile的分位数参数即可(比如90%置信区间用[5, 95])。

使用示例

# 你的数据集
data = (0.045494, 0.065669, 0.073061, 0.104542, 0.296978, 0.498353, 0.503342, 0.515458, 0.660300, 0.663664, 0.677255, 0.724817, 0.805800, 0.899355, 0.987775, 2.121619, 2.165055, 2.196833, 3.265653, 3.479858, 8.702472, 10.070092, 10.720080, 12.896169, 12.912647, 14.244361, 14.287428, 17.337397, 18.903783, 20.940314, 21.404639, 22.234169)

# 示例1:有放回重采样,窗口长度10,1000次迭代
slopes1, ci1 = bootstrap_slope(data, n_boot=1000, window_size=10, replace=True)
print("有放回重采样斜率95%置信区间:", ci1)

# 示例2:无放回重采样,窗口长度20,1000次迭代
slopes2, ci2 = bootstrap_slope(data, n_boot=1000, window_size=20, replace=False)
print("无放回重采样斜率95%置信区间:", ci2)

补充说明

斜率计算也可手动实现最小二乘法,结果与np.polyfit一致:

# 手动计算斜率的替代代码
cov = np.cov(x_vals, resampled)[0, 1]
x_var = np.var(x_vals)
slope = cov / x_var

内容的提问来源于stack exchange,提问作者Adnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:57:42