Для этого мы можем напрямую использовать linearHypothesis
(см. ?linearHypothesis.systemfit
). В первом случае мы имеем
coefs <- coef(cyp3sur)
R1 <- matrix(0, nrow = 1, ncol = length(coefs))
R1[1, grep("Intercept", names(coefs))] <- 1
linearHypothesis(cyp3sur, R1)
, где R1
имеет одну строку, поскольку существует единственное ограничение. Обратите внимание, что я добавляю коэффициенты 1, а не 1/80, поскольку они эквивалентны (X + Y = 0 - это то же самое, что (X + Y) / 2 = 0). Использование grep
позволяет мне найти позиции перехвата.
Аналогично, во втором случае мы имеем
R2 <- matrix(0, nrow = 1, ncol = length(coefs))
gr1 <- paste0("X", 1:20, "_Event")
gr2 <- paste0("X", 41:80, "_Event")
R2[1, names(coefs) %in% gr1] <- 1 / 20
R2[1, names(coefs) %in% gr2] <- -1 / 40
linearHypothesis(cyp3sur, R2)
Теперь я создаю интересующие имена переменных с помощью paste0
и использую %in%
, чтобы определить их положение в coefs
.