作者Wush978 (柴人)
看板Statistics
标题[程式] R
时间Sat Oct 17 19:16:25 2009
[软体程式类别]:
R
[程式问题]:
回圈会因为回圈中函式错误而中止
[软体熟悉度]:
中(3个月到1年)
[问题叙述]:
我需要用non-linear的方式找某个函数的最小值 ( Residual Sum of Square )
这个函数不是线性的, 解没有close form 所以我需要用 nlminb 这个函数
由於这类演算法都有选取初始值问题, 所以我写了一个回圈, 用不同的初始值去跑
但是有时候 nlminb 这个函数在跑到一半的时候, 就因为出现错误, 而把整个回圈中止
ps. 错误内容为:
错误在lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (non-NA) cases
我希望能够在错误出现的时候, 跳过(留下一个NA)值, 或是至少能找出错误发生的原因
[程式范例]:
L <- function(parameter) { # parameter 均是转换过的
m <- logit.inv(parameter[1])
r <- exp(parameter[2])
if (length(y) > 26) sum(lm(y~trend(n,m,r)+add.x[1:n])$res^2) else
sum(lm(y~trend(n,m,r))$res^2)
}
#这个函数会回传 Residual Sum of Square, 而算法我是用另一个函数 lm
for (repeat.nlminb in 1:10 ) {
start.value <- rnorm(2)
temp <- nlminb(objective=L,start=start.value)
result.parameter[repeat.nlminb,] <- c(temp$par,temp$objective)
}
#这里我会利用 rnorm 随机取 initial value 跑十次, 并纪录十次的结果
-----------------------------------------------------------------------------
先谢谢了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.36.80
1F:推 clickhere:?try 10/18 12:27
2F:→ clickhere:把nlminb包在try里面, 检查回传值的类别是否为try-error 10/18 12:28
3F:→ clickhere:res<-try(nlminb(...)); class(res) == "try-error" 10/18 12:29
4F:→ Wush978:感谢!! 我去试试看 10/18 13:32