Ich habe ein kompliziertes kombiniertes Modell, für das ich eine Wahrscheinlichkeit in einer Funktion definieren kann, und ich muss die Parameter optimieren. Das Problem ist, dass die Parameter in alle Richtungen gehen, wenn sie nicht eingeschränkt werden. Daher muss ich eine Beschränkung für die Parameter einführen, und die vom Professor vorgeschlagene ist, dass die Summe der quadrierten Parameterwerte gleich 1 sein sollte.
Ich habe sowohl mit dem optim()
et nlm()
Funktion, aber ich kann nicht wirklich bekommen, was ich will. Die erste Idee war, n-1 Parameter zu verwenden und den letzten aus den restlichen zu berechnen, aber das funktioniert nicht (wie erwartet).
Zur Veranschaulichung einige Spielzeugdaten und -funktionen, die das Kernproblem dessen, was ich erreichen möchte, widerspiegeln:
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 natürlich zu :
Error: (subscript) logical subscript too long
In addition: Warning message:
In sqrt(1 - sum(alpha^2)) : NaNs produced
Hat jemand eine Idee, wie man Einschränkungen für Parameter in Optimierungsverfahren implementieren kann?
PS: Ich bin mir der Tatsache bewusst, dass dieser Beispielcode überhaupt keinen Sinn macht. Er dient nur zu Demonstrationszwecken.
Bearbeiten : Gelöst! - Siehe Mareks Antwort.