我有一个名为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
答案 0 :(得分:2)
如果您想打印&#34;当前&#34;您的函数正在评估的参数集,只需在函数的开头添加print
est_Bt <-function(pars)
{
print(pars)
exp_Bt <- rep(NA,length(prawn_df$Catch))
exp_Bt[1] <- pars[4]
...
}
这会将值发送到屏幕。