TSQL расчеты для CUSUM - PullRequest
       16

TSQL расчеты для CUSUM

0 голосов
/ 02 июля 2019

Мне нужно рассчитать значения как часть отчета об анализе аберрации. Рассчитанные значения основаны на заданном диапазоне периода времени (базовый уровень, например, 4 недели), периоде задержки (предшествующий период времени, например, 2 недели).

Мне дали расчет в формуле Excel, но мне не ясно, как эти вычисления работают.

Я рассчитал скользящее среднее и стандартное отклонение - оба значения используются в формуле ...

Я искал в Интернете помощь в понимании формулы, используемой для вычисления значения аберрации / Cusum ... Вот формула Excel:

=MAX(0, IF(K9 > ($I$1*J9), ($I$1*J9/2), K9)+ (C10 - (H10 - 0.5*J10)/J10))

C - наблюдаемое значение, K IS CUSUM, I1 - пороговое значение (постоянное значение), J - стандартное отклонение скользящего движения, I - наблюдаемое - ожидаемое, H - ожидаемое (рассчитывается как скользящее среднее).

Я знаю, что это трудно прочитать, и я прошу прощения ... Помощь приветствуется!

Я искал сеть для помощи, и она была относительно бесплодной ...

- эмулирует файл Excel и вычисляет скользящее среднее

- и стандартное отклонение на основе заданной единицы времени, отставания и базовой линии

DECLARE     
    @Threshold AS NUMERIC(10,2) = 2.4,
    @MinTimeInterval AS INT = 2, -- TimeUnit
    @Baseline AS INT = 4,
    @Lag AS INT = 1,
    @Reference AS DECIMAL(12,2) = 0.5

DECLARE @Start INT = @Lag + @Baseline -- Start Period
DECLARE @End INT = @Lag + 1 -- End Period

DECLARE  @RawTable TABLE
(
    RowID INT IDENTITY NOT NULL,
    intValue INT

)

DECLARE @ReportTable TABLE
(
    RowID INT,
    Observed INT,
    Expected DECIMAL(10,2),
    StandardDeviation DECIMAL(10,2)
)

-- Populate the raw table with sample data
INSERT INTO @RawTable (intValue)

SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 0 UNION ALL  SELECT 1 UNION ALL SELECT 2
UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 2 UNION ALL SELECT 7 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 1 UNION ALL  SELECT 3 UNION ALL SELECT 1


INSERT INTO @ReportTable 

SELECT 
    x.RowID,
    x.intValue AS Observed,
    (SELECT CAST(AVG(CAST(b.intValue AS DECIMAL(12,2))) AS DECIMAL(12,2)) FROM @RawTable b WHERE b.RowID BETWEEN x.RowID - @Start AND x.RowID - @End) AS Expected,
    (SELECT CAST(STDEV(CAST(s.intValue AS DECIMAL(12,2))) AS DECIMAL(12,2)) FROM @RawTable s WHERE s.RowID BETWEEN x.RowID - @Start AND x.RowID - @End) AS RollingSTDEV

FROM @RawTable x

SELECT * FROM @ReportTable

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...