Как рассчитать изменяющееся во времени историческое среднее с помощью Stata

Как я могу рассчитать среднее значение X используя расширяющееся окно как минимум с четырьмя наблюдениями?

Вот числовой пример:

clear 

input X
50.735469
48.278413
42.807671
49.247854
52.20223
49.726689
50.823169
49.099351
48.949562
47.410434
46.654168
44.924652
43.807024
45.679814
48.366395
49.883396
48.230502
49.869179
53.942757
56.167884
56.226512
56.25608
58.765728
62.077038
62.780799
61.858235
61.167646
60.671859
60.480263
60.226433
61.65349
60.769882
61.497553
60.146182
60.292934
60.173739
58.60077
58.445601
60.404868
end

1 ответ

Решение

Изменяющиеся во времени средние значения в расширяющемся временном окне могут быть сформулированы иначе, чтобы подразумевать среднее значение всех значений от начала записей до текущей даты. Вы не указываете переменную времени, поэтому я предполагаю, что данные в порядке, и предоставляю переменную времени.

rangestat (устанавливается из SSC с использованием ssc install rangestat) может дать среднее значение всех значений на сегодняшний день следующим образом:

clear 
input X
50.735469
48.278413
42.807671
49.247854
52.20223
49.726689
50.823169
49.099351
48.949562
47.410434
end 

gen t = _n 

rangestat (count) X (mean) X, int(t . 0) 

list 

    +-------------------------------------+
     |        X    t   X_count      X_mean |
     |-------------------------------------|
  1. | 50.73547    1         1    50.73547 |
  2. | 48.27841    2         2   49.506941 |
  3. | 42.80767    3         3   47.273851 |
  4. | 49.24785    4         4   47.767351 |
  5. | 52.20223    5         5   48.654327 |
     |-------------------------------------|
  6. | 49.72669    6         6   48.833054 |
  7. | 50.82317    7         7   49.117356 |
  8. | 49.09935    8         8   49.115105 |
  9. | 48.94956    9         9   49.096711 |
 10. | 47.41043   10        10   48.928084 |
     +-------------------------------------+

Очевидно, вы можете игнорировать результаты для небольших подсчетов, как вам угодно.

Синтаксис естественно объясняется в help за rangestat: достаточно сказать, что синтаксис для опции, а именно interval(t . 0) - в три раза:

  1. для переменной времени t

и два смещения

  1. как можно дальше назад: система отсутствует . здесь означает сколь угодно большое

  2. вперед всего 0

В математических терминах среднее значение от времени минус бесконечность или, насколько это возможно, до времени 0, настоящего.

count результат - количество наблюдений в окне с не пропущенными значениями на X, Здесь, поскольку переменная времени равна 1, счетчик тривиально совпадает с переменной времени, но в реальных задачах переменная времени с большей вероятностью будет какой-то датой. В отличие от некоторых других команд rangestat не имеет возможности настаивать на минимальном количестве точек с не пропущенными значениями в окне, но вы можете посчитать, сколько их, и принять решение игнорировать те, которые основаны на слишком малом количестве данных. Это оставлено для пользователя здесь.

Кстати, вы могли бы неплохо начать эту проблему, вычислив кумулятивную сумму, а затем разделив ее на количество значений. Это требует осторожности с (например) пробелами в данных, нерегулярно расположенными данными или пропущенными значениями и достоинством rangestat является то, что все такие трудности рассматриваются.

Другие вопросы по тегам