Logo

SWTEST_q

Updated 2023-10-26 14:29:51.933000

Syntax

SELECT [westclintech].[wct].[SWTEST_q](
  <@X_RangeQuery, nvarchar(max),>
 ,<@Statistic, nvarchar(4000),>)

Description

Use the scalar function SWTEST_q to compute Shapiro and Wilk’s W statistic and its p-value. The p-value is the probability of observing the given result by chance.

Arguments

@Statistic

identifies the return value as either the Shapiro-Wilk statistic (w) or the p-value (p).

@X_RangeQuery

a string which contains the SQL to select the sample values. The resultant table must be of an expression of type float or of a type that can be implicitly converted to float.

Return Type

float

Remarks

If any x-value returned by @X_RangeQuery IS NULL, it is not included in the calculation.

@x must have at least 3 rows.

Examples

In this example, we have two samples, which we have identified as sample 1 and sample 2 and put into a temporary table. We perform the Shapiro Wilk test on both in a single SELECT returning a row for each sample number.

/*Insert test data into a temp table*/

SELECT *

INTO #sw

FROM

(

    VALUES

        (1, 0.11),

        (2, 3.49),

        (1, 7.87),

        (2, 1.36),

        (1, 4.61),

        (2, 1.14),

        (1, 10.14),

        (2, 2.92),

        (1, 7.95),

        (2, 2.55),

        (1, 3.14),

        (2, 1.46),

        (1, 0.46),

        (2, 1.06),

        (1, 4.43),

        (2, 5.27),

        (1, 0.21),

        (2, -1.11),

        (1, 4.75),

        (2, 3.48),

        (1, 0.71),

        (2, 1.10),

        (1, 1.52),

        (2, 0.88),

        (1, 3.24),

        (2, -0.51),

        (1, 0.93),

        (2, 1.46),

        (1, 0.42),

        (2, 0.52),

        (1, 4.97),

        (2, 6.20),

        (1, 9.53),

        (2, 1.69),

        (1, 4.55),

        (2, 0.08),

        (1, 0.47),

        (2, 3.67),

        (1, 6.66),

        (2, 2.81)

) n (s, x);

/*Perform the Shapiro Wilk Test on the temp table*/

SELECT a.s as sample_num,

       wct.SWTEST_q('SELECT x from #sw where s = ' + cast(a.s as varchar), 'w') 

                 as w_observed,

       wct.SWTEST_q('SELECT x from #sw where s = ' + cast(a.s as varchar), 'p') 

                 as p_value

FROM

(SELECT DISTINCT s FROM #sw) a(s)

GROUP BY a.s;

/*Clean up the temp table*/

DROP TABLE #sw;

This produces the following result

{"columns":[{"field":"sample_num","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"w_observed","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"p_value","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"sample_num":"1","w_observed":"0.90047287949498","p_value":"0.0420895755448937"},{"sample_num":"2","w_observed":"0.959026946057681","p_value":"0.524597930966876"}]}