具有可变参数作为列表列的时间序列
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
我有一个标题 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