PostgreSQL中举例, 如果有多个同样频率的, 取第一个 :
postgres=# select mode() WITHIN GROUP (ORDER BY c1) from (values(null),(1),(2),(1),(2),(3)) as t(c1); postgres=# select mode() WITHIN GROUP (ORDER BY c1 desc) from (values(null),(1),(2),(1),(2),(3)) as t(c1); 其实在PostgreSQL统计信息中也用到了众数类似(延展)的概念, 即mcv, mce. 最频繁出现的值. 见pg_stats.
View "pg_catalog.pg_stats" Column | Type | Modifiers ------------------------+----------+----------- avg_width | integer | 数学期望 most_common_vals | anyarray | 众数类似 most_common_freqs | real[] | 众数概率 histogram_bounds | anyarray | 中位数类似 most_common_elems | anyarray | 众数类似 most_common_elem_freqs | real[] | 众数概率 elem_count_histogram | real[] | 中位数类似 取按数字大小顺序排好后的中间数字, 如果是偶数个, 则取两个值的平均值.
例如: 1,3,5,7,9,10的中位数为(5+7)/2=6
中位数在PostgreSQL统计信息中也有类似的应用, 即柱状分布, 见pg_stats.histogram_bounds. 每个区间(bucket)的概率是相等的, 每个值的两边的bucket概率是相等的. 类似中位数的概念.
方差是各个数据分别与其平均数之差的平方的和的平均数,用字母D表示。在概率论和数理统计中,方差(Variance)用来度量随机变量和其数学期望(即均值)之间的偏离程度。在许多实际问题中,研究随机变量和均值之间的偏离程度有着重要意义。
设X为服从分布F的随机变量, 如果E[X]是随机变量X的期望值(平均数μ=E[X])
其中:
为样本均值 N为样本个数
从计算方法来看.方差可以评估一组数字的离散度(如下).
postgres=# select var_pop(c1) from (values(1),(2),(3),(4),(5)) as t(c1); postgres=# select var_pop(c1) from (values(1),(2),(3),(4),(5),(1000)) as t(c1); postgres=# select var_pop(c1) from (values(1000),(1001),(1003),(1004),(1005),(1000)) as t(c1); postgres=# select var_samp(c1) from (values(1),(2),(3),(4),(5)) as t(c1); postgres=# select var_samp(c1) from (values(1),(2),(3),(4),(5),(1000)) as t(c1); postgres=# select var_samp(c1) from (values(1000),(1001),(1003),(1004),(1005),(1000)) as t(c1); 5. 标准差, Standard Deviation, 对应方差的平方根. 也可用于评估离散度.
表示符号和方差一样, 但是符号上头没有代表平方的2.
标准差(Standard Deviation) ,中文环境中又常称均方差,但不同于均方误差(mean squared error,均方误差是各数据偏离真实值的距离平方的平均数,也即误差平方和的平均数,计算公式形式上接近方差,它的开方叫均方根误差,均方根误差才和标准差形式上接近),标准差是离均差平方和平均后的方根,用σ表示。标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。平均数相同的,标准差未必相同。
标准差(Standard Deviation),在概率统计中最常使用作为统计分布程度(statistical dispersion)上的测量。标准差定义是总体各单位标准值与其平均数离差平方的算术平均数的平方根。它反映组内个体间的离散程度。
postgres=# select stddev_pop(c1) from (values(1000),(1001),(1003),(1004),(1005),(1000)) as t(c1); postgres=# select dsqrt(var_pop(c1)) from (values(1000),(1001),(1003),(1004),(1005),(1000)) as t(c1); postgres=# select stddev_samp(c1) from (values(1000),(1001),(1003),(1004),(1005),(1000)) as t(c1); postgres=# select dsqrt(var_samp(c1)) from (values(1000),(1001),(1003),(1004),(1005),(1000)) as t(c1); 在概率论和统计学中,协方差用于衡量两个变量的总体误差(如果两组数据的误差一样, 那么和计算一组数据的方差得到的结果是一样的)。
而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
注意这里提到方差是两个变量相等时的协方差, 一会我在PostgreSQL里面验证一下.
在PostgreSQL中计算一组数据协方差的方法.
postgres=# select covar_pop(c1,c2) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)) as t(c1,c2); postgres=# select covar_samp(c1,c2) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)) as t(c1,c2); 在PostgreSQL中验证 : 方差是两个变量相等时的协方差
postgres=# select var_pop(c1) from (values(1),(2),(3),(4),(5),(1000)) as t(c1); postgres=# select covar_pop(c1,c1) from (values(1),(2),(3),(4),(5),(1000)) as t(c1); 验证 : (如果两组数据的误差一样, 那么和计算一组数据的方差得到的结果是一样的)。
如下两组数据, 1,2,3,4,5,1000; 2,3,4,5,6,1001; 他们各自的方差一样, 所以协方差也一样
postgres=# select var_pop(c1) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)) as t(c1,c2); postgres=# select var_pop(c2) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)) as t(c1,c2); postgres=# select covar_pop(c1,c2) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)) as t(c1,c2); 7. 相关性, 线性相关性, Correlation
表示两组数据的相关性, 相关值从0到1取值, 趋向1表示完全相关, 趋向0 表示完全不相关.
相关表和相关图可反映两个变量之间的相互关系及其相关方向,但无法确切地表明两个变量之间相关的程度。于是,著名统计学家卡尔·皮尔逊设计了统计指标——相关系数(Correlation coefficient)。相关系数是用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度;着重研究线性的单相关系数。
在PostgreSQL中的统计信息中也有相关性的应用, 例如用于评估数据的物理存储和值的相关性, 方便优化器计算索引扫描的成本, 相关性越高, 越趋向索引, 因为离散块扫描会更少. 可以参考如下.
postgres=# select corr(c1,c2) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)) as t(c1,c2); postgres=# select corr(c1,c2) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1)) as t(c1,c2); 软件公司在全国有许多 ,为研究它的财务软件产品的广告投入与 的关系,统计人员随机选择10家代理商进行观察,搜集到年广告投入费和月平均销售额的数据,并编制成 ,见表1:
| |
12.5 15.3 23.2 26.4 33.5 34.4 39.4 45.2 55.4 60.9 | 21.2 23.9 32.9 34.1 42.5 43.2 49.0 52.8 59.4 63.5 |
| | | | | |
| 12.5 15.3 23.2 26.4 33.5 34.4 39.4 45.2 55.4 60.9 | 21.2 23.9 32.9 34.1 42.5 43.2 49.0 52.8 59.4 63.5 | 156.25 234.09 538.24 696.96 1122.25 1183.36 1552.36 2043.04 3069.16 3708.81 | 449.44 571.21 1082.41 1162.81 1806.25 1866.24 2401.00 2787.84 3528.36 4032.25 | 265.00 365.67 763.28 900.24 1423.75 1486.08 1930.60 2386.56 3290.76 3867.15 |
| | | | | |
相关系数为0.9942,说明广告投入费与月平均销售额之间有高度的线性正相关关系。
相关性是如何计算的呢? 实际上是 "协方差(x,y)除以(平方根(方差(x)*方差(y)))" .
postgres=# select corr(c1,c2) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1)) as t(c1,c2); postgres=# select covar_pop(c1,c2)/dsqrt(var_pop(c1)*var_pop(c2)) from (values(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1)) as t(c1,c2);