我有一个股票价格的df,我想计算回报,因此我需要计算今天的价值 - 昨天的每一个滞后。
此外,我希望这会滞后1天,因为我想知道昨天的回归如何影响了我今天的决定。
我试过 import pandas as pd
data = pd.read_csv('table.csv')
但这在某种程度上给了我完全不同的价值观。
以下是一个示例值: 股票1今天的价值为16.49,昨天的价格为16.32,因此我预计在昨天的价值之前,单位的价值为0.17,因为它滞后于1.但公式给出了-0.031。
我想我必须理解错误的代码,有人可以帮助我吗?
编辑:这是一些testdata
时间|股票1
第1天| 18.85
第2天| 18.32
day3 | 18.49
所以我的结果应该是18.49-18.32 = sapply(importData, function(x) diff(x) / lag(x, k=-1))
,因为这个结果滞后1,所以它应该在0.17
的值现在的单元格中。
答案 0 :(得分:2)
试试这些。除了最后一个,没有使用包。
1)普通矢量
x <- c(2, 2.1, 2.2)
c(NA, diff(x) / x[-length(x)])
## [1] NA 0.05000000 0.04761905
仔细检查:
c(NA, (2.1 - 2)/2, (2.2 - 2.1)/2.1)
## [1] NA 0.05000000 0.04761905
1a)日志近似
diff(log(x))
## [1] 0.04879016 0.04652002
diff(log(x))
基于以下内容,其中最后的等于实际上近似等于并且基于近似log(x)= x-1(如果x接近于1)。例如,log(1.01)= 0.009950331接近1.01 - 1 = .01。
diff(log(x))
= c(log(x[2]) - log(x[1]), log(x[3]) - log(x[2]))
= c(log(x[2]/x[1]), log(x[3]/x[2]))
= c(x[2]/x[1] - 1, x[3]/x[2] - 1) (approximately)
2)ts时间序列
tt <- ts(c(2, 2.1, 2.2)
diff(tt) / lag(tt, -1)
## Time Series:
## Start = 2
## End = 3
## Frequency = 1
## [1] 0.05000000 0.04761905
3)动物园时间序列
library(zoo)
z <- zoo(c(2, 2.1, 2.2))
diff(z, arithmetic = FALSE) - 1
## 2 3
## 0.05000000 0.04761905
答案 1 :(得分:1)
如果您想要滞后值,请使用dplyr
函数lag
。见下文
set.seed(1000)
library(dplyr)
df <- data.frame(exp = c("A", "A", "A", "B", "B", "B"),
x = rnorm(6, 2, 3))
df %>% group_by(exp) %>% mutate(x1 = lag(x))
使用您的示例
df <- data.frame(day = c("d1", "d2", "d3"), val = c(18.85, 18.32, 18.49))
df %>% mutate(val1 = lag(val))
你有
day val val1
1 d1 18.85 NA
2 d2 18.32 18.85
3 d3 18.49 18.32
lead
功能与lag