いくつかのSQLデータベースは、REGR_SLOPE、REGR_R2、REGR_SXXなどの一連の関数を使用して、値のペアに対して線形回帰を提供します。BigQueryユーザーはどのようにこれらの関数をエミュレートできますか?BigQueryで線形回帰(REGR_)関数をエミュレートするにはどうすればよいですか?
3
A
答えて
3
REGR_機能は、BigQueryのを実装凝集体を含む式に変換することができますが、少し注意がNULLを処理するために取られるべきです。 REGR_関数は、独立変数、それを "x"、従属変数 "y"とし、いずれかの変数がNULLの場合は対を無視してペアを構成します。
次のクエリは、すべてのREGR_式を一度に計算します。これはBigQueryの標準SQLで書かれており、ユーザー定義のSQL関数を利用して問合せをより簡潔にします。式の中でNULLがないかどうかをxとyで調べることにより、このバージョンはキーを保持します。つまり、キーのペアのすべてにNULLが含まれていると、結果はNULLになります。あなたが持つNULLの結果を気にしない場合は
CREATE TEMPORARY FUNCTION NonNullX(y FLOAT64, x FLOAT64)
RETURNS FLOAT64
AS (IF(x IS NOT NULL AND y IS NOT NULL, x, NULL));
CREATE TEMPORARY FUNCTION NonNullY(y FLOAT64, x FLOAT64)
RETURNS FLOAT64
AS (IF(x IS NOT NULL AND y IS NOT NULL, y, NULL));
CREATE TEMPORARY FUNCTION NonNullCount(y FLOAT64, x FLOAT64)
RETURNS INT64
AS (IF(x IS NOT NULL AND y IS NOT NULL, 1, 0));
CREATE TEMPORARY FUNCTION REGR_R2_COEF(y_var FLOAT64, x_var FLOAT64, xy_corr FLOAT64)
RETURNS FLOAT64
AS (IF(x_var = 0, NULL, IF(y_var = 0 AND x_var <> 0, 1, POWER(xy_corr, 2))));
SELECT k,
AVG(NonNullX(y, x)) AS REGR_AVGX,
AVG(NonNullY(y, x)) AS REGR_AVGY,
SUM(NonNullCount(y, x)) AS REGR_COUNT,
AVG(NonNullY(y, x))-(COVAR_POP(NonNullY(y, x), NonNullX(y, x))/VAR_POP(NonNullX(y, x)))*AVG(NonNullX(y, x)) AS REGR_INTERCEPT,
REGR_R2_COEF(VAR_POP(NonNullY(y, x)), VAR_POP(NonNullX(y, x)), CORR(NonNullY(y, x), NonNullX(y, x))) AS REGR_R2,
COVAR_POP(NonNullY(y, x), NonNullX(y, x))/VAR_POP(NonNullX(y, x)) AS REGR_SLOPE,
SUM(NonNullCount(y, x)) * VAR_POP(NonNullX(y, x)) AS REGR_SXX,
SUM(NonNullCount(y, x)) * COVAR_POP(NonNullY(y, x), NonNullX(y, x)) AS REGR_SXY,
SUM(NonNullCount(y, x)) * VAR_POP(NonNullY(y, x)) AS REGR_SYY
FROM Temp.SimpleRegressionData
GROUP BY k;
あなたはWHERE句でNULLを含むペアをフィルタリングでき、として単純化する集約式は次のとおりです。
CREATE TEMPORARY FUNCTION REGR_R2_COEF(y_var FLOAT64, x_var FLOAT64, xy_corr FLOAT64)
RETURNS FLOAT64
AS (IF(x_var = 0, NULL, IF(y_var = 0 AND x_var <> 0, 1, POWER(xy_corr, 2))));
SELECT k,
AVG(x) AS REGR_AVGX,
AVG(y) AS REGR_AVGY,
SUM(1) AS REGR_COUNT,
AVG(y)-(COVAR_POP(y, x)/VAR_POP(x))*AVG(x) AS REGR_INTERCEPT,
REGR_R2_COEF(VAR_POP(y), VAR_POP(x), CORR(y, x)) AS REGR_R2,
COVAR_POP(y, x)/VAR_POP(x) AS REGR_SLOPE,
SUM(1) * VAR_POP(x) AS REGR_SXX,
SUM(1) * COVAR_POP(y, x) AS REGR_SXY,
SUM(1) * VAR_POP(y) AS REGR_SYY
FROM Temp.SimpleRegressionData
WHERE x IS NOT NULL AND Y IS NOT NULL
GROUP BY k;
注これらのクエリのいずれかのことあるキーのすべてのNULLでないxの値が等しい場合、ゼロで除算することができます。
関連する問題
- 1. BigQueryで線形回帰を実行するにはどうすればよいですか?
- 2. この線形回帰関数を改善するにはどうすればよいですか?
- 3. このグラフに線形回帰直線を描くにはどうすればよいですか?
- 4. Rで線形回帰勾配を設定するにはどうすればよいですか?
- 5. Pythonで線形回帰モデルのAICを計算するにはどうすればよいですか?
- 6. 高次線形回帰でcross_val_scoreを使用するにはどうすればよいですか?
- 7. 分割データセットから線形回帰モデルを作成するにはどうすればよいですか?
- 8. python回帰関数は線形回帰曲線に使用する
- 9. NNLSを非負多重線形回帰に使用するにはどうすればよいですか?
- 10. 線形回帰のy切片値を修正するにはどうすればよいですか?
- 11. 線形回帰関数の不具合
- 12. Cypherの線形回帰関数
- 13. プロットに回帰直線方程式を追加するにはどうすればよいですか?
- 14. 線形回帰係数
- 15. 線形回帰
- 16. ラティスのpanel.ablineの回帰直線のサイズを変更するにはどうすればよいですか?
- 17. 私が使って解く線形回帰問題を抱えている線形回帰関数LM
- 18. Rの棒グラフに回帰直線を重ねるにはどうすればよいですか?
- 19. clf.score(X_test、Y_test)は線形回帰にどのように作用しますか?
- 20. 線形回帰コスト関数の等高線グラフをプロットする方法は?
- 21. 対数スケールでのJava線形回帰
- 22. C++で再帰型定義をエミュレートするにはどうすればよいですか?
- 23. 回線の回線幅を調整するにはどうすればよいですか?
- 24. 回線上の回線の反射を確認するにはどうすればよいですか?
- 25. 多変量線形回帰はどのようにして線形になりますか?
- 26. 線形回帰によるTensorflowイメージセグメンテーション
- 27. 反復関数を再帰関数に変換するにはどうすればよいですか?
- 28. HTMLでリストをエミュレートするにはどうすればよいですか?
- 29. NodeJSで「スリープ」をエミュレートするにはどうすればよいですか?
- 30. ワンタップでダブルタップをエミュレートするにはどうすればよいですか?