无论数据如何,减去两个数据点总是导致 0

Subtraction of two data-points always results in 0, regardless of data

提问人:Bintvelt 提问时间:10/29/2023 更新时间:10/31/2023 访问量:45

问:

我正在处理雅虎的一些财务数据。

我的代码是

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

我希望代码返回第一个数据点之后的所有数据点的简单回报率

r QuantMod 量化金融

评论


答:

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)。