Мне нужно рассчитать значения как часть отчета об анализе аберрации. Рассчитанные значения основаны на заданном диапазоне периода времени (базовый уровень, например, 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