当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R nsk 以结高度为基础的自然样条。


R语言 nsk 位于 survival 包(package)。

说明

创建自然样条的设计矩阵,使得所得拟合的系数是节点处函数的值。

用法

nsk(x, df = NULL, knots = NULL, intercept = FALSE, b = 0.05, 
    Boundary.knots = quantile(x, c(b, 1 - b), na.rm = TRUE))

参数

x

预测变量。允许缺失值。

df

自由度。可以提供 df 而不是 knots; ns() 然后在适当选择的 x 分位数处选择 df - 1 - 截距结(这将忽略缺失值)。默认值 df = NULL,将内部结的数量设置为长度(结)。

knots

定义样条线的断点。默认无结;与自然边界条件一起,这为 x 的线性回归奠定了基础。典型值是一个结的平均值或中位数,更多结的分位数。另请参见 Boundary.knots。

intercept

如果为 TRUE,则截距包含在基础中;默认为假

b

边界结的默认放置。 bs=0 的值将复制 ns 的默认行为。

Boundary.knots

施加自然边界条件并锚定B-spline基础的边界点。除了这些点之外,函数被假定为线性的。如果提供了结和Boundary.knots,则基本参数不依赖于 x。数据可以超出Boundary.knots

细节

nsk 函数的行为与 ns 函数相同,但有两个例外。第一个是返回的基础使得系数对应于节点处的拟合函数的值。如果是 intercept = FALSE ,则将有 k-1 个系数对应于 k 个节点,它们将是节点 2-k 和节点 1 之间的预测值之差。该基础的主要优点是系数可以直接解释。第二个是线性和非线性分量的测试是简单的对比。

ns 的第二个区别是关于边界结的默认位置的观点之一。这里的默认值更接近rms::rcs 函数中的默认值。

此函数是一个尝试,如果是新想法,则尚不能保证将来将其包含在包中。

尺寸为 length(x) * df 的矩阵,其中提供 df,或者如果提供结,则 df = length(knots) + 1 + 截距。返回与 kns 参数相对应的属性,并显式给出结、Boundary.knots 等,供 Predict.kns() 使用。

注意

薄的柔性金属或木条称为样条线,是布置平滑曲线的传统方法,例如用于船体或飞机机翼。引脚被放入板上,条带穿过它们,每个引脚都是'knot'。

数学样条是每个结之间的分段函数。线性样条是一组连接的线段,二次样条是一组连接的局部二次函数,被约束具有连续的一阶导数,三次样条是每个节点之间的三次样条,被约束具有连续的一阶和二阶导数,数学样条并不是自然样条的精确表示:作为物理对象,木材或金属条将具有所有阶的连续导数。三次样条曲线很常用,因为它们足够光滑,人眼看起来很自然。

如果数学样条线进一步约束为超出末端结的线性,这通常称为'natural spline',因为木制或金属样条线在超出最后的结后也将是线性的。同一对象的另一个名称是“受限三次样条”,因为它是通过添加更多约束在代码中实现的。给定一个数据点向量和一组结,可以创建一个每个结一列的基础矩阵 X,这样 X 在 y 上的普通回归将适合三次样条函数,因此这些也称为 'regression splines' 。 (我们认为,这三个标签中的一个并不比另一个更好或更差)。

给定一个具有 k 列的基础矩阵 X,对于任何 k x k 非奇异矩阵 T 来说,矩阵 Z= XT 也是一个基础矩阵,并且将产生相同的预测值,但是一组新的系数 gamma = (T-inverse)用贝塔代替贝塔。人们可以选择基函数以使 X 易于构造、使回归在数值上稳定、使测试更容易或基于其他考虑。似乎每个样条库都返回不同的基础集,不幸的是,这使得在包之间进行比较变得困难。这又是一个基组,选择它是为了使系数更容易解释。

例子

# make some dummy data
tdata <- data.frame(x= lung$age, y = 10*log(lung$age-35) + rnorm(228, 0, 2))
fit1 <- lm(y ~ -1 + nsk(x, df=4, intercept=TRUE) , data=tdata)
fit2 <- lm(y ~ nsk(x, df=3), data=tdata)

# the knots (same for both fits)
knots <- unlist(attributes(fit1$model[[2]])[c('Boundary.knots', 'knots')])
sort(unname(knots))
unname(coef(fit1))  # predictions at the knot points

unname(coef(fit1)[-1] - coef(fit1)[1])  # differences: yhat[2:4] - yhat[1]
unname(coef(fit2))[-1]                  # ditto

## Not run: 
plot(y ~ x, data=tdata)
points(sort(knots), coef(fit1), col=2, pch=19)
coef(fit)[1] + c(0, coef(fit)[-1])

## End(Not run)

也可以看看

ns

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Natural splines with knot heights as the basis.。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。