(完整文档:[https://strike65.github.io/SwiftyStats/docs/](https://strike65.github.io/SwiftyStats/docs/))
SwiftyStats是一个完全用Swift编写的框架,它大量使用了泛型类型。SwiftyStats包含常用的统计过程。
这是一个定期开发并且出于热情而非需求而创建的框架。
重要
由于许多更改和改进,很可能会发现使用旧版本(早于1.1.0)创建的项目在更新到1.1.0版本后需要修改。这一点尤其体现在命名空间的使用上。因此,概率分布的调用约定已改变。诸如`pdfStudentTDist(_:_:_:)`之类的旧功能已被标记为过时,并将被在后续版本中删除。新的调用约定看起来像`SSProbDist.StudentT.pdf()`。
Swift 5
从版本1.1.1开始,SwiftyStats与Swift 5.0兼容。如果您需要Swift 4.*,请使用版本1.1.0。
概览
SwiftyStats基于类SSExamine
。该类封装了要处理的数据并提供描述性统计。原则上,一个`SSExamine`实例可以包含任何类型的数据。可用的统计指标当然取决于数据的类型。
提供以下“命名空间”/类(例如):
SSExamine
(类)SSHypothesisTesting
(枚举)SSProbDist
(枚举)SSDataFrame
实例封装数据集。您可以将SSDataFrame
对象的结构想象为一个表:表的列对应于单个数据集,行的对应于数据集中的数据。SSCrossTab
包含了一个带有常规结构(如 n x m 矩阵)的交叉表,并提供所需的频率比较统计信息(卡方、Phi、残差等)。
标准 Swift 类型(Array
、浮点类型、String
)有一些扩展。
使用 Xcode
附带的 Xcode 项目包含四个目标
- SwiftyStats(用于 macOS)
- SwiftyStatsMobile(用于 iOS)
- SwiftyStatsTests(测试套件)
- SwiftStatsCLTest(一个命令行演示)
每个目标都必须单独构建(即没有定义依赖项)!
除了这些,还添加了一个 Playground,用于
- 测试框架并
- 进行原型设计
Swift 类型检查器问题
由于对泛型的广泛支持,类型检查器运行缓慢,编译时间较长。因此,代码在某些地方看起来“不美”,因为必须简化“复杂”表达式(如 (z1 + z1 - w) / (z1 * w)
)。
如何安装
CocoaPods(Mac 用户推荐)
CocoaPods 是将 SwiftyStats 添加到项目的首选方式
$> cd <YOUR_PROJECT_FOLDER>
$> vi Podfile
您的 Podfile 应该看起来像这样
target 'YOURPROJECT' do
use_frameworks!
pod 'SwiftyStats'
end
如果您必须使用低于 4.2 的 Swift 版本,请将 pod 'SwiftyStats'
行替换为
...
pod 'SwiftyStats', '1.1.1'
...
保存您的更改,然后运行
$ pod install
并等待。
Swift 包管理器(适用于 Linux)推荐使用
Linux软件包仍在开发中,被认为是不稳定的。
编辑您的Package.swift
文件
import PackageDescription
// for Swift 5
let version = "1.1.6"
// for earlier versions:
// let version = "1.1.1"
let package = Package(
name: "<YOUR_PACKAGE_NAME>",
dependencies: [
.package(url: "https://github.com/strike65/SwiftyStats", from: version)
]
)
重新构建您的项目。
有关Swift包管理器的更多信息,请点击此处
从命令行构建Swift模块
克隆 仓库到您选择的目录,然后进入该目录。
您的系统上必须有Swift!
make
或make debug
使用调试配置构建模块make release
使用发布配置构建模块make test
构建模块并执行一些测试make clean
重置构建过程
测试
集成的测试套件使用与SwiftyStats计算出的结果进行比较的数值数据。比较数据使用常见的计算机代数系统和数值软件生成。
如何使用
import SwiftyStats
// example data
let data: Array<Double> = [3.14,1.21,5.6]
// because our data are double valued items, the parameter "characterSet" is ignored
let test = SSExamine<Double, Double>.init(withObject: data, levelOfMeasurement: .interval, characterSet: nil)
// prints out the arithmetic mean
print("\(test.arithmeticMean)")
// you can use the class to analyze strings too:
let testString = "This string must be analyzed!"
// in this case, only characters contained in CharacterSet.alphanumerics are added
let stringAnalyze = VTExamine<String>(withObject: data, levelOfMeasurement: .nominal, characterSet: CharacterSet.alphanumerics)
print("\(stringAnalyze.frequency("i")")
// print out the 95% quantile of the Student T distribution
do {
let q = try SSProbDist.StudentT.quantile(p: 0.95, degreesOfFreedom: 21)
print("\(q)")
}
catch {
print(error.localizedDescription)
}
概率分布通常在以某些参数(如“自由度”、“形状”或“均值”)表示的相对狭窄的条件下定义。对于每个分布,都定义了以下函数:
- cdf: 累计分布函数
- pdf: 概率密度函数
- quantile: 逆累计分布函数
- para: 返回一个
SSContProbDistParams
结构(mean
,variance
,skewness
,kurtosis
)
请始终检查是否返回了
NaN
或nil
。
可获取的统计信息(更多信息将陆续提供)
SSExamine
- 算术平均值
- 众数
- 最常见值
- 最稀少值
- 分位数(q:)
- 四分位数
- 几何平均值
- 调和平均值
- 反调和平均值
- 幂平均(order:)
- 截尾平均值(alpha:)
- 温莎平均值(alpha:)
- gastwirth
- 中位数
- 乘积
- 对数乘积
- 最大值
- 最小值
- 极差
- 四分差
- 相对四分距
- 中间值
- 四分位距
- 分位数距(lowerQuantile:upperQuantile:)
- 方差(type:)
- 标准差(type:)
- 标准误
- 熵
- 相对熵
- Herfindahl指数
- concentration
- 基尼系数
- 基尼标准化系数
- CR()
- 正态置信区间(alpha:populationSD:)
- Student T 置信区间(alpha:)
- 均值置信区间
- 变异系数
- 变异系数
- 均值差异
- 中数绝对偏差(center:scaleFactor:)
- 中数绝对偏差(center:)
- 均值相对差异
- 半方差(type:)
- 矩(r:type:)
- 自相关(n:)
- 偏度过剩
- 偏度
- 偏度类型
- 偏度
- 偏度类型
- 是否存在异常值(testType:)
- 异常值(alpha:max:testType:)
- 是否服从高斯分布
- 检测分布(targetDistribution:)
- 箱线图
- 将元素作为字符串(withDelimiter:asRow:encloseElementsBy:)
- 将元素作为数组(sortOrder:)
- 唯一元素(sortOrder:)
- 频率表(sortOrder:)
- 累积频率表(format:)
- 经验累积分布函数(_:)
- 最小频率
- 最大频率
SSCrossTab
- 行数
- 列数
- 行总和
- 列总和
- 行总和(row:)
- 行总和(rowName:)
- 列总和(column:)
- 列总和(columnName:)
- 总和
- 行总和(rowTotal())
- 列总和(colummTotal())
- 最大行总和
- 最大单元格数(atColumn:)
- 最大单元格数(atRow:)
- 相对总频率(row:column:)
- 相对总频率(rowName:columnName:)
- 相对行频率(row:column:)
- 相对列频率(row:column:)
- 相对行边际频率(row:)
- 相对列边际频率(column:)
- 期望频率(row:column:)
- 期望频率(rowName:columnName:)
- 残差(row:column:)
- 标准化残差(row:column:)
- 调整残差(row:column:)
- 自由度
- 卡方
- 卡方似然比
- 卡方Yates
- 协方差
- pearsonR
- 卡方MH
- phi
- ccont
- 系数
- cramerV
- lambda_C_R()
- lambda_R_C()
- r0
- r1
概率函数(cdf,pdf,分位数,para - see above)
- Beta
- 二项式
- 柯西
- 指数
- 指数
- 卡方检验(中心和偏心)
- F比(中心和偏心)
- 伽马分布
- 高斯分布
- 拉普拉斯分布
- 对数正态分布
- 逻辑分布
- 帕累托分布
- 二项式
- 泊松分布
- 瑞利分布
- 学生t分布
- 非中心t分布
- 三角形分布
- 参数为两个的三角形分布
- 均匀分布
- Wald逆正态分布
- 威布尔分布
- 圆周分布
SSHypothesisTesting
#####均值相等性
- twoSampleTTest(data1:data2:alpha:)
- twoSampleTTest(sample1:sample2:alpha:)
- oneSampleTTest(sample:mean:alpha:)
- oneSampleTTEst(data:mean:alpha:)
- matchedPairsTTest(set1:set2:alpha:)
- matchedPairsTTest(data1:data2:alpha:)
- oneWayANOVA(data:alpha:)
- oneWayANOVA(data:alpha:)
- oneWayANOVA(dataFrame:alpha:)
- multipleMeansTest(dataFrame:alpha:)
- multipleMeansTest(data:alpha:)
- multipleMeansTest(data:alpha:)
- tukeyKramerTest(dataFrame:alpha:)
- tukeyKramerTest(data:alpha:)
- scheffeTest(dataFrame:alpha:)
- bonferroniTest(dataFrame:)
#####自相关
- autocorrelationCoefficient(array:lag:)
- autocorrelation(array:)
#####NPAR 测试
- ksGoFTest(array:targetDistribution:)
- adNormalityTest(data:alpha:)
- mannWhitneyUTest(set1:set2:)
- wilcoxonMatchedPairs(set1:set2:)
- signTest(set1:set2:)
- binomialTest(numberOfSuccess:numberOfTrials:probability:alpha:alternative:)
- binomialTest(data:characterSet:testProbability:successCodedAs:alpha:alternative:)
- binomialTest(data:testProbability:successCodedAs:alpha:alternative:)
- kolmogorovSmirnovTwoSampleTest(set1:set2:alpha:)
- waldWolfowitzTwoSampleTest(set1:set2:)
- kruskalWallisHTest(data:alpha:)
#####异常值
- grubbsTest(array:alpha:)
- esdOutlierTest(array:alpha:maxOutliers:testType:)
#####随机性
- runsTest(array:alpha:useCuttingPoint:userDefinedCuttingPoint:alternative:)
#####方差相等性
- bartlettTest(array:alpha:)
- leveneTest(array:testType:alpha:)
- chiSquareVarianceTest(array:nominalVariance:alpha:)
- fTestVarianceEquality(data1:data2:alpha:)
LICENSE
本框架在 GNU GPL 3 许可下发布
版权所有 2017 - 2020 strike65