用 Swift 编写的用于统计计算的函数集合

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

迦太基兼容
可可豆荚版本
许可证
平台

该库是在 Swift 中执行统计计算的函数集合。它可以用于苹果设备的 Swift 应用程序以及其他平台上的开源 Swift 程序。
Swift 统计库

设置

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

添加源 (iOS 7+)

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

使用迦太基 (iOS 8+) 进行设置

或者,添加到您的购物车文件并运行 .github "evgenyneu/SigmaSwiftStatistics" ~> 9.0carthage update

使用 CocoaPods (iOS 8+) 进行设置

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

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

使用 Swift 包管理器进行设置

Legacy Swift versions

Setup a previous version of the library if you use an older version of Swift.

Usage

Add to your source code unless you used the file setup method.import SigmaSwiftStatistics

Average / mean

Computes arithmetic mean of values in the array.

Note:

  • Returns nil for an empty array.
  • Same as AVERAGE in Microsoft Excel and Google Docs Sheets.

Formula

A = Σ(x) / n

Where:

  • n is the number of values.
Sigma.average([1, 3, 8])
// Result: 4
Swift

Central moment

Computes central moment of the dataset.

Note:

  • Returns nil for an empty array.
  • Same as in Wolfram Alpha and "moments" R package.

Formula

Σ(x - m)^k / n

Where:

  • m is the sample mean.
  • k is the order of the moment (0, 1, 2, 3, ...).
  • n is the sample size.
Sigma.centralMoment([3, -1, 1, 4.1, 4.1, 0.7], order: 3)
// Result: -1.5999259259
Swift

Covariance of a population

Computes covariance of the entire population
between two variables: x and y.

Note:

  • Returns nil if arrays x and y have different number of values.
  • Returns nil for empty arrays.
  • Same as COVAR and COVARIANCE.P functions in Microsoft Excel and COVAR in Google Docs Sheets.

Formula

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

Where:

  • mx is the population mean of the first variable.
  • my is the population mean of the second variable.
  • n is the total number of values.
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
Swift

Covariance of a sample

Computes sample covariance between two variables: x and y.

Note:

  • Returns nil if arrays x and y have different number of values.
  • Returns nil for empty arrays or arrays containing a single element.
  • Same as COVARIANCE.S function in Microsoft Excel.

Formula

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

Where:

  • mx is the sample mean of the first variable.
  • my is the sample mean of the second variable.
  • n is the total number of values.
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
Swift

Coefficient of variation of a sample

Computes coefficient of variation based on a sample.

Note:

  • Returns nil when the array is empty or contains a single value.
  • Returns if the mean is zero.Double.infinity
  • Same as in Wolfram Alfa and in "raster" R package (expressed as a percentage in "raster").

Formula

CV = s / m

Where:

  • s is the sample standard deviation.
  • m is the mean.
Sigma.coefficientOfVariationSample([1, 12, 19.5, -5, 3, 8])
// Result: 1.3518226672
Swift

Frequencies

Returns a dictionary with the keys containing the numbers from the input array and the values corresponding to the frequencies of those numbers.

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

Kurtosis A

Returns the kurtosis of a series of numbers.

Note:

  • Returns nil if the dataset contains less than 4 values.
  • Returns nil if all the values in the dataset are the same.
  • Same as KURT in Microsoft Excel and Google Docs Sheets.

Formula

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

Kurtosis B

Returns the kurtosis of a series of numbers.

Note:

  • Returns nil if the dataset contains less than 2 values.
  • Returns nil if all the values in the dataset are the same.
  • Same as in Wolfram Alpha and "moments" R package.

Formula

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

Max

Returns the maximum value in the array.

Note: returns nil for an empty array.

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

Median

Returns the median value from the array.

Note:

  • Returns nil when the array is empty.
  • Returns the mean of the two middle values if there is an even number of items in the array.
  • Same as MEDIAN in Microsoft Excel and Google Docs Sheets.
Sigma.median([1, 12, 19.5, 3, -5])
// Result: 3
Swift

Median high

Returns the median value from the array.

Note:

  • Returns nil when the array is empty.
  • Returns the higher of the two middle values if there is an even number of items in the array.
Sigma.medianHigh([1, 12, 19.5, 10, 3, -5])
// Result: 10
Swift

Median low

Returns the median value from the array.

Note:

  • Returns nil when the array is empty.
  • Returns the lower of the two middle values if there is an even number of items in the array.
Sigma.medianLow([1, 12, 19.5, 10, 3, -5])
// Result: 3
Swift

Min

Returns the minimum value in the array.

Note: returns nil for an empty array.

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

Normal distribution

Returns the normal distribution for the given values of , and . The returned value is the area under the normal curve to the left of the value .xμσx

Note:

  • Returns nil if σ is zero or negative.
  • Defaults: , .μ = 0σ = 1
  • Same as NORM.S.DIST, NORM.DIST and NORMDIST Excel functions and NORMDIST function in Google Docs sheet with argument equal to .cumulativetrue
Sigma.normalDistribution(x: -1, μ: 0, σ: 1)
// Result: 0.1586552539314570
Swift

Normal density

Returns density of the normal function for the given values of , and .xμσ

Note:

  • Returns nil if σ is zero or negative.
  • Defaults: , .μ = 0σ = 1
  • Same as NORM.S.DIST, NORM.DIST and NORMDIST Excel functions and NORMDIST function in Google Docs sheet with argument equal to .cumulativefalse

Formula

Nodemal density function

Where:

  • x is the input value of the normal density function.
  • μ is the mean.
  • σ is the standard deviation.
Sigma.normalDensity(x: 0, μ: 0, σ: 1)
// Result: 0.3989422804014327
Swift

Normal quantile

Returns the quantile function for the normal distribution (the inverse of normal distribution). The argument is the probability, or the area under the normal curve to the left of the returned value.p

Note:

  • Returns nil if σ is zero or negative.
  • Returns nil if p is negative or greater than one.
  • Returns if p is zero, and if p is one.-Double.infinityDouble.infinity
  • Defaults: , .μ = 0σ = 1
  • Same as NORM.INV, NORM.S.INV and NORMINV Excel functions and NORMINV, NORMSINV Google Docs sheet functions.
Sigma.normalQuantile(p: 0.025, μ: 0, σ: 1)
// -1.9599639845400538
Swift

Pearson correlation coefficient

Calculates the
Pearson product-moment correlation coefficient
between two variables: x and y.

Note:

  • Returns nil if arrays x and y have different number of values.
  • Returns nil for empty arrays.
  • Same as CORREL and PEARSON functions in Microsoft Excel and Google Docs Sheets.

Formula

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

Where:

  • cov is the population covariance.
  • σ is the population standard deviation.
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
Swift

Percentile

Calculates the Percentile value for the given dataset.

Note:

  • Returns nil when the array is empty.values
  • Returns nil when supplied parameter is negative or greater than 1.percentile
  • Same as PERCENTILE or PERCENTILE.INC in Microsoft Excel and PERCENTILE in Google Docs Sheets.
  • Same as the 7th sample quantile method from the Hyndman and Fan paper (1996).

See the Percentile method documentation for more information.

// 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)
Swift

Quantiles

Collection of nine functions that calculate sample quantiles corresponding to the given probability. This is an implementation of the nine algorithms described in the Hyndman and Fan paper (1996). The documentation of the functions is based on R and Wikipedia.

Note:

  • Returns nil if the dataset is empty.
  • Returns nil if the probability is outside the [0, 1] range.
  • Same as function in R.quantile

Quantile method 1

This method calculates quantiles using the inverse of the empirical distribution function.

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

Quantile method 2

This method uses inverted empirical distribution function with averaging.

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

Quantile method 3

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

Quantile method 4

The method uses linear interpolation of the empirical distribution function.

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

Quantile method 5

This method uses a piecewise linear function where the knots are the values midway through the steps of the empirical distribution function.

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

Quantile method 6

This method is implemented in Microsoft Excel (PERCENTILE.EXC), Minitab and SPSS. It uses linear interpolation of the expectations for the order statistics for the uniform distribution on [0,1].

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

Quantile method 7

This method is implemented in S, Microsoft Excel (PERCENTILE or PERCENTILE.INC) and Google Docs Sheets (PERCENTILE). It uses linear interpolation of the modes for the order statistics for the uniform distribution on [0, 1].

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

Quantile method 8

The quantiles returned by the method are approximately median-unbiased regardless of the distribution of x.

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

Quantile method 9

The quantiles returned by this method are approximately unbiased for the expected order statistics if x is normally distributed.

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

Rank

Returns the ranks of the values in the dataset.

Note:

  • Receives an optional parameter that determines how the ranks for the equal values ('ties') are calculated. Default value is . Possible values:ties.average

    • .average: uses the average rank. Same as RANK.AVG in Microsoft Excel and Google Docs Sheets.
    • .min, : uses the minimum/maximum rank. The value is the same as RANK and RANK.EQ in Microsoft Excel and Google Docs Sheets..max.min
    • .first, : the ranks are incremented/decremented..last
  • Same as rank function in R.

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

Skewness A

Returns the skewness of the dataset.

Note:

  • Returns nil if the dataset contains less than 3 values.
  • Returns nil if all the values in the dataset are the same.
  • Same as SKEW in Microsoft Excel and Google Docs Sheets.

Formula

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

Skewness B

Returns the skewness of the dataset.

Note:

  • Returns nil if the dataset contains less than 3 values.
  • Returns nil if all the values in the dataset are the same.
  • Same as in Wolfram Alpha, SKEW.P in Microsoft Excel and function in "moments" R package.skewness

Formula

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

Standard deviation of a population

Computes standard deviation of entire population.

Note:

  • Returns nil for an empty array.
  • Same as STDEVP and STDEV.P in Microsoft Excel and STDEVP in Google Docs Sheets.

Formula

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

Where:

  • m is the population mean.
  • n is the population size.
Sigma.standardDeviationPopulation([1, 12, 19.5, -5, 3, 8])
// Result: 7.918420858282849
Swift

Standard deviation of a sample

Computes standard deviation based on a sample.

Note:

  • Returns nil when the array is empty or contains a single value.
  • Same as STDEV and STDEV.S in Microsoft Excel and STDEV in Google Docs Sheets.

Formula

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

Where:

  • m is the sample mean.
  • n is the sample size.
Sigma.standardDeviationSample([1, 12, 19.5, -5, 3, 8])
// Result: 8.674195447801869
Swift

Standard error of the mean

Computes standard error of the mean.

Note:

  • Returns nil when the array is empty or contains a single value.

Formula

SE = s / sqrt(n)

Where:

  • s is the sample standard deviation.
  • n is the sample size.
Sigma.standardErrorOfTheMean([1, 12, 19.5, -5, 3, 8])
// Result: 3.5412254627
Swift

Sum

Computes sum of values from the array.

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

Unique values

Returns an unsorted array containing all values that occur within the input array without the duplicates.

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

Variance of a population

Computes variance of entire population.

Note:

  • Returns nil when the array is empty.
  • Same as VAR.P or VARPA in Microsoft Excel and VARP or VARPA in Google Docs Sheets.

Formula

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

Where:

  • m is the population mean.
  • n is the population size.
Sigma.variancePopulation([1, 12, 19.5, -5, 3, 8])
// Result: 62.70138889
Swift

Variance of a sample

Computes variance based on a sample.

Note:

  • Returns nil when the array is empty or contains a single value.
  • Same as VAR, VAR.S or VARA in Microsoft Excel and VAR or VARA in Google Docs Sheets.

Formula

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

Where:

  • m is the sample mean.
  • n is the sample size.
Sigma.varianceSample([1, 12, 19.5, -5, 3, 8])
// Result: 75.24166667
Swift

Feedback is welcome

If you need help or want to extend the library feel free to create an issue or submit a pull request.

Help will always be given at Hogwarts to those who ask for it.

-- J.K. Rowling, Harry Potter

Contributors

License

Sigma is released under the MIT License.

GitHub

https://github.com/evgenyneu/SigmaSwiftStatistics