提问人:Bintvelt 提问时间:10/29/2023 更新时间:10/31/2023 访问量:45
无论数据如何,减去两个数据点总是导致 0
Subtraction of two data-points always results in 0, regardless of data
问:
我正在处理雅虎的一些财务数据。
我的代码是
library(forecast)
library(tseries)
library(astsa)
library(fGarch)
library(quantmod)
getSymbols("^gspc",src='yahoo')
adj <- GSPC[, "GSPC.Adjusted", drop = FALSE]
n <- nrow(adj)
simpleReturn <- (adj[2:n,1] - adj[1:(n-1),1]) / adj[1:(n-1),1]
simpleReturn 是一个充满零的表 我检查了一下,甚至 adj[2,1] - adj[1,1] 结果为零,而它应该是 1.74
我希望代码返回第一个数据点之后的所有数据点的简单回报率
答:
0赞
AndS.
10/30/2023
#1
我觉得类/数据类型有些奇怪,以至于简单的减法无法按预期工作。我转换为 tibble 并计算了一切:
library(tidyverse)
as_tibble(adj) |>
mutate(date = date(adj),
simple = (lead(GSPC.Adjusted)-GSPC.Adjusted)/GSPC.Adjusted)
#> # A tibble: 4,235 x 3
#> GSPC.Adjusted date simple
#> <dbl> <date> <dbl>
#> 1 1417. 2007-01-03 0.00123
#> 2 1418. 2007-01-04 -0.00608
#> 3 1410. 2007-01-05 0.00222
#> 4 1413. 2007-01-08 -0.000517
#> 5 1412. 2007-01-09 0.00194
#> 6 1415. 2007-01-10 0.00634
#> 7 1424. 2007-01-11 0.00485
#> 8 1431. 2007-01-12 0.000818
#> 9 1432. 2007-01-16 -0.000894
#> 10 1431. 2007-01-17 -0.00297
#> # i 4,225 more rows
评论
0赞
Bintvelt
10/31/2023
是的,我找到了解决方案。数据以一种奇怪的库特定格式保存。将其转换为另一种数据类型解决了该问题。
1赞
Joshua Ulrich
10/31/2023
它是一个 xts 对象,简单的减法不能按预期工作,因为它有可能创建使用每个时间点不存在的数据的结果。您的答案会这样做,并提供不正确的结果。有关详细信息,请参阅我的回答。
1赞
Joshua Ulrich
10/31/2023
#2
getSymbols()
返回一个 XTS 对象,该对象是一个时间序列。对时间序列数据的所有操作都应按时间戳对齐,xts 会为您完成此操作。转换为非时间序列的类可能会产生许多问题。
您可以使用该函数来计算变化率。ROC()
simpleReturn <- ROC(adj, type = "discrete")
head(simpleReturn)
## GSPC.Adjusted
## 2007-01-03 NA
## 2007-01-04 0.001228286
## 2007-01-05 -0.006084581
## 2007-01-08 0.002220318
## 2007-01-09 -0.000516676
## 2007-01-10 0.001940352
请注意 2007-01-04 的结果如何,但它在 AndS 的答案中。那是因为他们的结果使用了来自未来的数据,在你知道它之前。这是不对时序数据使用时序类时可能发生的严重问题的一个示例。0.0012
-0.00608
我强烈建议您对时间序列数据使用时间序列类。您可以在 CRAN 时序任务视图中找到许多选项。
编辑:另外,请注意,您加载的 5 个包中有 4 个使用时间序列类:zoo (tseries, forecast)、xts (quantmod)、timeSeries (fGarch)。
评论