在Optim功能中,打印输出R中的参数

时间:2014-05-26 02:06:25

标签: r function optimization

我有一个名为est_Bt()

的函数
est_Bt = function(pars)
{
    exp_Bt <- rep(NA,length(prawn_df$Catch))
    exp_Bt[1] <- pars[4]
    for(i in 2:length(prawn_df$Catch))
    {
        exp_Bt[i] <- max(exp_Bt[i-1] + exp_Bt[i-1]* (pars[1]/pars[3]) * (1-((exp_Bt[i-1]/pars[2])^pars[3])) - prawn_df$Catch[i-1],100)
    }### Not we put the max to either bt+1 or 100 so the stock doesn't go extinct.
    cpue_obs <- prawn_df$Catch/prawn_df$Effort
    pred_q <- log(cpue_obs/exp_Bt)
    series <- 0:(nrow(prawn_df)-1)
    q_int <- as.vector(lsfit(series,pred_q)$coefficients)[1]
    q_stat <- as.vector(lsfit(series,pred_q)$coefficients)[2]
    qinc_int <- exp(q_int)
    qinc_stat <- exp(q_stat)
    q <- rep(NA, length(series))
    q[1] <- qinc_int
    for(i in 2:length(q)){
        q[i] <- q[i-1]* qinc_stat
    }
    pred_cpue <- pred_bt* q
    sum((log(cpue_obs) - log(pred_cpue))^2)
}

函数本身并不重要我想要帮助的是在使用函数optim()评估pars时我想知道是否有打印出试验参数的命令。该函数给出了将渔业剩余模型应用于捕捞努力量数据的平方和。

est_Bt(c(0.2,30000, 0.0000000001, 50000))
[1] 159.2381
est_Bt(c(0.32,27000, 0.0000000001, 45000))
[1] 67.45901

当我使用optim时,我得到了

optim(c(0.32,27000, 0.0000000001, 45000), est_Bt)
Error in lsfit(series, pred_q) : NA/NaN/Inf in 'y'
In addition: Warning message:
In lsfit(series, pred_q) : 26 missing values deleted

我对此的看法是,它正在测试一个无意义的参数值,而且函数失败了。而且我确信我应该知道我的等式来惩罚荒谬的参数值。但我认为如果optim可以打印出每个试验的参数值,那么它会帮助我探索模型中的参数交互吗?

主席Cyrill

1 个答案:

答案 0 :(得分:2)

如果您想打印&#34;当前&#34;您的函数正在评估的参数集,只需在函数的开头添加print

est_Bt <-function(pars)
{
    print(pars)
    exp_Bt <- rep(NA,length(prawn_df$Catch))
    exp_Bt[1] <- pars[4]
    ...
}

这会将值发送到屏幕。