複合集約関数(41関数)
JSON 結果を返す集約関数、2標本検定、生存時間解析等。複数カラムを入力に取り、複合的な統計結果を返す。
← 関数リファレンス に戻る
基本統計量(複数結果)
stat_modes
最頻値(すべて) を JSON 配列で返す。
構文: stat_modes(column)
SELECT stat_modes(score) FROM students;
-- → [85.0, 90.0](複数の最頻値がある場合)
stat_five_number_summary
五数要約(最小値、Q1、中央値、Q3、最大値)を JSON で返す。
構文: stat_five_number_summary(column)
SELECT stat_five_number_summary(val) FROM data;
-- → {"min":1.0,"q1":3.0,"median":5.0,"q3":7.0,"max":10.0}
度数分布
stat_frequency_table
度数表を JSON で返す。
構文: stat_frequency_table(column)
SELECT stat_frequency_table(grade) FROM students;
stat_frequency_count
各値の度数を JSON で返す。
構文: stat_frequency_count(column)
SELECT stat_frequency_count(category) FROM products;
stat_relative_frequency
相対度数を JSON で返す。
構文: stat_relative_frequency(column)
SELECT stat_relative_frequency(rating) FROM reviews;
stat_cumulative_frequency
累積度数を JSON で返す。
構文: stat_cumulative_frequency(column)
SELECT stat_cumulative_frequency(score) FROM exam;
stat_cumulative_relative_frequency
累積相対度数を JSON で返す。
構文: stat_cumulative_relative_frequency(column)
SELECT stat_cumulative_relative_frequency(score) FROM exam;
2標本検定
stat_t_test2
2標本 t 検定(併合分散)を実行する。2カラムにそれぞれのグループの値を渡す。
構文: stat_t_test2(group1, group2)
SELECT stat_t_test2(before_score, after_score) FROM experiment;
-- → {"statistic":...,"p_value":...,"df":...}
stat_t_test_welch
Welch t 検定(等分散を仮定しない2標本検定)を実行する。
構文: stat_t_test_welch(group1, group2)
SELECT stat_t_test_welch(control, treatment) FROM trial;
stat_chisq_independence
カイ二乗独立性検定を実行する。2つのカテゴリカル変数を渡す。
構文: stat_chisq_independence(col1, col2)
SELECT stat_chisq_independence(gender, preference) FROM survey;
stat_f_test
F 検定(2群の分散比較)を実行する。
構文: stat_f_test(group1, group2)
SELECT stat_f_test(method_a, method_b) FROM quality;
stat_mann_whitney
Mann-Whitney U 検定(ノンパラメトリックな2標本検定)を実行する。
構文: stat_mann_whitney(group1, group2)
SELECT stat_mann_whitney(drug, placebo) FROM trial;
分散分析
stat_anova1
一元配置分散分析を実行する。第1引数に値、第2引数にグループラベルを渡す。
構文: stat_anova1(value, group)
SELECT stat_anova1(score, class) FROM students;
-- → {"f_statistic":...,"p_value":...,"df_between":...,"df_within":...}
カテゴリカル
stat_contingency_table
分割表を JSON で作成する。2つのカテゴリカル変数を渡す。
構文: stat_contingency_table(col1, col2)
SELECT stat_contingency_table(treatment, outcome) FROM patients;
効果量(2標本)
stat_cohens_d2
Cohen's d(2標本) を計算する。
構文: stat_cohens_d2(group1, group2)
SELECT stat_cohens_d2(control, treatment) FROM experiment;
stat_hedges_g2
Hedges' g(2標本) を計算する(小標本補正付き)。
構文: stat_hedges_g2(group1, group2)
SELECT stat_hedges_g2(control, treatment) FROM experiment;
stat_glass_delta
Glass's Delta を計算する(対照群の標準偏差で標準化)。
構文: stat_glass_delta(control, treatment)
SELECT stat_glass_delta(control, treatment) FROM experiment;
2標本差の信頼区間
stat_ci_mean_diff
2標本平均差の信頼区間(併合分散)を JSON で返す。
構文: stat_ci_mean_diff(group1, group2)
SELECT stat_ci_mean_diff(before_val, after_val) FROM study;
stat_ci_mean_diff_welch
2標本平均差の信頼区間(Welch 法) を JSON で返す。
構文: stat_ci_mean_diff_welch(group1, group2)
SELECT stat_ci_mean_diff_welch(control, treatment) FROM trial;
生存時間解析
stat_kaplan_meier
Kaplan-Meier 生存曲線を JSON で返す。
構文: stat_kaplan_meier(time, event)
| パラメータ | 説明 |
|---|---|
time |
生存時間 |
event |
イベント発生(1)/ 打ち切り(0) |
SELECT stat_kaplan_meier(survival_time, event_flag) FROM patients;
stat_nelson_aalen
Nelson-Aalen 累積ハザード推定を JSON で返す。
構文: stat_nelson_aalen(time, event)
SELECT stat_nelson_aalen(time, event) FROM survival_data;
stat_logrank
Log-rank 検定(2群の生存曲線の比較)を JSON で返す。3カラムを受け取る。
構文: stat_logrank(time, event, group)
| パラメータ | 説明 |
|---|---|
time |
生存時間 |
event |
イベント発生(1)/ 打ち切り(0) |
group |
グループラベル |
SELECT stat_logrank(time, event, treatment_group) FROM clinical_trial;
リサンプリング
stat_bootstrap
汎用ブートストラップ推定を JSON で返す。
構文: stat_bootstrap(column, n_bootstrap)
SELECT stat_bootstrap(val, 1000) FROM data;
stat_bootstrap_bca
BCa(bias-corrected and accelerated)ブートストラップを JSON で返す。
構文: stat_bootstrap_bca(column, n_bootstrap)
SELECT stat_bootstrap_bca(val, 1000) FROM data;
stat_bootstrap_sample
ブートストラップサンプルを JSON 配列で生成する。
構文: stat_bootstrap_sample(column)
SELECT stat_bootstrap_sample(val) FROM data;
stat_permutation_test2
2標本置換検定を JSON で返す。
構文: stat_permutation_test2(group1, group2)
SELECT stat_permutation_test2(control, treatment) FROM experiment;
stat_permutation_paired
対応のある置換検定を JSON で返す。
構文: stat_permutation_paired(x, y)
SELECT stat_permutation_paired(before, after) FROM paired_data;
stat_permutation_corr
相関の置換検定を JSON で返す。
構文: stat_permutation_corr(x, y)
SELECT stat_permutation_corr(study_hours, test_score) FROM students;
時系列
stat_acf
自己相関関数(ACF)を JSON 配列で返す。
構文: stat_acf(column, max_lag)
SELECT stat_acf(price, 20) FROM stock_daily;
stat_pacf
偏自己相関関数(PACF)を JSON 配列で返す。
構文: stat_pacf(column, max_lag)
SELECT stat_pacf(price, 20) FROM stock_daily;
サンプリング
stat_sample_replace
復元抽出(重複あり)を JSON 配列で返す。
構文: stat_sample_replace(column, n)
SELECT stat_sample_replace(val, 10) FROM data;
stat_sample
非復元抽出(重複なし)を JSON 配列で返す。
構文: stat_sample(column, n)
SELECT stat_sample(val, 5) FROM data;
群列パターンの検定
stat_anova1 と同じく「値列 + 群列」を取る。群は群列の値の昇順に
0, 1, 2, … と番号が振られる。
| 関数 | 構文 | 説明 |
|---|---|---|
stat_kruskal_wallis |
stat_kruskal_wallis(val, grp) |
Kruskal-Wallis 検定 |
stat_levene |
stat_levene(val, grp) |
Levene 検定(等分散性) |
stat_bartlett |
stat_bartlett(val, grp) |
Bartlett 検定(等分散性) |
stat_cohens_f |
stat_cohens_f(val, grp) |
Cohen's f(分散分析の効果量) |
stat_kruskal_wallis は一元配置分散分析のノンパラメトリック版で、正規性が
疑わしい場合に使う。R の kruskal.test() と一致する。
stat_levene と stat_bartlett は、stat_anova1 や stat_t_test2 が前提と
する等分散性を検定する。Levene は中央値基準の Brown-Forsythe 版で、
正規性からの逸脱に頑健であり、R の car::leveneTest() の既定と一致する。
Bartlett は正規分布を前提とし、それが成り立つ場合により検出力が高い。
R の bartlett.test() と一致する。
いずれも {"statistic", "p_value", "df"} を返す。群が 2 つ未満の場合は
NULL を返す。NULL 行は群分割の前に除外される。
-- 分散分析の前に等分散性を確認する
SELECT stat_levene(score, class_id) AS levene,
stat_bartlett(score, class_id) AS bartlett,
stat_anova1(score, class_id) AS anova
FROM exam_results;
-- 正規性が疑わしい場合はノンパラメトリック検定を使う
SELECT stat_kruskal_wallis(score, class_id) FROM exam_results;
事後検定
| 関数 | 構文 |
|---|---|
stat_tukey_hsd |
stat_tukey_hsd(val, grp [,alpha]) |
stat_bonferroni_posthoc |
stat_bonferroni_posthoc(val, grp [,alpha]) |
stat_scheffe_posthoc |
stat_scheffe_posthoc(val, grp [,alpha]) |
stat_dunnett_posthoc |
stat_dunnett_posthoc(val, grp [,ctrl, alpha]) |
stat_anova1 が有意差を示した後に、どの群同士が異なるかを特定する。
一元配置分散分析は内部で実行されるため、値列と群列をそのまま渡せばよい。
alpha の既定値は 0.05、Dunnett の対照群添字 ctrl の既定値は 0。
保守性は Tukey < Bonferroni < Scheffe の順に強くなる。Dunnett は対照群との 比較のみを行うため、比較数は k(k-1)/2 ではなく k-1 になる。
戻り値:
{"method": "Tukey HSD", "alpha": 0.05, "mse": 2.5, "df_error": 12,
"comparisons": [
{"group1": 0, "group2": 1, "mean_diff": -9.0, "se": 0.707,
"statistic": 12.73, "p_value": 3.08e-06,
"lower": -11.67, "upper": -6.33, "significant": true}]}
符号の規約:
mean_diffは group1 - group2 であり、group1 には常に 小さい方の添字が入る。R のTukeyHSD()は逆向き("2-1")で報告するため、 平均差と信頼区間の上下限が R とは符号反転して見える。絶対値と p 値は同一。注意:
stat_dunnett_posthocは厳密な多変量 t 分布ではなく Bonferroni 近似を用いるため、R のmultcomp::glht()よりわずかに保守的になる。
-- 分散分析で有意差が出た後、どのクラス間で差があるかを調べる
SELECT stat_tukey_hsd(score, class_id) FROM exam_results;
-- 有意なペアだけを抽出する
SELECT json_extract(c.value, '$.group1') AS g1,
json_extract(c.value, '$.group2') AS g2,
json_extract(c.value, '$.p_value') AS p
FROM (SELECT stat_tukey_hsd(score, class_id) AS j FROM exam_results) t,
json_each(t.j, '$.comparisons') c
WHERE json_extract(c.value, '$.significant');
-- 全処理群を対照群(添字 0)と比較する
SELECT stat_dunnett_posthoc(score, class_id, 0, 0.05) FROM exam_results;
層化抽出
| 関数 | 構文 |
|---|---|
stat_stratified_sample |
stat_stratified_sample(val, grp [,ratio]) |
各層から同じ割合で抽出するため、標本の層構成が母集団と一致する。
ratio は (0, 1] の範囲で、既定値は 0.5。抽出された値の JSON 配列を返す。
-- 地域構成を保ったまま各地域から 30% を抽出する
SELECT stat_stratified_sample(revenue, region_id, 0.3) FROM sales;
注意: 抽出は無作為であり、現時点では再現性がない(シード指定の手段が まだ提供されていない)。