#r #time-series #simulation #autocorrelation
#r #временные ряды #Симуляция #автокорреляция
Вопрос:
Я пытаюсь смоделировать некоторые данные временных рядов с помощью нескольких наблюдений. Я хочу настроить автокорреляции для каждого человека в течение их собственного периода времени (r = .7). Периоды времени имеют разный размер: size <- c(10, 50, 100, 200, 300, 400, 440, 500)
. Например, у первого человека 10 временных точек, у второго человека 50 временных точек и т.д. В конце я хочу вернуть фрейм данных, который включает id, a и b. Вот что я пробовал, но безрезультатно. Я довольно новичок в R и поэтому ценю любую помощь.
size <- c(10, 50, 100, 200, 300, 400, 440, 500)
results <- sapply(size, function(x)
a=rnorm(size),
ar.epsilon <- arima.sim(list(order = c(1,0,0), ar = 0.7), n = size, sd=20),
b = 50 25*a ar.epsilon,
data.frame(id, a, b))
Комментарии:
1. Не обязательно использовать sapply(), можно также использовать map_dfr() или replicate()
Ответ №1:
Близко ли это к тому, что вы собираетесь делать? Я не уверен, что id
означает.
size <- c(10, 50, 100, 200, 300, 400, 440, 500)
set.seed(420)
results_a <- matrix(NA, nrow = max(size), ncol = length(size))
results_b <- matrix(NA, nrow = max(size), ncol = length(size))
for(i in 1:ncol(results)){
a <- rnorm(size[i])
ar.epsilon <- arima.sim(list(order = c(1,0,0), ar = 0.7), n = size[i], sd=20)
b = size[i]*a ar.epsilon
results_id[]
results_a[c(1:size[i]), i] <- a
results_b[c(1:size[i]), i] <- b
}
colnames(results_a) <- paste0('id.a.', size)
colnames(results_b) <- paste0('id.b.', size)
result_final <- data.frame(results_a, results_b)
result_final <- result_final[, c(1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15, 8, 16)]
head(result_final, 5)
id.a.10 id.b.10 id.a.50 id.b.50 id.a.100 id.b.100 id.a.200 id.b.200 id.a.300 id.b.300
1 0.2677109 4.135141 -1.2479756 -117.59951 0.98359034 62.78846 -0.4334481 -80.73017 -1.2820512 -376.21611
2 -0.9367075 -31.289128 -2.8949090 -177.02084 -0.09517645 -24.60170 -0.2134596 -24.28731 -0.2437892 -105.31801
3 0.5962061 -2.716978 1.1995795 68.50393 -1.13753051 -91.86198 1.2898376 291.26922 0.5395736 118.88174
4 -0.3120436 -22.395355 0.2200063 55.90104 -0.23305847 -32.09204 0.7150280 168.96521 -0.1842391 -63.82123
5 0.3979791 -33.284591 0.9722208 102.26825 -0.45663605 -58.60094 0.4104681 70.51101 1.2605879 373.00674
id.a.400 id.b.400 id.a.440 id.b.440 id.a.500 id.b.500
1 -0.81734653 -354.499825 1.416543 649.6649 -0.7634678 -399.9059
2 1.77813114 670.127238 0.301712 149.6443 0.4791241 210.1626
3 -1.13121629 -501.422591 2.129244 950.8821 1.4002161 710.6371
4 0.08281154 -2.199712 1.321002 610.5567 0.2423353 140.2799
5 0.68390623 262.957092 -1.161112 -497.6224 -0.3141071 -179.2746
Комментарии:
1. Да, это то, что я искал. Спасибо!