如何找到时间序列变量的斜率

时间:2016-03-31 10:36:13

标签: r regression python

我有类似于此

的时间序列数据
            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 变量的adjecent行(例如8和7.85)的斜率,并将其打印在R或python的不同列中

EDITED

我知道斜率的公式

enter image description here

但问题是我们如何在时间序列数据中区分 x (即日期)值 (这里x是日期,y是val)

1 个答案:

答案 0 :(得分:0)

如果斜率是指(value(y)-value(x))/(yx),那么您的斜率应至少有一个小于数据框的值,因此很难将其显示在同一个数据框中数据框。

在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年是一个双年份,这是正确的!)