3

为什么ns(0.8)还是ns(c(0.8))返回NA/NaN/Inf in foreign function call (arg 1)

ns(c(0.8, 1.0))工作正常,但我想知道为什么只给 1 个值会ns导致NA/NaN/Inf in foreign function call (arg 1).

例子:

> library(splines)
> ns(0.8)
Error in qr.default(t(const)) : 
  NA/NaN/Inf in foreign function call (arg 1)


> ns(c(0.8, 1.0))
             1
[1,] 0.0000000
[2,] 0.8017837
attr(,"degree")
[1] 3
attr(,"knots")
numeric(0)
attr(,"Boundary.knots")
[1] 0.8 1.0
attr(,"intercept")
[1] FALSE
attr(,"class")
[1] "ns"     "basis"  "matrix"
4

2 回答 2

3

我同意错误消息对用户不友好..因此至少对此进行更改似乎是合理的。我们必须看看 ns(<1 number>), sayns(pi)是否有意义...我宁愿在 R-devel 邮件列表上讨论这个问题 ( https://stat.ethz.ch/mailman/ listinfo/r-devel ) 而不是这里。

我也同意@Dominic Comtois 应该修改帮助页面,因为默认已经1很久没有了。

最后但同样重要的是,请注意,ns() 并且bs()应该被视为一对,因为它们是这样设计的。由于它们的主要用途是在模型公式中生成 a model.matrix(),因此我倾向于同意,如果我们能够为该案例提出一个合理的非错误结果,那就ns(pi)太好了。谢谢两位提出问题!!

于 2017-07-17T09:31:23.070 回答
3

编辑:在用户发表评论后,我意识到我的回答是无关紧要的。但是,我暂时不会删除它,因为我向 R-Core 团队发送了有关文档中(非常真实的)差异的电子邮件,并在电子邮件中提到了这篇文章。


ns()第二个参数的函数文档存在差异df

自由程度。可以提供 df 而不是节;ns() then chooses df - 1 - intercept knots at suitably chosen quantiles of x (which will ignore missing values). 默认值 df = 1 对应于无结。

实际的默认值不是 1,而是NULL,正如我们在“用法”部分中看到的那样:

ns(x, df = NULL, 结 = NULL, 截距 = FALSE, Boundary.knots = range(x))

于 2017-07-16T00:06:35.150 回答