r - Using optim on a two-variable function -
i having trouble optimizing on function 2 parameters.
# creating corresponding mock data set n=2000 x <- rnorm(n,0,1) x <- cumsum(x) n=length(x) k=1 dx = rep(0,n-k) (i in k:(n - 1)){ sumx = 0 (j in 0:k){ sumx = sumx + (-1)^j*choose(k,j)*x[i-j+1] } dx[i-k+1] = sumx } vpk <- matrix(ncol = 1, nrow = 10) (p in seq(from=1, to=10,by=1)) { vpk[p*1] <- sum(abs(dx)^p) } vpk = data.frame(vpk); names(vpk)='v1'; vpk$v2 = 1:10; now minimizing function
rab <- function(a,b){ g <- ifelse(a>0 & a<1-1/p & p >=b & b<=2, a*p, ifelse(a>0 & a<1-1/b & p< b & b<=2, -1+(a+1/b), ifelse(a >= 1-1/pmax(p,b) & b<=2,-1+p,na))) } #p=1 suma <- function(a,b){ sume=0 for(p in seq(from=1,to=10, by=1)){ sume = sume + (log(vpk$v1[p])/log(n^(-1))-outer(a,b,rab))^2 } return(sume) } the values minimize on a , b, , values a , b follows:
a= seq(0.1,5,by=0.25) b= seq(0,2,by=0.1) now can plot function a , b above, first defining z
z <-suma(a,b) persp(a,b,z, theta=-135, phi=45, ticktype='detailed') image(a,b,z) contour(a,b,z, add=t) here can see function minimized should near 0 , can lie between 0 , 2.
now, want do, minimize 'suma'. have trouble. i've done:
optim(c(0.00001,1.5), suma) but guess need make suma function of 1 parameter work. appreciated! i've tried optim, might want try package?
change function this:
suma <- function(par){ sume=0 for(p in seq(from=1,to=10, by=1)){ sume = sume + (log(vpk$v1[p])/log(n^(-1))-outer(par[1],par[2],rab))^2 } return(sume) } package optimx might of interest you.
Comments
Post a Comment