Skip to content

2カラム集約関数(27関数)

2カラムの集約関数。SELECT stat_xxx(column_x, column_y) FROM table の形式で使用する。GROUP BYHAVING、サブクエリなど SQLite3 の標準的な集約関数が使えるすべての文脈で利用可能。

関数リファレンス に戻る


相関・共分散

stat_population_covariance

母共分散を計算する。

$$\text{Cov}{pop}(X,Y) = \frac{1}{n}\sum{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})$$

構文: stat_population_covariance(column_x, column_y)

最小データ数: 1

-- 2つの変数の母共分散
SELECT stat_population_covariance(height, weight) FROM students;

-- グループごとの共分散
SELECT department,
       stat_population_covariance(experience, salary) AS cov
FROM employees
GROUP BY department;

stat_covariance

標本共分散(不偏共分散)を計算する。

$$\text{Cov}(X,Y) = \frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})$$

構文: stat_covariance(column_x, column_y)

最小データ数: 2

SELECT stat_covariance(x, y) FROM measurements;

stat_pearson_r

ピアソン積率相関係数を計算する。

$$r = \frac{\text{Cov}(X,Y)}{s_X \cdot s_Y}$$

構文: stat_pearson_r(column_x, column_y)

最小データ数: 2 戻り値の範囲: -1.0 〜 1.0

-- 身長と体重の相関
SELECT stat_pearson_r(height, weight) FROM students;

-- 相関行列的な分析
SELECT 'height-weight' AS pair, stat_pearson_r(height, weight) AS r FROM data
UNION ALL
SELECT 'height-age', stat_pearson_r(height, age) FROM data
UNION ALL
SELECT 'weight-age', stat_pearson_r(weight, age) FROM data;

-- グループごとの相関
SELECT region,
       stat_pearson_r(advertising, sales) AS correlation
FROM marketing
GROUP BY region;

stat_spearman_r

スピアマン順位相関係数を計算する。データを順位に変換してからピアソン相関を計算する。外れ値や非線形な単調関係に対してロバスト。

構文: stat_spearman_r(column_x, column_y)

最小データ数: 2 戻り値の範囲: -1.0 〜 1.0

-- 順位相関(外れ値に強い)
SELECT stat_spearman_r(rank_math, rank_english) FROM students;

-- ピアソンとスピアマンを比較(非線形性の検出)
SELECT stat_pearson_r(x, y) AS pearson,
       stat_spearman_r(x, y) AS spearman
FROM data;

stat_kendall_tau

ケンドール順位相関係数(タウb)を計算する。同順位(タイ)を考慮した順位相関。

構文: stat_kendall_tau(column_x, column_y)

最小データ数: 2 戻り値の範囲: -1.0 〜 1.0

-- 順位相関(タイ処理あり)
SELECT stat_kendall_tau(preference_a, preference_b) FROM survey;

-- 3種類の相関係数を比較
SELECT stat_pearson_r(x, y) AS pearson,
       stat_spearman_r(x, y) AS spearman,
       stat_kendall_tau(x, y) AS kendall
FROM data;

stat_weighted_covariance

重み付き共分散を計算する。重みが等しい場合は標本共分散と一致する。

構文: stat_weighted_covariance(column_values, column_weights)

最小データ数: 2

-- 信頼度で重み付けした共分散
SELECT stat_weighted_covariance(measurement, confidence) FROM results;

重み付き統計量

stat_weighted_mean

重み付き平均を計算する。

$$\bar{x}_w = \frac{\sum w_i x_i}{\sum w_i}$$

構文: stat_weighted_mean(column_values, column_weights)

最小データ数: 1

-- 信頼度で重み付けした平均
SELECT stat_weighted_mean(score, confidence) FROM evaluations;

-- 人口重み付き平均所得
SELECT stat_weighted_mean(income, population) FROM regions;

-- グループ別の重み付き平均
SELECT category,
       stat_weighted_mean(price, quantity) AS weighted_avg_price
FROM products
GROUP BY category;

stat_weighted_harmonic_mean

重み付き調和平均を計算する。速度や比率の加重平均に適切。

構文: stat_weighted_harmonic_mean(column_values, column_weights)

最小データ数: 1(全値が正であること)

-- 距離で重み付けした速度の調和平均
SELECT stat_weighted_harmonic_mean(speed, distance) FROM trips;

stat_weighted_variance

重み付き分散を計算する。

構文: stat_weighted_variance(column_values, column_weights)

最小データ数: 2

SELECT stat_weighted_variance(return_rate, market_cap) FROM stocks;

stat_weighted_stddev

重み付き標準偏差を計算する(重み付き分散の平方根)。

構文: stat_weighted_stddev(column_values, column_weights)

最小データ数: 2

SELECT stat_weighted_stddev(score, sample_size) FROM studies;

stat_weighted_median

重み付き中央値を計算する。

構文: stat_weighted_median(column_values, column_weights)

最小データ数: 1

-- 人口重み付き中央値所得
SELECT stat_weighted_median(median_income, population) FROM cities;

stat_weighted_percentile

重み付きパーセンタイルを計算する。

構文: stat_weighted_percentile(column_values, column_weights, p)

パラメータ 説明 範囲
p パーセンタイル位置 0.0〜1.0

最小データ数: 1

-- 重み付き 25パーセンタイル
SELECT stat_weighted_percentile(income, population, 0.25) FROM regions;

-- 重み付き中央値(= weighted_median と同等)
SELECT stat_weighted_percentile(income, population, 0.5) FROM regions;

線形回帰

stat_simple_regression

単回帰分析を実行する。最小二乗法による回帰直線の各種統計量を JSON で返す。

$$y = a + bx$$

構文: stat_simple_regression(column_x, column_y)

戻り値: JSON

{
  "intercept": 切片 a,
  "slope": 傾き b,
  "r_squared": 決定係数 ,
  "adj_r_squared": 自由度調整済み ,
  "intercept_se": 切片の標準誤差,
  "slope_se": 傾きの標準誤差,
  "intercept_t": 切片の t ,
  "slope_t": 傾きの t ,
  "intercept_p": 切片の p ,
  "slope_p": 傾きの p ,
  "f_statistic": F 統計量,
  "f_p_value": F 検定の p ,
  "residual_se": 残差標準誤差
}

最小データ数: 3

-- 単回帰分析
SELECT stat_simple_regression(study_hours, score) FROM students;

-- 傾きと p 値を抽出
SELECT json_extract(stat_simple_regression(x, y), '$.slope') AS slope,
       json_extract(stat_simple_regression(x, y), '$.slope_p') AS p_value
FROM data;

-- グループごとの回帰
SELECT department,
       stat_simple_regression(experience, salary) AS regression
FROM employees
GROUP BY department;

stat_r_squared

決定係数 (R²) を計算する。実測値と予測値の適合度を評価する。

$$R^2 = 1 - \frac{SS_{res}}{SS_{tot}}$$

構文: stat_r_squared(column_actual, column_predicted)

最小データ数: 2 戻り値の範囲: 通常 0.0〜1.0(負になる場合もある)

-- モデルの適合度
SELECT stat_r_squared(actual_sales, predicted_sales) FROM forecasts;

stat_adjusted_r_squared

自由度調整済み決定係数 を計算する。説明変数の数(1と仮定)で補正した R²。

構文: stat_adjusted_r_squared(column_actual, column_predicted)

最小データ数: 3

-- 調整済み R² と R² を比較
SELECT stat_r_squared(actual, predicted) AS r2,
       stat_adjusted_r_squared(actual, predicted) AS adj_r2
FROM model_results;

対応のある検定・2標本検定

stat_t_test_paired

対応のある t 検定を実行する。差 d = x - y に対して母平均が 0 かを検定する。

$$t = \frac{\bar{d}}{s_d / \sqrt{n}}, \quad df = n - 1$$

構文: stat_t_test_paired(column_x, column_y)

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

最小データ数: 2

-- 薬の効果(投薬前 vs 投薬後)
SELECT stat_t_test_paired(before_treatment, after_treatment) FROM patients;

-- p 値のみ抽出
SELECT json_extract(
    stat_t_test_paired(pre_score, post_score), '$.p_value'
) AS p_value
FROM training_data;

stat_chisq_gof

カイ二乗適合度検定を実行する。観測値が期待値に適合するかを検定する。

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

構文: stat_chisq_gof(column_observed, column_expected)

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

最小データ数: 2

-- 期待分布との適合検定
SELECT stat_chisq_gof(observed_count, expected_count) FROM frequency_data;

誤差指標

stat_mae

平均絶対誤差 (MAE) を計算する。

$$\text{MAE} = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i|$$

構文: stat_mae(column_actual, column_predicted)

最小データ数: 1

-- 予測誤差の評価
SELECT stat_mae(actual, predicted) AS mae FROM forecasts;

-- 複数モデルの比較
SELECT 'model_A' AS model, stat_mae(actual, pred_a) AS mae FROM results
UNION ALL
SELECT 'model_B', stat_mae(actual, pred_b) FROM results;

stat_mse

平均二乗誤差 (MSE) を計算する。

$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$

構文: stat_mse(column_actual, column_predicted)

最小データ数: 1

SELECT stat_mse(actual, predicted) AS mse FROM forecasts;

stat_rmse

二乗平均平方根誤差 (RMSE) を計算する。MSE の平方根。

$$\text{RMSE} = \sqrt{\text{MSE}}$$

構文: stat_rmse(column_actual, column_predicted)

最小データ数: 1

SELECT stat_rmse(actual, predicted) AS rmse FROM forecasts;

stat_mape

平均絶対パーセント誤差 (MAPE) を計算する。パーセンテージ(%)で返す。

$$\text{MAPE} = \frac{100}{n}\sum_{i=1}^{n}\left|\frac{y_i - \hat{y}_i}{y_i}\right|$$

構文: stat_mape(column_actual, column_predicted)

最小データ数: 1(actual が 0 の行は除外)

SELECT stat_mape(actual_sales, predicted_sales) AS mape_pct FROM forecasts;

距離指標

stat_euclidean_dist

ユークリッド距離 (L2 ノルム) を計算する。

$$d = \sqrt{\sum_{i=1}^{n}(a_i - b_i)^2}$$

構文: stat_euclidean_dist(column_a, column_b)

最小データ数: 1

-- 2つのベクトル間のユークリッド距離
SELECT stat_euclidean_dist(feature_a, feature_b) FROM data;

stat_manhattan_dist

マンハッタン距離 (L1 ノルム) を計算する。

$$d = \sum_{i=1}^{n}|a_i - b_i|$$

構文: stat_manhattan_dist(column_a, column_b)

最小データ数: 1

SELECT stat_manhattan_dist(x, y) FROM coordinates;

stat_cosine_sim

コサイン類似度を計算する。

$$\text{sim} = \frac{\mathbf{a} \cdot \mathbf{b}}{|\mathbf{a}||\mathbf{b}|}$$

構文: stat_cosine_sim(column_a, column_b)

最小データ数: 1 戻り値の範囲: -1.0〜1.0

-- ベクトルの類似度
SELECT stat_cosine_sim(user_a_rating, user_b_rating) FROM item_ratings;

stat_cosine_dist

コサイン距離を計算する。1 - cosine_similarity

構文: stat_cosine_dist(column_a, column_b)

最小データ数: 1 戻り値の範囲: 0.0〜2.0

SELECT stat_cosine_dist(vec_a, vec_b) FROM embeddings;

stat_minkowski_dist

ミンコフスキー距離 (Lp ノルム) を計算する。

$$d = \left(\sum_{i=1}^{n}|a_i - b_i|^p\right)^{1/p}$$

構文: stat_minkowski_dist(column_a, column_b, p)

パラメータ 説明 典型値
p 次数パラメータ p=1: マンハッタン, p=2: ユークリッド

最小データ数: 1

-- L3 ノルム
SELECT stat_minkowski_dist(x, y, 3.0) FROM data;

stat_chebyshev_dist

チェビシェフ距離 (L∞ ノルム) を計算する。要素間の差の最大値。

$$d = \max_i |a_i - b_i|$$

構文: stat_chebyshev_dist(column_a, column_b)

最小データ数: 1

SELECT stat_chebyshev_dist(x, y) FROM data;