У меня сложная комбинированная модель, для которой я могу определить вероятность в функции, и мне нужно оптимизировать параметры. Проблема в том, что параметры идут по всем направлениям, если не ограничены. Следовательно, мне нужно реализовать ограничение на параметры, и один предложенный профессором в том, что сумма квадратов значений параметров должен быть равен 1.Ограниченная оптимизация пользовательских функций в R
Я играл вокруг с как функции optim()
и nlm()
, но Я не могу получить то, что хочу. Первая идея заключалась в использовании параметров n-1 и вычислении последнего из остальных, но это не работает (как и ожидалось).
Для иллюстрации, некоторые игрушечные данные и функции, отражающие основную проблему того, что я хочу добиться:
dd <- data.frame(
X1=rnorm(100),
X2=rnorm(100),
X3=rnorm(100)
)
dd <- within(dd,Y <- 2+0.57*X1-0.57*X2+0.57*X3+rnorm(100,0,0.2))
myfunc2 <- function(alpha,dd){
alpha <- c(alpha,sqrt(1-sum(alpha^2)))
X <- as.matrix(dd[,-4]) %*% alpha
m.mat <- model.matrix(~X)
mod <- glm.fit(m.mat,dd$Y)
Sq <- sum(resid(mod)^2)
return(Sq)
}
b <- c(1,0)
optim(b,myfunc2,dd=dd)
Это приводит, очевидно, в:
Error: (subscript) logical subscript too long
In addition: Warning message:
In sqrt(1 - sum(alpha^2)) : NaNs produced
Кто-нибудь представление о том, как реализовать ограничения по параметрам в процессах оптимизации?
PS: Я знаю, что этот примерный код не имеет никакого смысла. Это просто для демонстрационных целей.
Редактировать: решила! - См. Ответ Марекса.
Вы пробовали 'constrOptim'? – James
@ Джеймс, я посмотрел на него некоторое время назад, но я не мог найти способ перевода нашего ограничения по возможности. Я посмотрю еще раз, thx для указателя. Одна из вещей заключается в том, что -afaik-constrOptim еще медленнее, чем оптимист, и у нас уже есть серьезные проблемы с производительностью с кодом. –
Сколько параметров? –