QPmat: Amat и dvec несовместимы - PullRequest
       20

QPmat: Amat и dvec несовместимы

0 голосов
/ 02 октября 2018

Я новичок в квадратичном программировании, и у меня возникли проблемы с запуском функции QPmat в пакете popbio, который использует матрицу подсчетов классов ступеней для вычисления вероятностей переходов ступеней.

Код, который я выполняю:

####Create a matrix of time series stage class counts
Total<- 
matrix(c(17,74,86,41,17,11,75,84,46,25,7,60,90,46,24,10,61,82,44,25),nrow=5, 
ncol=4)
Total
## list nonzero elements counting by column, indices
nonzero <- c(1,2,7,8,13,14,19,20,25)
## create a constraint matrix, C
C <- rbind(diag(-1,5), c(1,1,0,0,0), c(0,0,1,0,0), c(0,0,0,0,1))
C
## calculate b vector
b <- apply(C, 1, max)
b
QPmat(Total,C,b,nonzero)

Этот вызов возвращает ошибку «Amat и dvec несовместимы!»

Я думаю, что проблема в матрице ограничений,С, но я не смог устранить эту проблему.Я работал с несколькими примерами функции solve.QP в quadprog, но безрезультатно.

1 Ответ

0 голосов
/ 03 октября 2018

Я имел матрицу ограничений совершенно неправильно.Я проверил Caswell 2001 для фактического примера и увидел, что ограничения должны были выполнить.

для матрицы ограничений C в приведенном выше коде, замените:

C<-rbind(diag(-1,9), c(1,1,0,0,0,0,0,0,0), c(0,0,1,1,0,0,0,0,0), 
c(0,0,0,0,1,1,0,0,0),c(0,0,0,0,0,0,1,1,0),c(0,0,0,0,0,0,0,0,1))

Это гарантирует, что все ненулевые выходные матричные элементы будут неотрицательными, что суммы последовательных пар ненулевых матричных элементовбудет меньше или равно 1 и что последний ненулевой матричный элемент будет меньше или равен 1.

Это очень быстрый способ получить проекционную матрицу с вероятностями перехода, когда счетчики сценического класса являютсяданные, а не отдельные судьбы.

...