mil*_*den 1 postgresql statistics aggregate
说我有一个postgresql表,其中包含以下值:
id | value
----------
1 | 4
2 | 8
3 | 100
4 | 5
5 | 7
Run Code Online (Sandbox Code Playgroud)
如果我使用postgresql来计算平均值,它给我的平均值为24.8,因为100的高值对计算有很大的影响.事实上,我想在6左右找到一个平均值,并消除极端情况.
我正在寻找消除极端的方法,并希望这样做"统计上正确".极端无法修复.我不能说; 如果值超过X,则必须将其消除.
我一直在弯曲我的postgresql聚合函数,但不能把我的手指放在我正确使用的东西上.有什么建议?
Pet*_*ans 10
Postgresql也可以计算标准差.
您只能获取平均值()+/- 2*stddev()中的数据点,这些数据点大致对应于最接近平均值的90%数据点.
当然2也可以是3(95%)或6(99.995%)但不要挂在数字上,因为在收集异常值存在的情况下,你不再处理正态分布.
要非常小心并验证它是否按预期工作.
小智 6
我不能说; 如果值超过X,则必须将其消除.
好吧,你可以使用having和subselect来消除异常值,例如:
HAVING value < (
SELECT 2 * avg(value)
FROM mytable
GROUP BY ...
)
Run Code Online (Sandbox Code Playgroud)
(或者,就此而言,如果您想要更好地消除异常值,可以使用更复杂的版本来消除超过2或3个标准偏差的任何内容.)
另一种选择是考虑生成一个中值,这是一种相当统计上合理的异常值计算方法; 幸运的是,有三个合理的例子:一个来自Postgresql Wiki,一个是作为Oracle兼容性层构建的,另一个来自PostgreSQL Journal.请注意它们如何精确/准确地实现中位数的警告.
| 归档时间: |
|
| 查看次数: |
6246 次 |
| 最近记录: |