3个版本 (重大变更)

0.3.0 2022年10月13日
0.2.0 2022年10月12日
0.1.0 2022年10月9日

#1695 in 数学

Apache-2.0

28KB
323

Rust中的Bootstrap假设检验

Build crates.io

描述

有时我们不知道检验统计量的分布是什么,我们真的希望能够进行假设检验,并且我们愿意假设我们拥有的样本代表总体。

这就是Bootstrap假设检验发挥作用的地方。其思想是从零分布(如果H0为真,样本将具有的分布——即如果两个样本来自同一总体)中生成大量样本,然后计算每个样本的检验统计量。这给出了H0下的检验统计量抽样分布。

然后我们可以通过计算样本检验统计量比初始样本检验统计量更“极端”的次数来计算p值。

参考文献

用法

use bootstrap_ht::prelude::*;
use itertools::Itertools;
use rand::prelude::Distribution;
use rand::SeedableRng;
use rand_chacha::ChaCha8Rng;
use rand_distr::StandardNormal;

fn main() {
 let mut rng = ChaCha8Rng::seed_from_u64(42);

 let a = StandardNormal
         .sample_iter(&mut rng)
         .take(100)
         .collect::<Vec<f64>>();
 let b = StandardNormal
         .sample_iter(&mut rng)
         .take(40)
         .map(|x: f64| x + 2.0)
         .collect::<Vec<f64>>();

 let test_statistic_fn = |a: &[f64], b: &[f64]| {
  let a_max = a.iter().copied().fold(f64::NAN, f64::max);
  let b_max = b.iter().copied().fold(f64::NAN, f64::max);
  (a_max - b_max).abs()
 };

 let p_value = bootstrap::two_samples_non_parametric_ht(
  &mut rng,
  &a,
  &b,
  test_statistic_fn,
  bootstrap::PValueType::OneSidedRightTail,
  10_000,
 )
         .unwrap();
 assert_eq!(p_value, 0.0021);
}

依赖项

~0.6–1.3MB
~28K SLoC