• Stars
    star
    682
  • Rank 66,258 (Top 2 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 9 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A collection of functions for statistical calculation written in Swift.

σ (sigma) - statistics library written in Swift

Carthage compatible CocoaPods Version License Platform

This library is a collection of functions that perform statistical calculations in Swift. It can be used in Swift apps for Apple devices and in open source Swift programs on other platforms.

Statistical library for Swift

Setup

There are four ways you can add Sigma to your project.

Add source (iOS 7+)

Simply add SigmaDistrib.swift file to your project.

Setup with Carthage (iOS 8+)

Alternatively, add github "evgenyneu/SigmaSwiftStatistics" ~> 9.0 to your Cartfile and run carthage update.

Setup with CocoaPods (iOS 8+)

If you are using CocoaPods add this text to your Podfile and run pod install.

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

Setup with Swift Package Manager

Legacy Swift versions

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

Usage

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

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

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

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

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

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 Double.infinity if the mean is zero.
  • 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

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]

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

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

Max

Returns the maximum value in the array.

Note: returns nil for an empty array.

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

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

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

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

Min

Returns the minimum value in the array.

Note: returns nil for an empty array.

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

Normal distribution

Returns the normal distribution for the given values of x, μ and σ. The returned value is the area under the normal curve to the left of the value 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 cumulative argument equal to true.
Sigma.normalDistribution(x: -1, μ: 0, σ: 1)
// Result: 0.1586552539314570

Normal density

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

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 cumulative argument equal to false.

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

Normal quantile

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

Note:

  • Returns nil if σ is zero or negative.
  • Returns nil if p is negative or greater than one.
  • Returns -Double.infinity if p is zero, and Double.infinity if p is one.
  • 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

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

Percentile

Calculates the Percentile value for the given dataset.

Note:

  • Returns nil when the values array is empty.
  • Returns nil when supplied percentile parameter is negative or greater than 1.
  • 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)

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 quantile function in R.

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

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

Quantile method 3

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

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

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

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

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

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

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

Rank

Returns the ranks of the values in the dataset.

Note:

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

    • .average: uses the average rank. Same as RANK.AVG in Microsoft Excel and Google Docs Sheets.
    • .min, .max: uses the minimum/maximum rank. The value .min is the same as RANK and RANK.EQ in Microsoft Excel and Google Docs Sheets.
    • .first, .last: the ranks are incremented/decremented.
  • 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]

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

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 skewness function in "moments" R package.

Formula

Skewness formula

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

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

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

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

Sum

Computes sum of values from the array.

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

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]

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

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

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.

More Repositories

1

keychain-swift

Helper functions for saving text in Keychain securely for iOS, OS X, tvOS and watchOS.
Swift
2,577
star
2

Cosmos

A star rating control for iOS/tvOS written in Swift
Swift
2,119
star
3

Dodo

A message bar for iOS written in Swift.
Swift
875
star
4

js-evaluator-for-android

A library for running JavaScript in Android apps.
JavaScript
476
star
5

swift-badge

A badge view for iOS/tvOS written in Swift
Swift
390
star
6

moa

An image download extension of the image view written in Swift for iOS, tvOS and macOS.
Swift
333
star
7

Auk

An image slideshow for iOS written in Swift.
Swift
277
star
8

center-vfl

Centering a view in a super view with Visual Format Language using Auto Layout in iOS/Swift
Swift
227
star
9

ios-imagescroll-swift

iOS demo of using image view inside a scroll view with auto layout in Swift
Swift
128
star
10

UnderKeyboard

An iOS libary for moving content from under the keyboard.
Swift
128
star
11

SpringAnimationCALayer

A helper function for animating CALayer with spring effect in Swift
Swift
117
star
12

Cephalopod

A sound fader for AVAudioPlayer written in Swift for iOS, tvOS and macOS.
Swift
112
star
13

bubble-button-animation-ios-swift

Demo iOS app showing button animation
Swift
66
star
14

bounce-button-animation-android

A demo Android app that shows how to animate a button with spring/bounce effect.
Java
61
star
15

ios-imagescroll

iOS: example of using image view inside a scroll view with auto layout, written in Obective-C.
Objective-C
59
star
16

angular-markdown-preview

AngularJS module for markdown textarea with live HTML preview.
JavaScript
35
star
17

ios-javascriptcore-demo

iOS demo: running javascript function from ObjectiveC using JavaScriptCore framework
Objective-C
32
star
18

Glyptodon

A 'no content' message overlay for iOS written in Swift.
Swift
31
star
19

Scrollable

An iOS control that makes content scroll vertically.
Swift
20
star
20

aes-crypto-web

Web app for encrypting text messages http://aescrypto.com
JavaScript
20
star
21

JsonSwiftson

A JSON parser with concise API written in Swift.
Swift
14
star
22

aes-crypto-android

Android app for encrypting text messages http://aescrypto.com
JavaScript
12
star
23

two_galaxies

A web simulation of two interacting galaxies
JavaScript
10
star
24

walk-to-circle-ios

An iOS app for those who like walking
Swift
9
star
25

trigonometric_identities_latex

Trigonometric identities in LaTeX format
TeX
8
star
26

greeter-android

Sample code for "Testing activity in Android Studio" tutorial.
Java
6
star
27

aes-text-encryption-ios

iOS app for encrypting text messages http://aescrypto.com
JavaScript
5
star
28

sharing-keychain-demo

A demo iOS app showing how to access a shared keychain item
Swift
4
star
29

ios-core-location-battery-meter

iOS demo app for measuring power consumption of location services
Swift
4
star
30

core-location-tester-ios

Demo iOS app for testing Core Location accuracy
Swift
3
star
31

SneakPeekScroll

An iOS demo app showing a scroll view with images and lets you see a portion of the next and previous images
Swift
3
star
32

evgenii.com

My personal web site at http://evgenii.com
JavaScript
3
star
33

FortranFromPython

An example of running a Fortran code from Python
Python
3
star
34

siba

Simple backup and restore utility
Ruby
2
star
35

tarpan

Python functions for analysing cmdspanpy output
Python
2
star
36

image_compressor_c

An image compressor program written in C that uses singular value expansion
C
2
star
37

docker-rails-fig-sample

A sample Rails/Postgres app that shows how to use Docker and Fig
Ruby
2
star
38

oct_viewer

Demo of the OCT viewer
JavaScript
1
star
39

siba-destination-ftp

FTP destination for SIBA backup and restore utility.
Ruby
1
star
40

watch-kit-app-demo

Demo WatchKit app from the video tutorial.
Swift
1
star
41

walk-to-circle-android

An Android app for those who like walking
Java
1
star
42

distance_from_parallax

A Python program that plots distances measured from simulated parallaxes.
Python
1
star
43

covid19

A naive Stan model of confirmed COVID-19 cases that uses logistic function.
Python
1
star
44

siba-source-mysql

Backup and restore MySQL database. This is an extension to SIBA utility.
Ruby
1
star
45

ai_teaches_me_ml

This is my logbook from my interactive lessons where ChatGPT teaches me ML
Jupyter Notebook
1
star
46

siba-destination-aws-s3

Backup to Amazon S3 cloud storage. This is an extension to SIBA backup and restore utility.
Ruby
1
star
47

SixBouncingButtons

An example of creating six buttons with bounce effect in Android
Java
1
star
48

siba-source-mongo-db

MongoDb backup and restore plugin for SIBA
Ruby
1
star
49

ASP3162

Codes for ASP3162 labs
Fortran
1
star
50

WatchKitParentAppBenchmark

A demo app showing how to communicate between watchOS and iOS using the sendMessage method of watch connectivity framework.
Swift
1
star