Как избежать пропущенных значений при расчете доходности с данными временных рядов - PullRequest
0 голосов
/ 12 марта 2019

У меня есть набор данных временного ряда для ежедневных цен закрытия акций.Данные представлены в следующем формате:

     +---------------------+
     |      date     close |
     |---------------------|
  1. | 01sep2008   9210.15 |
  2. | 02sep2008   9229.51 |
  3. | 03sep2008   9239.15 |
  4. | 04sep2008   9239.26 |
  5. | 05sep2008   9342.19 |
     |---------------------|
  6. | 08sep2008   9296.23 |
  7. | 09sep2008   9279.62 |
  8. | 10sep2008   9315.68 |
  9. | 11sep2008   9263.39 |
 10. | 12sep2008   9253.92 |
     +---------------------+

Поскольку торговля не происходит в течение всей недели из-за выходных и даже в течение недели, акция не может быть продана.Поэтому пробелы во временных рядах неизбежны.

Мне нужно использовать следующую формулу для генерации результатов:

gen returns = ln(close/l.close)

Однако из-за пробелов во временных рядах генерируется много пропущенных значений.

Как мне решить эту проблему?

l.close должно быть предыдущим значением цены закрытия независимо от ее даты.

Вывод ниже дает представление о том, что я хочу (сначала я сгенерировал переменную задержки):

     +-------------------------------+
     |      date     close       lag |
     |-------------------------------|
  1. | 01sep2008   9210.15         . |
  2. | 02sep2008   9229.51   9210.15 |
  3. | 03sep2008   9239.15   9229.51 |
  4. | 04sep2008   9239.26   9239.15 |
  5. | 05sep2008   9342.19   9239.26 |
     |-------------------------------|
  6. | 08sep2008   9296.23   9342.19 |
  7. | 09sep2008   9279.62   9296.23 |
  8. | 10sep2008   9315.68   9279.62 |
  9. | 11sep2008   9263.39   9315.68 |
 10. | 12sep2008   9253.92   9263.39 |
     +-------------------------------+

Вместо этого я получаю следующее:

     +-------------------------------+
     |      date     close       lag |
     |-------------------------------|
  1. | 01sep2008   9210.15         . |
  2. | 02sep2008   9229.51   9210.15 |
  3. | 03sep2008   9239.15   9229.51 |
  4. | 04sep2008   9239.26   9239.15 |
  5. | 05sep2008   9342.19   9239.26 |
     |-------------------------------|
  6. | 08sep2008   9296.23         . |
  7. | 09sep2008   9279.62   9296.23 |
  8. | 10sep2008   9315.68   9279.62 |
  9. | 11sep2008   9263.39   9315.68 |
 10. | 12sep2008   9253.92   9263.39 |
     +-------------------------------+

Значение в 08sep2008 отсутствует, но здесь должно быть взято значение 05sep2008.

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

* Example generated by -dataex-. To install: ssc install dataex
clear
 input float(date close)
  17776 9210.15
  17777 9229.51
  17778 9239.15
  17779 9239.26
  17780 9342.19
  17783 9296.23
  17784 9279.62
  17785 9315.68
  17786 9263.39
  17787 9253.92
  17790 9233.21
  17791 9223.77
  17792 9216.23
  17793 9202.31
  17794  9200.6
  17797 9200.22
  17798 9199.51
  17799 9190.75
  17800 9184.15
  17804  9182.8
  17805 9179.68
  17811 9178.97
  17812 9181.48
  17813 9178.73
  17814 9181.35
  17815 9181.35
  17818 9184.24
  17819 9184.24
  17820 9184.24
  17821 9184.24
  17822 9184.24
  17825 9184.75
  17826  9186.9
  17827 9183.74
  17828 9182.88
  17829 9182.88
  17832 9182.88
  17833 9182.88
  17834 9182.88
  17835 9182.88
  end
  format %td date

1 Ответ

2 голосов
/ 22 марта 2019

У меня работает следующее:

sort date

generate lag = close[_n-1]
generate returns = ln(close / close[_n-1])

list in 1/10

     +-------------------------------------------+
     |      date     close       lag     returns |
     |-------------------------------------------|
  1. | 01sep2008   9210.15         .           . |
  2. | 02sep2008   9229.51   9210.15    .0020998 |
  3. | 03sep2008   9239.15   9229.51     .001044 |
  4. | 04sep2008   9239.26   9239.15    .0000118 |
  5. | 05sep2008   9342.19   9239.26     .011079 |
     |-------------------------------------------|
  6. | 08sep2008   9296.23   9342.19   -.0049318 |
  7. | 09sep2008   9279.62   9296.23   -.0017884 |
  8. | 10sep2008   9315.68   9279.62    .0038784 |
  9. | 11sep2008   9263.39   9315.68   -.0056289 |
 10. | 12sep2008   9253.92   9263.39   -.0010228 |
     +-------------------------------------------+
...