kolmogorovSmirnovTest

kolmogorovSmirnovTest

두 모집단의 표본에 Kolmogorov-Smirnov 검정을 적용하는 집계 함수예요. v23.4.0부터 도입되었어요.

출처: 문서

본문

두 모집단의 표본에 Kolmogorov-Smirnov 검정을 적용해요. 두 표본의 값은 모두 sample_data 컬럼에 있어요. sample_index가 0이면 그 행의 값은 첫 번째 모집단의 표본에 속하고, 그 외에는 두 번째 모집단의 표본에 속해요. 표본은 연속적이고 1차원적인 확률 분포에 속해야 해요.

구문 (Syntax)

kolmogorovSmirnovTest([alternative, computation_method])(sample_data, sample_index)

파라미터 (Parameters)

  • alternative — 대립 가설(Alternative hypothesis)이에요. (선택, 기본값: 'two-sided'.) F(x)G(x)를 각각 첫 번째와 두 번째 분포의 CDF라고 해 볼게요.
    • 'two-sided': 귀무 가설은 표본들이 같은 분포에서 왔다는 것이에요, 즉 모든 x에 대해 F(x) = G(x)라는 것이죠. 그리고 대립 가설은 분포들이 동일하지 않다는 것이에요.
    • 'greater': 귀무 가설은 첫 번째 표본의 값이 두 번째 표본의 값보다 확률적으로 더 작다는 것이에요, 즉 첫 번째 분포의 CDF가 두 번째 분포의 CDF보다 위에 있어 왼쪽에 위치한다는 것이죠. 이는 실제로 모든 x에 대해 F(x) >= G(x)라는 뜻이에요. 이 경우 대립 가설은 적어도 하나의 x에 대해 F(x) < G(x)라는 것이에요.
    • 'less': 귀무 가설은 첫 번째 표본의 값이 두 번째 표본의 값보다 확률적으로 더 크다는 것이에요, 즉 첫 번째 분포의 CDF가 두 번째 분포의 CDF보다 아래에 있어 오른쪽에 위치한다는 것이죠. 이는 실제로 모든 x에 대해 F(x) <= G(x)라는 뜻이에요. 이 경우 대립 가설은 적어도 하나의 x에 대해 F(x) > G(x)라는 것이에요. String
  • computation_method — p-값을 계산하는 데 사용하는 방법이에요. (선택, 기본값: 'auto'.)
    • 'exact': 검정 통계량의 정확한 확률 분포를 사용해 계산해요. 작은 표본이 아닌 경우 계산 집약적이고 비효율적이에요.
    • 'asymp'(='asymptotic'): 근사(approximation)를 사용해 계산해요. 큰 표본 크기에서는 정확(exact) p-값과 점근(asymptotic) p-값이 매우 유사해요.
    • 'auto': 최대 표본 수가 10,000 미만일 때 'exact' 방법을 사용해요. String

인자 (Arguments)

  • sample_data — 표본 데이터예요. (U)Int* 또는 Float* 또는 Decimal
  • sample_index — 표본 인덱스예요. (U)Int*

반환 값 (Returned value)

두 요소를 가진 튜플을 반환해요: 계산된 통계량과 계산된 p-값. Tuple(Float64, Float64)

예시 (Examples)

같은 분포 검정:

SELECT kolmogorovSmirnovTest('less', 'exact')(value, num)
FROM
(
    SELECT
        randNormal(0, 10) AS value,
        0 AS num
    FROM numbers(10000)
    UNION ALL
    SELECT
        randNormal(0, 10) AS value,
        1 AS num
    FROM numbers(10000)
)

결과:

┌─kolmogorovSmirnovTest('less', 'exact')(value, num)─┐
│ (0.009899999999999996,0.37528595205132287)         │
└────────────────────────────────────────────────────┘

다른 분포 검정:

SELECT kolmogorovSmirnovTest('two-sided', 'exact')(value, num)
FROM
(
    SELECT
        randStudentT(10) AS value,
        0 AS num
    FROM numbers(100)
    UNION ALL
    SELECT
        randNormal(0, 10) AS value,
        1 AS num
    FROM numbers(100)
)

결과:

┌─kolmogorovSmirnovTest('two-sided', 'exact')(value, num)─┐
│ (0.4100000000000002,6.61735760482795e-8)                │
└─────────────────────────────────────────────────────────┘

참고 (See Also)

  • Kolmogorov-Smirnov 검정

더 알아보기 (Learn more)