Вычисление скользящего среднего абсолютного отклонения - PullRequest
1 голос
/ 22 октября 2019

Я пытаюсь вычислить скользящее среднее абсолютное отклонение (MAD) переменной x для каждой группы id, используя 20 наблюдения.

Пример данных:

clear
set obs 100

generate id = _n
expand 100

generate x = rnormal()
bysort id: generate time = _n

Мне уже удалось вычислить медиану для скользящих наблюдений с помощью команды *1010*, предоставленной сообществом rangestat:

rangestat (median)  x, by(id) interval(time -20 0)  // this works

Затем я попытался использовать сообщество -contributed команда tsegen с функцией egen mad() для вычисления абсолютного отклонения скользящего медианного значения:

xtset id time
tsegen mad_x = mad(L(0/20).x) // this does not work

Однако эта последняя команда приводит к следующей ошибке:

x__000001__000002__000003__000004__000005__000006__000007__000008__000009__00000A__00000B__00000C__00000D__00000E__00000F__00000G__00
> 000H__00000I__00000J__00000K invalid name
r(198);

Как я могу передать требование "использовать 20 наблюдений" в mad()?

Перекрестно опубликовано Statalist .

1 Ответ

1 голос
/ 23 октября 2019

Мое предпочтительное решение было опубликовано в Statalist здесь .

Другое решение заключается в добавлении лаговых переменных и вычислении MAD вручную:

xtset id time

rangestat (median) x (count) x, by(id) interval(time -20 -1)

/* Add lagged values */

forvalues i = 1 / 20 {
    generate double L`i'x = abs(L`i'.x - x_median)
}

/* Compute median of those /*

egen mad = rowmedian(L*x)
...