代码之家  ›  专栏  ›  技术社区  ›  James Alexander

了解T-SQL stdev、stdevp、var和varp

  •  9
  • James Alexander  · 技术社区  · 16 年前

    我很难理解这些统计函数的作用以及它们是如何工作的。我更难理解stdev是如何工作的,与stdevp和var等价物相比。有人能帮我把这些破成哑巴吗?

    2 回复  |  直到 16 年前
        1
  •  24
  •   Eli Algranti    11 年前

    在统计学中,标准差和方差是衡量一个群体中一个指标偏离平均值(通常是平均值)多少的指标。 标准差定义为方差的平方根,方差定义为与平均值的平方差的平均值,即:

    对于大小为n的人群:x1,x2,…,xn 平均值:xmean

    stdevp=sqrt((x1 xmean)^2+(x2 xmean)^2+…+(xn xmean)^2)/n)

    当整个人群的数值不可用时(大多数情况下),通常采用贝塞尔修正法来更好地估计整个人群的实际标准偏差。在计算方差时,贝塞尔的修正只是除以n-1而不是n,即:

    stdev=sqrt((x1 xmean)^2+(x2 xmean)^2+…+(xn xmean)^2)/(n-1)

    注意,对于足够大的数据集,使用哪个函数并不重要。

    您可以通过运行以下T-SQL脚本来验证我的答案:

    -- temporary data set with values 2, 3, 4
    declare @t table([val] int);
    
    insert into @t values
        (2),(3),(4);
    
    select avg(val) as [avg], -- equals to 3.0
       -- Estimation of the population standard devisation using a sample and Bessel's Correction:
       -- ((x1 - xmean)^2 + (x2 - xmean)^2 + ... + (xn-xmean)^2)/(n-1)  
       stdev(val) as [stdev],
       sqrt( (square(2-3.0) + square(3-3) + square(4-3))/2) as [stdev calculated], -- calculated with value 2, 3, 4
    
       -- Population standard deviation: 
       -- ((x1 - xmean)^2 + (x2 - xmean)^2 + ... + (xn-xmean)^2)/n
       stdevp(val) as [stdevp],
       sqrt( (square(2-3.0) + square(3-3) + square(4-3))/3) as [stdevp calculated] -- calculated with value 2, 3, 4
    from @t;
    

    进一步阅读维基百科文章: standard deviatio n和 Bessel's Correction .

        2
  •  -3
  •   Jeremy Bourque    16 年前

    stddev用于计算数据集的标准偏差。stddevp用于计算作为样本的总体的标准偏差。

    如果输入是整个总体,那么将使用stdev计算总体标准偏差。更典型的是,您的数据集是更大人口的样本。在这种情况下,数据集的标准偏差不能代表总体的真实标准偏差,因为它通常偏差太低。利用STDDEVP方法,在样本的基础上对总体的标准偏差进行了较好的估计。

    var和varp的情况是相同的。

    有关该主题的更深入讨论,请参阅 this Wikipedia article .