3个版本 (重大变更)
0.3.0 | 2022年10月13日 |
---|---|
0.2.0 | 2022年10月12日 |
0.1.0 | 2022年10月9日 |
#1695 in 数学
28KB
323 行
Rust中的Bootstrap假设检验
描述
有时我们不知道检验统计量的分布是什么,我们真的希望能够进行假设检验,并且我们愿意假设我们拥有的样本代表总体。
这就是Bootstrap假设检验发挥作用的地方。其思想是从零分布(如果H0为真,样本将具有的分布——即如果两个样本来自同一总体)中生成大量样本,然后计算每个样本的检验统计量。这给出了H0下的检验统计量抽样分布。
然后我们可以通过计算样本检验统计量比初始样本检验统计量更“极端”的次数来计算p值。
参考文献
- Bootstrap介绍,Efron和Tibshirani
- Bootstrap假设检验
- p值
- Stats 102A课程第9-2节Bootstrap假设检验,Miles Chen
用法
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