2017-07-15 49 views
1

为什么ns(0.8)ns(c(0.8))返回NA/NaN/Inf in foreign function call (arg 1)为什么ns(0.8)或ns(c(0.8))`在外部函数调用(arg 1)`中返回NA/NaN/Inf?

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" 
+0

你能解释一下你认为如何将样条曲线拟合成一个点_应该工作吗? ns()'依赖于第一个参数,因为它可以用来确定结的位置(包括边界结)。只有一个数据点,没有足够的信息来进行明智的选择,并且该方法失败是有意义的。 – stephematician

+0

@stephematician听起来像是一个更好的错误消息 –

回答

2

编辑:用户评论后,我意识到我的答案是不相关的。不过,我现在并没有删除它,因为我向R-Core团队发送了有关(非常真实)文档差异的电子邮件,并在电子邮件中提到了这篇文章。


没有为第二个参数的ns()功能的文档中的差异,df

自由度。人们可以提供df而不是结; ns()然后 选择df - 1 - 在合适选择的分位数x (它将忽略缺失值)的截距。缺省值df = 1,对应于 ,无结。

实际默认值不为1,但NULL,正如我们可以在用法部看到:

纳秒(X,DF = NULL,绳结= NULL,截距= FALSE, Boundary.knots = range(x))

+0

顺便说一句,我只是给R-Core开发团队发邮件。 –

+0

@ user20650刚添加到我的答案。 –

+1

哦,没错......嗯,这让我的回答变得无关紧要! :D –

1

我同意错误消息不是用户友好的..所以一个改变似乎至少是理性的。我们必须看看是否ns(< 1 number>),比如说ns(pi)可以有意义......我宁愿在R-devel邮件列表(https://stat.ethz.ch/mailman/listinfo/r-devel)上讨论,而不是在这里。

我也同意@Dominic Comtois帮助页面应该修改,因为很长一段时间默认不是1

最后但并非最不重要的一点,请注意ns()bs()应被视为一对,因为它们是按照这种方式设计的。由于它们的主要用途是生成model.matrix()的模型公式,我倾向于同意如果我们能为ns(pi)案例提出一个合理的非错误结果,那么会很好。谢谢你们提出这个问题!

+0

正因为如此,这让我感到很好奇,并且...... tada!我已经改进了R的ns(),所以它的“now”(*)可以使用ns(pi),特别是现在可以使用lm(y〜x1 + ns(x2)+ ...,data = myD)'即使在(“不那么频繁”;-)情况下,“myD”只有一个观察值。 - *)现在在R-devel中,但是我也会将它移植到'R 3.4.1补丁'中,所以它会在R的下一个版本中。 –