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

如何用scipy.stats.bootstrap生成男女收入对比的1000个两样本t统计量

错误原因

报错有两个核心原因:

  1. scipy.stats.bootstrap默认使用BCa(偏差校正加速)方法计算置信区间,该方法仅支持单样本统计量,两样本场景需要手动更换支持的方法。
  2. st.ttest_ind返回结果为(t统计量, p值)的元组,而bootstrap要求传入的统计函数必须返回单个标量值,需要额外包装一层提取t统计量。
正确实现代码
import pandas as pd
from scipy import stats as st

# 样例数据
df = pd.DataFrame({'female': {0: 0, 1: 1, 2: 1, 3: 0, 4: 1, 5: 0, 6: 1, 7: 0, 8: 0, 9: 0},
 'income': {0: 23351.08,
  1: 357.04999,
  2: 20385.221,
  3: 12049.17,
  4: 20541.619,
  5: 13206.52,
  6: 17055.73,
  7: 60442.621,
  8: 4499.9902,
  9: 37663.039}})

# 分组提取收入数据
male_income = df.loc[df['female'].eq(0), 'income'].values
female_income = df.loc[df['female'].eq(1), 'income'].values

# 包装统计函数,仅返回t统计量
def t_statistic(group1, group2):
    return st.ttest_ind(group1, group2)[0]

# 调用bootstrap
bootstrap_res = st.bootstrap(
    data=(male_income, female_income),
    statistic=t_statistic,
    n_resamples=1000,
    method='percentile', # 更换为支持两样本的百分位法
    random_state=42 # 固定随机种子方便复现结果
)

# 提取1000个bootstrap得到的t统计量
t_bootstrap_samples = bootstrap_res.bootstrap_distribution
结果说明
  • t_bootstrap_samples为长度1000的数组,每个元素对应一次bootstrap抽样得到的两样本t检验统计量
  • 也可以通过bootstrap_res.confidence_interval获取t统计量的置信区间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:57:03