σ (sigma) - Swift编写的统计库
这个库是一系列在Swift中执行的统计计算函数集合。它可以用于Apple设备的Swift应用以及在其他平台上的开源Swift程序。
- 平均值
- 中心矩
- 总体协方差
- 样本协方差
- 样本变异系数
- 频率
- 峰度A
- 峰度B
- 最大值
- 中位数
- 上四分位数
- 下四分位数
- 最小值
- 正态分布
- 正态密度
- 正态分位数
- 皮尔逊系数
- 百分位数
- 分位数
- 等级
- 偏度A
- 偏度B
- 总体标准差
- 样本标准差
- 平均值标准误
- 总和
- 唯一值
- 总体方差
- 样本方差
设置
您可以通过四种方式将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 进行配置
将以下内容添加到你的 Package.swift 文件中,并运行 swift build
。
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "MyApp",
dependencies: [
.package(url: "https://github.com/evgenyneu/SigmaSwiftStatistics.git", from: "9.0.0")
],
targets: [
.target(
name: "MyApp",
dependencies: ["SigmaSwiftStatistics"],
path: "Sources")
]
)
旧版 Swift 版本
如果你使用的是旧版的 Swift,请设置库的先前的版本。
用法
除非你已经使用了文件配置方法,否则将 import SigmaSwiftStatistics
添加到你的源代码中。
平均 / 均值
计算数组中值的算术均值。
注意:
- 对于空数组返回 nil。
- 等同于 Microsoft Excel 和 Google Docs Sheets 中的 AVERAGE。
公式
A = Σ(x) / n
其中
- n 是值的数量。
Sigma.average([1, 3, 8])
// Result: 4
中心矩
计算数据集的中心矩。
注意
- 对于空数组返回 nil。
- 与 Wolfram Alpha 和 "moments" R 软件包中的结果相同。
公式
Σ(x - m)^k / n
其中
- m 是样本均值。
- k 是矩的阶数(0, 1, 2, 3, ...)。
- n 是样本大小。
Sigma.centralMoment([3, -1, 1, 4.1, 4.1, 0.7], order: 3)
// Result: -1.5999259259
总体协方差
计算两个变量 x 和 y 之间的协方差。
注意:
- 如果 x 和 y 数组的值数量不同,则返回 nil。
- 对于空数组返回 nil。
- 与 Microsoft Excel 中的 COVAR 和 COVARIANCE.P 函数以及 Google Docs Sheets 中的 COVAR 函数相同。
公式
cov(x,y) = Σ(x - mx)(y - my) / n
其中
- mx 是第一个变量的总体均值。
- my 是第二个变量的总体均值。
- n 是值总数。
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
样本协方差
计算两个变量 x 和 y 之间的样本协方差。
注意
- 如果 x 和 y 数组的值数量不同,则返回 nil。
- 对于空数组或只包含一个元素的数组返回 nil。
- 与 Microsoft Excel 中的 COVARIANCE.S 函数相同。
公式
cov(x,y) = Σ(x - mx)(y - my) / (n - 1)
其中
- mx 是第一个变量的样本均值。
- my 是第二个变量的样本均值。
- n 是值总数。
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
样本变化系数
基于样本计算变化系数。
注意
- 当数组为空或包含单个值时返回 nil。
- 如果平均值为零则返回
Double.infinity
。 - 与 Wolfram Alfa 一致,并且在 "raster" R 包中(在 "raster" 中表示为百分比)。
公式
CV = s / m
其中
- s 是样本标准差。
- m 是均值。
Sigma.coefficientOfVariationSample([1, 12, 19.5, -5, 3, 8])
// Result: 1.3518226672
频率
返回一个字典,其中键包含输入数组中的数字,值对应这些数字的频率。
Sigma.frequencies([1, 2, 3, 4, 5, 4, 4, 3, 5])
// Result: [2:1, 3:2, 4:3, 5:2, 1:1]
峰度 A
返回一系列数值的 峰度。
注意:
- 如果数据集包含不到 4 个值则返回 nil。
- 如果数据集中的所有值都相同则返回 nil。
- 与 Microsoft Excel 和 Google Docs Sheets 中的 KURT 一致。
公式
Sigma.kurtosisA([2, 1, 3, 4.1, 19, 1.5])
// Result: 5.4570693277
偏度 B
返回一系列数值的 峰度。
注意:
- 如果数据集包含少于2个值,则返回nil。
- 如果数据集中的所有值都相同则返回 nil。
- 与 Wolfram Alpha 和 "moments" R 软件包中的结果相同。
公式
Sigma.kurtosisB([2, 1, 3, 4.1, 19, 1.5])
// Result: 4.0138523409
最大值
返回数组中的最大值。
注意:对于空数组返回nil。
Sigma.max([1, 8, 3])
// Result: 8
中值
从数组中返回中值。
注意:
- 数组为空时返回nil。
- 如果数组项数为偶数,则返回中间两个值的平均值。
- 与Microsoft Excel和Google Docs Sheets中的MEDIAN相同。
Sigma.median([1, 12, 19.5, 3, -5])
// Result: 3
高中值
从数组中返回中值。
注意:
- 数组为空时返回nil。
- 如果数组项数为偶数,则返回中间两个值中的较大值。
Sigma.medianHigh([1, 12, 19.5, 10, 3, -5])
// Result: 10
中位数低值
从数组中返回中值。
注意:
- 数组为空时返回nil。
- 如果数组中有偶数个元素,则返回两个中间值中的较小值。
Sigma.medianLow([1, 12, 19.5, 10, 3, -5])
// Result: 3
最小值
返回数组中的最小值。
注意:对于空数组返回nil。
Sigma.min([7, 2, 3])
// Result: 2
正态分布
返回给定 x
、μ
和 σ
值的正态分布。返回的值是正常曲线左侧到值 x
的面积。
注意:
- 如果
σ
为零或负数,则返回 nil。 - 默认值:
μ = 0
,σ = 1
。 - 与 Excel 中的 NORM.S.DIST、NORM.DIST 和 NORMDIST 函数以及 Google 文档表格中的 NORMDIST 函数(其中
cumulative
参数等于true
)相同。
Sigma.normalDistribution(x: -1, μ: 0, σ: 1)
// Result: 0.1586552539314570
正常密度
返回给定 x
、μ
和 σ
值的正态函数的密度。
注意:
- 如果
σ
为零或负数,则返回 nil。 - 默认值:
μ = 0
,σ = 1
。 - 与 Excel 中的 NORM.S.DIST、NORM.DIST 和 NORMDIST 函数以及 Google 文档表格中的 NORMDIST 函数(其中
cumulative
参数等于false
)相同。
公式
其中
- x 是正态密度函数的输入值。
- μ 是平均值。
- σ 是标准差。
Sigma.normalDensity(x: 0, μ: 0, σ: 1)
// Result: 0.3989422804014327
正态分位数
返回正态分布的量函数(正态分布的逆函数)。p
参数是概率,或者是返回值左侧的正态曲线下的面积。
注意:
- 如果
σ
为零或负数,则返回 nil。 - 如果 p 是负数或大于 1,则返回 nil。
- 如果 p 为 0,则返回
-Double.infinity
;如果 p 为 1,则返回Double.infinity
。 - 默认值:
μ = 0
,σ = 1
。 - 等同于 Excel 函数 NORM.INV, NORM.S.INV 和 NORMINV 以及 Google Docs 表格函数 NORMINV。
Sigma.normalQuantile(p: 0.025, μ: 0, σ: 1)
// -1.9599639845400538
皮尔逊相关系数
计算两个变量 x 和 y 之间的 皮尔逊积矩相关系数。
注意:
- 如果 x 和 y 数组的值数量不同,则返回 nil。
- 对于空数组返回 nil。
- 等同于 Microsoft Excel 和 Google Docs Sheets 中的 CORREL 和 PEARSON 函数。
公式
p(x,y) = cov(x,y) / (σx * σy)
其中
- cov 是总体协方差。
- σ 是总体标准差。
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
百分位数
计算给定数据集中的 百分位数。
注意:
- 当
values
数组为空时,返回 nil。 - 当提供的
percentile
参数为负数或大于 1 时,返回 nil。 - 等同于 Microsoft Excel 中的 PERCENTILE 或 PERCENTILE.INC,以及 Google Docs 表格中的 PERCENTILE。
- 等同于 Hyndman 和 Fan 论文(1996)中第 7 检验样本量方法。
有关更多信息,请参阅 百分位数方法 文档。
// 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)
分位数
九个函数的组合,用于计算与给定概率相对应的样本分位数。这是对 Hyndman 和 Fan 论文(1996)中描述的九种算法的实现。函数的文档基于 R 和维基百科的示例。
注意:
- 数据集为空时返回 nil。
- 概率值超出 [0, 1] 范围时返回 nil。
- 与 R 语言中的
quantile
函数相同。
分位数方法 1
这种方法使用经验分布函数的逆来计算分位数。
Sigma.quantiles.method1([1, 12, 19.5, -5, 3, 8], probability: 0.5)
// Result: 3
分位数方法 2
该方法使用平均化的逆经验分布函数计算分位数。
Sigma.quantiles.method2([1, 12, 19.5, -5, 3, 8], probability: 0.5)
// Result: 5.5
分位数方法 3
Sigma.quantiles.method3([1, 12, 19.5, -5, 3, 8], probability: 0.5)
// Result: 3
分位数方法 4
该方法使用经验分布函数的线性插值。
Sigma.quantiles.method4([1, 12, 19.5, -5, 3, 8], probability: 0.17)
// Result: -4.88
分位数方法 5
该方法在经验分布函数的步长中间值处使用分段线性函数。
Sigma.quantiles.method5([1, 12, 19.5, -5, 3, 8], probability: 0.11)
// Result: -4.04
分位数方法 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 个分位数方法
此方法在 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 个分位数方法
此方法返回的分位数无论 x 的分布如何,都大致无偏中位数。
Sigma.quantiles.method8([1, 12, 19.5, -5, 3, 8], probability: 0.11)
// Result: -4.82
第 9 个分位数方法
如果 x 服从正态分布,此方法返回的分位数大致无偏。
Sigma.quantiles.method9([1, 12, 19.5, -5, 3, 8], probability: 0.10001)
// Result: -4.999625
排名
返回数据集中的值的排名。
注意:
-
接受一个可选的
ties
参数,用于确定如何计算等值 ('ties') 的排名。默认值为.average
。可能值.average
: 使用平均排名。与 Microsoft Excel 和 Google Docs Sheets 中的 RANK.AVG 相同。.min
,.max
: 使用最小/最大排名。值.min
与 Microsoft Excel 和 Google Docs Sheets 中的 RANK 和 RANK.EQ 相同。.first
,.last
: 排名递增/递减。
-
与 R 的排名函数相同。
Sigma.rank([2, 3, 6, 5, 3], ties: .average)
// Result: [1.0, 2.5, 5.0, 4.0, 2.5]
偏度 A
返回数据集的 偏度。
注意:
- 如果数据集包含的值少于3个,则返回nil。
- 如果数据集中的所有值都相同则返回 nil。
- 与Microsoft Excel和Google Docs Sheets中的SKEW相同。
公式
Sigma.skewnessA([4, 2.1, 8, 21, 1])
// Result: 1.6994131524
偏度B
返回数据集的 偏度。
注意:
- 如果数据集包含的值少于3个,则返回nil。
- 如果数据集中的所有值都相同则返回 nil。
- 与Wolfram Alpha中的相同,与Microsoft Excel中的SKEW.P和"moments" R包中的skewness函数相同。
公式
Sigma.skewnessB([4, 2.1, 8, 21, 1])
// Result: 1.1400009992
总体标准差
计算整个总体的标准差。
注意:
- 对于空数组返回 nil。
- 与Microsoft Excel中的STDEVP和STDEV.P以及Google Docs Sheets中的STDEVP相同。
公式
σ = sqrt( Σ( (x - m)^2 ) / n )
其中
- m是总体均值。
- n是总体大小。
Sigma.standardDeviationPopulation([1, 12, 19.5, -5, 3, 8])
// Result: 7.918420858282849
样本标准差
基于样本计算标准差。
注意:
- 当数组为空或包含单个值时返回 nil。
- 与Microsoft Excel中的STDEV和STDEV.S以及Google Docs Sheets中的STDEV相同。
公式
s = sqrt( Σ( (x - m)^2 ) / (n - 1) )
其中
- m 是样本均值。
- n 是样本大小。
Sigma.standardDeviationSample([1, 12, 19.5, -5, 3, 8])
// Result: 8.674195447801869
平均数标准误
计算平均数的标准误。
注意:
- 当数组为空或包含单个值时返回 nil。
公式
SE = s / sqrt(n)
其中
- s 是样本标准差。
- n 是样本大小。
Sigma.standardErrorOfTheMean([1, 12, 19.5, -5, 3, 8])
// Result: 3.5412254627
求和
计算数组的求和。
Sigma.sum([1, 3, 8])
// Result: 12
唯一值
返回一个不含重复值的无排序数组,包含输入数组中出现的所有值。
Sigma.uniqueValues([2, 1, 3, 4, 5, 4, 3, 5])
// Result: [2, 3, 4, 5, 1]
总体方差
计算整个总体的方差。
注意:
- 数组为空时返回nil。
- 与 Microsoft Excel 中的 VAR.P 或 VARPA 以及 Google Docs Sheets 中的 VARP 或 VARPA 相同。
公式
σ^2 = Σ( (x - m)^2 ) / n
其中
- m是总体均值。
- n是总体大小。
Sigma.variancePopulation([1, 12, 19.5, -5, 3, 8])
// Result: 62.70138889
样本方差
根据样本计算方差。
注意:
- 当数组为空或包含单个值时返回 nil。
- 等同于Microsoft Excel中的VAR、VAR.S或VARA,或Google Docs Sheets中的VAR或VARA。
公式
s^2 = Σ( (x - m)^2 ) / (n - 1)
其中
- m 是样本均值。
- n 是样本大小。
Sigma.varianceSample([1, 12, 19.5, -5, 3, 8])
// Result: 75.24166667
欢迎反馈
如果您需要帮助或想要扩展库,请随意创建问题或提交拉取请求。
那些寻求帮助的人,霍格沃茨总会给予帮助。
-- J.K. 罗琳,哈利·波特
贡献者
许可证
Sigma遵循MIT许可证发布。