【问题标题】:Basis provided by Ns() in R Epi packageR Epi 包中 Ns() 提供的基础
【发布时间】:2018-02-01 06:45:45
【问题描述】:

当我研究Epi 如何为其样条函数生成基础时(通过函数Ns),我对它如何处理detrend 参数感到有些困惑。

detrend=T 时,我预计Epi::Ns(...) 或多或少会将splines::ns(...) 给出的基投影到[1 t] 的列空间的正交补上,最后提取线性独立列的集合(所以我们有一个基础)。

然而,这似乎并不是完全的情况;我试过了

library(Epi)
x=seq(-0.75, 0.75, length.out=5)
Ns(x, knots=c(-0.5,0,0.5), Boundary.knots=c(-1,1), detrend=T)

library(splines)
detrend(ns(x, knots=c(-0.5,0,0.5), Boundary.knots=c(-1,1)), x)

上述代码生成的矩阵并不相同,但是,它们确实具有相同的列空间(在此示例中),这表明如果插入线性模型,拟合系数将不同,但拟合(本身) 将是相同的。

我的第一个问题是;一般情况下是这样吗?

第二个问题是为什么两者不同?

关于第二个问题 - 当detrend 被指定时,Epi::Ns 会给出一个警告,fixsl 被忽略。

潜入 Epi github NS.r ... 在基础的构建中,在上面用detrend=T 调用Epi::Ns 时,调用了worker ns.ld()(一个函数几乎与@ 的胆量相同) 987654337@),它将c(NA,NA) 作为derivs 参数传递给splines::spline.des,以确定矩阵const

const <- splines::spline.des( Aknots, Boundary.knots, 4, c(2-fixsl[1],2-fixsl[2]))$design

这是Ns(detrend=T) 中发生的事情与上面对ns() 的调用之间的区别,后者将c(2,2) 作为derivs 参数传递给splineDesign。

所以这解释了它们的不同之处,但不是为什么?有没有人解释为什么在Epi::Ns() 中使用fixsl=c(NA,NA) 而不是fixsl=c(F,F)

有人对第一个问题有证据/或答案吗? 我认为使用了const 的列空间的正交补码,以便在边界处的二阶(或所需)导数为零(通过一般样条基础的投影) - 但我不确定这一步因为我还没有深入研究数学,所以我只是根据我的“感觉”来研究它。也许如果我能更好地理解这一点,const 的结果与对splineDesign/spline.des 的调用(分别在ns()Ns() 中)的差异可以解释为什么这两个矩阵从一开始不一样,但产生相同的拟合。

【问题讨论】:

  • 我怀疑最能回答这个问题的人将是包维护者。您可以使用maintainer('Epi') 找到它们。
  • 可悲的是;即使是“博士”头衔,也很难得到学术界的回应,除非你愿意为他们写一篇论文:|
  • 尚不清楚您是否真诚地努力遵循 dww 的建议。我并不总是同意 Bendix Carstensen 的观点,但他似乎一直支持与他的包裹搏斗的用户。如果您确实付出了一些努力,那么您的沟通方式可能需要一些调整?
  • 我将在此备份 dww 和 42。我已经写信给许多包维护者/作者,结果非常积极。如果你还没有,并且仍然想知道这个答案,你应该知道!

标签: r spline


【解决方案1】:

fixsl=c(NA,NA) 是一个已修复一段时间的错误。查看 CRAN Github 镜像上的提交。

我仍然向维护者发送了一封电子邮件,询问是否可以使修复更符合条件,但原则上可以关闭。

【讨论】:

  • 看起来代码在我第一次发布后不到一周就更新了;已经在 2017 年 4 月的邮件列表上发布了它。由于我从未收到回复,我想我错过了错误修复。我可以确认我认为应该等效的两个调用现在产生了相同的矩阵。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 2016-01-29
  • 2023-02-14
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多