我正在从事时间序列分析。为了测试数据的平稳性,我想从数据中得到第一个差异。该数据有 22 个特征列和许多行。数据头如下:
我的问题是,我试图计算出每列(不应使用第二列和第三列)的第一和第二阶差异(不是滞后),以将它们放入平稳性测试中。我的尝试是这样的:
diff1<- c()
for(i in 1:length(city)){
diff1[i]<- paste(city[i],"diff1",sep=".") }
for(x in 1:length(city)){
assign(paste(df[x]), diff((eval(parse(text = city[x])))[,1]))
}
我觉得不应该这么复杂,而且上面的代码并没有算出每个城市列的差异。我该怎么做呢?谢谢。
tsibble
包可以帮助计算差异。此示例添加具有三个特征的第一个差异的列。
library(dplyr)
set.seed(123)
df <- data.frame(
date = c('2000-01-20', '2000-02-20', '2000-03-20', '2000-04-20', '2000-05-20', '2000-06-20'),
Composite.20 = runif(6, 100, 120),
Nation.US = runif(6, 100, 120),
AZ.Phoenix = runif(6, 100, 120)
)
df
#> date Composite.20 Nation.US AZ.Phoenix
#> 1 2000-01-20 105.7516 110.5621 113.5514
#> 2 2000-02-20 115.7661 117.8484 111.4527
#> 3 2000-03-20 108.1795 111.0287 102.0585
#> 4 2000-04-20 117.6603 109.1323 117.9965
#> 5 2000-05-20 118.8093 119.1367 104.9218
#> 6 2000-06-20 100.9111 109.0667 100.8412
df |>
mutate(across(-date, tsibble::difference, .names = '{.col}_first_diff'))
#> date Composite.20 Nation.US AZ.Phoenix Composite.20_first_diff
#> 1 2000-01-20 105.7516 110.5621 113.5514 NA
#> 2 2000-02-20 115.7661 117.8484 111.4527 10.014552
#> 3 2000-03-20 108.1795 111.0287 102.0585 -7.586564
#> 4 2000-04-20 117.6603 109.1323 117.9965 9.480810
#> 5 2000-05-20 118.8093 119.1367 104.9218 1.148998
#> 6 2000-06-20 100.9111 109.0667 100.8412 -17.898216
#> Nation.US_first_diff AZ.Phoenix_first_diff
#> 1 NA NA
#> 2 7.286271 -2.098745
#> 3 -6.819681 -9.394174
#> 4 -1.896406 15.938006
#> 5 10.004372 -13.074745
#> 6 -10.069984 -4.080564
创建于 2024-04-06,使用 reprex v2.0.2