使用带有SSexp的nlrq会产生以下错误:“getInitial中的错误(公式,mf):未使用的参数(mf)”

时间:2014-12-27 11:46:45

标签: r regression quantile quantreg

我一直在尝试使用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)

2 个答案:

答案 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