J'ai une fonction générale, j'ai fourni un exemple ci-dessous si simple régression linéaire:pendant optim()
x = 1:30
y = 0.7 * x + 32
Data = rnorm(30, mean = y, sd = 2.5);
lin = function(pars = c(grad,cons)) {
expec = pars[1] * x + pars[2];
SSE = sum((Data - expec)^2)
return(SSE)
}
start_vals = c(0.2,10)
lin(start_vals)
estimates = optim(par = start_vals, fn = lin);
## plot the data
Fit = estimates$par[1] * x + estimates$par[2]
plot(x,Data)
lines(x, Fit, col = "red")
C'est donc simple. Ce que je veux, c'est stocker l'attente pour le dernier ensemble de paramètres, de sorte qu'une fois que j'ai fini d'optimiser je peux les voir. Je l'ai essayé d'utiliser un conteneur global et d'essayer de le peuplant si la fonction est exécutée, mais il ne fonctionne pas, par exemple
Expectation = c();
lin = function(pars = c(grad,cons)) {
expec = pars[1] * x + pars[2];
Expectation = expec;
SSE = sum((Data - expec)^2)
return(SSE)
}
start_vals = c(0.2,10)
estimates = optim(par = start_vals, fn = lin);
Expectation ## print the expectation that would relate to estimates$par
Je sais que cela est trivial à faire en dehors de la fonction, mais mon problème réel (qui est analogue à ceci) est beaucoup plus complexe. Fondamentalement, j'ai besoin de renvoyer des informations internes qui ne peuvent pas être calculées rétrospectivement. Toute aide est très appréciée.