#testing #hypothesis #numerical #chi-squared #pearson #t-test #z-test

hyte

适用于Z、T和Pearson卡方检验的假设检验库crate

2个版本

0.1.1 2024年1月9日
0.1.0 2024年1月9日

#551 in 算法

MIT许可证

55KB
770

Hyte 🦀

MIT License Version example workflow

Hyte是一个支持Z、T和Pearson卡方检验的Rust假设检验库crate。

文档 📃 | crates.io 📦 | 源代码 🌿

安装

在您的 Cargo.toml 文件中包含以下内容。

[dependencies]
hyte = "0.1.0"

快速入门

以下内容可折叠,每个都包含帮助您入门的片段。

执行Z检验

单样本Z检验

您可以使用 z::test 函数执行单样本Z检验,该函数接受以下参数

  • data: Vec<Number>
  • expected_mean: Number
  • tail: Tails::LOWERTails::UPPERTails::BOTH
  • print_output: bool

其中 Number 是一个泛型,接受整数和浮点数。以下是一个如何执行下尾单样本Z检验的示例

use hyte::z;
use hyte::utils::Tails;
 
fn main() {
    let data = vec![1, 2, 3, 4, 5];
    let results = z::test(data, 3.5, Tails::LOWER, true).unwrap();
}

如果您需要执行上尾或双尾Z检验,只需将 Tails::UPPERTails::BOTH 变体传递给 tail 即可。

基于数值摘要的单样本Z检验

您还可以使用 z::test_dataless 函数执行Z检验,该函数接受包括观察到的均值、样本大小和总体标准差在内的数值摘要,所有这些都代替了数据。函数 z::test_dataless 接受以下参数

  • observed_mean: Number
  • expected_mean: Number
  • sample_size: u32
  • pop_sd: Number
  • tail: Tails::LOWERTails::UPPERTails::BOTH
  • print_output: bool

以下是一个示例

use hyte::z;
use hyte::utils::Tails;

fn main() {
    let results = z::test_dataless(1.2, 1.0, 30, 0.5, Tails::LOWER, true).unwrap();
}
执行T检验

单样本T检验

您可以使用 t::test 函数进行单样本T检验,该函数需要以下参数

  • data: Vec<Number>
  • expected_mean: Number
  • tail: Tails::LOWERTails::UPPERTails::BOTH
  • print_output: bool

其中 Number 是一个泛型,可以接受整数和浮点数。以下是一个如何进行单样本T检验的例子

use hyte::t;
use hyte::utils::Tails;

fn main() {
    let data = vec![2.5, 2.9, 3.1, 2.6, 2.7, 2.8, 3.0, 3.2];
    let results = t::test(data, 3, Tails::LOWER, true).unwrap();
}

基于数值摘要的单样本T检验

您还可以使用 t::test_dataless 函数进行T检验,该函数接受数值摘要,包括观察均值、样本大小和总体标准差,这些都可以代替数据。该 t::test_dataless 函数需要以下参数

  • observed_mean: Number
  • expected_mean: Number
  • sample_size: u32
  • pop_sd: Number
  • tail: Tails::LOWERTails::UPPERTails::BOTH
  • print_output: bool

以下是一个示例

use hyte::t;
use hyte::utils::Tails;

fn main() {
    let results = t::test_dataless(1.2, 1.0, 30, 0.5, Tails::LOWER, true).unwrap();
}

双样本T检验

Hyte提供了 t::test_two_samples 函数,用于执行双样本T检验。它需要以下参数

  • data1: Vec<Number>
  • data2: Vec<Number>
  • print_output: bool

以下是一个例子

use hyte::t;

fn main() {
    let group1 = vec![20, 22, 19, 20, 21, 20, 19, 21, 22, 18];
    let group2 = vec![22, 24, 23, 24, 25, 23, 24, 23, 22, 24];
    let results = t::test_two_samples(group1, group2, true).unwrap();
}
执行皮尔逊卡方检验

chisquare 模块仅包含一个函数 chisquare::test,该函数可用于执行皮尔逊卡方检验的独立性和拟合优度。它需要以下参数

  • test_type: &str
  • observed_matrix: Matrix<Number>
  • gof_probabilities: Option<Vec<f64>>
  • print_output: bool

其中 Matrix<Number> 是一个枚举,有两个变体:Matrix::TwoDimensional(Vec<Vec<Number>>)Matrix::OneDimensional(Vec<Number>).

独立性检验

要执行独立性检验,必须在 test_type 中传递

  • "toi"
  • Option::None
  • Matrix::TwoDimensional(Vec<Vec<Number>>)

以下是一个例子

use hyte::chisquare;
use hyte::utils::Matrix;

fn main() {
    let observed_frequencies = Matrix::TwoDimensional(vec![vec![762, 327, 468], 
                                                           vec![484, 239, 477]]);
    let results = chisquare::test(
        "toi", 
        observed_frequencies, 
        None, 
        true
    ).unwrap();
}

拟合优度

要执行拟合优度检验,必须在 test_type 中传递

  • "gof"
  • Option::Some(f64)
  • 矩阵::一维(Vec<Number>)observed_matrix

以下是一个例子

use hyte::chisquare;
use hyte::utils::Matrix;

fn main() {
    let results = chisquare::test(
        "gof",
        Matrix::OneDimensional(vec![30, 40, 30]),
        Some(vec![0.25, 0.5, 0.25]),
        true
    ).unwrap();
}
结束测试

使用 conclude 结束,并自定义显著性水平

所有测试结果的实例,如 ZResultTResultChiSquareResult,都有一个返回 Conclusion 变体(RejectDoNotReject 之一)的 conclude 方法。该方法接受两个参数

  • 显著性水平:f64
  • print_output: bool
use hyte::z;
use hyte::utils::Tails;

fn main() {
    let results = z::test(vec![1, 2, 3, 4, 5], 3.5, Tails::LOWER, true).unwrap();
    let conclusion = results.conclude(0.1, true);
}

conclude 会检查分配给 self.p 的 p 值是否超过了显著性水平。如果 self.p < significance_level,则 conclude 将返回 Reject 变体。否则,它将返回 DoNotReject 变体。

使用 conclude_by_convention 习惯性地结束

conclude_by_conventionconclude 的一个替代方案。它假设显著性水平为 0.05,这在统计学中被广泛认为是合适的默认值。

use hyte::z;
use hyte::utils::Tails;

fn main() {
    let results = z::test(vec![1, 2, 3, 4, 5], 3.5, Tails::LOWER, true).unwrap();
    let conclusion = results.conclude_by_convention(true);
}

获取帮助

该crate的文档可在 docs.rs/hyte 找到。或者,您可以通过调用 help 函数将简短的说明书打印到标准输出。

use hyte::help;

fn main() {
    help();
}

依赖关系

~5MB
~95K SLoC