Построение лаговой матрицы в R
Каждый год несколько человек переезжают в деревню. Это представлено следующим вектором:
x <- c(304, 213, 688, 400, 122, 449, 143, 90)
Ежегодно из села уезжает 10% людей. Доля людей из каждой когорты, остающихся через определенное количество лет (за 10 лет):
decay <- (1-0.1)^(0:10)
Используя R, как мне комбинироватьx
а такжеdecay
построить матрицу, показывающую количество людей, проживающих в деревне каждый год, из каждой когорты?
Вот пример результата, к которому я стремлюсь:

1 ответ
Пусть 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)
Другие вопросы
- Создайте сводную таблицу двух категориальных и числовых переменных1 ответ
У меня есть следующий гипотетический фреймворкRegion <- c("District A", "District B","District A","District A","District B") Gender <- c("Male","Male","Female", "Male","Female") Age <- c(20, ...
- Создайте цикл для генерации имен столбцов в большом списке1 ответ
Я хотел бы создать цикл, чтобы изменить имена столбцов, как показано:a <- c("day", "month", "year", "flow") У меня есть большой список из 6937 элементов, которые мне удалось импортировать в R:library(tidyverse) library(readtext) txt_files_ls <- paste...

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