You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// The query computes Silverman's rule of thumb (R's `stats::bw.nrd0()`).
282
283
// We absorb the adjustment in the 0.9 multiplier of the rule
283
284
let adjust = 0.9* adjust;
284
-
format!(
285
-
"{adjust} * MIN(SQRT(AVG({value}*{value}) - AVG({value})*AVG({value})), (PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY {value}) - PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY {value})) / 1.34) * POW(COUNT(*), -0.2)",
286
-
adjust = adjust,
287
-
value = value_column
288
-
)
285
+
let stddev = format!(
286
+
"SQRT(AVG({v}*{v}) - AVG({v})*AVG({v}))",
287
+
v = value_column
288
+
);
289
+
let iqr = format!(
290
+
"(PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY {v}) - PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY {v})) / 1.34",
INNER JOIN bandwidth ON data.region IS NOT DISTINCT FROM bandwidth.region AND data.category IS NOT DISTINCT FROM bandwidth.category
@@ -666,7 +672,7 @@ mod tests {
666
672
let expected = "WITH RECURSIVE
667
673
bandwidth AS (
668
674
SELECT
669
-
0.9 * MIN(SQRT(AVG(x*x) - AVG(x)*AVG(x)), (PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY x) - PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY x)) / 1.34) * POW(COUNT(*), -0.2) AS bw
675
+
0.9 * (SELECT MIN(v) FROM (VALUES (SQRT(AVG(x*x) - AVG(x)*AVG(x))), ((PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY x) - PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY x)) / 1.34)) AS t(v)) * POW(COUNT(*), -0.2) AS bw
670
676
FROM (SELECT x FROM (VALUES (1.0), (2.0), (3.0), (4.0), (5.0)) AS t(x))
671
677
WHERE x IS NOT NULL
672
678
@@ -696,7 +702,7 @@ mod tests {
696
702
let expected = "WITH RECURSIVE
697
703
bandwidth AS (
698
704
SELECT
699
-
0.9 * MIN(SQRT(AVG(x*x) - AVG(x)*AVG(x)), (PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY x) - PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY x)) / 1.34) * POW(COUNT(*), -0.2) AS bw,
705
+
0.9 * (SELECT MIN(v) FROM (VALUES (SQRT(AVG(x*x) - AVG(x)*AVG(x))), ((PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY x) - PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY x)) / 1.34)) AS t(v)) * POW(COUNT(*), -0.2) AS bw,
700
706
region
701
707
FROM (SELECT x, region FROM (VALUES (1.0, 'A'), (2.0, 'A'), (3.0, 'B')) AS t(x, region))
0 commit comments