#r
#r #матрица #матрица-умножение
Вопрос:
У меня есть матрица болезненных состояний states0CommercialA
, где столбцы являются состояниями (т. Е. «нет болезни», «заболевание», «мертвый»), а строки представляют собой циклы модели (т. Е. 1, 2, 3, 4 и т.д.).
Я пытаюсь умножить это на вектор затрат commercialMedExp
, где каждая стоимость соответствует состоянию заболевания. Я попытался выполнить следующее:
commercialMedExp * states0CommercialA
но кажется, что умножение происходит по столбцам, а не по строкам. Может ли кто-нибудь помочь мне с правильным синтаксисом?
Ответ №1:
Изменение масштаба столбца / строки является обычной операцией при вычислении матрицы. Вы ищете изменение масштаба столбца, но я предложу решения для обоих.
Изменение масштаба строк
A <- matrix(1:20, nrow = 5); x <- 1:5
## Any method below is much more efficient than `diag(x) %*% A`
## method 1: recycling
A * x
## method 2: `sweep()`
sweep(A, 1L, x, "*")
Изменение масштаба столбца
A <- matrix(1:20, nrow = 5); y <- 1:4
## Any below method is much more efficient than `A %*% diag(y)`
## method 1: transpose row rescaling
t(y * t(A))
## method 2: `sweep()`
sweep(A, 2L, y, "*")
## method 3: pairwise multiplication
A * rep(y, each = nrow(A))
Что вы можете сделать
states0CommercialA * rep(commercialMedExp, each = nrow(states0CommercialA))
Ответ №2:
Что-то вроде
commercialMedExp0A <- t(apply(states0CommercialA, 1, function(x){ x * commercialMedExp}))
должно работать до тех пор, пока количество столбцов в states0CommericialA
будет такой же длины, как commercialMedExp
. Если это не так, вам пришлось бы подмножествовать данные. Например, если болезненные состояния указаны в столбцах с 13 по 18
commercialMedExp0A <- t(apply(states0CommercialA[,c(13:18)], 1, function(x){ x * commercialMedExp}))