Database 添加/合并标准偏差

Database 添加/合并标准偏差,database,math,data-warehouse,Database,Math,Data Warehouse,短版: 是否可以添加/组合STDEV?i、 e if StdDev(11,14,16,17)=X and StdDev(21,34,43,12)=Y can we calculate StdDev(11,14,16,17,21,34,43,12) from X & Y 长版本: 我正在设计一个星型模式。模式有一个事实表(grain=transaction),它存储单个事务响应时间。该模式还有一个聚合表(grain=day),用于存储每天的响应时间总和。 在我的报告中,我需要计算给定

短版:
是否可以添加/组合STDEV?i、 e

if StdDev(11,14,16,17)=X and StdDev(21,34,43,12)=Y  
can we calculate StdDev(11,14,16,17,21,34,43,12) from X & Y
长版本:
我正在设计一个星型模式。模式有一个事实表(grain=transaction),它存储单个事务响应时间。该模式还有一个聚合表(grain=day),用于存储每天的响应时间总和。

在我的报告中,我需要计算给定时间维度的响应时间的标准偏差,例如天、周、月等。如何使用聚合表而不是庞大的事实表来计算标准偏差?

不,不能添加标准偏差

用您提供的数字向自己证明:

X=2.645751311,Y=13.72345923

组合机组标准偏差:11.48912529

您可以使用标准偏差公式进行更一般的证明。您需要两个变量的协方差-向下滚动至“标识”:


是的,您可以将它们组合在一起。您需要知道每天的观察次数、平均值和标准偏差。方差比标准差更容易处理,所以我将用方差来表示其他一切。(标准偏差定义为方差的平方根。)

表示:

n[i] # observations for day i
m[i] # mean for day i
v[i] # variance for day i
您需要计算观察总数
N
和总平均值
M
。这很简单:

days = [day1, day2, ..., day_final]
N = sum(n[i] for i in days)
M = sum(n[i] * m[i] for i in days) / N
总体方差
V
更复杂,但仍然可以计算:

s1 = sum(n[i] * v[i] for i in days)
s2 = sum(n[i] * (m[i] - M)**2 for i in days)
V = (s1 + s2) / N
以上为总体方差。如果将
v[i]
作为样本方差,则需要对
s1
v
进行一些小的修改:

s1_sample = sum((n[i] - 1) * v[i] for i in days)
V_sample = (s1_sample + s2) / (N - 1)

我认为方差之间的关系是
Var(X+Y)=Var(X)+Var(Y)+2Cov(X,Y)
,所以你也需要协方差,或者对协方差进行良好的估计。
Day_1=(11,14,16,17),n=4,m=14.5,v=7 | Day_2=(21,34,43,12),n=4,m=27.5,v=188.33333 | n=8 | m=(4*14.5+4*27.5)/8=21+S1+4)(4*188.33333))=781.33332 | S2=((4*(14.5-21)^2)+(4*(27.5-21)^2))=338 | V=(781.33332+338)/8=139.916665
但方差(11,14,16,17,21,34,43,12)=132我给出的表达式是针对总体方差的,您使用的方差是样本方差。假设您有大量的日常数据,因此您不会注意到结果中的任何差异。如果您认为这可能很重要,那么样本方差有类似的公式。首先感谢您的输入。我使用的DB2有一个方差函数来计算给定集合的方差。但不确定它是总体方差还是样本方差。你能不能也发布样本方差的公式。有两种形式。实际上,对于总体方差,你只需要将残差的平方和除以
n
,对于sa,你是除以
n-1
样本方差。我的答案已经有了组合总体方差或样本方差所需的方程式;请注意,方程式的不同之处在于将
n[i]
替换为
n[i]-1