2014-12-29 5 views
0

This paper 샘플 스큐를 정의로서하이브에서 왜곡 계산?

S = E [XE (X)]^3/[바르 (X)]^하이브이를 계산하는 가장 쉬운 방법은 무엇 3/2

?

두 패스 알고리즘을 생각해 봅시다. 1은 E (X)와 Var (X)를 얻고, 다른 하나는 E [X- (X)]^3을 계산하여 롤 업합니다.

+1

아마도 dapt 스트리밍 알고리즘 : https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Higher-order_statistics – dfrankow

답변

1

저는 두 단계 접근법으로 올바른 방향으로 가고 있다고 생각합니다. 특히 하이브를 엄격하게 사용하는 경우 특히 그렇습니다. 그래서 우리는 데이터를 집계 피할 수 OVER() 절을 사용

  1. 계산 E (X) (이 그래서 우리는 나중에 계산할 수있다 : 다음 두 단계 또는 하나 개의 쿼리와 하나 개의 하위 쿼리에서이 작업을 수행하는 한 가지 방법은 E [XE (X)]) 부질로서 상기 사용

    select x, avg(x) over() as e_x 
    from table; 
    
  2. 이 바르를 계산 (x)와 E [XE (X)] 최종 통계 데이터를 집계하고 생산할 것이다 :

    select pow(avg(x - e_x), 3)/sqrt(pow(variance(x), 3)) 
    from (select x, avg(x) over() as e_x 
         from table) tb 
    ; 
    
0

위의 공식은 적어도 Pearson의 왜곡에 대해서는 정확하지 않습니다. 적어도 임팔라와

다음 작품 :

with d as (select somevar as x from yourtable where what>2), 
agg as (select avg(x) as m,STDDEV_POP(x) as s,count(*) as n from d), 
sk as (select avg(pow(((x-m)/s),3)) as skew from d,agg) 
select skew,m,s,n from agg,sk; 

나는 통해 테스트 :

with dual as (select 1.0 as x), 
d as (select 1*x as x from dual union select 2*x from dual union select 4*x from dual union select 8*x from dual union select 16*x from dual union select 32*x from dual), -- This generates 1,2,4,8,16,32 
agg as (select avg(x) as m,STDDEV_POP(x) as s,count(*) as n from d), 
sk as (select avg(pow(((x-m)/s),3)) as skew from d,agg) 
select skew,m,s,n from agg,sk; 

그리고 R과 같은 답변을 제공합니다

require(moments) 
skewness(c(1,2,4,8,16,32)) #gives 1.095221 

https://en.wikipedia.org/wiki/Skewness#Pearson.27s_moment_coefficient_of_skewness

참조