SwiftyStats 1.1.7

SwiftyStats 1.1.7

strike65维护。



  • 作者
  • strike65

Language Version Unit Tests macOS iOS Build Linux Documentation

SwiftyStats

(完整文档:[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!

  • makemake 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结构(meanvarianceskewnesskurtosis

请始终检查是否返回了NaNnil

可获取的统计信息(更多信息将陆续提供)

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