# Statistics (aggregates)

These functions return aggregates from their arguments. In most cases, they return an atom from a simple list, but `avgs`

, `maxs`

and `mins`

return *running aggregations*.

`avg`

(average)¶

Syntax: `avg x`

(unary, aggregate)

Returns the **arithmetic mean** of numeric list `x`

. the mean of an atom is itself. Null is returned if `x`

is empty, or contains both positive and negative infinity. Any null items in `x`

are ignored.

q)avg 1 2 3 2f q)avg 1 0n 2 3 / null values are ignored 2f q)avg 1.0 0w 0w q)avg -0w 0w 0n q)\l trade.q q)show select ap:avg price by sym from trade sym| ap ---| ----- a | 10.75

`avgs`

(averages)¶

Syntax: `avgs x`

(unary, uniform)

Returns the **running averages** of numeric list `x`

, i.e. applies function `avg`

to successive prefixes of `x`

.

q)avgs 1 2 3 0n 4 -0w 0w 1 1.5 2 2 2.5 -0w 0n

`cor`

(correlation)¶

Syntax: `x cor y`

(binary, aggregate)

Returns the **correlation** of `x`

and `y`

as a floating point number in the range `-1f`

to `1f`

. Applies to all numeric data types and signals an error with temporal types, char and sym.

q)29 10 54 cor 1 3 9 0.7727746 q)10 29 54 cor 1 3 9 0.9795734 q)1 3 9 cor neg 1 3 9 -1f q)select price cor size by sym from trade

Correlation

Perfectly correlated data results in a `1`

or `-1`

. When one variable increases as the other increases the correlation is positive; when one decreases as the other increases it is negative. Completely uncorrelated arguments return `0f`

. Arguments must be of the same length.

`cov`

(covariance)¶

Syntax: `x cov y`

(binary, aggregate)

Returns the **covariance** of `x`

and `y`

as a floating point number. Applies to all numeric data types and signals an error with temporal types, char and sym.

q)2 3 5 7 cov 3 3 5 9 4.5 q)2 3 5 7 cov 4 3 0 2 -1.8125 q)select price cov size by sym from trade

`dev`

(standard deviation)¶

Syntax: `dev x`

(unary, aggregate)

Returns the **standard deviation** of list `x`

(as the square root of the variance). Applies to all numeric data types and signals an error with temporal types, char and sym.

q)dev 10 343 232 55 134.3484 q)select dev price by sym from trade

`max`

(maximum)¶

Syntax: `max x`

(unary, aggregate)

Returns the **maximum** of the items of list `x`

. The maximum of an atom is itself. Applies to any datatype except symbol. Nulls are ignored, except that if the items of `x`

are all nulls, the result is negative infinity.

q)max 2 5 7 1 3 7 q)max "genie" "n" q)max 0N 5 0N 1 3 / nulls are ignored 5 q)max 0N 0N / negative infinity if all null -0W q)select max price by sym from t / use in a select statement

`maxs`

(maximums)¶

Syntax: `maxs x`

(unary, uniform)

Returns the **running maximums** of the prefixes of list `x`

. The maximum of an atom is itself. Applies to any datatype except symbol. Nulls are ignored, except that initial nulls are returned as negative infinity.

q)maxs 2 5 7 1 3 2 5 7 7 7 q)maxs "genie" "ggnnn" q)maxs 0N 5 0N 1 3 / initial nulls return negative infinity -0W 5 5 5 5

`med`

(median)¶

Syntax: `med x`

(unary, aggregate)

Returns the **median** of numeric list `x`

.

q)med 10 34 23 123 5 56 28.5 q)select med price by sym from trade where date=2001.10.10,sym in`AAPL`LEH

Partitions and segments

In V3.0 upwards `med`

signals a rank error when running a median over partitions, or segments. This is deliberate, as previously `med`

was returning median of medians for such cases. This should now be explicitly coded as a cascading select.

q)select med price by sym from select price,sym from trade where date=2001.10.10,sym in`AAPL`LEH

`min`

(minimum)¶

Syntax: `min x`

(unary, aggregate)

Returns the **minimum** of list `x`

. The minimum of an atom is itself. Applies to any datatype except symbol. Nulls are ignored, except that if the argument has only nulls, the result is infinity.

q)min 2 5 7 1 3 1 q)min "genie" "e" q)min 0N 5 0N 1 3 / nulls are ignored 1 q)min 0N 0N / infinity if all null 0W q)select min price by sym from t / use in a select statement

Aggregating nulls

`avg`

, `min`

, `max`

and `sum`

are special: they ignore nulls, in order to be similar to SQL92.
But for nested `x`

these functions preserve the nulls.

q)avg (1 2;0N 4) 0n 3

`mins`

(minimums)¶

Syntax: `mins x`

(unary, uniform)

Returns the **running minimums** of the prefixes of list `x`

. The minimum of an atom is itself. Applies to any datatype except symbol. Nulls are ignored, except that initial nulls are returned as infinity.

q)mins 2 5 7 1 3 2 2 2 1 1 q)mins "genie" "geeee" q)mins 0N 5 0N 1 3 / initial nulls return infinity 0W 5 5 1 1

`scov`

(statistical covariance)¶

Syntax: `x scov y`

(binary, aggregate)

Returns the **statistical covariance** of `x`

and `y`

as a float atom.

Applies to all numeric data types and signals an error with temporal types, char and sym.

q)2 3 5 7 scov 3 3 5 9 8 q)2 3 5 7 scov 4 3 0 2 -2.416667 q)select price scov size by sym from trade

`sdev`

(statistical standard deviation)¶

Syntax: `sdev x`

(unary, aggregate)

Returns the **statistical standard deviation** of list `x`

(as the square root of the statistical variance).

Applies to all numeric data types and signals an error with temporal types, char and sym.

q)sdev 10 343 232 55 155.1322 q)select sdev price by sym from trade

`svar`

(statistical variance)¶

Syntax: `svar x`

(unary, aggregate)

Returns the **statistical variance** of numeric list `x`

as a float atom.

q)var 2 3 5 7 3.6875 q)svar 2 3 5 7 4.916667 q)select svar price by sym from trade where date=2010.10.10,sym in`IBM`MSFT

`var`

(variance)¶

Syntax: `var x`

(unary, aggregate)

Returns the **variance** of numeric list `x`

as a float atom. Nulls are ignored.

q)var 2 3 5 7 3.6875 q)var 2 3 5 0n 7 3.6875 q)select var price by sym from trade where date=2010.10.10,sym in`IBM`MSFT

`wavg`

(weighted average)¶

Syntax: `x wavg y`

(binary, aggregate)

**Weighted average**: returns the average of numeric list `y`

weighted by numeric list `x`

. The result is a float atom. The calculation is `(sum x*y) % sum x`

.

q)2 3 4 wavg 1 2 4 2.666667 q)2 0N 4 5 wavg 1 2 0N 8 / nulls in either argument ignored 6f

Volume-weighted average price

The financial analytic known as VWAP is a weighted average.

q)select size wavg price by sym from trade sym| price ---| ----- a | 10.75

`wsum`

(weighted sum)¶

Syntax: `x wsum y`

(binary, aggregate)

**Weighted sum**: returns the sum of the products of `x`

and `y`

. When both `x`

and `y`

are integer lists, they are first converted to floats. The calculation is `sum x *y`

.

q)2 3 4 wsum 1 2 4 / equivalent to sum 2 3 4 * 1 2 4f 24f q)2 wsum 1 2 4 / equivalent to sum 2 * 1 2 4 14