time-series - 使用时间序列数据计算收益时如何避免缺失值
问题描述
我有一个每日收盘价的时间序列数据集。数据格式如下:
+---------------------+
| 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
缺少at 的值,但此处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
解决方案
以下对我有用:
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 |
+-------------------------------------------+
推荐阅读
- excel - VBA当单元格被清除(未删除)时,清除整行并将其下方的行单元格向上移动
- three.js - three.js 中的部分纹理更新
- jquery - 在 fullcalendar 中的 drop 事件上添加背景颜色
- node.js - NodeJS - Sequelize - 存储过程 - 不工作
- sql-server - 为什么在第一次使用 Entity Framework Core 调用存储过程时出现“ConnectionString 属性尚未初始化”错误?
- python-3.x - 打印空列表
- javascript - Thymeleaf javascript根据表格中的文本替换图像源
- java - 线程“主”java.lang.UnsatisfiedLinkError 中的异常:com.printer.PrinterWinAPI.GetStatus(Ljava/lang/String;)J
- sql - 在sql server中将bool更新为不可为空
- javascript - Webpack 如何使用 $translatePartialLoader 缓存半身角翻译?