具有可变参数作为列表列的时间序列

time series with variable parameter as list column

我有一个标题 alpha 表示 AR1 过程的参数:

df = data_frame(alpha = seq(-.5, .5, .1))

现在,对于 alpha 的每个值,我想对长度为 100 的 AR1 过程进行采样,并将这些过程作为列表列添加到 df。 以下无效:

df %>% mutate(ar1 = list(arima.sim(n=100, model=list(ar=alpha))))

新列的每个元素ar1都是完全相同的过程。如何确保列 ar1 的每个元素都是具有相应参数 alpha 的 AR1 过程的实现?

您可以使用 lapply:

library(dplyr)
df = data_frame(alpha = seq(-.5, .5, .1))

df = df %>% 
  mutate(ar1 = lapply(alpha, function(x) arima.sim(n=100, model=list(ar=x))))

map 来自 purrr:

df = df %>% 
  mutate(ar1 = purrr::map(alpha, ~ arima.sim(n=100, model=list(ar=.))))

结果:

> df
# A tibble: 11 x 2
   alpha      ar1
   <dbl>   <list>
 1  -0.5 <S3: ts>
 2  -0.4 <S3: ts>
 3  -0.3 <S3: ts>
 4  -0.2 <S3: ts>
 5  -0.1 <S3: ts>
 6   0.0 <S3: ts>
 7   0.1 <S3: ts>
 8   0.2 <S3: ts>
 9   0.3 <S3: ts>
10   0.4 <S3: ts>
11   0.5 <S3: ts>

> df$ar1 %>% lapply(head)
[[1]]
[1] -0.3514397  0.6665273  0.1932043 -0.5509680 -0.5857840 -0.6412465

[[2]]
[1] -1.3324151  0.9639404 -1.2454844  0.1048227 -0.4667547  1.2749614

[[3]]
[1] -0.2049486 -0.5751628  0.4895776  0.1538311  2.0552770 -1.3351100

[[4]]
[1] -0.1118248  0.4838552  2.7614692 -0.7824381  0.5151733  2.2416832

[[5]]
[1]  1.7293663  0.5335523 -0.4605581 -0.7785337  0.7875933 -0.8702821

[[6]]
[1]  1.15512596 -1.14722217  0.44119379  0.03748791  0.03285100 -0.05754903

[[7]]
[1]  0.5513116  1.4185419 -0.7616093  1.5258314  1.7186733 -0.9435652

[[8]]
[1] -1.0346102 -1.9515274  0.3263094 -0.9846696 -0.1100608  1.2949033

[[9]]
[1]  1.3427732  0.8074878 -2.0393332 -0.0580785  0.9315681  1.1272597

[[10]]
[1]  1.5801751  0.6694740  0.3058637 -0.8653836  0.3402794  1.3181050

[[11]]
[1]  1.7001214  2.8050716  0.6580970  3.0519142  2.3411307 -0.6577423