Skip to content

パラメータ付き集約関数(20関数)

パラメータ付きの集約関数。SELECT stat_xxx(column, param) FROM table の形式で使用する。GROUP BYHAVING、サブクエリなど SQLite3 の標準的な集約関数が使えるすべての文脈で利用可能。

関数リファレンス に戻る


基本統計量(パラメータ付き)

stat_trimmed_mean

トリム平均(切落し平均)を計算する。両端から一定割合のデータを除去して平均を求める。外れ値に対してロバスト。

$$\bar{x}{trim} = \frac{1}{n - 2k}\sum{i=k+1}^{n-k} x_{(i)}$$

ここで $k = \lfloor n \times proportion \rfloor$。

構文: stat_trimmed_mean(column, proportion)

パラメータ 説明 範囲
proportion 各端から除去する割合 0.0 以上 0.5 未満
-- 5% トリム平均(両端の 5% ずつを除去)
SELECT stat_trimmed_mean(salary, 0.05) AS trimmed_mean FROM employees;

-- 10% トリム平均(最も一般的)
SELECT stat_trimmed_mean(score, 0.1) AS trimmed_10pct FROM exam;

-- 算術平均・中央値・トリム平均の比較
SELECT stat_mean(val)                AS mean,
       stat_trimmed_mean(val, 0.1)   AS trimmed_mean_10,
       stat_trimmed_mean(val, 0.25)  AS trimmed_mean_25,
       stat_median(val)              AS median
FROM data;
-- proportion=0 → 算術平均、proportion→0.5 → 中央値に近づく

-- 外れ値がある場合の比較
CREATE TABLE outlier_test (val REAL);
INSERT INTO outlier_test VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(1000);

SELECT stat_mean(val)              AS mean,          -- 104.5(外れ値に引かれる)
       stat_trimmed_mean(val, 0.1) AS trimmed_mean,  -- 5.0(外れ値を除去)
       stat_median(val)            AS median          -- 5.5
FROM outlier_test;

-- グループごとのロバスト平均
SELECT department,
       stat_mean(salary)              AS mean_salary,
       stat_trimmed_mean(salary, 0.1) AS trimmed_salary
FROM employees
GROUP BY department;

順序統計量(パラメータ付き)

stat_quartile

四分位数(Q1, Q2, Q3)を一度に計算し、JSON で返す。

構文: stat_quartile(column)

戻り値: JSON 文字列 {"q1": ..., "q2": ..., "q3": ...}

キー 説明
q1 第1四分位数(25パーセンタイル)
q2 第2四分位数(中央値、50パーセンタイル)
q3 第3四分位数(75パーセンタイル)
-- 基本的な使い方
SELECT stat_quartile(score) AS quartiles FROM exam;
-- → {"q1":45.5,"q2":62.0,"q3":78.25}

-- SQLite3 の json_extract() で個別値を取得
SELECT json_extract(stat_quartile(score), '$.q1') AS Q1,
       json_extract(stat_quartile(score), '$.q2') AS Q2,
       json_extract(stat_quartile(score), '$.q3') AS Q3
FROM exam;

-- IQR による外れ値検出(stat_iqr と組み合わせ)
SELECT val,
       CASE
           WHEN val < json_extract(q, '$.q1') - 1.5 * stat_iqr(val)
             OR val > json_extract(q, '$.q3') + 1.5 * stat_iqr(val)
           THEN 'outlier'
           ELSE 'normal'
       END AS status
FROM data,
     (SELECT stat_quartile(val) AS q, stat_iqr(val) AS iqr FROM data);

-- グループごとの四分位数
SELECT category, stat_quartile(price) AS quartiles
FROM products
GROUP BY category;

-- 箱ひげ図の要約統計量
SELECT MIN(val) AS whisker_low,
       json_extract(stat_quartile(val), '$.q1') AS q1,
       json_extract(stat_quartile(val), '$.q2') AS median,
       json_extract(stat_quartile(val), '$.q3') AS q3,
       MAX(val) AS whisker_high
FROM data;

stat_percentile

パーセンタイル(百分位数)を計算する。

構文: stat_percentile(column, p)

パラメータ 説明 範囲
p パーセンタイル位置 0.0 〜 1.0
-- 中央値(50パーセンタイル)
SELECT stat_percentile(score, 0.5) AS median FROM exam;

-- 主要なパーセンタイル
SELECT stat_percentile(response_time, 0.50) AS p50,
       stat_percentile(response_time, 0.90) AS p90,
       stat_percentile(response_time, 0.95) AS p95,
       stat_percentile(response_time, 0.99) AS p99
FROM api_logs;

-- SLA 監視: 95パーセンタイルが閾値以内か
SELECT endpoint,
       stat_percentile(latency_ms, 0.95) AS p95_latency
FROM requests
GROUP BY endpoint
HAVING stat_percentile(latency_ms, 0.95) > 500;

-- 十分位数(デシル)
SELECT stat_percentile(income, 0.1) AS D1,
       stat_percentile(income, 0.2) AS D2,
       stat_percentile(income, 0.5) AS D5,
       stat_percentile(income, 0.9) AS D9
FROM households;

パラメトリック検定

共通: 検定結果の JSON 形式

パラメトリック検定およびノンパラメトリック検定の関数は、結果を JSON 文字列で返す。

{"statistic": 5.744, "p_value": 0.000278, "df": 9}
キー 説明
statistic 検定統計量
p_value p 値(両側検定)
df 自由度(該当しない場合は null

SQLite3 の json_extract() で個別値を取得可能。

-- p値だけを取り出す例
SELECT json_extract(stat_t_test(val, 0), '$.p_value') AS p_value FROM data;

stat_z_test

1標本 z 検定を実行する。母標準偏差が既知の場合に母平均を検定する。

$$z = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}}$$

構文: stat_z_test(column, mu0, sigma)

パラメータ 説明
mu0 帰無仮説の母平均
sigma 既知の母標準偏差

戻り値: JSON {"statistic": z値, "p_value": ..., "df": null}

-- H0: μ = 100 (母標準偏差 σ = 15 が既知)
SELECT stat_z_test(iq_score, 100, 15) AS result FROM students;
-- → {"statistic":2.1,"p_value":0.0357,"df":null}

-- p値のみ取得して有意性判定
SELECT
    json_extract(stat_z_test(weight, 500, 10), '$.p_value') AS p_value,
    CASE
        WHEN json_extract(stat_z_test(weight, 500, 10), '$.p_value') < 0.05
        THEN 'reject H0'
        ELSE 'fail to reject H0'
    END AS decision
FROM products;

-- 製造ラインごとの品質検定(目標値: 100g, 既知σ: 2g)
SELECT line_id,
       stat_z_test(weight, 100.0, 2.0) AS z_test_result
FROM production
GROUP BY line_id;

stat_t_test

1標本 t 検定を実行する。母標準偏差が未知の場合に母平均を検定する。

$$t = \frac{\bar{x} - \mu_0}{s / \sqrt{n}}, \quad df = n - 1$$

構文: stat_t_test(column, mu0)

パラメータ 説明
mu0 帰無仮説の母平均

戻り値: JSON {"statistic": t値, "p_value": ..., "df": ...}

最小データ数: 2

-- H0: μ = 0(差がないかを検定)
SELECT stat_t_test(improvement, 0) AS result FROM treatment;
-- → {"statistic":3.46,"p_value":0.0074,"df":9}

-- 平均体温が 36.5℃ かを検定
SELECT stat_t_test(body_temp, 36.5) AS result FROM patients;

-- p値と信頼区間を同時に取得
SELECT json_extract(stat_t_test(val, 0), '$.p_value') AS p_value,
       stat_ci_mean(val, 0.95) AS confidence_interval
FROM data;

-- グループごとの検定
SELECT department,
       stat_mean(salary) AS mean_salary,
       stat_t_test(salary, 50000) AS test_vs_50k
FROM employees
GROUP BY department;

-- 投薬前後の差の検定(対応のあるデータは差を計算してから)
-- 差 = after - before を事前に計算しておく
SELECT stat_t_test(diff, 0) AS paired_test
FROM (SELECT after_val - before_val AS diff FROM paired_data);

stat_chisq_gof_uniform

カイ二乗適合度検定(均等分布への適合度)を実行する。観測度数が均等分布から乖離しているかを検定する。

$$\chi^2 = \sum_{i=1}^{k}\frac{(O_i - E)^2}{E}, \quad df = k - 1$$

構文: stat_chisq_gof_uniform(column)

戻り値: JSON {"statistic": χ²値, "p_value": ..., "df": ...}

最小データ数: 2

-- サイコロの目が均等に出ているかを検定
-- 各目の出現回数を集計した結果: 1→18, 2→15, 3→20, 4→22, 5→12, 6→13
CREATE TABLE dice (count REAL);
INSERT INTO dice VALUES (18),(15),(20),(22),(12),(13);

SELECT stat_chisq_gof_uniform(count) AS result FROM dice;
-- p_value が大きければ均等と矛盾しない

-- 曜日別のアクセス数が均等かを検定
SELECT stat_chisq_gof_uniform(access_count) AS uniformity_test
FROM (SELECT day_of_week, COUNT(*) AS access_count
      FROM web_logs
      GROUP BY day_of_week);

ノンパラメトリック検定

stat_shapiro_wilk

Shapiro-Wilk 検定を実行する。データが正規分布に従うかを検定する。最も検出力の高い正規性検定の一つ。

構文: stat_shapiro_wilk(column)

戻り値: JSON {"statistic": W値, "p_value": ..., "df": n}

最小データ数: 3

-- 正規性の検定
SELECT stat_shapiro_wilk(score) AS result FROM exam;
-- p_value > 0.05 → 正規分布と矛盾しない

-- 分析手法の選択に利用
SELECT
    stat_shapiro_wilk(val) AS normality_test,
    CASE
        WHEN json_extract(stat_shapiro_wilk(val), '$.p_value') > 0.05
        THEN 'parametric OK (e.g., t-test)'
        ELSE 'use nonparametric (e.g., Wilcoxon)'
    END AS recommendation
FROM data;

-- グループごとの正規性検定
SELECT category,
       stat_shapiro_wilk(measurement) AS normality
FROM samples
GROUP BY category;

-- 歪度・尖度と組み合わせた分布の診断
SELECT stat_shapiro_wilk(val) AS shapiro_wilk,
       stat_skewness(val)     AS skewness,
       stat_kurtosis(val)     AS kurtosis
FROM data;

stat_ks_test

Lilliefors 検定(正規性検定)を実行する。データが正規分布に従うかを検定する。平均と分散をデータから推定するため、既知パラメータの標準 KS 検定ではなく Lilliefors 検定となる。

構文: stat_ks_test(column)

戻り値: JSON {"statistic": D値, "p_value": ..., "df": n}

最小データ数: 2

-- 正規性の Lilliefors 検定
SELECT stat_ks_test(response_time) AS ks_result FROM api_logs;

-- Shapiro-Wilk と Lilliefors の比較
SELECT stat_shapiro_wilk(val) AS shapiro_wilk,
       stat_ks_test(val)      AS lilliefors
FROM data;
-- 一般に Shapiro-Wilk のほうが検出力が高い

-- 大量データに対する正規性検定
-- Lilliefors 検定は大標本でも使いやすい
SELECT stat_ks_test(measurement) AS normality
FROM sensor_data
WHERE sensor_id = 'A001';

stat_wilcoxon

Wilcoxon 符号付順位検定を実行する。ノンパラメトリックな位置の検定。正規性を仮定しない t 検定の代替。

構文: stat_wilcoxon(column, mu0)

パラメータ 説明
mu0 帰無仮説の中央値

戻り値: JSON {"statistic": W値, "p_value": ..., "df": n}

最小データ数: 2

-- H0: 中央値 = 0(処理効果がないかを検定)
SELECT stat_wilcoxon(improvement, 0) AS result FROM treatment;

-- 正規性が疑わしい場合の t 検定の代替
-- まず正規性を確認
SELECT stat_shapiro_wilk(val) AS normality FROM data;
-- p < 0.05 の場合、t 検定の代わりに Wilcoxon を使用
SELECT stat_wilcoxon(val, 100) AS nonparam_test FROM data;

-- t 検定と Wilcoxon の結果を比較
SELECT stat_t_test(val, 0)    AS t_test,
       stat_wilcoxon(val, 0)  AS wilcoxon
FROM data;

-- グループごとのノンパラメトリック検定
SELECT region,
       stat_wilcoxon(delivery_days, 3) AS test_vs_3days
FROM orders
GROUP BY region;

推定

共通: 信頼区間の JSON 形式

信頼区間を返す関数は、結果を JSON 文字列で返す。

{"lower": 3.334, "upper": 7.666, "point_estimate": 5.5, "confidence_level": 0.95}
キー 説明
lower 信頼区間の下限
upper 信頼区間の上限
point_estimate 点推定値
confidence_level 信頼水準

stat_ci_mean

平均の信頼区間(t 分布ベース)を計算する。母標準偏差が未知の場合に使用。

$$\bar{x} \pm t_{\alpha/2, n-1} \cdot \frac{s}{\sqrt{n}}$$

構文: stat_ci_mean(column, confidence)

パラメータ 説明 典型値
confidence 信頼水準 0.90, 0.95, 0.99

戻り値: JSON {"lower": ..., "upper": ..., "point_estimate": ..., "confidence_level": ...}

最小データ数: 2

-- 95% 信頼区間
SELECT stat_ci_mean(score, 0.95) AS ci FROM exam;
-- → {"lower":62.3,"upper":78.7,"point_estimate":70.5,"confidence_level":0.95}

-- 信頼水準を変えて比較
SELECT stat_ci_mean(val, 0.90) AS ci_90,
       stat_ci_mean(val, 0.95) AS ci_95,
       stat_ci_mean(val, 0.99) AS ci_99
FROM data;

-- 下限・上限を取り出して表示
SELECT json_extract(stat_ci_mean(salary, 0.95), '$.lower') AS ci_lower,
       json_extract(stat_ci_mean(salary, 0.95), '$.point_estimate') AS mean,
       json_extract(stat_ci_mean(salary, 0.95), '$.upper') AS ci_upper
FROM employees;

-- グループごとの信頼区間
SELECT department,
       stat_ci_mean(salary, 0.95) AS salary_ci
FROM employees
GROUP BY department;

-- t 検定の結果と信頼区間を並べて表示
SELECT stat_t_test(val, 0) AS t_test,
       stat_ci_mean(val, 0.95) AS ci_95
FROM data;
-- CI が 0 を含まない ⟺ t 検定で p < 0.05

stat_ci_mean_z

平均の信頼区間(z 分布ベース)を計算する。母標準偏差が既知の場合に使用。

$$\bar{x} \pm z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}}$$

構文: stat_ci_mean_z(column, sigma, confidence)

パラメータ 説明
sigma 既知の母標準偏差
confidence 信頼水準

戻り値: JSON {"lower": ..., "upper": ..., "point_estimate": ..., "confidence_level": ...}

最小データ数: 2

-- 母標準偏差 σ=15 が既知の場合の 95% 信頼区間
SELECT stat_ci_mean_z(iq_score, 15, 0.95) AS ci FROM students;

-- t 分布ベースと z 分布ベースの比較
SELECT stat_ci_mean(val, 0.95)       AS ci_t,
       stat_ci_mean_z(val, 3.0, 0.95) AS ci_z
FROM data;
-- n が大きいと両者はほぼ一致する

-- 品質管理: 工程の母標準偏差が管理図で既知の場合
SELECT batch_id,
       stat_ci_mean_z(weight, 0.5, 0.99) AS weight_ci
FROM production
GROUP BY batch_id;

stat_ci_var

分散の信頼区間(カイ二乗分布ベース)を計算する。

$$\left[\frac{(n-1)s^2}{\chi^2_{\alpha/2}},\ \frac{(n-1)s^2}{\chi^2_{1-\alpha/2}}\right]$$

構文: stat_ci_var(column, confidence)

パラメータ 説明 典型値
confidence 信頼水準 0.90, 0.95, 0.99

戻り値: JSON {"lower": ..., "upper": ..., "point_estimate": 標本分散, "confidence_level": ...}

最小データ数: 2

-- 分散の 95% 信頼区間
SELECT stat_ci_var(measurement, 0.95) AS var_ci FROM data;

-- 品質管理: ばらつきの信頼区間
SELECT production_line,
       stat_sample_variance(weight) AS s2,
       stat_ci_var(weight, 0.95) AS variance_ci
FROM products
GROUP BY production_line;

-- 標準偏差の信頼区間に変換
-- CI(σ) = [√lower, √upper]
SELECT SQRT(json_extract(stat_ci_var(val, 0.95), '$.lower')) AS sd_lower,
       stat_sample_stddev(val) AS sd_estimate,
       SQRT(json_extract(stat_ci_var(val, 0.95), '$.upper')) AS sd_upper
FROM data;

stat_moe_mean

平均の誤差マージン (Margin of Error) を計算する。信頼区間の半幅。

$$MOE = t_{\alpha/2, n-1} \cdot \frac{s}{\sqrt{n}}$$

構文: stat_moe_mean(column, confidence)

パラメータ 説明 典型値
confidence 信頼水準 0.90, 0.95, 0.99

最小データ数: 2

-- 95% 信頼水準の誤差マージン
SELECT stat_moe_mean(score, 0.95) AS moe FROM exam;

-- 平均 ± MOE の形式で表示
SELECT stat_mean(val) AS mean,
       stat_moe_mean(val, 0.95) AS moe,
       stat_mean(val) - stat_moe_mean(val, 0.95) AS lower,
       stat_mean(val) + stat_moe_mean(val, 0.95) AS upper
FROM data;

-- 標本サイズの十分性評価
-- MOE が目標精度以内かチェック
SELECT COUNT(val) AS n,
       stat_moe_mean(val, 0.95) AS moe
FROM data;
-- MOE が大きすぎる場合はサンプル数を増やす

-- グループごとの推定精度比較
SELECT region,
       COUNT(score) AS n,
       stat_mean(score) AS mean,
       stat_moe_mean(score, 0.95) AS moe
FROM survey
GROUP BY region;

効果量

stat_cohens_d

Cohen's d(1標本)を計算する。平均と仮説値の差を標本標準偏差で標準化した効果量。

$$d = \frac{\bar{x} - \mu_0}{s}$$

構文: stat_cohens_d(column, mu0)

パラメータ 説明
mu0 比較対象の値(帰無仮説の母平均)

最小データ数: 2

-- 処理効果の大きさ
SELECT stat_cohens_d(improvement, 0) AS effect_size FROM treatment;
-- |d| < 0.2: 効果小、0.2-0.8: 効果中、> 0.8: 効果大

-- t 検定と効果量を合わせて報告
SELECT stat_t_test(val, 100) AS significance,
       stat_cohens_d(val, 100) AS effect_size
FROM data;
-- p 値だけでなく効果量も報告するのが現代的な統計報告

-- グループごとの効果量
SELECT department,
       stat_mean(score) AS mean_score,
       stat_cohens_d(score, 70) AS effect_vs_benchmark
FROM employees
GROUP BY department;

-- 効果量の解釈ガイド
SELECT stat_cohens_d(val, 0) AS d,
       CASE
           WHEN ABS(stat_cohens_d(val, 0)) < 0.2 THEN 'negligible'
           WHEN ABS(stat_cohens_d(val, 0)) < 0.5 THEN 'small'
           WHEN ABS(stat_cohens_d(val, 0)) < 0.8 THEN 'medium'
           ELSE 'large'
       END AS interpretation
FROM data;

stat_hedges_g

Hedges' g(1標本)を計算する。Cohen's d にバイアス補正を適用した効果量。小標本で Cohen's d より正確。

$$g = d \times \left(1 - \frac{3}{4(n-1) - 1}\right)$$

構文: stat_hedges_g(column, mu0)

パラメータ 説明
mu0 比較対象の値

最小データ数: 2

-- バイアス補正付き効果量
SELECT stat_hedges_g(improvement, 0) AS effect_size FROM treatment;

-- Cohen's d と Hedges' g の比較
SELECT stat_cohens_d(val, 0)  AS cohens_d,
       stat_hedges_g(val, 0)  AS hedges_g
FROM data;
-- n が大きいほど両者は一致する
-- n が小さい場合は Hedges' g のほうが正確

-- メタ分析用の効果量計算
SELECT study_group,
       COUNT(outcome) AS n,
       stat_hedges_g(outcome, 0) AS g,
       stat_se(outcome) AS se
FROM clinical_trial
GROUP BY study_group;

時系列

stat_acf_lag

自己相関係数 (Autocorrelation Function) を計算する。時系列データのラグ k における自己相関。

$$r_k = \frac{\sum_{t=1}^{n-k}(x_t - \bar{x})(x_{t+k} - \bar{x})}{\sum_{t=1}^{n}(x_t - \bar{x})^2}$$

構文: stat_acf_lag(column, lag)

パラメータ 説明 範囲
lag ラグ次数 0 以上(0 のとき常に 1.0)

注意: lag がデータ数以上の場合は NULL を返す。

-- ラグ 1 の自己相関
SELECT stat_acf_lag(temperature, 1) AS acf_1 FROM daily_weather;

-- コレログラム(複数ラグの自己相関)
SELECT stat_acf_lag(val, 0) AS lag0,  -- 常に 1.0
       stat_acf_lag(val, 1) AS lag1,
       stat_acf_lag(val, 2) AS lag2,
       stat_acf_lag(val, 3) AS lag3,
       stat_acf_lag(val, 5) AS lag5,
       stat_acf_lag(val, 10) AS lag10
FROM time_series;

-- 季節性の検出(週次データの場合、lag=7 で高い自己相関)
SELECT stat_acf_lag(daily_sales, 7) AS weekly_autocorr
FROM sales_data;

-- 系列の独立性チェック
-- |ACF| が 2/√n 以内なら有意でないとみなす
SELECT stat_acf_lag(residual, 1) AS acf_1,
       2.0 / SQRT(COUNT(*)) AS significance_bound
FROM model_residuals;

ロバスト統計

stat_biweight_midvar

Biweight Midvariance を計算する。外れ値に対して非常にロバストな分散の推定量。Tukey の biweight 関数に基づく。

構文: stat_biweight_midvar(column, c)

パラメータ 説明 典型値
c チューニング定数 9.0(デフォルト的)

c が大きいほど外れ値に寛容になる。c = 9.0 はガウス分布で効率 95% のロバスト推定を与える。

-- 標準的な biweight midvariance (c=9.0)
SELECT stat_biweight_midvar(val, 9.0) AS bwmv FROM data;

-- 標本分散との比較
SELECT stat_sample_variance(val)   AS classical_var,
       stat_biweight_midvar(val, 9.0) AS robust_var,
       stat_mad_scaled(val) * stat_mad_scaled(val) AS mad_squared
FROM data;

-- チューニング定数 c の影響
SELECT stat_biweight_midvar(val, 6.0)  AS strict,   -- 外れ値に厳しい
       stat_biweight_midvar(val, 9.0)  AS standard,  -- 標準的
       stat_biweight_midvar(val, 12.0) AS lenient    -- 外れ値に寛容
FROM data;

-- ロバストな分散推定を用いた品質管理
SELECT batch_id,
       stat_median(weight)              AS center,
       SQRT(stat_biweight_midvar(weight, 9.0)) AS robust_sd
FROM production
GROUP BY batch_id;

リサンプリング

共通: ブートストラップ結果の JSON 形式

ブートストラップ関数は、結果を JSON 文字列で返す。

{"estimate": 5.5, "standard_error": 0.89, "ci_lower": 3.8, "ci_upper": 7.3, "bias": 0.07}
キー 説明
estimate 元データから計算した統計量
standard_error ブートストラップ標準誤差
ci_lower ブートストラップ信頼区間の下限(95%)
ci_upper ブートストラップ信頼区間の上限(95%)
bias バイアス(リプリケート平均 − 推定値)

注意: ブートストラップは乱数を使用するため、実行ごとに結果が若干異なる。再現性が必要な場合は十分な n_bootstrap を指定する。


stat_bootstrap_mean

平均のブートストラップ推定を実行する。リサンプリングにより平均の標準誤差と信頼区間を推定する。

構文: stat_bootstrap_mean(column, n_bootstrap)

パラメータ 説明 典型値
n_bootstrap ブートストラップ反復回数 1000〜10000
-- 1000回のブートストラップ
SELECT stat_bootstrap_mean(score, 1000) AS result FROM exam;

-- ブートストラップ信頼区間と t 分布の信頼区間を比較
SELECT stat_ci_mean(val, 0.95) AS parametric_ci,
       stat_bootstrap_mean(val, 5000) AS bootstrap_ci
FROM data;
-- 正規性が疑わしい場合はブートストラップのほうが信頼できる

-- 標準誤差のみ取り出す
SELECT json_extract(stat_bootstrap_mean(val, 2000), '$.standard_error') AS boot_se,
       stat_se(val) AS analytic_se
FROM data;

-- グループごとのブートストラップ推定
SELECT category,
       stat_bootstrap_mean(price, 1000) AS price_bootstrap
FROM products
GROUP BY category;

stat_bootstrap_median

中央値のブートストラップ推定を実行する。中央値の信頼区間は解析的に求めにくいため、ブートストラップが有用。

構文: stat_bootstrap_median(column, n_bootstrap)

パラメータ 説明 典型値
n_bootstrap ブートストラップ反復回数 1000〜10000
-- 中央値のブートストラップ信頼区間
SELECT stat_bootstrap_median(income, 2000) AS result FROM households;

-- 中央値の推定精度を評価
SELECT stat_median(val) AS median,
       json_extract(stat_bootstrap_median(val, 5000), '$.standard_error') AS se_median,
       json_extract(stat_bootstrap_median(val, 5000), '$.ci_lower') AS ci_lower,
       json_extract(stat_bootstrap_median(val, 5000), '$.ci_upper') AS ci_upper
FROM data;

-- 外れ値がある場合:中央値のブートストラップが平均より安定
SELECT stat_bootstrap_mean(val, 1000)   AS boot_mean,
       stat_bootstrap_median(val, 1000) AS boot_median
FROM data_with_outliers;

stat_bootstrap_stddev

標準偏差のブートストラップ推定を実行する。

構文: stat_bootstrap_stddev(column, n_bootstrap)

パラメータ 説明 典型値
n_bootstrap ブートストラップ反復回数 1000〜10000

最小データ数: 2

-- 標準偏差のブートストラップ推定
SELECT stat_bootstrap_stddev(measurement, 2000) AS result FROM data;

-- 分散の信頼区間と比較
SELECT stat_ci_var(val, 0.95) AS parametric_var_ci,
       stat_bootstrap_stddev(val, 5000) AS bootstrap_sd
FROM data;

-- グループ間のばらつきの比較(ブートストラップで信頼区間付き)
SELECT category,
       stat_sample_stddev(price) AS sd,
       stat_bootstrap_stddev(price, 1000) AS bootstrap
FROM products
GROUP BY category;