標準偏差: STDEVP, STDEV
標準偏差とは、データの平均値から見た「ばらつき具合」を数値で表したもので、標準偏差の値が小さいほど、散らばり度合いが小さいことが示されます。
指定したデータが、全てであるデータの値がとる標準偏差(standard deviation) が欲しい場合、STDEVP 関数を使います。
指定したデータが、全体の内の「標本」(抜き出した一部分)として考え、そのデータの値がとる標本標準偏差(sample standard deviation) が欲しい場合、STDEV 関数を使います。
STDEVPの数値の求め方は、
・平均値を算出する
・各データと平均値の差を求める
・各差を2乗して
・2乗した全ての求めた数値を足す
・最後にデータの数で割る(分散)
・分散の平方根を求める
STDEVの数値の求め方は、
・平均値を算出する
・各データと平均値の差を求める
・各差を2乗して
・2乗した全ての求めた数値を足す
・最後にデータ-1の数で割る(*日本工業規格)(標本分散)
・標本分散の平方根を求める
以上となりますが・・・
「標準偏差」や「分散」という言葉自体をあまり聞いたことのない方にとっては、何を言っているのか、非常に難しい説明と感じることでしょう。
わかりづらいと感じた方は、次のように覚えてください。
「計算された数値が、小さいほどデータのばらつきが少ない」
という意味で、つまり、出てきた数値が「0」に近いほどばらつきの無いデータということが分かる手法になります。
標準偏差のよいところは、標準偏差は単位の次元がデータと同じなのでデータの散らばり具合が把握しやすいと言えます。
STDEVP
構文:STDEVP( [ ALL | DISTINCT ] expression )
引数:ALL すべての値にこの集計関数を適用します。 ALL は既定値です。
DISTINCT 重複する値は 1 つだけ有効データとします。
expression 整数式です。 集計関数とサブクエリは使用できません。
戻り値の型は、float です。
下のSQL例文を載せておきます。
declare @tbl1 table(c_point int) insert into @tbl1 (c_point) values (30) insert into @tbl1 (c_point) values (40) insert into @tbl1 (c_point) values (20) insert into @tbl1 (c_point) values (60) insert into @tbl1 (c_point) values (60) insert into @tbl1 (c_point) values (70) insert into @tbl1 (c_point) values (80) --ALL --NULLはカウントされません select STDEVP(c_point) as [STDEVP] from @tbl1 --DISTINCT --60が重複しているので結果が異なります select STDEVP(DISTINCT c_point) as [STDEVP_DISTINCT] from @tbl1 -- STDEVP(c_point)を検証 --平均値を算出する declare @avg float select @avg=AVG(cast(c_point as float)) from @tbl1 --各データと平均値の差を求める declare @tbl2 table(c_point float) insert into @tbl2 select c_point-@avg from @tbl1 --各差を2乗して update @tbl2 set c_point=c_point*c_point --2乗した全ての求めた数値を足す declare @sum float select @sum=sum(c_point) from @tbl2 --データの数で割る declare @varp float select @varp=@sum/count(c_point) from @tbl2 --平方根を求める select sqrt(@varp) as [STDEVP(c_point)検証値]
STDEV
構文:STDEV( [ ALL | DISTINCT ] expression )
引数:ALL すべての値にこの集計関数を適用します。 ALL は既定値です。
DISTINCT 重複する値は 1 つだけ有効データとします。
expression 整数式です。 集計関数とサブクエリは使用できません。
戻り値の型は、float です。
下のSQL例文を載せておきます。
declare @tbl1 table(c_point int) insert into @tbl1 (c_point) values (30) insert into @tbl1 (c_point) values (40) insert into @tbl1 (c_point) values (4) insert into @tbl1 (c_point) values (60) insert into @tbl1 (c_point) values (60) insert into @tbl1 (c_point) values (80) --ALL --NULLはカウントされません select STDEV(c_point) as [STDEV] from @tbl1 --DISTINCT --60が重複しているので結果が異なります select STDEV(DISTINCT c_point) as [STDEV_DISTINCT] from @tbl1 -- VAR(c_point)を検証 --平均値を算出する declare @avg float select @avg=AVG(cast(c_point as float)) from @tbl1 --各データと平均値の差を求める declare @tbl2 table(c_point float) insert into @tbl2 select c_point-@avg from @tbl1 --各差を2乗して update @tbl2 set c_point=c_point*c_point --2乗した全ての求めた数値を足す declare @sum float select @sum=sum(c_point) from @tbl2 --データの数で割る --各観測値の平均値からの偏差の二乗の和を観測個数から1を引いた数で割ったばらつきの尺度 declare @var float select @var=@sum/(count(c_point)-1) from @tbl2 --平方根を求める select sqrt(@var) as [STDEV(c_point)検証値]
以上、SQL Server STDEV, STDEVP 標準偏差でした。