我使用splines::ns
最小二乘拟合的结果各不相同,我看不到任何押韵或理由,我认为我已经将问题追溯到ns
函数本身。
我已将问题简化为:
require(splines)
N <- 0
set.seed(1)
for (i in 1:100) N <- N + identical(ns(1:10,3),ns(1:10,3))
N
我的结果平均约为 39,范围为 34--44 左右,但我每次都预期为 100。为什么结果应该ns
是随机的?如果我在两个地方都替换bs
,ns
我得到 100,正如预期的那样。我set.seed(1)
希望证明我得到的随机性不是 R 想要的。
在干净的会话中,使用 RStudio 和 R 版本 2.14.2 (2012-02-29),我得到 39、44、38 等。其他人似乎都得到 100。
更多信息:
替换splines::ns
为ns
给出相同的结果。干净的香草会议给出了相同的结果。我的电脑有8个核心。
当它们发生时,差异通常或总是 2^-54:
Max <- 0
for (i in 1:1000) Max <- max( Max, abs(ns(1:10,3)-ns(1:10,3)) )
c(Max,2^-54)
结果[1] 5.551115e-17 5.551115e-17
。这种可变性给我带来了很大的问题,因为我的optimize(...)$min
now 有时甚至在第一个数字中也会发生变化,导致结果不可重复。
我的 sessionInfo 带有一个干净的香草会话:
我创建了我所理解的干净的香草会话,使用
> .Last <- function() system("R --vanilla")
> q("no")
这会吹走会话,当我重新启动它时,我会得到干净的香草会话。然后,为了回答 Ben Bolker 的澄清问题,我在干净的香草会议开始时这样做了:
> sessionInfo()
R version 2.14.2 (2012-02-29)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] Revobase_6.1.0 RevoMods_6.1.0 RevoScaleR_3.1-0 lattice_0.20-0
[5] rpart_3.1-51
loaded via a namespace (and not attached):
[1] codetools_0.2-8 foreach_1.4.0 grid_2.14.2 iterators_1.0.6
[5] pkgXMLBuilder_1.0 revoIpe_1.0 tools_2.14.2 XML_3.9-1.1
> require(splines)
Loading required package: splines
> N <- 0
> set.seed(1)
> for (i in 1:100) N <- N + identical(ns(1:10,3),ns(1:10,3))
> N
[1] 32