如何求时间序列变量的斜率

问题描述 投票:0回答:1

我有一个与此类似的时间序列数据

            val
2015-10-15  7.85
2015-10-16  8
2015-10-19  8.18
2015-10-20  5.39
2015-10-21  2.38
2015-10-22  1.98
2015-10-23  9.25
2015-10-26  14.29
2015-10-27  15.52
2015-10-28  15.93
2015-10-29  15.79
2015-10-30  13.83

我如何找到 val 变量的相邻行(例如 8 和 7.85)的斜率并将其打印在 R 或 python 中的不同列中

我知道斜率的公式是

但问题是我们如何获取时间序列数据中 x(即日期)值的差异 (这里x是日期,y是val)

python r regression
1个回答
0
投票

如果您所说的斜率是指(值(y)-值(x))/(y-x),那么您的斜率应该至少比您的数据框小一个值,因此很难在同一数据框中显示它.

在 R 中,这就是我的答案:

slope<-numeric(length = nrow(df))
for(i in 2:(nrow(df)){
  slope[i-1]<-(df[i-1,"val"]-df[i,"val"])/(as.numeric(df[i-1,1]-df[i,1]))
}
slope[nrow(df)]<-NA
df$slope<-slope

编辑(回答您的版本)

在 R 中,日期是一类数据(如整数、数字或字符)。 例如,我可以定义一个日期向量:

x<-as.Date(c("2015-10-15","2015-10-16"))
print( x )
[1] "2015-10-15" "2015-10-16"

返回 2 个日期的差值:

x[2]-x[1]
Time difference of 1 days

正如您所提到的,您不能除以日期:

2/(x[2]-x[1])
Error in `/.difftime`(2, (x[2] - x[1])) : 
  second argument cannot be "difftime"

这就是我使用 as.numeric 的原因,它强制向量为数值(以天为单位):

2/as.numeric(x[2]-x[1])
[1] 2

证明它有效:

as.numeric(as.Date("2016-10-15")-as.Date("2015-10-16"))
[1] 365

(2016 年是六合年,这是正确的!)

© www.soinside.com 2019 - 2024. All rights reserved.