Рассчитайте численность населения с помощью нескольких матриц субгодовых прогнозов
У меня есть вектор популяции с молодыми и взрослыми, и я хотел бы записывать новый размер популяции после каждого субгодового перехода. Ожидаемый результат будет иметь исходный вектор населения в первой строке и население на каждом последующем временном шаге в следующей строке. Я изменил код, представленный в разделе 4 здесь, но не пришел к тому, что мне нужно https://hankstevens.github.io/Primer-of-Ecology/DID.html . Исходный алгоритм использует матрицу годового прогноза и проектное население. на 8 лет.
A <- matrix(c(0, .3, 2, .7), nrow=2) # spring transition matrix
B <- matrix(c(0.5, .3, 3, .7), nrow = 2) # summer transition matrix
C <- matrix(c(0, .3, 4, .7), nrow=2) # fall transition matrix
D <- matrix(c(0.1, .1, 6, .7), nrow = 2) # winter transition matrix
N0 <- c(Juveniles=1,Adults=10) # initial population
steps <- 12 # number of time steps; each chain of 4 time step represent a year
Моя грубая идея состоит в том, чтобы записывать размер популяции в конце каждого сезона в каждой строке пустой матрицы.
N
.
# with a column for each stage and a row for each time step
N <- rbind(N0, matrix(0, ncol=2, nrow=steps) )
# use a for-loop to project the population each season and store it.
for(t in 1:steps) {
N[t+1,] <- A%*%N[t,]
N[t+2,] <- B%*%A%*%N[t,]
N[t+3,] <- C%*%B%*%A%*%N[t,]
N[t+4,] <- D%*%C%*%B%*%A%*%N[t,]
N[t+5,] <- A%*%D%*%C%*%B%*%A%*%N[t,]
}
Чтобы продолжить, в
N[t+6,]
, население должно быть
B%*%A%*%D%*%C%*%B%*%A%*%N[t,]
, и так далее.
В этот момент я получил ошибку
Error in D %*% C : requires numeric/complex matrix/vector arguments
, что я не понимаю, что это значит, и почему мой
N[t+4,]
а также
N[t+5,]
не рассчитывались, несмотря на приведенные формулы.
Вот неполная таблица
N[t+i]
N
Juveniles Adults
N0 1.00 10.000
20.00 7.300
31.90 11.110
44.44 17.347
0.00 0.000
0.00 0.000
0.00 0.000
0.00 0.000
0.00 0.000
0.00 0.000
0.00 0.000
0.00 0.000
0.00 0.000
Как мне изменить свой код, чтобы мне не приходилось расшифровывать каждую цепочку умножения? Спасибо, что остановились на моем вопросе.