σ (sigma) - 使用 Swift 编写的统计库

Carthage compatible CocoaPods Version License Platform

该库是一系列使用 Swift 执行统计计算的函数集合。它可以在 Apple 设备的 Swift 应用程序中使用,也可以在其他平台上的开源 Swift 程序中使用。

Statistical library for Swift

设置 (Setup)

有四种方法可以将 Sigma 添加到您的项目中。

添加源代码 (iOS 7+)

只需将 SigmaDistrib.swift 文件添加到您的项目中即可。

使用 Carthage 设置 (iOS 8+)

或者,将 github "evgenyneu/SigmaSwiftStatistics" ~> 9.0 添加到您的 Cartfile 并运行 carthage update

使用 CocoaPods 设置 (iOS 8+)

如果您正在使用 CocoaPods,请将此文本添加到您的 Podfile 并运行 pod install

use_frameworks!
target 'Your target name'
pod 'SigmaSwiftStatistics', '~> 9.0'

使用 Swift Package Manager 设置

旧版本 Swift

如果您使用旧版本的 Swift,请设置一个早期版本的库。

用法 (Usage)

import SigmaSwiftStatistics 添加到您的源代码中,除非您使用了文件设置方法。

平均值 (Average) / 均值 (mean)

计算数组中值的算术平均值

注意 (Note):

公式 (Formula)

A = Σ(x) / n

其中 (Where)

Sigma.average([1, 3, 8])
// Result: 4

中心矩 (Central moment)

计算数据集的中心矩

注意 (Note)

公式 (Formula)

Σ(x - m)^k / n

其中 (Where)

Sigma.centralMoment([3, -1, 1, 4.1, 4.1, 0.7], order: 3)
// Result: -1.5999259259

总体协方差 (Covariance of a population)

计算两个变量 x 和 y 之间整个总体的协方差

注意 (Note):

公式 (Formula)

cov(x,y) = Σ(x - mx)(y - my) / n

其中 (Where)

let x = [1, 2, 3.5, 3.7, 8, 12]
let y = [0.5, 1, 2.1, 3.4, 3.4, 4]
Sigma.covariancePopulation(x: x, y: y)
// Result: 4.19166666666667

样本协方差 (Covariance of a sample)

计算两个变量 x 和 y 之间的样本协方差

注意 (Note)

公式 (Formula)

cov(x,y) = Σ(x - mx)(y - my) / (n - 1)

其中 (Where)

let x = [1, 2, 3.5, 3.7, 8, 12]
let y = [0.5, 1, 2.1, 3.4, 3.4, 4]
Sigma.covarianceSample(x: x, y: y)
// Result: 5.03

样本变异系数 (Coefficient of variation of a sample)

计算基于样本的变异系数

注意 (Note)

公式 (Formula)

CV = s / m

其中 (Where)

Sigma.coefficientOfVariationSample([1, 12, 19.5, -5, 3, 8])
// Result: 1.3518226672

频率 (Frequencies)

返回一个字典,其中键包含来自输入数组的数字,值对应于这些数字的频率。

Sigma.frequencies([1, 2, 3, 4, 5, 4, 4, 3, 5])
// Result: [2:1, 3:2, 4:3, 5:2, 1:1]

峰度 A (Kurtosis A)

返回一系列数字的峰度

注意 (Note):

公式 (Formula)

Kurtosis formula

Sigma.kurtosisA([2, 1, 3, 4.1, 19, 1.5])
// Result: 5.4570693277

峰度 B (Kurtosis B)

返回一系列数字的峰度

注意 (Note):

公式 (Formula)

Kurtosis formula

Sigma.kurtosisB([2, 1, 3, 4.1, 19, 1.5])
// Result: 4.0138523409

最大值 (Max)

返回数组中的最大值。

注意:对于空数组,返回 nil。

Sigma.max([1, 8, 3])
// Result: 8

中位数 (Median)

返回数组中的中位数

注意 (Note):

Sigma.median([1, 12, 19.5, 3, -5])
// Result: 3

高位中位数 (Median high)

返回数组中的中位数

注意 (Note):

Sigma.medianHigh([1, 12, 19.5, 10, 3, -5])
// Result: 10

低位中位数 (Median low)

返回数组中的中位数

注意 (Note):

Sigma.medianLow([1, 12, 19.5, 10, 3, -5])
// Result: 3

最小值 (Min)

返回数组中的最小值。

注意:对于空数组,返回 nil。

Sigma.min([7, 2, 3])
// Result: 2

正态分布 (Normal distribution)

返回给定 xμσ 值的正态分布。 返回值是正态曲线下到值 x 左侧的面积。

注意 (Note):

Sigma.normalDistribution(x: -1, μ: 0, σ: 1)
// Result: 0.1586552539314570

正态密度 (Normal density)

返回给定 xμσ 值的正态函数的密度。

注意 (Note):

公式 (Formula)

Nodemal density function

其中 (Where)

Sigma.normalDensity(x: 0, μ: 0, σ: 1)
// Result: 0.3989422804014327

正态分位数 (Normal quantile)

返回 正态分布的分位数函数(正态分布的逆函数)。 p 参数是概率,或者是正态曲线下到返回值左侧的面积。

注意 (Note):

Sigma.normalQuantile(p: 0.025, μ: 0, σ: 1)
// -1.9599639845400538

皮尔逊相关系数 (Pearson correlation coefficient)

计算两个变量 x 和 y 之间的皮尔逊积矩相关系数

注意 (Note):

公式 (Formula)

p(x,y) = cov(x,y) / (σx * σy)

其中 (Where)

let x = [1, 2, 3.5, 3.7, 8, 12]
let y = [0.5, 1, 2.1, 3.4, 3.4, 4]
Sigma.pearson(x: x, y: y)
// Result: 0.843760859352745

百分位数 (Percentile)

计算给定数据集的百分位数

注意 (Note):

有关更多信息,请参见百分位数方法文档。

// Calculate 40th percentile
Sigma.percentile([35, 20, 50, 40, 15], percentile: 0.4)
// Result: 29

// Same as
Sigma.quantiles.method7([35, 20, 50, 40, 15], probability: 0.4)

分位数 (Quantiles)

九个函数的集合,用于计算对应于给定概率的样本分位数。 这是 Hyndman 和 Fan 论文 (1996)中描述的九种算法的实现。 这些函数的文档基于 RWikipedia

注意 (Note):

分位数方法 1 (Quantile method 1)

此方法使用经验分布函数的逆函数计算分位数。

Sigma.quantiles.method1([1, 12, 19.5, -5, 3, 8], probability: 0.5)
// Result: 3

分位数方法 2 (Quantile method 2)

此方法使用带有平均的倒置经验分布函数。

Sigma.quantiles.method2([1, 12, 19.5, -5, 3, 8], probability: 0.5)
// Result: 5.5

分位数方法 3 (Quantile method 3)

Sigma.quantiles.method3([1, 12, 19.5, -5, 3, 8], probability: 0.5)
// Result: 3

分位数方法 4 (Quantile method 4)

该方法使用经验分布函数的线性插值。

Sigma.quantiles.method4([1, 12, 19.5, -5, 3, 8], probability: 0.17)
// Result: -4.88

分位数方法 5 (Quantile method 5)

此方法使用分段线性函数,其中结点是经验分布函数步长中点的值。

Sigma.quantiles.method5([1, 12, 19.5, -5, 3, 8], probability: 0.11)
// Result: -4.04

分位数方法 6 (Quantile method 6)

此方法在 Microsoft Excel (PERCENTILE.EXC)、Minitab 和 SPSS 中实现。 它使用 [0,1] 上均匀分布的顺序统计量的期望的线性插值。

Sigma.quantiles.method6([1, 12, 19.5, -5, 3, 8], probability: 0.1999)
// Result: -2.6042

分位数方法 7 (Quantile method 7)

此方法在 S、Microsoft Excel (PERCENTILE 或 PERCENTILE.INC) 和 Google Docs Sheets (PERCENTILE) 中实现。 它使用 [0, 1] 上均匀分布的顺序统计量的模式的线性插值。

Sigma.quantiles.method7([1, 12, 19.5, -5, 3, 8], probability: 0.00001)
// Result: -4.9997

分位数方法 8 (Quantile method 8)

该方法返回的分位数大致是中位数无偏的,无论 x 的分布如何。

Sigma.quantiles.method8([1, 12, 19.5, -5, 3, 8], probability: 0.11)
// Result: -4.82

分位数方法 9 (Quantile method 9)

如果 x 服从正态分布,则此方法返回的分位数对于预期的顺序统计量大致是无偏的。

Sigma.quantiles.method9([1, 12, 19.5, -5, 3, 8], probability: 0.10001)
// Result: -4.999625

排名 (Rank)

返回数据集中值的排名

注意 (Note):

Sigma.rank([2, 3, 6, 5, 3], ties: .average)
// Result: [1.0, 2.5, 5.0, 4.0, 2.5]

偏度 A (Skewness A)

返回数据集的偏度

注意 (Note):

公式 (Formula)

Skewness formula

Sigma.skewnessA([4, 2.1, 8, 21, 1])
// Result: 1.6994131524

偏度 B (Skewness B)

返回数据集的偏度

注意 (Note):

公式 (Formula)

Skewness formula

Sigma.skewnessB([4, 2.1, 8, 21, 1])
// Result: 1.1400009992

总体标准差 (Standard deviation of a population)

计算整个总体的标准差

注意 (Note):

公式 (Formula)

σ = sqrt( Σ( (x - m)^2 ) / n )

其中 (Where)

Sigma.standardDeviationPopulation([1, 12, 19.5, -5, 3, 8])
// Result: 7.918420858282849

样本标准差 (Standard deviation of a sample)

计算基于样本的标准差

注意 (Note):

公式 (Formula)

s = sqrt( Σ( (x - m)^2 ) / (n - 1) )

其中 (Where)

Sigma.standardDeviationSample([1, 12, 19.5, -5, 3, 8])
// Result: 8.674195447801869

均值的标准误差 (Standard error of the mean)

计算均值的标准误差

注意 (Note):

公式 (Formula)

SE = s / sqrt(n)

其中 (Where)

Sigma.standardErrorOfTheMean([1, 12, 19.5, -5, 3, 8])
// Result: 3.5412254627

总和 (Sum)

计算数组中值的总和。

Sigma.sum([1, 3, 8])
// Result: 12

唯一值 (Unique values)

返回一个未排序的数组,其中包含输入数组中出现的所有值,但不包含重复项。

Sigma.uniqueValues([2, 1, 3, 4, 5, 4, 3, 5])
// Result: [2, 3, 4, 5, 1]

总体方差 (Variance of a population)

计算整个总体的方差

注意 (Note):

公式 (Formula)

σ^2 = Σ( (x - m)^2 ) / n

其中 (Where)

Sigma.variancePopulation([1, 12, 19.5, -5, 3, 8])
// Result: 62.70138889

样本方差

基于样本计算 方差

注意 (Note):

公式 (Formula)

s^2 = Σ( (x - m)^2 ) / (n - 1)

其中 (Where)

Sigma.varianceSample([1, 12, 19.5, -5, 3, 8])
// Result: 75.24166667

欢迎提供反馈

如果您需要帮助或想扩展此库,请随时创建 issue 或提交 pull request。

只要你开口,霍格沃茨永远会给你提供帮助。

-- J.K. 罗琳,《哈利·波特》

贡献者

许可

Sigma 在 MIT 许可证 下发布。