小弟在fit一个产量递减曲线,公式为: q = qi / (1+Dibt)(1/b)
t是自变量,q是因变量, qi Di b 都是需要知道的常数
之前用
hypmod <- nlsLM(log(q) ~ log(qi/((1+Dibt)(1/b))),
start=list(qi = q[1], Di = Dhat, b = b_in)
,control=list(maxiter=1000)
得到了 qi Di b 的初始值,因为fit的曲线是要考虑时间序列的因素,所以又用了:
arima.hyp <- auto.arima(resid(hypmod), d=0)
p2<-as.numeric(arima.hyp$arma[1])
q2<-as.numeric(arima.hyp$arma[2])
p2 = 1
q2 = 0
因为 p2 和q2 都不同时为零,所以想用 gnls 再fit一下,考虑时间序列
猜测的初始值 由 (qi)k1 = 706448.2 (Di)k2 = 419.7671 (b)k3 = 1.744161
代码如下:
hyp.gnls <- gnls(log(q) ~ log(qi/((1+Dibt)(1/b))),
start = list(qi = k1, Di = k2,
b = k3)
,control=list(maxiter=1000)
,correlation=corARMA(form = ~t, p = p2, q = q2))
报错如下:
Error in coef<-.corAR1(tmp, value = value[parMap[, i]]) :
NA/NaN/Inf in foreign function call (arg 1)
如果我在代码里用了 “control=list(maxiter=1000, opt = "optim")”
报错如下:
Error in optim(c(coef(gnlsSt)), function(gnlsPars) -logLik(gnlsSt, gnlsPars), :
initial value in 'vmmin' is not finite
求大神指点一下,小弟也是统计新手,不知道这种问题该怎么改我的条件。感激不尽!!!?