REGR_(線形回帰)ファンクション
線形回帰ファンクションは次のとおりです。
-
REGR_SLOPE
-
REGR_INTERCEPT
-
REGR_COUNT
-
REGR_R2
-
REGR_AVGX
-
REGR_AVGY
-
REGR_SXX
-
REGR_SYY
-
REGR_SXY
構文
linear_regr::=
関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。
目的
線形回帰ファンクションは、微分最小2乗法で求めた回帰直線を数値の組の集合に対応付けます。これは、集計ファンクションまたは分析ファンクションとして使用できます。
関連項目:
expr
の書式の詳細は、「集計ファンクション」および「SQL式」を参照してください。
これらのファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。
関連項目:
暗黙的な変換の詳細は、表2-8を参照してください。数値の優先順位の詳細は、「数値の優先順位の詳細」を参照してください。
Oracleは、expr1
またはexpr2
がNULLであるすべての組を排除した後、このファンクションを(expr1
, expr2
)の組の集合に適用します。Oracleは、データでの引渡し中、同時にすべての回帰ファンクションを計算します。
expr1
は、従属変数の値(y
値)として解析されます。expr2
は、独立変数の値(x
値)として解析されます。
-
REGR_SLOPE
は、直線の傾きを戻します。戻り値は数値データ型で、NULLになる場合もあります。NULL (expr1
,expr2
)の組を排除した後、このファンクションは次の計算を行います。COVAR_POP(expr1, expr2) / VAR_POP(expr2)
-
REGR_INTERCEPT
は、回帰直線のy切片を戻します。戻り値は数値データ型で、NULLになる場合もあります。NULL (expr1
,expr2
)の組を排除した後、このファンクションは次の計算を行います。AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)
-
REGR_COUNT
は整数を戻します。この整数は、回帰直線に適応させるために使用されるNULLでない数値の組です。 -
REGR_R2
は、回帰に対する決定係数(Rの2乗または適合度とも呼ぶ)を戻します。戻り値は数値データ型で、NULLになる場合もあります。VAR_POP
(expr1
)およびVAR_POP
(expr2
)は、NULLの組が排除された後に評価されます。戻り値は次のとおりです。NULL if VAR_POP(expr2) = 0 1 if VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 POWER(CORR(expr1,expr),2) if VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0
これ以外のすべての回帰ファンクションの戻り値は数値データ型で、NULLになる場合もあります。
-
REGR_AVGX
は、回帰直線の独立変数(expr2
)の平均を求めます。NULL(expr1
,expr2
)の組を排除した後、このファンクションは次の計算を行います。AVG(expr2)
-
REGR_AVGY
は、回帰直線の従属変数(expr1
)の平均を求めます。NULL(expr1
,expr2
)の組を排除した後、このファンクションは次の計算を行います。AVG(expr1)
REGR_SXY
、REGR_SXX
、REGR_SYY
は補助ファンクションです。これらは、様々な診断統計の計算に使用されます。
-
NULL (
expr1
,expr2
)の組を排除した後、REGR_SXX
は次の計算を行います。REGR_COUNT(expr1, expr2) * VAR_POP(expr2)
-
NULL (
expr1
,expr2
)の組を排除した後、REGR_SYY
は次の計算を行います。REGR_COUNT(expr1, expr2) * VAR_POP(expr1)
-
NULL (
expr1
,expr2
)の組を排除した後、REGR_SXY
は次の計算を行います。REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)
次の例は、サンプル表sh.sales
およびsh.products
に基づいています。
一般的な線形回帰の例
次の例では、分析書式で使用される様々な線形回帰ファンクションを比較します。これらのファンクションの分析書式は、モデル別で従業員ごとに予測される給与の検索などの計算で、回帰統計を使用する場合に有効です。次の個々の線形回帰ファンクションについての項では、これらのファンクションの集計書式の例を示します。
SELECT job_id, employee_id ID, salary, REGR_SLOPE(SYSDATE-hire_date, salary) OVER (PARTITION BY job_id) slope, REGR_INTERCEPT(SYSDATE-hire_date, salary) OVER (PARTITION BY job_id) intcpt, REGR_R2(SYSDATE-hire_date, salary) OVER (PARTITION BY job_id) rsqr, REGR_COUNT(SYSDATE-hire_date, salary) OVER (PARTITION BY job_id) count, REGR_AVGX(SYSDATE-hire_date, salary) OVER (PARTITION BY job_id) avgx, REGR_AVGY(SYSDATE-hire_date, salary) OVER (PARTITION BY job_id) avgy FROM employees WHERE department_id in (50, 80) ORDER BY job_id, employee_id; JOB_ID ID SALARY SLOPE INTCPT RSQR COUNT AVGX AVGY ---------- ----- ---------- ----- --------- ----- ------ ---------- --------- SA_MAN 145 14000 .355 -1707.035 .832 5 12200.000 2626.589 SA_MAN 146 13500 .355 -1707.035 .832 5 12200.000 2626.589 SA_MAN 147 12000 .355 -1707.035 .832 5 12200.000 2626.589 SA_MAN 148 11000 .355 -1707.035 .832 5 12200.000 2626.589 SA_MAN 149 10500 .355 -1707.035 .832 5 12200.000 2626.589 SA_REP 150 10000 .257 404.763 .647 29 8396.552 2561.244 SA_REP 151 9500 .257 404.763 .647 29 8396.552 2561.244 SA_REP 152 9000 .257 404.763 .647 29 8396.552 2561.244 SA_REP 153 8000 .257 404.763 .647 29 8396.552 2561.244 SA_REP 154 7500 .257 404.763 .647 29 8396.552 2561.244 SA_REP 155 7000 .257 404.763 .647 29 8396.552 2561.244 SA_REP 156 10000 .257 404.763 .647 29 8396.552 2561.244 . . .
REGR_SLOPEおよびREGR_INTERCEPTの例
次の例では、サンプル表hr.employees
を使用して、勤務時間(SYSDATE
- hire_date
)と給与に関する線形回帰モデルの傾きと回帰を計算します。結果はjob_id
別にグループ化されます。
SELECT job_id, REGR_SLOPE(SYSDATE-hire_date, salary) slope, REGR_INTERCEPT(SYSDATE-hire_date, salary) intercept FROM employees WHERE department_id in (50,80) GROUP BY job_id ORDER BY job_id; JOB_ID SLOPE INTERCEPT ---------- ----- ------------ SA_MAN .355 -1707.030762 SA_REP .257 404.767151 SH_CLERK .745 159.015293 ST_CLERK .904 134.409050 ST_MAN .479 -570.077291
REGR_COUNTの例
次の例では、サンプル表hr.employees
を使用して、勤務時間(SYSDATE
- hire_date
)と給与について、job_id
別の数を計算します。結果はjob_id
別にグループ化されます。
SELECT job_id, REGR_COUNT(SYSDATE-hire_date, salary) count FROM employees WHERE department_id in (30, 50) GROUP BY job_id ORDER BY job_id, count; JOB_ID COUNT ---------- ---------- PU_CLERK 5 PU_MAN 1 SH_CLERK 20 ST_CLERK 20 ST_MAN 5
REGR_R2の例
次の例では、サンプル表hr.employees
を使用して、勤務時間(SYSDATE
- hire_date
)と給与の線形回帰に対する決定係数を計算します。
SELECT job_id, REGR_R2(SYSDATE-hire_date, salary) Regr_R2 FROM employees WHERE department_id in (80, 50) GROUP by job_id ORDER BY job_id, Regr_R2; JOB_ID REGR_R2 ---------- ---------- SA_MAN .83244748 SA_REP .647007156 SH_CLERK .879799698 ST_CLERK .742808493 ST_MAN .69418508
REGR_AVGYおよびREGR_AVGXの例
次の例では、サンプル表hr.employees
を使用して、勤務時間(SYSDATE
- hire_date
)と給与の平均値を計算します。結果はjob_id
別にグループ化されます。
SELECT job_id, REGR_AVGY(SYSDATE-hire_date, salary) avgy, REGR_AVGX(SYSDATE-hire_date, salary) avgx FROM employees WHERE department_id in (30,50) GROUP BY job_id ORDER BY job_id, avgy, avgx; JOB_ID AVGY AVGX ---------- ---------- ---------- PU_CLERK 2950.3778 2780 PU_MAN 4026.5778 11000 SH_CLERK 2773.0778 3215 ST_CLERK 2872.7278 2785 ST_MAN 3140.1778 7280
REGR_SXY、REGR_SXXおよびREGR_SYYの例
次の例では、サンプル表hr.employees
を使用して、勤務時間(SYSDATE
- hire_date
)と給与の線形回帰について、3種類の診断統計を計算します。
SELECT job_id, REGR_SXY(SYSDATE-hire_date, salary) regr_sxy, REGR_SXX(SYSDATE-hire_date, salary) regr_sxx, REGR_SYY(SYSDATE-hire_date, salary) regr_syy FROM employees WHERE department_id in (80, 50) GROUP BY job_id ORDER BY job_id; JOB_ID REGR_SXY REGR_SXX REGR_SYY ---------- ---------- ----------- ---------- SA_MAN 3303500 9300000.0 1409642 SA_REP 16819665.5 65489655.2 6676562.55 SH_CLERK 4248650 5705500.0 3596039 ST_CLERK 3531545 3905500.0 4299084.55 ST_MAN 2180460 4548000.0 1505915.2