Построение лаговой матрицы в R

0

Каждый год несколько человек переезжают в деревню. Это представлено следующим вектором:

x <- c(304, 213, 688, 400, 122, 449, 143, 90)

Ежегодно из села уезжает 10% людей. Доля людей из каждой когорты, остающихся через определенное количество лет (за 10 лет):

decay <- (1-0.1)^(0:10)

Используя R, как мне комбинироватьx а такжеdecay построить матрицу, показывающую количество людей, проживающих в деревне каждый год, из каждой когорты?

Вот пример результата, к которому я стремлюсь:

Изображение 14

Теги:
matrix
CodeFix

1 ответ

2
Лучший ответ

Пусть m - диагональная матрица с x по диагонали. Затем

m <- diag(x)
t(x * .9^(col(m)-row(m))) * (col(m) <= row(m))

давая:

         [,1]     [,2]     [,3]   [,4]    [,5]   [,6]  [,7] [,8]
[1,] 304.0000   0.0000   0.0000   0.00   0.000   0.00   0.0    0
[2,] 273.6000 213.0000   0.0000   0.00   0.000   0.00   0.0    0
[3,] 246.2400 191.7000 688.0000   0.00   0.000   0.00   0.0    0
[4,] 221.6160 172.5300 619.2000 400.00   0.000   0.00   0.0    0
[5,] 199.4544 155.2770 557.2800 360.00 122.000   0.00   0.0    0
[6,] 179.5090 139.7493 501.5520 324.00 109.800 449.00   0.0    0
[7,] 161.5581 125.7744 451.3968 291.60  98.820 404.10 143.0    0
[8,] 145.4023 113.1969 406.2571 262.44  88.938 363.69 128.7   90

В качестве альтернативы используйте двойной цикл for:

m <- diag(x)
for(i in seq_along(x)) 
  for(j in seq_along(x)) 
    m[i, j] <- (x[j] * .9 ^ (i - j)) * (j <= i)
Поделиться
Источник

Другие вопросы

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум