Mam skomplikowany połączony model, dla którego mogę zdefiniować prawdopodobieństwo w funkcji, i potrzebuję zoptymalizować parametry. Problem polega na tym, że parametry przechodzą wszystkie kierunki, jeśli nie są ograniczone. Dlatego muszę wprowadzić ograniczenie parametrów, a proponowane przez profesora jest to, że suma kwadratów wartości parametrów powinna wynosić 1.Ograniczona optymalizacja niestandardowych funkcji w R
Bawiłem się z funkcją optim()
i nlm()
, ale Naprawdę nie mogę dostać tego, czego chcę. Pierwszym pomysłem było użycie parametrów n-1 i obliczenie ostatniego z pozostałych, ale to nie działa (zgodnie z oczekiwaniami).
Aby zilustrować niektóre dane zabawki i funkcja odzwierciedlające problem rdzenia, co chcę osiągnąć:
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)
Wynika to oczywiście w:
Error: (subscript) logical subscript too long
In addition: Warning message:
In sqrt(1 - sum(alpha^2)) : NaNs produced
Ktoś pomysł na temat sposobu wdrożenia ograniczeń o parametrach w procesach optymalizacji?
PS: Mam świadomość, że ten przykładowy kod nie ma żadnego sensu. Jest to tylko do celów demonstracyjnych.
Edytuj: Rozwiązano! - Zobacz odpowiedź Mareks.
Czy próbowałeś 'constrOptim'? – James
@ James, patrzyłem na to jakiś czas temu, ale nie mogłem znaleźć sposobu na przetłumaczenie naszego ograniczenia w możliwy do zrealizowania sposób. Spojrzę na to jeszcze raz, na wskaźnik. Jedną z rzeczy jest również to, że -afaik-constrOptim jest nawet wolniejszy od optymalnego i mamy już poważne problemy z wydajnością z kodem. –
Ile parametrów? –