我一直在尝试使用nlrq()
(来自quantreg
包)来拟合非线性分位数回归模型。但是我发现该函数对起始值非常敏感。所以我尝试使用自启动器SSexp()
。我读到的nls()
的自启动功能也适用于它。但是我一直收到以下错误消息:
"Error in getInitial(formula, mf) : unused argument (mf)"
我的输入代码是:
fit12 <- nlrq(visit.rate ~ SSexp(het.total, y0, b),
data = flower_mat,tau = 0.75)
我有点模糊的想法,getInitial
以某种方式连接起来创建自我启动功能。但坦率地说,我不知道究竟问题在哪里。有人可以帮我吗?
其他信息
# R version 3.1.2 -- "Pumpkin Helmet"
# quantreg version: 5.05
# nlrwr version : 1.1-0
# toy dataset and code
x <- c(0.3,0.6,0.9,1,1.5,2, 2.1, 2.5,3, 3,5,10,11,12,14,13,17,21,23,27,30, 50)
y <- c(0,0.1,0.3,0.4,0.6,0.2,0.27,0.2,0.25,0.4,0.15,0.05,0.25,0.2,0.3,0.35,0.1,0.15,0.1,0.14,0,0)
dat <- data.frame(x,y,stringsAsFactors=FALSE)
plot(y~x)
library(quantreg)
library(nlrwr)
fit.1 <- nlrq(y ~ SSexp(x, y0, b),
data = dat,tau = 0.75)
# above mentioned error message
with(dat, SSexp(x, 0.2, 4))
# this is working
getInitial((y ~ SSexp(x, y0, b)), dat)
# showing following error:
# Error in getInitial((y ~ SSexp(x, y0, b)), data = dat) : unused argument (dat)
答案 0 :(得分:2)
来自getInitial()
的{{1}}和SSexp()
都会导致问题。所以,我不会在你的情况下使用nlrwr
。
另外,它会将大量软件包附加到搜索路径中,这通常被认为是一种不好的做法。
nlrwr
只接受一个参数,而nlrwr::getInitial()
接受不同数量的参数,至少有两个参数。所以,stats::getInitial()
版本很容易破坏R中的几个东西!
nlrwr
是一个糟糕的自我启动功能。它不以数字方式计算梯度,它不提供nlrwr::SSexp()
属性,而且,如果因变量包含值&lt; = 0,则无法计算参数的初始估计值,如玩具示例中所示。
我宁愿使用pnames
函数的这种形式(注意:参数不同,更符合其他自启动函数的精神):
SSexp()
答案 1 :(得分:0)
我怀疑问题是加载nlrwr
时加载的一个依赖包是dlc
,它有自己的版本getInitial
。
尝试stats::getInitial(etc)
- 我会警告你,当我用你的数据和代码尝试它时,我得到“lm.fit中的错误(x,y,偏移=偏移,singular.ok =奇异。好, ...) :
“y”中的NA / NaN / Inf