Я работаю с выходом из модели, в которой есть оценки параметров, которые не могут следовать априорным ожиданиям. Я хотел бы написать функцию, которая заставляет эти оценки полезности соответствовать этим ожиданиям. Для этого функция должна минимизировать сумму квадрата отклонения между начальными значениями и новыми оценками. Поскольку мы имеем априорные ожидания, оптимизация должна быть подчинена следующим ограничениям:
B0 < B1
B1 < B2
...
Bj < Bj+1
Например, оценки необработанных параметров ниже разворачиваются для B2 и B3. Столбцы Delta
и Delta^2
показывают отклонение между исходной оценкой параметра и новым коэффициентом. Я пытаюсь свести к минимуму столбец Delta^2
. Я закодировал это в Excel и показал, как Excel Solver оптимизирует эту проблему, предоставляя набор ограничений:
Beta BetaRaw Delta Delta^2 BetaNew
B0 1.2 0 0 1.2
B1 1.3 0 0 1.3
B2 1.6 -0.2 0.04 1.4
B3 1.4 0 0 1.4
B4 2.2 0 0 2.2
После прочтения ?optim
и ?constrOptim
я не могу понять, как установить это в R. Я уверен, что я просто немного плотный, но мог бы использовать некоторые указатели справа направление!
3/24/2012 - Добавлена щедрость, так как я недостаточно умен, чтобы перевести первый ответ.
Здесь некоторый R-код, который должен быть на правильном пути. Предполагая, что бета начинается с:
betas <- c(1.2,1.3,1.6,1.4,2.2)
Я хочу свести к минимуму следующую функцию, такую, что b0 <= b1 <= b2 <= b3 <= b4
f <- function(x) {
x1 <- x[1]
x2 <- x[2]
x3 <- x[3]
x4 <- x[4]
x5 <- x[5]
loss <- (x1 - betas[1]) ^ 2 +
(x2 - betas[2]) ^ 2 +
(x3 - betas[3]) ^ 2 +
(x4 - betas[4]) ^ 2 +
(x5 - betas[5]) ^ 2
return(loss)
}
Чтобы показать, что функция работает, потеря должна быть равна нулю, если мы передаем исходные бета в:
> f(betas)
[1] 0
И относительно большой с некоторыми случайными входами:
> set.seed(42)
> f(rnorm(5))
[1] 8.849329
И сведен к минимуму при значениях, которые я смог вычислить в Excel:
> f(c(1.2,1.3,1.4,1.4,2.2))
[1] 0.04