Я работаю с выходом модели, в которой есть оценки параметров, которые не могут следовать априорным ожиданиям. Я хотел бы написать функцию, которая заставляет эти оценки полезности соответствовать этим ожиданиям. Для этого функция должна минимизировать сумму квадрата отклонения между начальными значениями и новыми оценками. Так как у нас априори ожидания, оптимизация должна быть с учетом следующих ограничений:Оптимизация с ограничениями
B0 < B1
B1 < B2
...
Bj < Bj+1
Например, оценки параметров сырья ниже flipflopped для B2 и B3. Столбцы Delta
и Delta^2
показывают отклонение между исходной оценкой параметров и новым коэффициентом. Я пытаюсь свести к минимуму столбец Delta^2
. Я закодирован это в Excel и показано, как Solver в Excel позволит оптимизировать эту проблему, обеспечивающую набор ограничений:
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
, я не в состоянии, как обращал внимания установить это в Р. Я уверен, что я просто немного плотный, но могу использовать некоторые указатели в правильном направлении!
4/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
При отражении вы фактически описываете упорядоченный логистическая регрессия (http: //en.wikipedia.орг/вики/Ordered_logit). В пакете 'MASS' функция' polr' может решить этот тип проблемы. Пример: http://www.stat.washington.edu/quinn/classes/536/S/polrexample.html. Кеннет Пот описывает это хорошо в своей книге «Методы дискретного выбора с симуляцией» – Andrie
@ Энри - возможно, мне нужен только утренний кофе, но мне сложно связать точки между примером polr и тем, что мне нужно сделать здесь. С 'polr()', не является ли целью предсказать набор пропорциональных коэффициентов шансов? У меня есть книга Кена Поезда, сидящая на моей книжной полке (собирающая пыль), поэтому я тоже дам ей вихрь. Спасибо. – Chase
@ Andri +1 для поезда. Обратите внимание, что он доступен онлайн в формате PDF. –