【问题标题】:R optim function - Setting constraints for individual parametersR optim 函数 - 为单个参数设置约束
【发布时间】:2017-11-12 12:20:54
【问题描述】:

我希望使用optim 最小化一个函数,如下所示:

yield <- function(data, par) {
  with(data, par[1] + (par[2] + par[3]/par[4])*(1-exp(-par[4]*maturity))/(par[4]*maturity) - (par[3]*exp(-par[4]*maturity)/par[4]))
}
min.RSS <- function(data, par) {
  sum((data$price - 100*exp(-data$maturity*yield(data, par)))^2)
}
result <- optim(par = theta, min.RSS, data = data))

参数par[1]par[4] 必须是非负数,而其他两个是无约束的。是否可以在optim 函数中包含这些约束?

谢谢

【问题讨论】:

  • 如果您传递了这些参数的日志版本,然后在返回时 exp() 它们,您将施加该约束。 optim 的帮助页面链接到 ?constrOptim
  • 顺便说一下,我们需要数据。给我们数据。

标签: r optimization


【解决方案1】:

只是为了让@BondedDust 的建议非常清楚:

yield <- function(data, par) {
  with(data, par[1] + (par[2] + par[3]/par[4])*(1-exp(-par[4]*maturity))/(par[4]*maturity) - (par[3]*exp(-par[4]*maturity)/par[4]))
}

# the function being optimized
min.RSS <- function(data, par) {

  # EXPONENETIATE PARAMTERS 1 AND 4 TO MAKE THEM POSITIVE.
  par[1] <- exp(par[1])
  par[4] <- exp(par[4])

  sum((data$price - 100*exp(-data$maturity*yield(data, par)))^2)

}


PAR <- theta

# LOG TRANSFRORM THE INITIAL VALUES FOR PARAMTERS 1 AND 4
PAR[1] <- log(PAR[1])
PAR[4] <- log(PAR[4])

# CALL optim()
result <- optim(par = PAR,
                min.RSS,
                data = data))


# THE BEST SET OF PARAMETERS
par <- result$par
# again, exponenetiate paramters 1 and 4 to make them positive.
par[1] <- log(par[1])
par[4] <- log(par[4])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多