R Epi 包中 Ns() 提供的基础
Basis provided by Ns() in R Epi package
当我研究 Epi 如何生成其样条函数的基础时(通过函数 Ns
),我对它如何处理 detrend
参数感到有点困惑.
当detrend=T
时,我预计Epi::Ns(...)
会或多或少地将splines::ns(...)
给出的基投影到[=的space列的正交补集上18=]最后提取线性无关列的集合(这样我们就有了基础)
然而,这似乎并不是完全的情况;我试过了
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)
上述代码生成的矩阵不相同,但是,它们确实具有相同的列 space(在此示例中)表明如果插入线性模型,则拟合系数将为不同,但适合度(本身)是相同的。
我的第一个问题是;一般来说是这样吗?
第二个问题,为什么两者不同?
关于第二个问题 - 当指定 detrend
时,Epi::Ns
给出警告,fixsl
被忽略。
深入Epi github NS.r ...在构建基础时,在上面用detrend=T
调用Epi::Ns
时,工人ns.ld()
被调用(一个几乎与 splines::ns()
的内部相同的函数),它将 c(NA,NA)
传递给 splines::spline.des
作为确定矩阵 const
的 derivs
参数];
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)
?
有人 proof/or 第一个问题的答案吗?
我认为 const
的列 space 的正交补码被使用,因此二阶(或期望的)导数在边界处为零(通过一般样条基的投影) - 但是 我不确定这一步,因为我没有深入研究数学,我只是按照我的 'feel' 来做 。也许如果我更好地理解这一点,那么 const
的结果与调用 splineDesign
/spline.des
的差异的原因(分别在 ns()
和 Ns()
) 将解释为什么从一开始的两个矩阵不相同,但产生相同的拟合。
fixsl=c(NA,NA)
是一个已修复一段时间的错误。查看 CRAN Github 镜像上的提交。
我还是发了邮件给维护者,询问是否可以把修复做的更符合条件一点,但原则上可以关闭。
当我研究 Epi 如何生成其样条函数的基础时(通过函数 Ns
),我对它如何处理 detrend
参数感到有点困惑.
当detrend=T
时,我预计Epi::Ns(...)
会或多或少地将splines::ns(...)
给出的基投影到[=的space列的正交补集上18=]最后提取线性无关列的集合(这样我们就有了基础)
然而,这似乎并不是完全的情况;我试过了
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)
上述代码生成的矩阵不相同,但是,它们确实具有相同的列 space(在此示例中)表明如果插入线性模型,则拟合系数将为不同,但适合度(本身)是相同的。
我的第一个问题是;一般来说是这样吗?
第二个问题,为什么两者不同?
关于第二个问题 - 当指定 detrend
时,Epi::Ns
给出警告,fixsl
被忽略。
深入Epi github NS.r ...在构建基础时,在上面用detrend=T
调用Epi::Ns
时,工人ns.ld()
被调用(一个几乎与 splines::ns()
的内部相同的函数),它将 c(NA,NA)
传递给 splines::spline.des
作为确定矩阵 const
的 derivs
参数];
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)
?
有人 proof/or 第一个问题的答案吗?
我认为 const
的列 space 的正交补码被使用,因此二阶(或期望的)导数在边界处为零(通过一般样条基的投影) - 但是 我不确定这一步,因为我没有深入研究数学,我只是按照我的 'feel' 来做 。也许如果我更好地理解这一点,那么 const
的结果与调用 splineDesign
/spline.des
的差异的原因(分别在 ns()
和 Ns()
) 将解释为什么从一开始的两个矩阵不相同,但产生相同的拟合。
fixsl=c(NA,NA)
是一个已修复一段时间的错误。查看 CRAN Github 镜像上的提交。
我还是发了邮件给维护者,询问是否可以把修复做的更符合条件一点,但原则上可以关闭。