いくつかの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. Cypherの線形回帰関数
- 5. 線形回帰係数
- 6. 私が使って解く線形回帰問題を抱えている線形回帰関数LM
- 7. 対数スケールでのJava線形回帰
- 8. 線形回帰コスト関数の等高線グラフをプロットする方法は?
- 9. ラティスのpanel.ablineの回帰直線のサイズを変更するにはどうすればよいですか?
- 10. 線形回帰によるTensorflowイメージセグメンテーション
- 11. 複数回線形回帰のクロスバリデーションR
- 12. C++で再帰型定義をエミュレートするにはどうすればよいですか?
- 13. 反復関数を再帰関数に変換するにはどうすればよいですか?
- 14. MATLAB:線形回帰
- 15. ログプロット線形回帰
- 16. 線形回帰scala.MatchError:
- 17. Rでの線形回帰すべてのレコードを回帰式にする
- 18. Safariレスキューデザインモードでタッチイベントをエミュレートするにはどうすればよいですか?
- 19. ワンタップでダブルタップをエミュレートするにはどうすればよいですか?
- 20. IE9でIE7をエミュレートするにはどうすればよいですか?
- 21. NodeJSで「スリープ」をエミュレートするにはどうすればよいですか?
- 22. HTMLでリストをエミュレートするにはどうすればよいですか?
- 23. Vim関数のキー入力をエミュレートするにはどうすればよいですか?
- 24. 線形回帰でゼロ傍受を強制するには?
- 25. この関数を再帰的関数に減らすにはどうすればよいですか?
- 26. 線形回帰プロット非線形プロットR
- 27. Javascriptで指数回帰をするにはどうすればよいですか?
- 28. 非線形関数を使用した区分的非線形回帰R
- 29. 複数ファイルの線形回帰をR
- 30. Google Appsのモーダルをエミュレートするにはどうすればよいですか?