【发布时间】:2018-07-21 14:28:31
【问题描述】:
我试图在 R 中使用 optim 最小化一个函数。问题是我不确定我应该对输出值给出什么真正的解释。当我试图估计一个参数以使我的函数为 0 时,我真的不明白为什么我的函数的值及其估计的参数与 0 不同。 艰难当我假设下界(上界和下界)(它们不是正确的)时,我的函数的值随着它估计的参数而降低。 我应该担心函数的价值吗?
这是我第一次优化功能,非常感谢一些帮助! 我提供代码和输出。
calcr <- function(time, price, freq) {
input <- data.table(time=time,price=price);
input[order(time),];
out <- input[,.(return=log(price[length(price)]/price[1])),
by=.(time=as.POSIXct(trunc(unclass(time)/freq)*freq,
origin='1970-01-01'))];
print(input)
print(out)
return(out);
}
target.fn <- function(m,data) {
trade.interval <- data[,.(interval=difftime(max(time,na.rm=T),
min(time,na.rm=T),
units = "secs")),
by=day(time)][,mean(interval,na.rm=T)];
r <- calcr(time=data$time,price=data$price,
freq=unclass(trade.interval)/m);
a <- (mean(r$return^2,na.rm=T))^2;
b <- -3*a+2*(mean(r$return^4,na.rm=T));
q <- r[,.(qi=m/3*sum(return^4)),by=day(time)][,mean(qi,na.rm=T)];
return(abs(2*m^3*a+m^2*b-2*q));
}
##lower=6,upper=23398
optim(par=60,fn=target.fn,data=aa[,.(time,price=nbbomidstart)],
method='Brent',lower=6,upper=23300);
我得到的输出如下:
$`par`
[1] 4641.689
$value
[1] 56480.07
$counts
function gradient
NA NA
$convergence
[1] 0
$message
NULL
非常感谢!
【问题讨论】:
-
您是在尝试优化函数还是实际上是在尝试找到函数的零点?这是两个不同的东西。前者求
x的值使得f(x)最大;后者寻求x,例如f(x) = 0。你的目标是什么?在后一种情况下,您应该检查?uniroot。 -
我试图找到函数的零。正如你所说的f(x)= 0。那么在这种情况下,我应该使用另一个优化函数吗?
标签: r optimization sampling minimize quantitative-finance