QPmat: амат и двек несовместимы

Я новичок в квадратичном программировании, и у меня возникли проблемы с запуском функции 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)

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

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


person Peter B    schedule 02.10.2018    source источник


Ответы (1)


У меня была совершенно неправильная матрица ограничений. Я проверил 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.

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

person Peter B    schedule 03.10.2018