我在使用两个参数优化函数时遇到问题。
# Creating a corresponding mock data set
N=2000
x <- rnorm(N,0,1)
x <- cumsum(x)
n=length(x)
k=1
dx = rep(0,n-k)
for (i in k:(n - 1)){
sumx = 0
for (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)
for (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;
现在我的功能最小化
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)
}
我希望最小化的值是a
和b
,a
和b
的值如下:
a= seq(0.1,5,by=0.25)
b= seq(0,2,by=0.1)
现在,我可以通过首先定义a
b
和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)
在这里我可以看到,对于要最小化的函数,a应该接近0并且可以介于0和2之间。
现在,我想做的是最小化&#39; suma'
。这是我遇到麻烦的地方。我已经完成了:
optim(c(0.00001,1.5), suma)
但我想我需要让suma
只是一个参数的功能才能使它工作。任何帮助表示赞赏!我已尝试使用optim
,但我可能想尝试其他套餐?
答案 0 :(得分:2)
将您的功能更改为:
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)
}
您可能会对包optimx感兴趣。