Расчет AUC для задачи ДДТ с 5 точками данных - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь вычислить площадь под кривой для задачи дисконтирования задержки, используя приведенный ниже синтаксис. Когда я запускаю программу, она дает мне пустой столбец для AUC (он вычисляет cmax, tmax, lagdelay, lagtime и т. Д.), Но не дает мне AUC.

INPUT PROGRAM.
LOOP id=1001 TO 1247.
DO REPEAT v=DDTt1ip DDTt2ip DDTt3ip DDTt4ip DDTt5ip.
COMPUTE v=UNIFORM(25).
END REPEAT.
END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
EXECUTE.
DO REPEAT  h = h0 h1 h2 h3 h4
 / t = 0 1 2 3 4 .
COMPUTE h = t.
END REPEAT.
EXECUTE.

VECTOR time = h0 to h4.
VECTOR delay = DDTt1ip to DDTt5ip.
COMPUTE cmax = MAX(DDTt1ip to DDTt5ip).
COMPUTE tmax = $sysmis.
COMPUTE lagdelay = $sysmis.
COMPUTE lagtime = $sysmis.
COMPUTE auc = 0.
LOOP #k = 1 to 5.
DO IF (NOT(MISSING(delay(#k)))).
IF (NOT(MISSING(lagdelay(#k))))
 auc = auc + (time(#k) - lagtime)*(lagdelay + delay(#k))/2.
IF (delay(#k) = cmax and missing(tmax)) tmax = time(#k).
COMPUTE lagdelay = delay(#k).
COMPUTE lagtime = time(#k).
END IF.
END LOOP.
EXECUTE.

Любая помощь будет принята с благодарностью !!

1 Ответ

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

Тщательно сравните ваш код с оригинальным Technote (https://www -01.ibm.com / support / docview.wss? Uid = swg21476168 ), и вы увидите, что в оригинале нет(#k) для lagdelay, так как lagdelay - это скаляр, а не вектор.

ЕСЛИ (НЕТ (MISSING (lagdelay (#k)))))

в вашем коде должно быть просто

IF (НЕ (MISSING (lagdelay)))

...