Ich habe ein kompliziertes kombiniertes Modell, für das ich eine Wahrscheinlichkeit in einer Funktion definieren kann, und ich muss die Parameter optimieren. Problem ist, die Parameter gehen in alle Richtungen, wenn nicht eingeschränkt. Daher muss ich eine Einschränkung für die Parameter implementieren, und die vom Professor vorgeschlagene ist, dass die Summe der quadrierten Parameterwerte gleich 1 sein sollte.Eingeschränkte Optimierung von benutzerdefinierten Funktionen in R
Ich habe mit der optim()
und nlm()
Funktion gespielt, aber Ich kann nicht wirklich bekommen, was ich will. Die erste Idee war, n-1 Parameter zu verwenden und die letzte aus dem Rest zu berechnen, aber das funktioniert nicht (wie erwartet).
Zur Veranschaulichung einige Spielzeug Daten und Funktion das Kernproblem zu reflektieren, was ich erreichen möchte:
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)
Dies führt offenbar in:
Error: (subscript) logical subscript too long
In addition: Warning message:
In sqrt(1 - sum(alpha^2)) : NaNs produced
jemand eine Idee, wie Einschränkungen zu implementieren über Parameter in Optimierungsprozessen?
PS: Mir ist bewusst, dass dieser Beispielcode überhaupt keinen Sinn macht. Es ist nur zu Demonstrationszwecken.
Bearbeiten: Gelöst es! - Siehe Mareks Antwort.
Haben Sie versucht, 'constrOptim'? – James
@James, ich habe es vor einiger Zeit angeschaut, aber ich konnte keinen Weg finden, unsere Einschränkung auf eine praktikable Art und Weise zu übersetzen. Ich werde es mir nochmal ansehen, danke für den Zeiger. Eines der Dinge ist auch, dass - afaik- constrOptim sogar langsamer als optim ist und wir bereits ernsthafte Leistungsprobleme mit dem Code haben. –
Wie viele Parameter? –